From patchwork Thu Feb 27 09:37:12 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: MD Danish Anwar X-Patchwork-Id: 13994032 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 6AEEDC021BE for ; Thu, 27 Feb 2025 09:54:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Type: Content-Transfer-Encoding:MIME-Version:Message-ID:Date:Subject:CC:To:From: Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender :Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References:List-Owner; bh=O7xVApe7OWt5Xaf5TUGNDnUX/j980sFAxGJ2aaz5evQ=; b=yHeRYjaEze6eyvCtTBTCh0hu5E sbj7zs0OAWmxPWDUn1eeHgRRkd48zU81mnijWFuKIMi+BRHcfEAbLzF0y4icpemS5hvzQwVkl9Kq9 VmxKZERyv3XZORJn+vpQVMf1RK8Ns7nMYOQefnFQr05+Dl44PCzjp3YPvzsBQJKsgn0wnYYsJOS48 OodP4U1y4glDNjIshM40E9WA02MjWQLUaaWqOwRXzoVve86SgPQ8gdrFyxLGgJV3u9lRjSa+JESIQ hjt5dx+wArEMkKCYpw1xe8srRDwzpAIcr9/vRyPCVFvg4HAajOtEF418yI2graq3XZfPBdNT6Pbiz sPWFHlwQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tnaam-00000006vBW-0YQQ; Thu, 27 Feb 2025 09:54:08 +0000 Received: from lelvem-ot02.ext.ti.com ([198.47.23.235]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tnaKa-00000006swJ-0XxV for linux-arm-kernel@lists.infradead.org; Thu, 27 Feb 2025 09:37:25 +0000 Received: from fllv0035.itg.ti.com ([10.64.41.0]) by lelvem-ot02.ext.ti.com (8.15.2/8.15.2) with ESMTPS id 51R9bHOY2343129 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 27 Feb 2025 03:37:17 -0600 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1740649037; bh=O7xVApe7OWt5Xaf5TUGNDnUX/j980sFAxGJ2aaz5evQ=; h=From:To:CC:Subject:Date; b=y9YduzUArvEuguZPJwviT0cS5Jj9prSjk7dvAFgbEekurVyGrKvt4b5D5HAGA9oUd dH1AM3K2Zq96uypvaRSZBG48d3r8pYcWwIWSvfvtqyMLY5XswPwEkBE4PNaxABJMkQ 6fpSgt1zCUKUwzs9dQtb/woG9A253oFRA9uARr+k= Received: from DFLE115.ent.ti.com (dfle115.ent.ti.com [10.64.6.36]) by fllv0035.itg.ti.com (8.15.2/8.15.2) with ESMTPS id 51R9bHUG039975 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=FAIL); Thu, 27 Feb 2025 03:37:17 -0600 Received: from DFLE115.ent.ti.com (10.64.6.36) by DFLE115.ent.ti.com (10.64.6.36) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.23; Thu, 27 Feb 2025 03:37:17 -0600 Received: from lelvsmtp6.itg.ti.com (10.180.75.249) by DFLE115.ent.ti.com (10.64.6.36) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.23 via Frontend Transport; Thu, 27 Feb 2025 03:37:17 -0600 Received: from fllv0122.itg.ti.com (fllv0122.itg.ti.com [10.247.120.72]) by lelvsmtp6.itg.ti.com (8.15.2/8.15.2) with ESMTP id 51R9bH7q057513; Thu, 27 Feb 2025 03:37:17 -0600 Received: from localhost (danish-tpc.dhcp.ti.com [10.24.69.25]) by fllv0122.itg.ti.com (8.14.7/8.14.7) with ESMTP id 51R9bGXH008583; Thu, 27 Feb 2025 03:37:16 -0600 From: MD Danish Anwar To: Meghana Malladi , Diogo Ivo , Paolo Abeni , Jakub Kicinski , Eric Dumazet , "David S. Miller" , Andrew Lunn CC: , , , , Vignesh Raghavendra , Roger Quadros , Subject: [PATCH net-next] net: ti: icssg-prueth: Add ICSSG FW Stats Date: Thu, 27 Feb 2025 15:07:12 +0530 Message-ID: <20250227093712.2130561-1-danishanwar@ti.com> X-Mailer: git-send-email 2.34.1 MIME-Version: 1.0 X-C2ProcessedOrg: 333ef613-75bf-4e12-a4b1-8e3623f5dcea X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250227_013724_267910_73C51ECB X-CRM114-Status: GOOD ( 21.00 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org The ICSSG firmware maintains set of stats called PA_STATS. Currently the driver only dumps 4 stats. Add support for dumping more stats. The offset for different stats are defined as MACROs in icssg_switch_map.h file. All the offsets are for Slice0. Slice1 offsets are slice0 + 4. The offset calculation is taken care while reading the stats in emac_update_hardware_stats(). Signed-off-by: MD Danish Anwar --- drivers/net/ethernet/ti/icssg/icssg_prueth.h | 2 +- drivers/net/ethernet/ti/icssg/icssg_stats.c | 6 +- drivers/net/ethernet/ti/icssg/icssg_stats.h | 63 +++++++---- .../net/ethernet/ti/icssg/icssg_switch_map.h | 105 ++++++++++++++++++ 4 files changed, 149 insertions(+), 27 deletions(-) base-commit: 0493f7a54e5bcf490f943f7b25ec6e1051832f98 diff --git a/drivers/net/ethernet/ti/icssg/icssg_prueth.h b/drivers/net/ethernet/ti/icssg/icssg_prueth.h index 329b46e9ee53..569d3d53db59 100644 --- a/drivers/net/ethernet/ti/icssg/icssg_prueth.h +++ b/drivers/net/ethernet/ti/icssg/icssg_prueth.h @@ -50,7 +50,7 @@ #define ICSSG_MAX_RFLOWS 8 /* per slice */ -#define ICSSG_NUM_PA_STATS 4 +#define ICSSG_NUM_PA_STATS 37 #define ICSSG_NUM_MIIG_STATS 60 /* Number of ICSSG related stats */ #define ICSSG_NUM_STATS (ICSSG_NUM_MIIG_STATS + ICSSG_NUM_PA_STATS) diff --git a/drivers/net/ethernet/ti/icssg/icssg_stats.c b/drivers/net/ethernet/ti/icssg/icssg_stats.c index 8800bd3a8d07..3f1400e0207c 100644 --- a/drivers/net/ethernet/ti/icssg/icssg_stats.c +++ b/drivers/net/ethernet/ti/icssg/icssg_stats.c @@ -11,7 +11,6 @@ #define ICSSG_TX_PACKET_OFFSET 0xA0 #define ICSSG_TX_BYTE_OFFSET 0xEC -#define ICSSG_FW_STATS_BASE 0x0248 static u32 stats_base[] = { 0x54c, /* Slice 0 stats start */ 0xb18, /* Slice 1 stats start */ @@ -44,9 +43,8 @@ void emac_update_hardware_stats(struct prueth_emac *emac) if (prueth->pa_stats) { for (i = 0; i < ARRAY_SIZE(icssg_all_pa_stats); i++) { - reg = ICSSG_FW_STATS_BASE + - icssg_all_pa_stats[i].offset * - PRUETH_NUM_MACS + slice * sizeof(u32); + reg = icssg_all_pa_stats[i].offset + + slice * sizeof(u32); regmap_read(prueth->pa_stats, reg, &val); emac->pa_stats[i] += val; } diff --git a/drivers/net/ethernet/ti/icssg/icssg_stats.h b/drivers/net/ethernet/ti/icssg/icssg_stats.h index e88b919f532c..8d0fe42a5a41 100644 --- a/drivers/net/ethernet/ti/icssg/icssg_stats.h +++ b/drivers/net/ethernet/ti/icssg/icssg_stats.h @@ -155,24 +155,10 @@ static const struct icssg_miig_stats icssg_all_miig_stats[] = { ICSSG_MIIG_STATS(tx_bytes, true), }; -/** - * struct pa_stats_regs - ICSSG Firmware maintained PA Stats register - * @fw_rx_cnt: Number of valid packets sent by Rx PRU to Host on PSI - * @fw_tx_cnt: Number of valid packets copied by RTU0 to Tx queues - * @fw_tx_pre_overflow: Host Egress Q (Pre-emptible) Overflow Counter - * @fw_tx_exp_overflow: Host Egress Q (Express) Overflow Counter - */ -struct pa_stats_regs { - u32 fw_rx_cnt; - u32 fw_tx_cnt; - u32 fw_tx_pre_overflow; - u32 fw_tx_exp_overflow; -}; - -#define ICSSG_PA_STATS(field) \ -{ \ - #field, \ - offsetof(struct pa_stats_regs, field), \ +#define ICSSG_PA_STATS(field) \ +{ \ + #field, \ + field, \ } struct icssg_pa_stats { @@ -181,10 +167,43 @@ struct icssg_pa_stats { }; static const struct icssg_pa_stats icssg_all_pa_stats[] = { - ICSSG_PA_STATS(fw_rx_cnt), - ICSSG_PA_STATS(fw_tx_cnt), - ICSSG_PA_STATS(fw_tx_pre_overflow), - ICSSG_PA_STATS(fw_tx_exp_overflow), + ICSSG_PA_STATS(FW_RTU_PKT_DROP), + ICSSG_PA_STATS(FW_Q0_OVERFLOW), + ICSSG_PA_STATS(FW_Q1_OVERFLOW), + ICSSG_PA_STATS(FW_Q2_OVERFLOW), + ICSSG_PA_STATS(FW_Q3_OVERFLOW), + ICSSG_PA_STATS(FW_Q4_OVERFLOW), + ICSSG_PA_STATS(FW_Q5_OVERFLOW), + ICSSG_PA_STATS(FW_Q6_OVERFLOW), + ICSSG_PA_STATS(FW_Q7_OVERFLOW), + ICSSG_PA_STATS(FW_DROPPED_PKT), + ICSSG_PA_STATS(FW_RX_ERROR), + ICSSG_PA_STATS(FW_RX_DS_INVALID), + ICSSG_PA_STATS(FW_TX_DROPPED_PACKET), + ICSSG_PA_STATS(FW_TX_TS_DROPPED_PACKET), + ICSSG_PA_STATS(FW_INF_PORT_DISABLED), + ICSSG_PA_STATS(FW_INF_SAV), + ICSSG_PA_STATS(FW_INF_SA_BL), + ICSSG_PA_STATS(FW_INF_PORT_BLOCKED), + ICSSG_PA_STATS(FW_INF_DROP_TAGGED), + ICSSG_PA_STATS(FW_INF_DROP_PRIOTAGGED), + ICSSG_PA_STATS(FW_INF_DROP_NOTAG), + ICSSG_PA_STATS(FW_INF_DROP_NOTMEMBER), + ICSSG_PA_STATS(FW_PREEMPT_BAD_FRAG), + ICSSG_PA_STATS(FW_PREEMPT_ASSEMBLY_ERR), + ICSSG_PA_STATS(FW_PREEMPT_FRAG_CNT_TX), + ICSSG_PA_STATS(FW_PREEMPT_ASSEMBLY_OK), + ICSSG_PA_STATS(FW_PREEMPT_FRAG_CNT_RX), + ICSSG_PA_STATS(FW_RX_EOF_SHORT_FRMERR), + ICSSG_PA_STATS(FW_RX_B0_DROP_EARLY_EOF), + ICSSG_PA_STATS(FW_TX_JUMBO_FRM_CUTOFF), + ICSSG_PA_STATS(FW_RX_EXP_FRAG_Q_DROP), + ICSSG_PA_STATS(FW_RX_FIFO_OVERRUN), + ICSSG_PA_STATS(FW_CUT_THR_PKT), + ICSSG_PA_STATS(FW_HOST_RX_PKT_CNT), + 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), }; #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 424a7e945ea8..d30203a0978c 100644 --- a/drivers/net/ethernet/ti/icssg/icssg_switch_map.h +++ b/drivers/net/ethernet/ti/icssg/icssg_switch_map.h @@ -231,4 +231,109 @@ /* Start of 32 bits PA_STAT counters */ #define PA_STAT_32b_START_OFFSET 0x0080 +/* Diagnostic error counter which increments when RTU drops a locally injected + * packet due to port disabled or rule violation. + */ +#define FW_RTU_PKT_DROP 0x0088 + +/* Tx Queue Overflow Counters */ +#define FW_Q0_OVERFLOW 0x0090 +#define FW_Q1_OVERFLOW 0x0098 +#define FW_Q2_OVERFLOW 0x00A0 +#define FW_Q3_OVERFLOW 0x00A8 +#define FW_Q4_OVERFLOW 0x00B0 +#define FW_Q5_OVERFLOW 0x00B8 +#define FW_Q6_OVERFLOW 0x00C0 +#define FW_Q7_OVERFLOW 0x00C8 + +/* Incremented if a packet is dropped at PRU because of a rule violation */ +#define FW_DROPPED_PKT 0x00F8 + +/* Incremented if there was a CRC error or Min/Max frame error at PRU0 */ +#define FW_RX_ERROR 0x0100 + +/* Incremented when RTU detects Data Status invalid condition */ +#define FW_RX_DS_INVALID 0x0108 + +/* Counter for packets dropped via TX Port */ +#define FW_TX_DROPPED_PACKET 0x0110 + +/* Counter for packets with TS flag dropped via TX Port */ +#define FW_TX_TS_DROPPED_PACKET 0x0118 + +/* Incremented when RX frame is dropped due to port being disabled */ +#define FW_INF_PORT_DISABLED 0x0120 + +/* Incremented when RX frame is dropped due to Source Address violation */ +#define FW_INF_SAV 0x0128 + +/* Incremented when RX frame is dropped due to Source Address being black + * listed + */ +#define FW_INF_SA_BL 0x0130 + +/* Incremented when RX frame is dropped due to port being blocked and frame + * is being a special frame + */ +#define FW_INF_PORT_BLOCKED 0x0138 + +/* Incremented when RX frame is dropped for being tagged */ +#define FW_INF_DROP_TAGGED 0x0140 + +/* Incremented when RX frame is dropped for being priority tagged */ +#define FW_INF_DROP_PRIOTAGGED 0x0148 + +/* Incremented when RX frame is dropped for being untagged */ +#define FW_INF_DROP_NOTAG 0x0150 + +/* Incremented when RX frame is dropped for port not being member of VLAN */ +#define FW_INF_DROP_NOTMEMBER 0x0158 + +/* Bad fragment Error Counter */ +#define FW_PREEMPT_BAD_FRAG 0x0160 + +/* Fragment assembly Error Counter */ +#define FW_PREEMPT_ASSEMBLY_ERR 0x0168 + +/* Fragment count in TX */ +#define FW_PREEMPT_FRAG_CNT_TX 0x0170 + +/* Assembly Completed */ +#define FW_PREEMPT_ASSEMBLY_OK 0x0178 + +/* Fragments received */ +#define FW_PREEMPT_FRAG_CNT_RX 0x0180 + +/* Incremented if EOF task is scheduled without seeing RX_B1 */ +#define FW_RX_EOF_SHORT_FRMERR 0x0188 + +/* Incremented when frame is dropped due to Early EOF received in B0 */ +#define FW_RX_B0_DROP_EARLY_EOF 0x0190 + +/* Incremented when frame is cut off to prevent packet size > 2000B */ +#define FW_TX_JUMBO_FRM_CUTOFF 0x0198 + +/* Incremented when express frame is received in the same queue as the previous + * fragment + */ +#define FW_RX_EXP_FRAG_Q_DROP 0x01A0 + +/* RX fifo overrun counter */ +#define FW_RX_FIFO_OVERRUN 0x01A8 + +/* Cut-through packet Counter */ +#define FW_CUT_THR_PKT 0x01B0 + +/* Number of valid packets sent by Rx PRU to Host on PSI */ +#define FW_HOST_RX_PKT_CNT 0x0248 + +/* Number of valid packets copied by RTU0 to Tx queues */ +#define FW_HOST_TX_PKT_CNT 0x0250 + +/* Host Egress Q (Pre-emptible) Overflow Counter */ +#define FW_HOST_EGRESS_Q_PRE_OVERFLOW 0x0258 + +/* Host Egress Q (Pre-emptible) Overflow Counter */ +#define FW_HOST_EGRESS_Q_EXP_OVERFLOW 0x0260 + #endif /* __NET_TI_ICSSG_SWITCH_MAP_H */