Commit b6a4ee6e authored by Biju Das's avatar Biju Das Committed by Jakub Kicinski

ravb: Add carrier_counters to struct ravb_hw_info

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: default avatarBiju Das <biju.das.jz@bp.renesas.com>
Reviewed-by: default avatarSergey Shtylyov <s.shtylyov@omp.ru>
Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 1c59eb67
...@@ -196,6 +196,8 @@ enum ravb_reg { ...@@ -196,6 +196,8 @@ enum ravb_reg {
MAHR = 0x05c0, MAHR = 0x05c0,
MALR = 0x05c8, MALR = 0x05c8,
TROCR = 0x0700, /* R-Car Gen3 and RZ/G2L only */ TROCR = 0x0700, /* R-Car Gen3 and RZ/G2L only */
CXR41 = 0x0708, /* RZ/G2L only */
CXR42 = 0x0710, /* RZ/G2L only */
CEFCR = 0x0740, CEFCR = 0x0740,
FRECR = 0x0748, FRECR = 0x0748,
TSFRCR = 0x0750, TSFRCR = 0x0750,
...@@ -1017,6 +1019,7 @@ struct ravb_hw_info { ...@@ -1017,6 +1019,7 @@ struct ravb_hw_info {
/* hardware features */ /* hardware features */
unsigned internal_delay:1; /* AVB-DMAC has internal delays */ unsigned internal_delay:1; /* AVB-DMAC has internal delays */
unsigned tx_counters:1; /* E-MAC has TX counters */ unsigned tx_counters:1; /* E-MAC has TX counters */
unsigned carrier_counters:1; /* E-MAC has carrier counters */
unsigned multi_irqs:1; /* AVB-DMAC and E-MAC has multiple irqs */ unsigned multi_irqs:1; /* AVB-DMAC and E-MAC has multiple irqs */
unsigned gptp:1; /* AVB-DMAC has gPTP support */ unsigned gptp:1; /* AVB-DMAC has gPTP support */
unsigned ccc_gac:1; /* AVB-DMAC has gPTP support active in config mode */ unsigned ccc_gac:1; /* AVB-DMAC has gPTP support active in config mode */
......
...@@ -2053,6 +2053,13 @@ static struct net_device_stats *ravb_get_stats(struct net_device *ndev) ...@@ -2053,6 +2053,13 @@ static struct net_device_stats *ravb_get_stats(struct net_device *ndev)
ravb_write(ndev, 0, TROCR); /* (write clear) */ 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->rx_packets = stats0->rx_packets; nstats->rx_packets = stats0->rx_packets;
nstats->tx_packets = stats0->tx_packets; nstats->tx_packets = stats0->tx_packets;
nstats->rx_bytes = stats0->rx_bytes; nstats->rx_bytes = stats0->rx_bytes;
...@@ -2432,6 +2439,7 @@ static const struct ravb_hw_info gbeth_hw_info = { ...@@ -2432,6 +2439,7 @@ static const struct ravb_hw_info gbeth_hw_info = {
.rx_max_buf_size = SZ_8K, .rx_max_buf_size = SZ_8K,
.aligned_tx = 1, .aligned_tx = 1,
.tx_counters = 1, .tx_counters = 1,
.carrier_counters = 1,
.half_duplex = 1, .half_duplex = 1,
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment