net: bcmasp: Add support for ethtool standard stats
authorJustin Chen <justin.chen@broadcom.com>
Thu, 13 Jul 2023 22:19:02 +0000 (15:19 -0700)
committerDavid S. Miller <davem@davemloft.net>
Mon, 17 Jul 2023 06:39:04 +0000 (07:39 +0100)
Add support for eth_mac_stats, rmon_stats, and eth_ctrl_stats.

Signed-off-by: Justin Chen <justin.chen@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/broadcom/asp2/bcmasp_ethtool.c
drivers/net/ethernet/broadcom/asp2/bcmasp_intf_defs.h

index 1e96a69..59d853c 100644 (file)
@@ -250,6 +250,80 @@ static int bcmasp_set_eee(struct net_device *dev, struct ethtool_eee *e)
        return phy_ethtool_set_eee(dev->phydev, e);
 }
 
+static void bcmasp_get_eth_mac_stats(struct net_device *dev,
+                                    struct ethtool_eth_mac_stats *mac_stats)
+{
+       struct bcmasp_intf *intf = netdev_priv(dev);
+
+       mac_stats->FramesTransmittedOK = umac_rl(intf, UMC_GTPOK);
+       mac_stats->SingleCollisionFrames = umac_rl(intf, UMC_GTSCL);
+       mac_stats->MultipleCollisionFrames = umac_rl(intf, UMC_GTMCL);
+       mac_stats->FramesReceivedOK = umac_rl(intf, UMC_GRPOK);
+       mac_stats->FrameCheckSequenceErrors = umac_rl(intf, UMC_GRFCS);
+       mac_stats->AlignmentErrors = umac_rl(intf, UMC_GRALN);
+       mac_stats->OctetsTransmittedOK = umac_rl(intf, UMC_GTBYT);
+       mac_stats->FramesWithDeferredXmissions = umac_rl(intf, UMC_GTDRF);
+       mac_stats->LateCollisions = umac_rl(intf, UMC_GTLCL);
+       mac_stats->FramesAbortedDueToXSColls = umac_rl(intf, UMC_GTXCL);
+       mac_stats->OctetsReceivedOK = umac_rl(intf, UMC_GRBYT);
+       mac_stats->MulticastFramesXmittedOK = umac_rl(intf, UMC_GTMCA);
+       mac_stats->BroadcastFramesXmittedOK = umac_rl(intf, UMC_GTBCA);
+       mac_stats->FramesWithExcessiveDeferral = umac_rl(intf, UMC_GTEDF);
+       mac_stats->MulticastFramesReceivedOK = umac_rl(intf, UMC_GRMCA);
+       mac_stats->BroadcastFramesReceivedOK = umac_rl(intf, UMC_GRBCA);
+}
+
+static const struct ethtool_rmon_hist_range bcmasp_rmon_ranges[] = {
+       {    0,   64},
+       {   65,  127},
+       {  128,  255},
+       {  256,  511},
+       {  512, 1023},
+       { 1024, 1518},
+       { 1519, 1522},
+       {}
+};
+
+static void bcmasp_get_rmon_stats(struct net_device *dev,
+                                 struct ethtool_rmon_stats *rmon_stats,
+                                 const struct ethtool_rmon_hist_range **ranges)
+{
+       struct bcmasp_intf *intf = netdev_priv(dev);
+
+       *ranges = bcmasp_rmon_ranges;
+
+       rmon_stats->undersize_pkts = umac_rl(intf, UMC_RRUND);
+       rmon_stats->oversize_pkts = umac_rl(intf, UMC_GROVR);
+       rmon_stats->fragments = umac_rl(intf, UMC_RRFRG);
+       rmon_stats->jabbers = umac_rl(intf, UMC_GRJBR);
+
+       rmon_stats->hist[0] = umac_rl(intf, UMC_GR64);
+       rmon_stats->hist[1] = umac_rl(intf, UMC_GR127);
+       rmon_stats->hist[2] = umac_rl(intf, UMC_GR255);
+       rmon_stats->hist[3] = umac_rl(intf, UMC_GR511);
+       rmon_stats->hist[4] = umac_rl(intf, UMC_GR1023);
+       rmon_stats->hist[5] = umac_rl(intf, UMC_GR1518);
+       rmon_stats->hist[6] = umac_rl(intf, UMC_GRMGV);
+
+       rmon_stats->hist_tx[0] = umac_rl(intf, UMC_TR64);
+       rmon_stats->hist_tx[1] = umac_rl(intf, UMC_TR127);
+       rmon_stats->hist_tx[2] = umac_rl(intf, UMC_TR255);
+       rmon_stats->hist_tx[3] = umac_rl(intf, UMC_TR511);
+       rmon_stats->hist_tx[4] = umac_rl(intf, UMC_TR1023);
+       rmon_stats->hist_tx[5] = umac_rl(intf, UMC_TR1518);
+       rmon_stats->hist_tx[6] = umac_rl(intf, UMC_TRMGV);
+}
+
+static void bcmasp_get_eth_ctrl_stats(struct net_device *dev,
+                                     struct ethtool_eth_ctrl_stats *ctrl_stats)
+{
+       struct bcmasp_intf *intf = netdev_priv(dev);
+
+       ctrl_stats->MACControlFramesTransmitted = umac_rl(intf, UMC_GTXCF);
+       ctrl_stats->MACControlFramesReceived = umac_rl(intf, UMC_GRXCF);
+       ctrl_stats->UnsupportedOpcodesReceived = umac_rl(intf, UMC_GRXUO);
+}
+
 const struct ethtool_ops bcmasp_ethtool_ops = {
        .get_drvinfo            = bcmasp_get_drvinfo,
        .get_link               = ethtool_op_get_link,
@@ -263,4 +337,7 @@ const struct ethtool_ops bcmasp_ethtool_ops = {
        .set_rxnfc              = bcmasp_set_rxnfc,
        .set_eee                = bcmasp_set_eee,
        .get_eee                = bcmasp_get_eee,
+       .get_eth_mac_stats      = bcmasp_get_eth_mac_stats,
+       .get_rmon_stats         = bcmasp_get_rmon_stats,
+       .get_eth_ctrl_stats     = bcmasp_get_eth_ctrl_stats,
 };
index b259a47..ad74261 100644 (file)
 #define  UMC_EEE_LPI_TIMER             0x68
 #define  UMC_PAUSE_CNTRL               0x330
 #define  UMC_TX_FLUSH                  0x334
-#define  UMC_MIB_START                 0x400
+#define  UMC_GR64                      0x400
+#define  UMC_GR127                     0x404
+#define  UMC_GR255                     0x408
+#define  UMC_GR511                     0x40c
+#define  UMC_GR1023                    0x410
+#define  UMC_GR1518                    0x414
+#define  UMC_GRMGV                     0x418
+#define  UMC_GR2047                    0x41c
+#define  UMC_GR4095                    0x420
+#define  UMC_GR9216                    0x424
+#define  UMC_GRPKT                     0x428
+#define  UMC_GRBYT                     0x42c
+#define  UMC_GRMCA                     0x430
+#define  UMC_GRBCA                     0x434
+#define  UMC_GRFCS                     0x438
+#define  UMC_GRXCF                     0x43c
+#define  UMC_GRXPF                     0x440
+#define  UMC_GRXUO                     0x444
+#define  UMC_GRALN                     0x448
+#define  UMC_GRFLR                     0x44c
+#define  UMC_GRCDE                     0x450
+#define  UMC_GRFCR                     0x454
+#define  UMC_GROVR                     0x458
+#define  UMC_GRJBR                     0x45c
+#define  UMC_GRMTUE                    0x460
+#define  UMC_GRPOK                     0x464
+#define  UMC_GRUC                      0x468
+#define  UMC_GRPPP                     0x46c
+#define  UMC_GRMCRC                    0x470
+#define  UMC_TR64                      0x480
+#define  UMC_TR127                     0x484
+#define  UMC_TR255                     0x488
+#define  UMC_TR511                     0x48c
+#define  UMC_TR1023                    0x490
+#define  UMC_TR1518                    0x494
+#define  UMC_TRMGV                     0x498
+#define  UMC_TR2047                    0x49c
+#define  UMC_TR4095                    0x4a0
+#define  UMC_TR9216                    0x4a4
+#define  UMC_GTPKT                     0x4a8
+#define  UMC_GTMCA                     0x4ac
+#define  UMC_GTBCA                     0x4b0
+#define  UMC_GTXPF                     0x4b4
+#define  UMC_GTXCF                     0x4b8
+#define  UMC_GTFCS                     0x4bc
+#define  UMC_GTOVR                     0x4c0
+#define  UMC_GTDRF                     0x4c4
+#define  UMC_GTEDF                     0x4c8
+#define  UMC_GTSCL                     0x4cc
+#define  UMC_GTMCL                     0x4d0
+#define  UMC_GTLCL                     0x4d4
+#define  UMC_GTXCL                     0x4d8
+#define  UMC_GTFRG                     0x4dc
+#define  UMC_GTNCL                     0x4e0
+#define  UMC_GTJBR                     0x4e4
+#define  UMC_GTBYT                     0x4e8
+#define  UMC_GTPOK                     0x4ec
+#define  UMC_GTUC                      0x4f0
+#define  UMC_RRPKT                     0x500
+#define  UMC_RRUND                     0x504
+#define  UMC_RRFRG                     0x508
+#define  UMC_RRBYT                     0x50c
 #define  UMC_MIB_CNTRL                 0x580
 #define   UMC_MIB_CNTRL_RX_CNT_RST     BIT(0)
 #define   UMC_MIB_CNTRL_RUNT_CNT_RST   BIT(1)