On 10/1/21 6:06 PM, Biju Das wrote: > R-Car AVB-DMAC has 4 Transmit start request queues, whereas > RZ/G2L has only 1 Transmit start request queue. The TCCR bits are called transmit start request (queue 0/1), not transmit start request queue 0/1. I think you've read too much value into them for what is just TX queue 0/1. > Add a tsrq variable to struct ravb_hw_info to handle this > difference. > > Signed-off-by: Biju Das <biju.das.jz@xxxxxxxxxxxxxx> > Reviewed-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@xxxxxxxxxxxxxx> > --- > RFC->v1: > * Added tsrq variable instead of multi_tsrq feature bit. > --- > drivers/net/ethernet/renesas/ravb.h | 1 + > drivers/net/ethernet/renesas/ravb_main.c | 9 +++++++-- > 2 files changed, 8 insertions(+), 2 deletions(-) > > diff --git a/drivers/net/ethernet/renesas/ravb.h b/drivers/net/ethernet/renesas/ravb.h > index 9cd3a15743b4..c586070193ef 100644 > --- a/drivers/net/ethernet/renesas/ravb.h > +++ b/drivers/net/ethernet/renesas/ravb.h > @@ -997,6 +997,7 @@ struct ravb_hw_info { > netdev_features_t net_features; > int stats_len; > size_t max_rx_len; > + u32 tsrq; I'd call it 'tccr_value' instead. > unsigned aligned_tx: 1; > > /* hardware features */ > diff --git a/drivers/net/ethernet/renesas/ravb_main.c b/drivers/net/ethernet/renesas/ravb_main.c > index ac141a491ca2..4784832bd93c 100644 > --- a/drivers/net/ethernet/renesas/ravb_main.c > +++ b/drivers/net/ethernet/renesas/ravb_main.c > @@ -790,11 +790,13 @@ static void ravb_rcv_snd_enable(struct net_device *ndev) > /* function for waiting dma process finished */ > static int ravb_stop_dma(struct net_device *ndev) > { > + struct ravb_private *priv = netdev_priv(ndev); > + const struct ravb_hw_info *info = priv->info; > int error; > > /* Wait for stopping the hardware TX process */ > - error = ravb_wait(ndev, TCCR, > - TCCR_TSRQ0 | TCCR_TSRQ1 | TCCR_TSRQ2 | TCCR_TSRQ3, 0); > + error = ravb_wait(ndev, TCCR, info->tsrq, 0); > + > if (error) > return error; > > @@ -2128,6 +2130,7 @@ static const struct ravb_hw_info ravb_gen3_hw_info = { > .net_features = NETIF_F_RXCSUM, > .stats_len = ARRAY_SIZE(ravb_gstrings_stats), > .max_rx_len = RX_BUF_SZ + RAVB_ALIGN - 1, > + .tsrq = TCCR_TSRQ0 | TCCR_TSRQ1 | TCCR_TSRQ2 | TCCR_TSRQ3, > .internal_delay = 1, > .tx_counters = 1, > .multi_irqs = 1, > @@ -2150,6 +2153,7 @@ static const struct ravb_hw_info ravb_gen2_hw_info = { > .net_features = NETIF_F_RXCSUM, > .stats_len = ARRAY_SIZE(ravb_gstrings_stats), > .max_rx_len = RX_BUF_SZ + RAVB_ALIGN - 1, > + .tsrq = TCCR_TSRQ0 | TCCR_TSRQ1 | TCCR_TSRQ2 | TCCR_TSRQ3, > .aligned_tx = 1, > .gptp = 1, > .nc_queue = 1, > @@ -2165,6 +2169,7 @@ static const struct ravb_hw_info gbeth_hw_info = { > .dmac_init = ravb_dmac_init_gbeth, > .emac_init = ravb_emac_init_gbeth, > .max_rx_len = GBETH_RX_BUFF_MAX + RAVB_ALIGN - 1, > + .tsrq = TCCR_TSRQ0, > .aligned_tx = 1, > .tx_counters = 1, > }; > [...] MBR, Sergey