[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20210923140813.13541-18-biju.das.jz@bp.renesas.com>
Date: Thu, 23 Sep 2021 15:08:12 +0100
From: Biju Das <biju.das.jz@...renesas.com>
To: "David S. Miller" <davem@...emloft.net>,
Jakub Kicinski <kuba@...nel.org>
Cc: Biju Das <biju.das.jz@...renesas.com>,
Sergey Shtylyov <s.shtylyov@....ru>,
Lad Prabhakar <prabhakar.mahadev-lad.rj@...renesas.com>,
Andrew Lunn <andrew@...n.ch>,
Sergei Shtylyov <sergei.shtylyov@...il.com>,
Geert Uytterhoeven <geert+renesas@...der.be>,
Adam Ford <aford173@...il.com>,
Yoshihiro Shimoda <yoshihiro.shimoda.uh@...esas.com>,
netdev@...r.kernel.org, linux-renesas-soc@...r.kernel.org,
Chris Paterson <Chris.Paterson2@...esas.com>,
Biju Das <biju.das@...renesas.com>
Subject: [RFC/PATCH 17/18] 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: Biju Das <biju.das.jz@...renesas.com>
---
drivers/net/ethernet/renesas/ravb.h | 5 +++++
drivers/net/ethernet/renesas/ravb_main.c | 13 +++++++++++++
2 files changed, 18 insertions(+)
diff --git a/drivers/net/ethernet/renesas/ravb.h b/drivers/net/ethernet/renesas/ravb.h
index 85260f89e1cd..d42e8ea981df 100644
--- a/drivers/net/ethernet/renesas/ravb.h
+++ b/drivers/net/ethernet/renesas/ravb.h
@@ -198,11 +198,15 @@ enum ravb_reg {
MAHR = 0x05c0,
MALR = 0x05c8,
TROCR = 0x0700, /* R-Car Gen3 and RZ/G2L only */
+ CXR41 = 0x0708, /* Documented for RZ/G2L only */
+ CXR42 = 0x0710, /* Documented for RZ/G2L only */
CEFCR = 0x0740,
FRECR = 0x0748,
TSFRCR = 0x0750,
TLFRCR = 0x0758,
RFCR = 0x0760,
+ CXR55 = 0x0768, /* Documented for RZ/G2L only */
+ CXR56 = 0x0770, /* Documented for RZ/G2L only */
MAFCR = 0x0778,
CSR0 = 0x0800, /* Documented for RZ/G2L only */
};
@@ -1036,6 +1040,7 @@ struct ravb_hw_info {
unsigned half_duplex:1; /* E-MAC supports half duplex mode */
unsigned rx_2k_buffers:1; /* AVB-DMAC has Max 2K buf size on RX */
unsigned timestamp:1; /* AVB-DMAC has timestamp */
+ unsigned carrier_counters:1; /* E-MAC has carrier counters */
};
struct ravb_private {
diff --git a/drivers/net/ethernet/renesas/ravb_main.c b/drivers/net/ethernet/renesas/ravb_main.c
index 867e180e6655..72aea5875bc5 100644
--- a/drivers/net/ethernet/renesas/ravb_main.c
+++ b/drivers/net/ethernet/renesas/ravb_main.c
@@ -2060,6 +2060,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);
+ ravb_write(ndev, 0, CXR55); /* (write clear) */
+ nstats->tx_carrier_errors += ravb_read(ndev, CXR56);
+ ravb_write(ndev, 0, CXR56); /* (write clear) */
+ }
+
nstats->rx_packets = stats0->rx_packets + stats1->rx_packets;
nstats->tx_packets = stats0->tx_packets + stats1->tx_packets;
nstats->rx_bytes = stats0->rx_bytes + stats1->rx_bytes;
@@ -2425,6 +2437,7 @@ static const struct ravb_hw_info rgeth_hw_info = {
.no_gptp = 1,
.mii_rgmii_selection = 1,
.half_duplex = 1,
+ .carrier_counters = 1,
};
static const struct of_device_id ravb_match_table[] = {
--
2.17.1
Powered by blists - more mailing lists