On 10/5/21 2:06 PM, Biju Das wrote: > RZ/G2L E-MAC supports carrier counters. > Add a carrier_counter hw feature bit to struct ravb_hw_info > to add this feature only for RZ/G2L. > > Signed-off-by: Biju Das <biju.das.jz@xxxxxxxxxxxxxx> > Reviewed-by: Sergey Shtylyov <s.shtylyov@xxxxxx> [...] diff --git a/drivers/net/ethernet/renesas/ravb.h b/drivers/net/ethernet/renesas/ravb.h index 8c7b2569c7dd..899e16c5eb1a 100644 --- a/drivers/net/ethernet/renesas/ravb.h +++ b/drivers/net/ethernet/renesas/ravb.h [...] @@ -1061,6 +1065,7 @@ struct ravb_hw_info { unsigned nc_queue:1; /* AVB-DMAC has NC queue */ unsigned magic_pkt:1; /* E-MAC supports magic packet detection */ unsigned half_duplex:1; /* E-MAC supports half duplex mode */ + unsigned carrier_counters:1; /* E-MAC has carrier counters */ [...] > diff --git a/drivers/net/ethernet/renesas/ravb_main.c b/drivers/net/ethernet/renesas/ravb_main.c > index 42573eac82b9..c057de81ec58 100644 > --- a/drivers/net/ethernet/renesas/ravb_main.c > +++ b/drivers/net/ethernet/renesas/ravb_main.c > @@ -2075,6 +2075,18 @@ static struct net_device_stats *ravb_get_stats(struct net_device *ndev) > ravb_write(ndev, 0, TROCR); /* (write clear) */ > } > > + if (info->carrier_counters) { > + nstats->collisions += ravb_read(ndev, CXR41); > + ravb_write(ndev, 0, CXR41); /* (write clear) */ > + nstats->tx_carrier_errors += ravb_read(ndev, CXR42); > + ravb_write(ndev, 0, CXR42); /* (write clear) */ > + > + nstats->tx_carrier_errors += ravb_read(ndev, CXR55); According to the manual, CXR55 counts RX events (carrier extension lost. > + ravb_write(ndev, 0, CXR55); /* (write clear) */ > + nstats->tx_carrier_errors += ravb_read(ndev, CXR56); And CXR56 counts receive events too... > + ravb_write(ndev, 0, CXR56); /* (write clear) */ > + } > + > nstats->rx_packets = stats0->rx_packets; > nstats->tx_packets = stats0->tx_packets; > nstats->rx_bytes = stats0->rx_bytes; > @@ -2486,6 +2498,7 @@ static const struct ravb_hw_info gbeth_hw_info = { > .aligned_tx = 1, > .tx_counters = 1, > .half_duplex = 1, > + .carrier_counters = 1, At least init it next to 'tx_counters'. :-) [...] MBR, Sergey