Replace the manually maintained ICSSG_NUM_MIIG_STATS and ICSSG_NUM_PA_STATS constants with ARRAY_SIZE() expressions derived directly from the corresponding stat descriptor arrays, so that adding new entries to icssg_all_miig_stats[] or icssg_all_pa_stats[] no longer requires a separate update to a numeric constant. To make this self-contained, break the circular include dependency between icssg_stats.h and icssg_prueth.h: - icssg_stats.h previously included icssg_prueth.h (transitively pulling in icssg_switch_map.h and ETH_GSTRING_LEN). Replace that with direct includes of , and "icssg_switch_map.h". - icssg_prueth.h now includes icssg_stats.h, giving it access to the ARRAY_SIZE-based ICSSG_NUM_MIIG_STATS and ICSSG_NUM_PA_STATS before they are used in the prueth_emac struct and ICSSG_NUM_STATS. Signed-off-by: MD Danish Anwar --- drivers/net/ethernet/ti/icssg/icssg_prueth.h | 3 +-- drivers/net/ethernet/ti/icssg/icssg_stats.h | 7 ++++++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/drivers/net/ethernet/ti/icssg/icssg_prueth.h b/drivers/net/ethernet/ti/icssg/icssg_prueth.h index df93d15c5b78..e2ccecb0a0dd 100644 --- a/drivers/net/ethernet/ti/icssg/icssg_prueth.h +++ b/drivers/net/ethernet/ti/icssg/icssg_prueth.h @@ -43,6 +43,7 @@ #include "icssg_config.h" #include "icss_iep.h" +#include "icssg_stats.h" #include "icssg_switch_map.h" #define PRUETH_MAX_MTU (2000 - ETH_HLEN - ETH_FCS_LEN) @@ -57,8 +58,6 @@ #define ICSSG_MAX_RFLOWS 8 /* per slice */ -#define ICSSG_NUM_PA_STATS 32 -#define ICSSG_NUM_MIIG_STATS 60 /* Number of ICSSG related stats */ #define ICSSG_NUM_STATS (ICSSG_NUM_MIIG_STATS + ICSSG_NUM_PA_STATS) #define ICSSG_NUM_STANDARD_STATS 31 diff --git a/drivers/net/ethernet/ti/icssg/icssg_stats.h b/drivers/net/ethernet/ti/icssg/icssg_stats.h index 5ec0b38e0c67..b854eb587c1e 100644 --- a/drivers/net/ethernet/ti/icssg/icssg_stats.h +++ b/drivers/net/ethernet/ti/icssg/icssg_stats.h @@ -8,10 +8,15 @@ #ifndef __NET_TI_ICSSG_STATS_H #define __NET_TI_ICSSG_STATS_H -#include "icssg_prueth.h" +#include +#include +#include "icssg_switch_map.h" #define STATS_TIME_LIMIT_1G_MS 25000 /* 25 seconds @ 1G */ +#define ICSSG_NUM_MIIG_STATS ARRAY_SIZE(icssg_all_miig_stats) +#define ICSSG_NUM_PA_STATS ARRAY_SIZE(icssg_all_pa_stats) + struct miig_stats_regs { /* Rx */ u32 rx_packets; -- 2.34.1 Add new firmware PA statistics counters for HSR and LRE to the ethtool statistics exposed by the ICSSG driver. New statistics added: - FW_HSR_FWD_CHECK_FAIL_DROP: Packets dropped on the HSR forwarding path - FW_HSR_HE_CHECK_FAIL_DROP: Packets dropped on the HSR host egress path - FW_HSR_SKIP_HOST_DUP_DISCARD_FRAMES: Frames with duplicate discard skipped - FW_LRE_CNT_UNIQUE/DUPLICATE/MULTIPLE_RX: LRE duplicate detetcion counters - FW_LRE_CNT_RX/TX: LRE per-port frame counters - FW_LRE_CNT_OWN_RX: Own HSR tagged frames received - FW_LRE_CNT_ERRWRONGLAN: Frames with wrong LAN identifier (PRP) Document the new HSR/LRE statistics in icssg_prueth.rst. Signed-off-by: MD Danish Anwar --- .../device_drivers/ethernet/ti/icssg_prueth.rst | 10 ++++++++++ drivers/net/ethernet/ti/icssg/icssg_common.c | 7 +++++-- drivers/net/ethernet/ti/icssg/icssg_stats.h | 10 ++++++++++ drivers/net/ethernet/ti/icssg/icssg_switch_map.h | 10 ++++++++++ 4 files changed, 35 insertions(+), 2 deletions(-) diff --git a/Documentation/networking/device_drivers/ethernet/ti/icssg_prueth.rst b/Documentation/networking/device_drivers/ethernet/ti/icssg_prueth.rst index da21ddf431bb..b0bda7327b2a 100644 --- a/Documentation/networking/device_drivers/ethernet/ti/icssg_prueth.rst +++ b/Documentation/networking/device_drivers/ethernet/ti/icssg_prueth.rst @@ -54,3 +54,13 @@ These statistics are as follows, - ``FW_HOST_TX_PKT_CNT``: Number of valid packets copied by RTU0 to Tx queues - ``FW_HOST_EGRESS_Q_PRE_OVERFLOW``: Host Egress Q (Pre-emptible) Overflow Counter - ``FW_HOST_EGRESS_Q_EXP_OVERFLOW``: Host Egress Q (Pre-emptible) Overflow Counter + - ``FW_HSR_FWD_CHECK_FAIL_DROP``: Packets dropped on the HSR forwarding path due to failed checks + - ``FW_HSR_HE_CHECK_FAIL_DROP``: Packets dropped on the host egress path due to failed checks + - ``FW_HSR_SKIP_HOST_DUP_DISCARD_FRAMES``: Frames for which the host duplicate discard check was skipped + - ``FW_LRE_CNT_UNIQUE_RX``: Number of frames received with no duplicate detected + - ``FW_LRE_CNT_DUPLICATE_RX``: Number of frames received for which exactly one duplicate was detected + - ``FW_LRE_CNT_MULTIPLE_RX``: Number of frames received for which more than one duplicate was detected + - ``FW_LRE_CNT_RX``: Number of HSR/PRP tagged frames received + - ``FW_LRE_CNT_TX``: Number of HSR/PRP tagged frames sent + - ``FW_LRE_CNT_OWN_RX``: Number of HSR/PRP tagged frames received whose source MAC matches the node's own address + - ``FW_LRE_CNT_ERRWRONGLAN``: Number of frames received with a wrong LAN identifier, PRP only diff --git a/drivers/net/ethernet/ti/icssg/icssg_common.c b/drivers/net/ethernet/ti/icssg/icssg_common.c index a28a608f9bf4..e7a51a9eee24 100644 --- a/drivers/net/ethernet/ti/icssg/icssg_common.c +++ b/drivers/net/ethernet/ti/icssg/icssg_common.c @@ -1633,7 +1633,8 @@ void icssg_ndo_get_stats64(struct net_device *ndev, emac_get_stat_by_name(emac, "FW_RX_EOF_SHORT_FRMERR") + emac_get_stat_by_name(emac, "FW_RX_B0_DROP_EARLY_EOF") + emac_get_stat_by_name(emac, "FW_RX_EXP_FRAG_Q_DROP") + - emac_get_stat_by_name(emac, "FW_RX_FIFO_OVERRUN"); + emac_get_stat_by_name(emac, "FW_RX_FIFO_OVERRUN") + + emac_get_stat_by_name(emac, "FW_LRE_CNT_ERRWRONGLAN"); stats->rx_dropped = ndev->stats.rx_dropped + emac_get_stat_by_name(emac, "FW_DROPPED_PKT") + emac_get_stat_by_name(emac, "FW_INF_PORT_DISABLED") + @@ -1643,7 +1644,9 @@ void icssg_ndo_get_stats64(struct net_device *ndev, emac_get_stat_by_name(emac, "FW_INF_DROP_TAGGED") + emac_get_stat_by_name(emac, "FW_INF_DROP_PRIOTAGGED") + emac_get_stat_by_name(emac, "FW_INF_DROP_NOTAG") + - emac_get_stat_by_name(emac, "FW_INF_DROP_NOTMEMBER"); + emac_get_stat_by_name(emac, "FW_INF_DROP_NOTMEMBER") + + emac_get_stat_by_name(emac, "FW_HSR_FWD_CHECK_FAIL_DROP") + + emac_get_stat_by_name(emac, "FW_HSR_HE_CHECK_FAIL_DROP"); stats->tx_errors = ndev->stats.tx_errors; stats->tx_dropped = ndev->stats.tx_dropped + emac_get_stat_by_name(emac, "FW_RTU_PKT_DROP") + diff --git a/drivers/net/ethernet/ti/icssg/icssg_stats.h b/drivers/net/ethernet/ti/icssg/icssg_stats.h index b854eb587c1e..af3fcecac403 100644 --- a/drivers/net/ethernet/ti/icssg/icssg_stats.h +++ b/drivers/net/ethernet/ti/icssg/icssg_stats.h @@ -204,6 +204,16 @@ static const struct icssg_pa_stats icssg_all_pa_stats[] = { ICSSG_PA_STATS(FW_HOST_TX_PKT_CNT), ICSSG_PA_STATS(FW_HOST_EGRESS_Q_PRE_OVERFLOW), ICSSG_PA_STATS(FW_HOST_EGRESS_Q_EXP_OVERFLOW), + ICSSG_PA_STATS(FW_HSR_FWD_CHECK_FAIL_DROP), + ICSSG_PA_STATS(FW_HSR_HE_CHECK_FAIL_DROP), + ICSSG_PA_STATS(FW_HSR_SKIP_HOST_DUP_DISCARD_FRAMES), + ICSSG_PA_STATS(FW_LRE_CNT_UNIQUE_RX), + ICSSG_PA_STATS(FW_LRE_CNT_DUPLICATE_RX), + ICSSG_PA_STATS(FW_LRE_CNT_MULTIPLE_RX), + ICSSG_PA_STATS(FW_LRE_CNT_RX), + ICSSG_PA_STATS(FW_LRE_CNT_TX), + ICSSG_PA_STATS(FW_LRE_CNT_OWN_RX), + ICSSG_PA_STATS(FW_LRE_CNT_ERRWRONGLAN), }; #endif /* __NET_TI_ICSSG_STATS_H */ diff --git a/drivers/net/ethernet/ti/icssg/icssg_switch_map.h b/drivers/net/ethernet/ti/icssg/icssg_switch_map.h index 7e053b8af3ec..bd2d54dd7f45 100644 --- a/drivers/net/ethernet/ti/icssg/icssg_switch_map.h +++ b/drivers/net/ethernet/ti/icssg/icssg_switch_map.h @@ -266,5 +266,15 @@ #define FW_HOST_TX_PKT_CNT 0x0250 #define FW_HOST_EGRESS_Q_PRE_OVERFLOW 0x0258 #define FW_HOST_EGRESS_Q_EXP_OVERFLOW 0x0260 +#define FW_HSR_FWD_CHECK_FAIL_DROP 0x0500 +#define FW_HSR_HE_CHECK_FAIL_DROP 0x0508 +#define FW_HSR_SKIP_HOST_DUP_DISCARD_FRAMES 0x0510 +#define FW_LRE_CNT_UNIQUE_RX 0x0518 +#define FW_LRE_CNT_DUPLICATE_RX 0x0520 +#define FW_LRE_CNT_MULTIPLE_RX 0x0528 +#define FW_LRE_CNT_RX 0x0530 +#define FW_LRE_CNT_TX 0x0538 +#define FW_LRE_CNT_OWN_RX 0x0540 +#define FW_LRE_CNT_ERRWRONGLAN 0x0548 #endif /* __NET_TI_ICSSG_SWITCH_MAP_H */ -- 2.34.1