From nobody Mon Apr 6 08:10:03 2026 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id E956FC54EE9 for ; Thu, 8 Sep 2022 16:50:11 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230457AbiIHQuJ (ORCPT ); Thu, 8 Sep 2022 12:50:09 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44346 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231156AbiIHQtT (ORCPT ); Thu, 8 Sep 2022 12:49:19 -0400 Received: from EUR02-VE1-obe.outbound.protection.outlook.com (mail-eopbgr20087.outbound.protection.outlook.com [40.107.2.87]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4284A1316FE; Thu, 8 Sep 2022 09:49:17 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=MU71JROAaSIcpWtHe6ks+x+yDdaTDV77wLtsb/7OkuFh7+RxY/R/i1jxHecukpJEvNlOk1Y38BLhDPi0Q0j1Ftp0DDRYsSm3vy/4J1JrJ+QbbK5pVKGq3arq3T3AN01D/dF8YJBtP1VnxgYvqIoRwKSqZ4SptcWLr22t41jKGQ+yTMSd3NdYhf8AgX8CtlX2Hl3d7N7Pfjzh/5XWsW+MG1u1L+dg+QZpvqMmtg8tHQq+RkAdYxiJ6jstQce9NYWe64U4xjgrKUGwpgndizeYkIuE8IK16HXK56Ma5HRg4ZCK1RqIRWIsfBq84zaQaP3B0OoU2pWKnYwo2+E/zqjjng== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=/V+5XwogyZMzXOChyy5ExwQ6mjkhYTGhJTs3NRISur8=; b=l8/MZPhc+iGlS7c/+2Xg0xFhHFKcN0QaYrzBGVHv5N6Vf/UF4HH2vvurKSQKMu0GduJdrIdnapQwbR2u+tZh7zEiBi/tbbz/YVW1xWsagMb+odrYGbZbod0kIGxJZoxmmFtL3PNEPy3UBQ5mZTysS92wC9hQucG3X0K9vlvKsB4I9LbZBdr+WSTKS7bl8JNCPaL71jOD2GzgE8hc7uh0xVuT8SS2BcFp+n2giSXWyWt+iKtllHeNIIcoKj0CC39gvwI/GpbXmwObYYOeQHkEYweKCh5NvKCnmDI85kPju2G/IVLyqZOerXKL1em2LV2J0uQDKBQrRpthmicWwwDK3w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=/V+5XwogyZMzXOChyy5ExwQ6mjkhYTGhJTs3NRISur8=; b=Ao0TvPZfDfBwTtmQUWxsVTnVISauDRuskCmI+LenKVfyWScfsVODPR2DN+CueePNN8ZFJAn0+k6y2J8qvpJJgfMUDrSyPpoDJxxzJo0jbJSfc0D862mWZVSCSQ0Me3DU4ePw+jFuxG0ElnanHROr6d4oDq/sgiwU0f5/AZs8TWI= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from VI1PR04MB5136.eurprd04.prod.outlook.com (2603:10a6:803:55::19) by AM0PR04MB5154.eurprd04.prod.outlook.com (2603:10a6:208:c4::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5588.17; Thu, 8 Sep 2022 16:48:32 +0000 Received: from VI1PR04MB5136.eurprd04.prod.outlook.com ([fe80::3412:9d57:ec73:fef3]) by VI1PR04MB5136.eurprd04.prod.outlook.com ([fe80::3412:9d57:ec73:fef3%5]) with mapi id 15.20.5588.017; Thu, 8 Sep 2022 16:48:32 +0000 From: Vladimir Oltean To: netdev@vger.kernel.org Cc: "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Xiaoliang Yang , Claudiu Manoil , Alexandre Belloni , UNGLinuxDriver@microchip.com, Andrew Lunn , Vivien Didelot , Florian Fainelli , Maxim Kochetkov , Colin Foster , Richie Pearn , linux-kernel@vger.kernel.org Subject: [PATCH net-next 01/14] net: dsa: felix: add definitions for the stream filter counters Date: Thu, 8 Sep 2022 19:48:03 +0300 Message-Id: <20220908164816.3576795-2-vladimir.oltean@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220908164816.3576795-1-vladimir.oltean@nxp.com> References: <20220908164816.3576795-1-vladimir.oltean@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BEXP281CA0009.DEUP281.PROD.OUTLOOK.COM (2603:10a6:b10::19) To VI1PR04MB5136.eurprd04.prod.outlook.com (2603:10a6:803:55::19) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 7c01336a-8104-4ed4-51ac-08da91b9f438 X-MS-TrafficTypeDiagnostic: AM0PR04MB5154:EE_ X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 2Vst4mcWz2qIuUQP5ooJMcEy1jlXFLRMAtItFwNnZR4uVwRW7IJHF/QSpzc9u4fxirOrAdnH1HsldOi4L2PzFf3JykaE11Flw6aN68gSnFIK/tnqqLyq7L/3L/uFhIb0m8JtRHtfavi6qdv5YilMecZiiJgEWHsDZtWAqMpWEzfs7W9djpB1hAwWybjqtzMinM5K+PlkQ9zUzmgDnwklVE7p1512lG0eZ9/zU6UwrCDc0x856xiZfXjUxcSlLwvfyhZA0KuAoR4t5TJP1S9pV5gYCAnvv5U7jI6nk1Ysw7HHrYvX3WSnjTfxYzlUKa3luSmHQfw+eBm5gusNHICuJ3OvSma6OeRUAeBg1gICN7R5hYGEWz5Li/p4kuSqpqt4gpi7Z/0yPN3awxSjBW/9I3kZiqr7AFJ6K59Z5FJmiA7qQ6Q8V0C88oRvJ25sjwSJi2nkkP9UqHxX8bigcn6w0SaMBYyC0ja4l0V5MW5kMM1u13xmxlIt01KHhU0qqAgLYsxCNz0T1bvmVPsW3y2I1T6RUf7Nxns1kQk6RSyRsCyg6v4BaUJ1eF26DAw9oDgcx3RyKIFO3Lpbxs9zcwrYfjE2Keulx/4kmpnfFdwdD4XYxXdBod3rZn1MT6NYxw0abi7IypxLc/1PJFaMPGw+L6GkuIErc8+V96MWbH79jQCh5+T+x9l/KGyfXwOIyqA/uFP+1LvLCwhCCOWeojbOdz5149oCt8Ru3SgnrlTQxDS6aohLfLONn676htTfJmWcy8CAP+vWHTjrDRQid7ZIMw== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5136.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230016)(4636009)(376002)(346002)(136003)(396003)(39860400002)(366004)(186003)(6506007)(41300700001)(1076003)(6512007)(6666004)(478600001)(6486002)(2616005)(26005)(52116002)(38100700002)(86362001)(38350700002)(5660300002)(83380400001)(54906003)(316002)(44832011)(4326008)(8676002)(2906002)(8936002)(66476007)(66556008)(66946007)(6916009)(7416002)(36756003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?dgp3P5OjMsqYvMZW3DHK9ncEMkm2PplOoN1razS/sY+pPUmQsi0c8ko0YEGj?= =?us-ascii?Q?PptJAas84UzKFMT8zB+wD/NJevJ4SNUN0uB5rtkSkZx5SjZlZcqEyRo85pKM?= =?us-ascii?Q?srHig2e76yU/MB2J6zZf3IX+VhuIbKocJkGPeR1zLvpOUurKt9RxV/32wXKw?= =?us-ascii?Q?Ar/nLchRK3cWyb8gqxKwNBKj3JiSvYCjIaUgcGeJMhBSdy86m1afitSsUsWZ?= =?us-ascii?Q?fA/gx3k6ivmKFErisszuDWNZqdYX6JARHxBHCc0b9+A6JZJnNCffyIXFJiTu?= =?us-ascii?Q?6dsPVJD3tYmVdCvzfbGpjwhQnahduiESJyaD2/dKl5KwmQastIgrJ0CH+KC+?= =?us-ascii?Q?sJGcLaZu2j0oD5XeQaNWYMmswLG7hx6PvpMwDae4orVXo2Nx03cPs+3iYwiA?= =?us-ascii?Q?4Q6I8MDHTa+L1z2jpGEaw1sOiNPTnj8BJ4nY5Bl31JqasESGauxpjr5LCa3X?= =?us-ascii?Q?vShrZK19KDXJhG0L87lMqQjSxsriB2/MmjOvTHh1a0h9MkpBc4rfXWoCpJZS?= =?us-ascii?Q?opz8ykOPLEwvV9lPLJuisC2Y2bTzjByhS2t/Bp/sWvWxeXBb7WzvbMG4SP1W?= =?us-ascii?Q?O4DMBdYOmIHQE4G2sEpFSyG40QGiZBVuwstlSIz8GpSi0r0QIzThSCuwWHhV?= =?us-ascii?Q?p5UFP4qqx5ZFd4psqVhhNIgsQw+iQEg38caANbqOomgvCZSPFXvaXurY6fgj?= =?us-ascii?Q?Y9tJVICdmliTUXorh464b/B1xKq399fRqtcbZ2UQDTOn/ghHk5rIzRCfD4me?= =?us-ascii?Q?Cgp7Oui8nu1tHsjbALp8fnUO5GiwKGl8FlFt44/7jXuAinmwzFjC7PdXt3tv?= =?us-ascii?Q?Yv6D8+zmIUYRViy2GX5qCup53fhRu0Jy539YS83yOVCpnPGt03vkrhjrA6jo?= =?us-ascii?Q?DGUQoxC+ii3/k5CAVgYImLN5/DWgNbn0aJxCmdtfJLyfjFEwvLCfRNCFC9Gk?= =?us-ascii?Q?7PPH5OhrtS0+hTM8tOQ0AZb3Czrle9c5VrLkJrQsH8xT+cI81bZVedLzx3Pq?= =?us-ascii?Q?I6jeiuTJ8T79piHPP0PPnmiivbAh98zrY94xqSsXKtiEkmskIEBwrMeVrxEP?= =?us-ascii?Q?hhoevrYYrBiFwiKt8izntF7O4S8DpVGUuNFSNDb7vpOcXaaMCQ004gZ3yz4a?= =?us-ascii?Q?ctT2zX+i8V9l1OmicK91ROnB76LlXWHKfKIUG2s3WhCheJ5LK9Noo5iamWmR?= =?us-ascii?Q?QnxJgsSGgZblSs+O1P0+0IhOSio1eqlMVFwQCCDTQiY7oyMORTMgV/pmEXWI?= =?us-ascii?Q?IsMD2GvhvpJl5GNmGuHgp6KSQcnmPak/olzQAKTswc4KTzeWevbW5jVrnYOk?= =?us-ascii?Q?c3QfFk2kN8PWs0ogQ9S0+C0W1PHPQpen6FHf9nYS4Dg0fPt0V9k83HbQmbi/?= =?us-ascii?Q?QSbWcJ6zoWRMpaeVPKparQf81731Nfr7vN64j6VbAv1vbpjQaRarX6hEDdT0?= =?us-ascii?Q?7u8c9sMv/4HqOiqa0gQReLybnC/7DNwpVCrAeJTZIpr4p1KSenEh8eWLV9kd?= =?us-ascii?Q?GCoyKBPjLF/Ord73P1TNGVCka2mnxj5ojeeTUE4+YjY6KH29K03Jr31zzazM?= =?us-ascii?Q?NCrEeDPU/oYPiPG99PVz7C8xUMoT0AQoYHR9qpcDaL01/+lxAhZgUgVNE65L?= =?us-ascii?Q?Jw=3D=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7c01336a-8104-4ed4-51ac-08da91b9f438 X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5136.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Sep 2022 16:48:28.0217 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: DJ90UZ3di6TgNeyoxhQHYWNvYVwmFg7aOYoMl+wlOufydQGZzIff9/yAOgUxq+jnXfjp18sVpminRexdZo3GWg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR04MB5154 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" TSN stream (802.1Qci, 802.1CB) filters are also accessed through STAT_VIEW, just like the port registers, but these counters are per stream, rather than per port. So we don't keep them in ocelot_port_update_stats(). What we can do, however, is we can create register definitions for them just like we have for the port counters, and delete the last remaining user of the SYS_CNT register + a group index (read_gix). Signed-off-by: Vladimir Oltean --- drivers/net/dsa/ocelot/felix_vsc9959.c | 15 ++++++++++----- drivers/net/dsa/ocelot/seville_vsc9953.c | 1 - drivers/net/ethernet/mscc/vsc7514_regs.c | 1 - include/soc/mscc/ocelot.h | 5 ++++- 4 files changed, 14 insertions(+), 8 deletions(-) diff --git a/drivers/net/dsa/ocelot/felix_vsc9959.c b/drivers/net/dsa/ocelo= t/felix_vsc9959.c index 1cdce8a98d1d..10db0b69b681 100644 --- a/drivers/net/dsa/ocelot/felix_vsc9959.c +++ b/drivers/net/dsa/ocelot/felix_vsc9959.c @@ -366,6 +366,10 @@ static const u32 vsc9959_sys_regmap[] =3D { REG(SYS_COUNT_DROP_GREEN_PRIO_5, 0x00043c), REG(SYS_COUNT_DROP_GREEN_PRIO_6, 0x000440), REG(SYS_COUNT_DROP_GREEN_PRIO_7, 0x000444), + REG(SYS_COUNT_SF_MATCHING_FRAMES, 0x000800), + REG(SYS_COUNT_SF_NOT_PASSING_FRAMES, 0x000804), + REG(SYS_COUNT_SF_NOT_PASSING_SDU, 0x000808), + REG(SYS_COUNT_SF_RED_FRAMES, 0x00080c), REG(SYS_RESET_CFG, 0x000e00), REG(SYS_SR_ETYPE_CFG, 0x000e04), REG(SYS_VLAN_ETYPE_CFG, 0x000e08), @@ -387,7 +391,6 @@ static const u32 vsc9959_sys_regmap[] =3D { REG_RESERVED(SYS_MMGT_FAST), REG_RESERVED(SYS_EVENTS_DIF), REG_RESERVED(SYS_EVENTS_CORE), - REG(SYS_CNT, 0x000000), REG(SYS_PTP_STATUS, 0x000f14), REG(SYS_PTP_TXSTAMP, 0x000f18), REG(SYS_PTP_NXT, 0x000f1c), @@ -2522,10 +2525,12 @@ static void vsc9959_psfp_counters_get(struct ocelot= *ocelot, u32 index, SYS_STAT_CFG_STAT_VIEW_M, SYS_STAT_CFG); =20 - counters->match =3D ocelot_read_gix(ocelot, SYS_CNT, 0x200); - counters->not_pass_gate =3D ocelot_read_gix(ocelot, SYS_CNT, 0x201); - counters->not_pass_sdu =3D ocelot_read_gix(ocelot, SYS_CNT, 0x202); - counters->red =3D ocelot_read_gix(ocelot, SYS_CNT, 0x203); + counters->match =3D ocelot_read(ocelot, SYS_COUNT_SF_MATCHING_FRAMES); + counters->not_pass_gate =3D ocelot_read(ocelot, + SYS_COUNT_SF_NOT_PASSING_FRAMES); + counters->not_pass_sdu =3D ocelot_read(ocelot, + SYS_COUNT_SF_NOT_PASSING_SDU); + counters->red =3D ocelot_read(ocelot, SYS_COUNT_SF_RED_FRAMES); =20 /* Clear the PSFP counter. */ ocelot_write(ocelot, diff --git a/drivers/net/dsa/ocelot/seville_vsc9953.c b/drivers/net/dsa/oce= lot/seville_vsc9953.c index b34f4cdfe814..26fdd0d90724 100644 --- a/drivers/net/dsa/ocelot/seville_vsc9953.c +++ b/drivers/net/dsa/ocelot/seville_vsc9953.c @@ -383,7 +383,6 @@ static const u32 vsc9953_sys_regmap[] =3D { REG_RESERVED(SYS_MMGT_FAST), REG_RESERVED(SYS_EVENTS_DIF), REG_RESERVED(SYS_EVENTS_CORE), - REG_RESERVED(SYS_CNT), REG_RESERVED(SYS_PTP_STATUS), REG_RESERVED(SYS_PTP_TXSTAMP), REG_RESERVED(SYS_PTP_NXT), diff --git a/drivers/net/ethernet/mscc/vsc7514_regs.c b/drivers/net/etherne= t/mscc/vsc7514_regs.c index 9cf82ecf191c..bd062203a6b2 100644 --- a/drivers/net/ethernet/mscc/vsc7514_regs.c +++ b/drivers/net/ethernet/mscc/vsc7514_regs.c @@ -283,7 +283,6 @@ const u32 vsc7514_sys_regmap[] =3D { REG(SYS_MMGT_FAST, 0x0006a0), REG(SYS_EVENTS_DIF, 0x0006a4), REG(SYS_EVENTS_CORE, 0x0006b4), - REG(SYS_CNT, 0x000000), REG(SYS_PTP_STATUS, 0x0006b8), REG(SYS_PTP_TXSTAMP, 0x0006bc), REG(SYS_PTP_NXT, 0x0006c0), diff --git a/include/soc/mscc/ocelot.h b/include/soc/mscc/ocelot.h index 2a7e18ee5577..99d679235070 100644 --- a/include/soc/mscc/ocelot.h +++ b/include/soc/mscc/ocelot.h @@ -411,6 +411,10 @@ enum ocelot_reg { SYS_COUNT_DROP_GREEN_PRIO_5, SYS_COUNT_DROP_GREEN_PRIO_6, SYS_COUNT_DROP_GREEN_PRIO_7, + SYS_COUNT_SF_MATCHING_FRAMES, + SYS_COUNT_SF_NOT_PASSING_FRAMES, + SYS_COUNT_SF_NOT_PASSING_SDU, + SYS_COUNT_SF_RED_FRAMES, SYS_RESET_CFG, SYS_SR_ETYPE_CFG, SYS_VLAN_ETYPE_CFG, @@ -433,7 +437,6 @@ enum ocelot_reg { SYS_MMGT_FAST, SYS_EVENTS_DIF, SYS_EVENTS_CORE, - SYS_CNT, SYS_PTP_STATUS, SYS_PTP_TXSTAMP, SYS_PTP_NXT, --=20 2.34.1 From nobody Mon Apr 6 08:10:03 2026 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id D8B78C54EE9 for ; Thu, 8 Sep 2022 16:52:10 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231974AbiIHQwG (ORCPT ); Thu, 8 Sep 2022 12:52:06 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45180 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231905AbiIHQv2 (ORCPT ); Thu, 8 Sep 2022 12:51:28 -0400 Received: from EUR02-VE1-obe.outbound.protection.outlook.com (mail-eopbgr20087.outbound.protection.outlook.com [40.107.2.87]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B0EE96425; Thu, 8 Sep 2022 09:49:55 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Vi/ovSGmbv932ole/7swESiwjFxXiJRGveYAiF6oFRJpfRuZ1mylNQc7WhjBTAQiyFGpr55pzIL1/uXSAnJb/tKHLEp0vmNvFrEUN4iELo3ytCvG7ph9u+ouycvrpNMLjQNcfccjmahBriq4r1spI+9hNT+HdcknyzM3aEvZPso9WdC7QkDA0ozd1kV5O4bFAqkH7W9z01n3ToNI5LWQDDhe/nK0t/n62kjUi5nc5IdcK6ebHvcbsKcU/nEM4Gvv6bbQ+SvE2pLq4kSJe5+vFUKBsGtqOoH1zKZTb6T9sOKwf6kRCToT+PGq8cmHJWGrYOdGDnWn/RIxF0XYnyQdYQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=O1diHf7899e55Zkfa9eDlvvGRvX9RxwYA/ufkCOkIiA=; b=l9HELV0cLJ4Wm8Y4FPjyNTpRqAIx5I7R3KXEgWSUoMW6d4NTXSD4J1CO0s+yq5KL+8UBCh/eHhMimlRqPMq5NENBGC4Axk4X5NxR9x0KEXDvH3nqp/MJ9gJmpqzxesQEWKbuQSAON2VyQ2P+t4Jtm9CMwOQ0agTTGXVkyHysg+4PiBFzzwLfiXKdSWL8C7bYO/aVfmnyTbxLEc7EFm7kdI7ma9DPp1+cfUXUprLA4/+tLiEN+43RHa+/HJV7QqNm0eU+UNezFkshnjMDIMQawuSVgi2WBMvAdCj4h2glHmJcOpCc3of80mXVB1wzUPE/jot+FLKAr5j5WpM8c9+RhA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=O1diHf7899e55Zkfa9eDlvvGRvX9RxwYA/ufkCOkIiA=; b=q2nPTSyiuawi2gWXCaazGjt/WD8eVh6glzupZkaBQPVwE7w4ofVB4NLZZ1bDxtcuKESIqfw5EAJGj5X3YbPOiie7MiHLlgCRk+JRqMlGgOxSj+/8bLnIlJ914pdsx/fd2JgdMc8pOETny+D3dSqC9iFJ0JCXUzrLUnEn662gc9E= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from VI1PR04MB5136.eurprd04.prod.outlook.com (2603:10a6:803:55::19) by AM0PR04MB5154.eurprd04.prod.outlook.com (2603:10a6:208:c4::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5588.17; Thu, 8 Sep 2022 16:48:39 +0000 Received: from VI1PR04MB5136.eurprd04.prod.outlook.com ([fe80::3412:9d57:ec73:fef3]) by VI1PR04MB5136.eurprd04.prod.outlook.com ([fe80::3412:9d57:ec73:fef3%5]) with mapi id 15.20.5588.017; Thu, 8 Sep 2022 16:48:39 +0000 From: Vladimir Oltean To: netdev@vger.kernel.org Cc: "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Xiaoliang Yang , Claudiu Manoil , Alexandre Belloni , UNGLinuxDriver@microchip.com, Andrew Lunn , Vivien Didelot , Florian Fainelli , Maxim Kochetkov , Colin Foster , Richie Pearn , linux-kernel@vger.kernel.org Subject: [PATCH net-next 02/14] net: mscc: ocelot: make access to STAT_VIEW sleepable again Date: Thu, 8 Sep 2022 19:48:04 +0300 Message-Id: <20220908164816.3576795-3-vladimir.oltean@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220908164816.3576795-1-vladimir.oltean@nxp.com> References: <20220908164816.3576795-1-vladimir.oltean@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BEXP281CA0009.DEUP281.PROD.OUTLOOK.COM (2603:10a6:b10::19) To VI1PR04MB5136.eurprd04.prod.outlook.com (2603:10a6:803:55::19) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: dc2c82d1-3b63-42bb-ba7d-08da91b9f507 X-MS-TrafficTypeDiagnostic: AM0PR04MB5154:EE_ X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: aVIHehMO1FKt2do/2qwjJm1lmeCNKH9wTMNabhwR2PIPpiKkB58sgNnd6783zpWe+YFxVoO717lyWXP3ofiOre2irenWt4jFW9FMAblUZ50sCXb6X6KS00vM/DDOKwuw8wa8c40dipeTTCszYRMIzsUBnGSP9Gex4cuFiOPi3+KxuJHrBZDADxsiROUrusN83jEe6HJ0l2n9QpRODJBg0+wDLaFFdZDbxT5UbWaPYs7UM7UgNQypH9Tc5sk+asrN2qNBgGH0hRj/fjNIlCu58F6xcVrOUw3Vgx6K/zQ6s6PEK39bOb50zwniVr7p2f63ytqvjYTad3SAOBxOxtG0tJeI7ybVQb5Myv4fp9N/k5blnovoSYgB3cIvdbQlxQH9xbpm67xEr4Q5GlYgebiV7bB2F2jdGdR4+dMpZ1Wvxz3H/5cvRXHER1QfjhFxNkbybJ9CvK++YZIwpSIdzv/ZGeVgI3reSfr4HH5y43mzJB/GaXX7NzU4CTk6cxD7B9xpdaYl2vmxc77U+ogaiJjQSPPWmTLdws3cDDM9sz+xKMgBDSVExDPHdh3njXN5k0phNtorsG0m7wZh3TRmAApOTUJKGm+PqmdzQ+vZvqRQspFFvwZidtOiDgrvB3ZLXkUR9xG8sIRz1z8kwoI+m+E8hjx5qH0TugfGbjzVGOMWvzr+FtcqrMf06F0ZTCcEHTRybF0uSEk85iGojp3mvzI0WLMRAKRguPjWYHawbTV7Ellxc+ALSCpJWrxbCVfVZGVF7sQD+U279iAOX21t91pV8Q== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5136.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230016)(4636009)(376002)(346002)(136003)(396003)(39860400002)(366004)(186003)(6506007)(41300700001)(1076003)(6512007)(6666004)(478600001)(6486002)(2616005)(26005)(52116002)(38100700002)(86362001)(38350700002)(5660300002)(83380400001)(54906003)(316002)(44832011)(4326008)(8676002)(2906002)(8936002)(66476007)(66556008)(66946007)(6916009)(7416002)(36756003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?lAxqABXlqdQStPiznVOSwhQ7KgMAy++03GeY/rja0w1eyMsG+3z92hFZD34U?= =?us-ascii?Q?XGslVIBPtMrbb4gcdxOCQqzhaqPXsGu1FkvYKMojlVeLYIgaRQ6gfpjIz3Im?= =?us-ascii?Q?4SqUs8oXcCcMoPHuHHQpx015UdfPGA+XSrteEsNHjF4vnKyfqWThlqC26YKl?= =?us-ascii?Q?o033sYJ/CQSnvdCI+1BWyySIAR0hyn1THKpXaeXfz13saZIyFIuXW5UREez1?= =?us-ascii?Q?qRbMSHRUWjYm5CUkH5fTub76g5RBD+BUVZe9P5WY8Bwq4hKJqMT8o7pSkhxw?= =?us-ascii?Q?+Keg05g6KLrU0AIe61AraafWASha5ZQFu3taJqfYoeYJFq9tDpxS+tJPO4se?= =?us-ascii?Q?uC1XsUh27kjt3pRm7+xQ91TGXqxFngRNF0q+igUUOn82SFtvuhTSZBeQgxq4?= =?us-ascii?Q?QGfASGvlcVZmVYoUNWlAOckzQHija7pfkSnSVB1ifq/kGMlYHhOFuzTKdaOs?= =?us-ascii?Q?Xqmmj5At8SheOJoLXECa3bhPdkPo3VKHr3idxdvpt15R+y/2ZYu7F2hqNLFk?= =?us-ascii?Q?s+UQWxDHFf7SYSwxflxq5sngAobSOjD0umBBMj7BkCVeQx62UuZ1GxLIhVNz?= =?us-ascii?Q?OYbJcgf4SzsOSv1r5lG7IKhrLUx+acU6IV1AwGl5lPz1tk0wrRyl2EZgh1dF?= =?us-ascii?Q?AcRWLlpx9AxNsFVRVp0dGc17vakmSwyRJOZpbQXx1jAgchfJZrCVjNUxthkZ?= =?us-ascii?Q?Uy0HZ2NOsqQGrnUUS4S9jK0dFFUOqK+s3w00nldp851C/UOni3heShFP29hl?= =?us-ascii?Q?nPgfMyglQ+a+DD7yCBd91CumuGZfFxtR2XzVLF8oLKY+pl4PhItJU8pjvoIy?= =?us-ascii?Q?2eqFACsrOAzfyKmcGlatPhQk7yzym3tbDBIjhTSie0tHWAen5esXEsij7JOC?= =?us-ascii?Q?ffmU8Ky7QwYTZmpjLLBSXrRbcftGVV5O5RruvtzhPnfKQx7EPJ5aX1Oo3gc9?= =?us-ascii?Q?6bmZG7LxKPOlT3atHKlnD3QReHY36KCrGyHTD7OtztGEBFOLscoweYJAyhw2?= =?us-ascii?Q?rKJlDAPqXQRnwG4ke2W1bGj3xrpdBNraGyxIIwGSsutildYeheSf9Up24+3X?= =?us-ascii?Q?3Jzfl7KweuCKdmEqHEUDj6olWQ59kVt1y/Gjm5YhIe3TKxSrK84yBOpbg1bF?= =?us-ascii?Q?FEBDeyz76PiRjO9ZlXHZSsP1dwpBlgvf5KYEevQSafThTvreL3fSJZp/Jr/u?= =?us-ascii?Q?YtIKQRs/rQftmEekJpfT5RB+THSHSD0/bbahznSszzi87S7zV1GADzToyOEK?= =?us-ascii?Q?Sgg2Gv8eyNVjJubGeWjS9TUMWomNKUmSu3oCvrqTH6Y0nIJ3yG9aQ9q6hi2k?= =?us-ascii?Q?8xZbllMsUlbB9OolB864AszQ9JPmTL1rl9bnH6HYRzOszUSeYO8wnF/9WKS2?= =?us-ascii?Q?oxwOSgZVH5xGQCbfn8DmC+qeQqN/2GbBh2X7yXGA4i9006ekanfzySybZGk6?= =?us-ascii?Q?GFDkDL1g1J/s8MRFYFmu3w0BDMbKu1kyejvHXf8lg/vcO5ZNhF7lARhaXmVk?= =?us-ascii?Q?+Hs6dvJkp4phzlDuIKH4W87MfbxD1QSTOk3zyjdqYat0AtvGmDhosbsucIUc?= =?us-ascii?Q?X/3FosgXnvPje/Aaw8PXHaev8d1Kd2y3vg/UHcgoXAKgTscEaDXjuftxTCcQ?= =?us-ascii?Q?AA=3D=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: dc2c82d1-3b63-42bb-ba7d-08da91b9f507 X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5136.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Sep 2022 16:48:29.3966 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: Hc7ssOn7npPAsbNKLtAm+EMiFBkGPbyk80DZ0Y2CjCBHCVOb+xtoSyPTuM73JMP8dxR+9AHaqlqs07tdCOC5Lg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR04MB5154 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" To support SPI-controlled switches in the future, access to SYS_STAT_CFG_STAT_VIEW needs to be done outside of any spinlock protected region, but it still needs to be serialized (by a mutex). Split the ocelot->stats_lock spinlock into a mutex that serializes indirect access to hardware registers (ocelot->stat_view_lock) and a spinlock that serializes access to the u64 ocelot->stats array. Signed-off-by: Vladimir Oltean --- drivers/net/dsa/ocelot/felix_vsc9959.c | 4 +-- drivers/net/ethernet/mscc/ocelot.c | 48 ++++++++++++++++++++------ include/soc/mscc/ocelot.h | 9 +++-- 3 files changed, 45 insertions(+), 16 deletions(-) diff --git a/drivers/net/dsa/ocelot/felix_vsc9959.c b/drivers/net/dsa/ocelo= t/felix_vsc9959.c index 10db0b69b681..18543bee793b 100644 --- a/drivers/net/dsa/ocelot/felix_vsc9959.c +++ b/drivers/net/dsa/ocelot/felix_vsc9959.c @@ -2519,7 +2519,7 @@ static void vsc9959_psfp_sgi_table_del(struct ocelot = *ocelot, static void vsc9959_psfp_counters_get(struct ocelot *ocelot, u32 index, struct felix_stream_filter_counters *counters) { - spin_lock(&ocelot->stats_lock); + mutex_lock(&ocelot->stat_view_lock); =20 ocelot_rmw(ocelot, SYS_STAT_CFG_STAT_VIEW(index), SYS_STAT_CFG_STAT_VIEW_M, @@ -2538,7 +2538,7 @@ static void vsc9959_psfp_counters_get(struct ocelot *= ocelot, u32 index, SYS_STAT_CFG_STAT_CLEAR_SHOT(0x10), SYS_STAT_CFG); =20 - spin_unlock(&ocelot->stats_lock); + mutex_unlock(&ocelot->stat_view_lock); } =20 static int vsc9959_psfp_filter_add(struct ocelot *ocelot, int port, diff --git a/drivers/net/ethernet/mscc/ocelot.c b/drivers/net/ethernet/mscc= /ocelot.c index dddaffdaad9a..a677a18239c5 100644 --- a/drivers/net/ethernet/mscc/ocelot.c +++ b/drivers/net/ethernet/mscc/ocelot.c @@ -1870,12 +1870,13 @@ void ocelot_get_strings(struct ocelot *ocelot, int = port, u32 sset, u8 *data) } EXPORT_SYMBOL(ocelot_get_strings); =20 -/* Caller must hold &ocelot->stats_lock */ +/* Read the counters from hardware and keep them in region->buf. + * Caller must hold &ocelot->stat_view_lock. + */ static int ocelot_port_update_stats(struct ocelot *ocelot, int port) { - unsigned int idx =3D port * OCELOT_NUM_STATS; struct ocelot_stats_region *region; - int err, j; + int err; =20 /* Configure the port to read the stats from */ ocelot_write(ocelot, SYS_STAT_CFG_STAT_VIEW(port), SYS_STAT_CFG); @@ -1885,7 +1886,21 @@ static int ocelot_port_update_stats(struct ocelot *o= celot, int port) region->count); if (err) return err; + } + + return 0; +} =20 +/* Transfer the counters from region->buf to ocelot->stats. + * Caller must hold &ocelot->stat_view_lock and &ocelot->stats_lock. + */ +static void ocelot_port_transfer_stats(struct ocelot *ocelot, int port) +{ + unsigned int idx =3D port * OCELOT_NUM_STATS; + struct ocelot_stats_region *region; + int j; + + list_for_each_entry(region, &ocelot->stats_regions, node) { for (j =3D 0; j < region->count; j++) { u64 *stat =3D &ocelot->stats[idx + j]; u64 val =3D region->buf[j]; @@ -1898,8 +1913,6 @@ static int ocelot_port_update_stats(struct ocelot *oc= elot, int port) =20 idx +=3D region->count; } - - return err; } =20 static void ocelot_check_stats_work(struct work_struct *work) @@ -1907,15 +1920,21 @@ static void ocelot_check_stats_work(struct work_str= uct *work) struct delayed_work *del_work =3D to_delayed_work(work); struct ocelot *ocelot =3D container_of(del_work, struct ocelot, stats_work); - int i, err; + int port, err; =20 - spin_lock(&ocelot->stats_lock); - for (i =3D 0; i < ocelot->num_phys_ports; i++) { - err =3D ocelot_port_update_stats(ocelot, i); + mutex_lock(&ocelot->stat_view_lock); + + for (port =3D 0; port < ocelot->num_phys_ports; port++) { + err =3D ocelot_port_update_stats(ocelot, port); if (err) break; + + spin_lock(&ocelot->stats_lock); + ocelot_port_transfer_stats(ocelot, port); + spin_unlock(&ocelot->stats_lock); } - spin_unlock(&ocelot->stats_lock); + + mutex_unlock(&ocelot->stat_view_lock); =20 if (err) dev_err(ocelot->dev, "Error %d updating ethtool stats\n", err); @@ -1928,11 +1947,15 @@ void ocelot_get_ethtool_stats(struct ocelot *ocelot= , int port, u64 *data) { int i, err; =20 - spin_lock(&ocelot->stats_lock); + mutex_lock(&ocelot->stat_view_lock); =20 /* check and update now */ err =3D ocelot_port_update_stats(ocelot, port); =20 + spin_lock(&ocelot->stats_lock); + + ocelot_port_transfer_stats(ocelot, port); + /* Copy all supported counters */ for (i =3D 0; i < OCELOT_NUM_STATS; i++) { int index =3D port * OCELOT_NUM_STATS + i; @@ -1945,6 +1968,8 @@ void ocelot_get_ethtool_stats(struct ocelot *ocelot, = int port, u64 *data) =20 spin_unlock(&ocelot->stats_lock); =20 + mutex_unlock(&ocelot->stat_view_lock); + if (err) dev_err(ocelot->dev, "Error %d updating ethtool stats\n", err); } @@ -3396,6 +3421,7 @@ int ocelot_init(struct ocelot *ocelot) return -ENOMEM; =20 spin_lock_init(&ocelot->stats_lock); + mutex_init(&ocelot->stat_view_lock); mutex_init(&ocelot->ptp_lock); mutex_init(&ocelot->mact_lock); mutex_init(&ocelot->fwd_domain_lock); diff --git a/include/soc/mscc/ocelot.h b/include/soc/mscc/ocelot.h index 99d679235070..e85fb3b15524 100644 --- a/include/soc/mscc/ocelot.h +++ b/include/soc/mscc/ocelot.h @@ -901,12 +901,15 @@ struct ocelot { =20 struct ocelot_psfp_list psfp; =20 - /* Workqueue to check statistics for overflow with its lock */ - spinlock_t stats_lock; - u64 *stats; + /* Workqueue to check statistics for overflow */ struct delayed_work stats_work; struct workqueue_struct *stats_queue; + /* Lock for serializing access to the statistics array */ + spinlock_t stats_lock; + u64 *stats; =20 + /* Lock for serializing indirect access to STAT_VIEW registers */ + struct mutex stat_view_lock; /* Lock for serializing access to the MAC table */ struct mutex mact_lock; /* Lock for serializing forwarding domain changes */ --=20 2.34.1 From nobody Mon Apr 6 08:10:03 2026 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2D099C38145 for ; Thu, 8 Sep 2022 16:52:51 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231965AbiIHQws (ORCPT ); Thu, 8 Sep 2022 12:52:48 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45180 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231846AbiIHQwB (ORCPT ); Thu, 8 Sep 2022 12:52:01 -0400 Received: from EUR02-VE1-obe.outbound.protection.outlook.com (mail-eopbgr20087.outbound.protection.outlook.com [40.107.2.87]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id BD208E9004; Thu, 8 Sep 2022 09:50:18 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=WG2h5tA/2f3ztUmhxbmwyDK+mG9/c2t7uHOJbYrfEoG7ygHYZ65sNhyh4/4bcunk4wMOknuvconnJshyGfBPeb3Tjf1CDzAnDCJZzzqk/43B2sxIyRXfV4FzC+BtJtXqbxmOMLdrVcPSqCFcmdLm5pUJzzTbOXmSQ4EXNvBjO6yjP3RqPky3OQszp//Ev2Lnd94J8yQ+zY0p7iGUFlLthM10WuOGBiOBI47AbQJWO4jQmMZHeYm2iLTA1LM9LzvHpzOsGGipeon7m+sFyC873NBr+7mwJ0fcO+jCMDxRCV/XzpLFJBKiLYZzKnmugGpYKHkAqrMXjfaSbVybiRJtfw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=1JBZxIYHganXC9206W1lSDRFR3ltuJR9gMupEa8vO1U=; b=QqO/yHOCZEP/p4xYK0fGqAKFxQBOjTP9msqmJppKwvWzNkBm9PZS0FoE55oeO68LnLvWMf/Ar4g9mG/JWmlTSMGZxwL9BFV/7aKT6k7aN1Dx/0w7az0wuuCTwixb+tEJfz3OH/VbR/IHH82+hzdnouzVviyq5a8uTSZ5G72N3z9mHSAOpDWFTDM2IsmTK97/uuzKpTdgzVsRwmAj0iJizYHlV9gxsvIXkqmk0sod6s0T1tSuv29xV1x3NbLEoiBHv8hEAhjM3qLpI/L55rOPRMvkt6EREp8Rbn2pkcVS/omrWWbSnQRAxQqB1pBmBqR+9Taybr9cQi+pbPGbs9Szfg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=1JBZxIYHganXC9206W1lSDRFR3ltuJR9gMupEa8vO1U=; b=GFZuy9Yb/YVekqMHYKZ6ndWiW9KW1yomZNPHq8Tk1oQOm2McupSg3SNLBnkjf3gOMDvNFqg+PZwGpjNidaC3/k3rC//xuH5mT93WcGCHc/yMRQULy9MnEL1ZtCeWDgZ/rXMp5ycBxcCx3hgPD2HKcj6mtK4s4m3vTcHiSGOtg4Y= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from VI1PR04MB5136.eurprd04.prod.outlook.com (2603:10a6:803:55::19) by AM0PR04MB5154.eurprd04.prod.outlook.com (2603:10a6:208:c4::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5588.17; Thu, 8 Sep 2022 16:48:40 +0000 Received: from VI1PR04MB5136.eurprd04.prod.outlook.com ([fe80::3412:9d57:ec73:fef3]) by VI1PR04MB5136.eurprd04.prod.outlook.com ([fe80::3412:9d57:ec73:fef3%5]) with mapi id 15.20.5588.017; Thu, 8 Sep 2022 16:48:40 +0000 From: Vladimir Oltean To: netdev@vger.kernel.org Cc: "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Xiaoliang Yang , Claudiu Manoil , Alexandre Belloni , UNGLinuxDriver@microchip.com, Andrew Lunn , Vivien Didelot , Florian Fainelli , Maxim Kochetkov , Colin Foster , Richie Pearn , linux-kernel@vger.kernel.org Subject: [PATCH net-next 03/14] net: dsa: felix: check the 32-bit PSFP stats against overflow Date: Thu, 8 Sep 2022 19:48:05 +0300 Message-Id: <20220908164816.3576795-4-vladimir.oltean@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220908164816.3576795-1-vladimir.oltean@nxp.com> References: <20220908164816.3576795-1-vladimir.oltean@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BEXP281CA0009.DEUP281.PROD.OUTLOOK.COM (2603:10a6:b10::19) To VI1PR04MB5136.eurprd04.prod.outlook.com (2603:10a6:803:55::19) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 3336d1ce-17d0-4d18-9a21-08da91b9f5cd X-MS-TrafficTypeDiagnostic: AM0PR04MB5154:EE_ X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: xIunJIi7gl6/F7tVGOQdSIahRZ3EDP1I4ZnzxI2Vvn0hInfsRLoacuV1MljTJP2+lY5EClMrl7PbwpdWepTsYbioEsCvcU29QcC2OyJUUHE3PqmylrmlDxd+fetbUwYQaFcvB1So9BV1x8qd5IsMXEgSyksq0sPQSpf9AufA/kxpl7atPgZ8RxRr6L6mDDBHaIUbcbsRj0rlNfxkK6oneX8cLCdu5UoXgdc78kNW49VIa+/r227+qFxli9MUBldyn47e01USDpsPKjU+CEl11+UxEywv8d4u+ay71hTZJV0VYa8834dRVw+zZNhlX8LrXaNVS0lv4EXEQqkV8vpqeHMRQd1pKeMlJBm/S2EwHw0BAyS/dTSiSLAo6LRd0LFLdguMJ+Q8jD6T+YtRDBZWSEI+7hcHHIL7qIo3rU8Dw8/sQueR6E8mNuSVzQkF0XukItUOmWHSulMfRQ9MDit+iyBiJ0zH5dBw6iFJyaWz3JnXGqWbvJ8ytsizICbZGcuq5G9+LF3j4S1kVhuz5xdjpOYfu+QIhytrMct4oYmHWr/iYKHZV/hHCTQaNya7wvRnMe9igWQPER8+w61orwR9b2h+U1Qb6BG1JFZHoUbYTWcfaUPirDGNT1+IMt7g7g8UF4oQAoa0QNCi3Qn74UIyNqu9dZa2ppSMxdIu5fVgD4IfvqW3rZt3dfLbMzA/hC0E/rvv6OmBkqACCqF7C2vqj+Ffvxm4DDIvMohSxH9HYXINgIig6SNXfkTCyk0J4iJdMFGIHnu3bu7H02dfkSE9CQ== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5136.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230016)(4636009)(376002)(346002)(136003)(396003)(39860400002)(366004)(186003)(6506007)(41300700001)(1076003)(6512007)(6666004)(478600001)(6486002)(2616005)(26005)(52116002)(38100700002)(86362001)(38350700002)(5660300002)(83380400001)(54906003)(316002)(44832011)(4326008)(8676002)(2906002)(8936002)(66476007)(66556008)(66946007)(6916009)(7416002)(36756003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?Lo4VXO0cjvWR+9AJsF99lNNvn/pG7UZgdCfVNr1b2GoTCTvt9vzexChCNBL4?= =?us-ascii?Q?6YnoKlUWXx5RbsBZ/SNDm5c+GyHdgcmtpCjXE7eTAkqddyi5x3bSSs8YUpIf?= =?us-ascii?Q?QPeK8vUoxKWllZ3EUVCvmscJ42CH8wB6j8+YieDZt7beg0hY+2nOFIXHXvNv?= =?us-ascii?Q?/2os6ZK5z7bAVgNSHtEr4dkJT09cMY1kEEpXegyzzMuCJEuFbqzh+l/og2gj?= =?us-ascii?Q?dYPKQC8UVO1fF7z4SHp0HHRix4CxbUKe8nLKdl2SzGYwUwweqiygMrIAQfT8?= =?us-ascii?Q?D/Ct7XFFQ2rx1AaL+sSJI6vl9nB8xEXf3MQVAGDxv8jIHhf4dV/3ZoWzqvn5?= =?us-ascii?Q?cn8an3GJRoBZA+Br5gjJZks6k8aH4bUHtx8UAXyFehBf54bO2r3HKmPkQROX?= =?us-ascii?Q?csoplZ89pRdfTC7ZTzcdZmyA6UvJ6iLHoYV/O9mFrFg+1ZduwSZshZqSHbgR?= =?us-ascii?Q?NlVIp7EWjLwg81/58ZR8/SeouBTfYZ3Vb8aIFu3RNy1Qc43HajR4WP67GgAw?= =?us-ascii?Q?/qvMCJ0nfCeBupZEhmdp7WNlxSv9Tmo7sqREvhDyRdr4ZSIqHRCs2yB0duCw?= =?us-ascii?Q?4cVY532aHRi0n0hkUh9ncYh4lBKPy7enEG/UaEZIHxenXs95Izg/XInbtGRx?= =?us-ascii?Q?RSIopUWm6EfsOzm+H2B0pzCwkYMcBcE8RQmkSAwEwupd1gOeoAtXeJzITGCy?= =?us-ascii?Q?zUu/WhPVbfaG9nS7f0DIvSL0/nAo+5NWMMyfxqKR/yha3lV3uLlrT1K8YIoG?= =?us-ascii?Q?FbqDNYvaYUrns6BSDSE8VzVNfI5OAzN6IOgBjOZHmuhOUZ+Cmo5D7KEw7ayk?= =?us-ascii?Q?J+QtRaC2qF9Rt3xsF84ARq0kqsH5IN3eXdyg/0e8JkpJUPFcPAy4lscJI6t3?= =?us-ascii?Q?xkqmjzmP0DHxeUmKUu38tcwrWXVKVCD4h77dEXFuyuN0/GxR+oxUlSDRfPv6?= =?us-ascii?Q?tULKTmR9ekXkVSetLegrZQauduSfmnMGrPS/RrPKSzsY2hkFOZQwXBisNjvk?= =?us-ascii?Q?vrJY2ffSC3Lay1IO3Sq5nh4ToA7nypUplEGKZwO6fAnsHekmOy3lqHegCgk3?= =?us-ascii?Q?cjRTpG3ojWQXTCGKAThmnXebxY5V05bgZaXZ7BorpU5BsYieuJ0rxLDSc9oY?= =?us-ascii?Q?4slUSXgIX+a+WVHD1TGsgq1KjeBHztZsScTRMuNFzW1Hfpo2rwPup5vT/Cbu?= =?us-ascii?Q?SfxNaYvO9Y22500n3jNWT5mMqh9CTFFsFd+OwAlI1g6JOErHsMvww5mT9pa2?= =?us-ascii?Q?vfN7nw6ggwhcxtIJ6ThbyNnTkOyQEKnl+u99Ikw+MDPT0ViKaXWyMgoHmi6w?= =?us-ascii?Q?efNwnbfMzRUwuQjQQogKRvWTZELu7RVQVy0qjItpxZ4OTFA9Lmeuif7KcSdq?= =?us-ascii?Q?TP2l5n9vVXsNWJNZasgZ/WFbd2QSUzJ3cfLfj045cHo4Yf4Df+RRW9rF0wJ3?= =?us-ascii?Q?F3HduEpCBtWV9UImPTOe/t+ShlqeISZnRcA22NAkDnPEjL9A0Hv5Lct16/XZ?= =?us-ascii?Q?JAyWIC86dt2Tmroi+hEOEjmueE97XFd3Ij8gY/99KWZs8IqK6sAUsfNT/Jpl?= =?us-ascii?Q?Khfya/u25B4wi71ougdGl0PbQnltvF/cv0BqOGabSmhDX2iWXdCZcRpSM0eH?= =?us-ascii?Q?Uw=3D=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3336d1ce-17d0-4d18-9a21-08da91b9f5cd X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5136.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Sep 2022 16:48:30.6934 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: HFNJczFwNvhnGA8+LzfWBCYEgxi7wlSxzkwYJS2zDGsM/e8GRNocqcCB3Lo5OoZ8EK9z2jmlNxsiaDJi7SB03Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR04MB5154 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" The Felix PSFP counters suffer from the same problem as the ocelot ndo_get_stats64 ones - they are 32-bit, so they can easily overflow and this can easily go undetected. Add a custom hook in ocelot_check_stats_work() through which driver specific actions can be taken, and update the stats for the existing PSFP filters from that hook. Previously, vsc9959_psfp_filter_add() and vsc9959_psfp_filter_del() were serialized with respect to each other via rtnl_lock(). However, with the new entry point into &psfp->sfi_list coming from the periodic worker, we now need an explicit mutex to serialize access to these lists. We used to keep a struct felix_stream_filter_counters on stack, through which vsc9959_psfp_stats_get() - a FLOW_CLS_STATS callback - would retrieve data from vsc9959_psfp_counters_get(). We need to become smarter about that in 3 ways: - we need to keep a persistent set of counters for each stream instead of keeping them on stack - we need to promote those counters from u32 to u64, and create a procedure that properly keeps 64-bit counters. Since we clear the hardware counters anyway, and we poll every 2 seconds, a simple increment of a u64 counter with a u32 value will perfectly do the job. - FLOW_CLS_STATS also expect incremental counters, so we also need to zeroize our u64 counters every time sch_flower calls us Signed-off-by: Vladimir Oltean --- drivers/net/dsa/ocelot/felix_vsc9959.c | 131 +++++++++++++++++-------- drivers/net/ethernet/mscc/ocelot.c | 3 + include/soc/mscc/ocelot.h | 3 + 3 files changed, 94 insertions(+), 43 deletions(-) diff --git a/drivers/net/dsa/ocelot/felix_vsc9959.c b/drivers/net/dsa/ocelo= t/felix_vsc9959.c index 18543bee793b..b56aad84b6cb 100644 --- a/drivers/net/dsa/ocelot/felix_vsc9959.c +++ b/drivers/net/dsa/ocelot/felix_vsc9959.c @@ -1991,7 +1991,15 @@ struct felix_stream { u32 ssid; }; =20 +struct felix_stream_filter_counters { + u64 match; + u64 not_pass_gate; + u64 not_pass_sdu; + u64 red; +}; + struct felix_stream_filter { + struct felix_stream_filter_counters stats; struct list_head list; refcount_t refcount; u32 index; @@ -2006,13 +2014,6 @@ struct felix_stream_filter { u32 maxsdu; }; =20 -struct felix_stream_filter_counters { - u32 match; - u32 not_pass_gate; - u32 not_pass_sdu; - u32 red; -}; - struct felix_stream_gate { u32 index; u8 enable; @@ -2516,31 +2517,6 @@ static void vsc9959_psfp_sgi_table_del(struct ocelot= *ocelot, } } =20 -static void vsc9959_psfp_counters_get(struct ocelot *ocelot, u32 index, - struct felix_stream_filter_counters *counters) -{ - mutex_lock(&ocelot->stat_view_lock); - - ocelot_rmw(ocelot, SYS_STAT_CFG_STAT_VIEW(index), - SYS_STAT_CFG_STAT_VIEW_M, - SYS_STAT_CFG); - - counters->match =3D ocelot_read(ocelot, SYS_COUNT_SF_MATCHING_FRAMES); - counters->not_pass_gate =3D ocelot_read(ocelot, - SYS_COUNT_SF_NOT_PASSING_FRAMES); - counters->not_pass_sdu =3D ocelot_read(ocelot, - SYS_COUNT_SF_NOT_PASSING_SDU); - counters->red =3D ocelot_read(ocelot, SYS_COUNT_SF_RED_FRAMES); - - /* Clear the PSFP counter. */ - ocelot_write(ocelot, - SYS_STAT_CFG_STAT_VIEW(index) | - SYS_STAT_CFG_STAT_CLEAR_SHOT(0x10), - SYS_STAT_CFG); - - mutex_unlock(&ocelot->stat_view_lock); -} - static int vsc9959_psfp_filter_add(struct ocelot *ocelot, int port, struct flow_cls_offload *f) { @@ -2565,6 +2541,8 @@ static int vsc9959_psfp_filter_add(struct ocelot *oce= lot, int port, return ret; } =20 + mutex_lock(&psfp->lock); + flow_action_for_each(i, a, &f->rule->action) { switch (a->id) { case FLOW_ACTION_GATE: @@ -2606,6 +2584,7 @@ static int vsc9959_psfp_filter_add(struct ocelot *oce= lot, int port, sfi.maxsdu =3D a->police.mtu; break; default: + mutex_unlock(&psfp->lock); return -EOPNOTSUPP; } } @@ -2675,6 +2654,8 @@ static int vsc9959_psfp_filter_add(struct ocelot *oce= lot, int port, goto err; } =20 + mutex_unlock(&psfp->lock); + return 0; =20 err: @@ -2684,6 +2665,8 @@ static int vsc9959_psfp_filter_add(struct ocelot *oce= lot, int port, if (sfi.fm_valid) ocelot_vcap_policer_del(ocelot, sfi.fmid); =20 + mutex_unlock(&psfp->lock); + return ret; } =20 @@ -2691,18 +2674,22 @@ static int vsc9959_psfp_filter_del(struct ocelot *o= celot, struct flow_cls_offload *f) { struct felix_stream *stream, tmp, *stream_entry; + struct ocelot_psfp_list *psfp =3D &ocelot->psfp; static struct felix_stream_filter *sfi; - struct ocelot_psfp_list *psfp; =20 - psfp =3D &ocelot->psfp; + mutex_lock(&psfp->lock); =20 stream =3D vsc9959_stream_table_get(&psfp->stream_list, f->cookie); - if (!stream) + if (!stream) { + mutex_unlock(&psfp->lock); return -ENOMEM; + } =20 sfi =3D vsc9959_psfp_sfi_table_get(&psfp->sfi_list, stream->sfid); - if (!sfi) + if (!sfi) { + mutex_unlock(&psfp->lock); return -ENOMEM; + } =20 if (sfi->sg_valid) vsc9959_psfp_sgi_table_del(ocelot, sfi->sgid); @@ -2728,27 +2715,83 @@ static int vsc9959_psfp_filter_del(struct ocelot *o= celot, stream_entry->ports); } =20 + mutex_unlock(&psfp->lock); + return 0; } =20 +static void vsc9959_update_sfid_stats(struct ocelot *ocelot, + struct felix_stream_filter *sfi) +{ + struct felix_stream_filter_counters *s =3D &sfi->stats; + u32 match, not_pass_gate, not_pass_sdu, red; + u32 sfid =3D sfi->index; + + lockdep_assert_held(&ocelot->stat_view_lock); + + ocelot_rmw(ocelot, SYS_STAT_CFG_STAT_VIEW(sfid), + SYS_STAT_CFG_STAT_VIEW_M, + SYS_STAT_CFG); + + match =3D ocelot_read(ocelot, SYS_COUNT_SF_MATCHING_FRAMES); + not_pass_gate =3D ocelot_read(ocelot, SYS_COUNT_SF_NOT_PASSING_FRAMES); + not_pass_sdu =3D ocelot_read(ocelot, SYS_COUNT_SF_NOT_PASSING_SDU); + red =3D ocelot_read(ocelot, SYS_COUNT_SF_RED_FRAMES); + + /* Clear the PSFP counter. */ + ocelot_write(ocelot, + SYS_STAT_CFG_STAT_VIEW(sfid) | + SYS_STAT_CFG_STAT_CLEAR_SHOT(0x10), + SYS_STAT_CFG); + + s->match +=3D match; + s->not_pass_gate +=3D not_pass_gate; + s->not_pass_sdu +=3D not_pass_sdu; + s->red +=3D red; +} + +/* Caller must hold &ocelot->stat_view_lock */ +static void vsc9959_update_stats(struct ocelot *ocelot) +{ + struct ocelot_psfp_list *psfp =3D &ocelot->psfp; + struct felix_stream_filter *sfi; + + mutex_lock(&psfp->lock); + + list_for_each_entry(sfi, &psfp->sfi_list, list) + vsc9959_update_sfid_stats(ocelot, sfi); + + mutex_unlock(&psfp->lock); +} + static int vsc9959_psfp_stats_get(struct ocelot *ocelot, struct flow_cls_offload *f, struct flow_stats *stats) { - struct felix_stream_filter_counters counters; - struct ocelot_psfp_list *psfp; + struct ocelot_psfp_list *psfp =3D &ocelot->psfp; + struct felix_stream_filter_counters *s; + static struct felix_stream_filter *sfi; struct felix_stream *stream; =20 - psfp =3D &ocelot->psfp; stream =3D vsc9959_stream_table_get(&psfp->stream_list, f->cookie); if (!stream) return -ENOMEM; =20 - vsc9959_psfp_counters_get(ocelot, stream->sfid, &counters); + sfi =3D vsc9959_psfp_sfi_table_get(&psfp->sfi_list, stream->sfid); + if (!sfi) + return -EINVAL; + + mutex_lock(&ocelot->stat_view_lock); + + vsc9959_update_sfid_stats(ocelot, sfi); + + s =3D &sfi->stats; + stats->pkts =3D s->match; + stats->drops =3D s->not_pass_gate + s->not_pass_sdu + s->red; =20 - stats->pkts =3D counters.match; - stats->drops =3D counters.not_pass_gate + counters.not_pass_sdu + - counters.red; + memset(s, 0, sizeof(*s)); + + mutex_unlock(&ocelot->stat_view_lock); =20 return 0; } @@ -2760,6 +2803,7 @@ static void vsc9959_psfp_init(struct ocelot *ocelot) INIT_LIST_HEAD(&psfp->stream_list); INIT_LIST_HEAD(&psfp->sfi_list); INIT_LIST_HEAD(&psfp->sgi_list); + mutex_init(&psfp->lock); } =20 /* When using cut-through forwarding and the egress port runs at a higher = data @@ -2850,6 +2894,7 @@ static const struct ocelot_ops vsc9959_ops =3D { .psfp_stats_get =3D vsc9959_psfp_stats_get, .cut_through_fwd =3D vsc9959_cut_through_fwd, .tas_clock_adjust =3D vsc9959_tas_clock_adjust, + .update_stats =3D vsc9959_update_stats, }; =20 static const struct felix_info felix_info_vsc9959 =3D { diff --git a/drivers/net/ethernet/mscc/ocelot.c b/drivers/net/ethernet/mscc= /ocelot.c index a677a18239c5..8e063322625a 100644 --- a/drivers/net/ethernet/mscc/ocelot.c +++ b/drivers/net/ethernet/mscc/ocelot.c @@ -1934,6 +1934,9 @@ static void ocelot_check_stats_work(struct work_struc= t *work) spin_unlock(&ocelot->stats_lock); } =20 + if (!err && ocelot->ops->update_stats) + ocelot->ops->update_stats(ocelot); + mutex_unlock(&ocelot->stat_view_lock); =20 if (err) diff --git a/include/soc/mscc/ocelot.h b/include/soc/mscc/ocelot.h index e85fb3b15524..bc6ca1be08f3 100644 --- a/include/soc/mscc/ocelot.h +++ b/include/soc/mscc/ocelot.h @@ -729,6 +729,7 @@ struct ocelot_ops { struct flow_stats *stats); void (*cut_through_fwd)(struct ocelot *ocelot); void (*tas_clock_adjust)(struct ocelot *ocelot); + void (*update_stats)(struct ocelot *ocelot); }; =20 struct ocelot_vcap_policer { @@ -766,6 +767,8 @@ struct ocelot_psfp_list { struct list_head stream_list; struct list_head sfi_list; struct list_head sgi_list; + /* Serialize access to the lists */ + struct mutex lock; }; =20 enum ocelot_sb { --=20 2.34.1 From nobody Mon Apr 6 08:10:03 2026 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 44537C38145 for ; Thu, 8 Sep 2022 16:51:42 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231556AbiIHQvj (ORCPT ); Thu, 8 Sep 2022 12:51:39 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47984 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231468AbiIHQuB (ORCPT ); Thu, 8 Sep 2022 12:50:01 -0400 Received: from EUR02-VE1-obe.outbound.protection.outlook.com (mail-eopbgr20087.outbound.protection.outlook.com [40.107.2.87]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C2C69120AA; Thu, 8 Sep 2022 09:49:35 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=hwvjeyx4VElShYlqy2XzUUwLtYyhBrvQBn1FAPhopGk/GxTaPVeNH2tmhk233zDjDtaRWMB/TxKSlEeNSV73/1KhN9A0qIxR0GKhlMLxpsrS2fKD6+uluWUsUT/MwHD9+nhaL1ElHV4WDEoWnufkJ5j80rjsRIGcUHZQu3irphdXy3chAEtREPT2O6Dv81Ln9sGMOYwJjAulSx5fMDLqwMTaeRV/n6LJ9taSr55NuU0bi3G9kpk9v5akrNgymLpBZS/O6dls1ADW9LW3k6f3zeeaIO+0wiaH6I1FxzbUcWAj85asLuQuoFWYZwm9hOgMzql8zHrGtsu1FtwRO9Mejg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=6JPN3KKEzoXiekZ0SGOifkdlMTJn/56/zD2mO4ND4tI=; b=D+Q+2yCbgrkSQUhiDVvmcPfcwJLydwto5kRs1pENG1PlG83kjODHWPU/p9tiHjp3tJU7VYzSa02rDt1pGIOEzZcSypUd+Ke7sptQC8UAnOPdTQru9HIymz8TPqDISdOnhTjFqYJxbKsmFgiBr4R2YwE4j9YDDDodttemQhwyipQHB5LT6ncgvgO3FeGpW3c8vffSsNmQrSEnOLFkKYxMQPM/Rx+hJiBLSyM6g9PPBmE40VI0wjVu5dae+5zeyIH43131anhNgOdUcnMT6LIvdwuMn6f0Gzg4IMXmNVQsLJZ9TzjMo/nFpryMkpoxWIX5xcq5lMCLZ9zUzY+nGRmQfg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=6JPN3KKEzoXiekZ0SGOifkdlMTJn/56/zD2mO4ND4tI=; b=Zd7qBTXnifKqefYs9ShyYTGhe1PLb+B8OtUBvpPYzW12AbbrHSMKaMkIqO7wWRGUeQBKc2wSRcWNgsI3zbu54iVwnAvQ0xcZhTOT8HDWBIDMoNH34h5KNmb/VVByzKUgf+pzGOrxzVNNuULayo39w2AViprkSkaTe02uF553Zc4= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from VI1PR04MB5136.eurprd04.prod.outlook.com (2603:10a6:803:55::19) by AM0PR04MB5154.eurprd04.prod.outlook.com (2603:10a6:208:c4::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5588.17; Thu, 8 Sep 2022 16:48:45 +0000 Received: from VI1PR04MB5136.eurprd04.prod.outlook.com ([fe80::3412:9d57:ec73:fef3]) by VI1PR04MB5136.eurprd04.prod.outlook.com ([fe80::3412:9d57:ec73:fef3%5]) with mapi id 15.20.5588.017; Thu, 8 Sep 2022 16:48:45 +0000 From: Vladimir Oltean To: netdev@vger.kernel.org Cc: "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Xiaoliang Yang , Claudiu Manoil , Alexandre Belloni , UNGLinuxDriver@microchip.com, Andrew Lunn , Vivien Didelot , Florian Fainelli , Maxim Kochetkov , Colin Foster , Richie Pearn , linux-kernel@vger.kernel.org Subject: [PATCH net-next 04/14] net: mscc: ocelot: report FIFO drop counters through stats->rx_dropped Date: Thu, 8 Sep 2022 19:48:06 +0300 Message-Id: <20220908164816.3576795-5-vladimir.oltean@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220908164816.3576795-1-vladimir.oltean@nxp.com> References: <20220908164816.3576795-1-vladimir.oltean@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BEXP281CA0009.DEUP281.PROD.OUTLOOK.COM (2603:10a6:b10::19) To VI1PR04MB5136.eurprd04.prod.outlook.com (2603:10a6:803:55::19) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: b84bb84f-9a07-41f4-f080-08da91b9f689 X-MS-TrafficTypeDiagnostic: AM0PR04MB5154:EE_ X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 3UL/qX+gGDal0gFtU1dPholLwqfM87hkZSZb7z5Xrm/DFlkhUJVs1Ee6dwTXJXUhYBhk+ZZFV5pX/Pb05GZzqaJYcVTUypKj25Nv9vwYKgsgJ+Bntfk8Yg7ELk98MLA1TuKzIZbTYq5ckT1LhmpOknPaO358ltHMjiI9Pir3rxoYWUcTtgSwX2PRJw5rADssPr2VqtKLHz0yRFKA/+XNf/yo7/HE4y1ven0BA/cznaRlLwvOz//AM8GQj8nWp759R/9BRuyJqqVNVB3ROcTY4FQ9M4pb0QdWhif8+SijsQpqSBr/P0rWUi69zd1EjvUb+2isDPcp1cogKv7sLxM58Q/kuOrDS+yc4LjPVaCOt55kMS2XCla66ABKd6/IOz7nJ1VWBx1mnV1kaL6tYZnei1br2w/29wK70KB9wYN5QJ7reGxH1KeV9V+aUm52z5Somrvo4vv67rgNPlRm3547hK2vVUQF6U89iMtDcUKFxgYQo07htZvyyvaDMEtrhcujcgWxn0p0CE9i7OOi5X94FUvpiUtK1sUhRLT7RxcdYUcjfRBg/Cdc+hC0fVHWELwVkYmSr0anJp0fscufKNvnJp4hly80P8jj9WxmFv18w6SIQRr1Co7592ojOQ2YeFSDH8KQacoZ7toaUA4NbHpc1E/zZ88tO8V5NKl9/MmvFBP1s/MCYZpE8ivvkLzuz0qQtgYThdt4NDil0idMJLhRUSm87yGs7lDFqguDdq+nwKKEHDzpb94j9lnzmd+zOBAx3fIY3h3wxIA/W7fWhrXSdw== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5136.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230016)(4636009)(376002)(346002)(136003)(396003)(39860400002)(366004)(186003)(6506007)(41300700001)(1076003)(6512007)(6666004)(478600001)(6486002)(2616005)(26005)(52116002)(38100700002)(86362001)(38350700002)(5660300002)(83380400001)(54906003)(316002)(44832011)(4326008)(8676002)(2906002)(8936002)(66476007)(66556008)(66946007)(6916009)(7416002)(36756003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?+tKGoDptsz5+rYZcPsBU+Wx3hz/61V0Oo6iWH6OD++Xkbpsewe9vqb80NPv8?= =?us-ascii?Q?2ZXYyVYso+CFywKqXSfnqy7casn55OC0GQ6KYm3bsLmW9kxveg832cUV66ta?= =?us-ascii?Q?VgIU3C0BUP5EfXtZH2gHh1Y9U7G7VQSsTRH5jiS3mv+vGnBHZlxnr6Kt5D2k?= =?us-ascii?Q?3A85o6lTrSw7ZPentr7dC81u7tMoGImKtG6AhjymzVyOkZkiZy/3nKAjGQDq?= =?us-ascii?Q?ykBZUVsLAToa+YCQL51ir+4lIkqXYFzZXSMXEhJlBAJfWnIzXeQlDjRLPWhY?= =?us-ascii?Q?maucMr5h1fxkU2N9oW1+PPu4ptYZD3nTukibnahu5Ww/H/xCXdypH5txa37a?= =?us-ascii?Q?ZI7hmk2R+D/whJzSfHnG4xe3K9MtYwBdMFAgBzHm2N/hXJMFNK5NTxCrgQpK?= =?us-ascii?Q?8DXM5hiJEtA0sHhWz2czoCKdSWZrIY1JDBxa9ew19YNPm+0JdpZg5zBffX09?= =?us-ascii?Q?tHvygdoLrflGdk73BQnPnCrRNNG5TvZD0LPp6aJvbd1LNUaUmwbHlyUGm4N1?= =?us-ascii?Q?95Jy6SD+oYbDmLSwNEmTOOb2Gi8o3582OBD9bVIXh2pEWH5wzi2z+dv+VygP?= =?us-ascii?Q?6o9x16gIkFMufw59CVvTZVOA8u9iVcBafuUljBTqnO0xMAArIwdkIu4KTW3S?= =?us-ascii?Q?30kUb8sJIbjFf2jZIckyf5SOISCtFvIpKB96eLLrJ1lebiL2ifxtFEV1vp4l?= =?us-ascii?Q?NKTBegfGgs+mtHf7iWMIao/H5Ze2CweZeDEnvlXrE6BlKQWkXnhN3s9KLXYo?= =?us-ascii?Q?k3vIkH7/OTJpGCoqd1koMrOJCrd5jn7KJ0xw1V9v/FSpexWB3joPH//I2eMH?= =?us-ascii?Q?xI1ModiGzQpIzHmtm5jcr8FNIhnQWEIKrXx81bHOSF3PWThSLi8nW2XhAoie?= =?us-ascii?Q?M5HL+ZBjg0oDN0MlMB2i2I6e5DeUIO2f/X6sk3zkdSoDICtceSMre1eVwTk4?= =?us-ascii?Q?KcYw1sBP28gCzOlxebpt8o0ym6z3Q4LB+Qy/mU8hyuaunpUZM20cePTTc/2f?= =?us-ascii?Q?FElG0xiRjDbEIrWYz2EZeuoUqKBO1EnCr4b22o9M5h0gbjhRaB14rmwZ1j3Y?= =?us-ascii?Q?dT+24BnLdIjXGtPlcsOlschhg5AWXYU+ibsvzzM/JPzBfNpl+NZgvEUBykQD?= =?us-ascii?Q?ePyH3WB0yLRNeP9A4AHDhfI9Vxk7FmOLMyvgBa0iGf3/9wsyaDWTsiLFIRH2?= =?us-ascii?Q?JUedNwuRFfxA+dclPHVlYzXh7q1chQwcWo5Oy1xDN3h9sHEFqIa/OFcN4CTI?= =?us-ascii?Q?iXVB4o1FfOcqQ7uoQJ/OXU3sQ/kbrrkElHN7wQVV+OfODzt6tP8Yb+kuYOOH?= =?us-ascii?Q?UCWGn4qRR6U0Czrorr7s0xEI9amxwrSM0mfkzt1bDCKpDlqIdnEubWabceua?= =?us-ascii?Q?gCKIVtMIJrWeBWz7pni6o9h8ssVJDs2PCmH/E+q0TJbXAaW4QLYPXSOgMz6G?= =?us-ascii?Q?v7kQtR3Gsca/DVXuqptFJvIY5up96sifcuGrzNBrQMTE053RkXz6RSrniZT8?= =?us-ascii?Q?kSNl4Nf/lX7QtyrpmnA2LEaTR5RzVHUeiKU4MwVpFlBLIYqZ0heNPKATu/xX?= =?us-ascii?Q?ybBhKYB4vcOAVTe8bOADB1CR/cB+UEWETycCL2soQxjDufZqv7mKwClhe5TI?= =?us-ascii?Q?vg=3D=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: b84bb84f-9a07-41f4-f080-08da91b9f689 X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5136.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Sep 2022 16:48:31.9433 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: rEwF9iGSH6mj8s5HTLZTfE1JblHN5BfYcsAIaKtCmVQLT+Vy3831qjReobgQjz74wGnUu/0mjMJfkgod9EC41g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR04MB5154 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" if_link.h says: * @rx_dropped: Number of packets received but not processed, * e.g. due to lack of resources or unsupported protocol. * For hardware interfaces this counter may include packets discarded * due to L2 address filtering but should not include packets dropped * by the device due to buffer exhaustion which are counted separately in * @rx_missed_errors (since procfs folds those two counters together). Currently we report "stats->rx_dropped =3D dev->stats.rx_dropped", the latter being incremented by various entities in the stack. This is not wrong, but we'd like to move ocelot_get_stats64() in the common ocelot switch lib which is independent of struct net_device. To do that, report the hardware RX drop counters instead. These drops are due to policer action, or due to no destinations. When we have no memory in the queue system, report this through rx_missed_errors, as instructed. Signed-off-by: Vladimir Oltean --- drivers/net/ethernet/mscc/ocelot_net.c | 27 +++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/drivers/net/ethernet/mscc/ocelot_net.c b/drivers/net/ethernet/= mscc/ocelot_net.c index 330d30841cdc..d7956fd051e6 100644 --- a/drivers/net/ethernet/mscc/ocelot_net.c +++ b/drivers/net/ethernet/mscc/ocelot_net.c @@ -745,7 +745,32 @@ static void ocelot_get_stats64(struct net_device *dev, s[OCELOT_STAT_RX_1024_1526] + s[OCELOT_STAT_RX_1527_MAX]; stats->multicast =3D s[OCELOT_STAT_RX_MULTICAST]; - stats->rx_dropped =3D dev->stats.rx_dropped; + stats->rx_missed_errors =3D s[OCELOT_STAT_DROP_TAIL]; + stats->rx_dropped =3D s[OCELOT_STAT_RX_RED_PRIO_0] + + s[OCELOT_STAT_RX_RED_PRIO_1] + + s[OCELOT_STAT_RX_RED_PRIO_2] + + s[OCELOT_STAT_RX_RED_PRIO_3] + + s[OCELOT_STAT_RX_RED_PRIO_4] + + s[OCELOT_STAT_RX_RED_PRIO_5] + + s[OCELOT_STAT_RX_RED_PRIO_6] + + s[OCELOT_STAT_RX_RED_PRIO_7] + + s[OCELOT_STAT_DROP_LOCAL] + + s[OCELOT_STAT_DROP_YELLOW_PRIO_0] + + s[OCELOT_STAT_DROP_YELLOW_PRIO_1] + + s[OCELOT_STAT_DROP_YELLOW_PRIO_2] + + s[OCELOT_STAT_DROP_YELLOW_PRIO_3] + + s[OCELOT_STAT_DROP_YELLOW_PRIO_4] + + s[OCELOT_STAT_DROP_YELLOW_PRIO_5] + + s[OCELOT_STAT_DROP_YELLOW_PRIO_6] + + s[OCELOT_STAT_DROP_YELLOW_PRIO_7] + + s[OCELOT_STAT_DROP_GREEN_PRIO_0] + + s[OCELOT_STAT_DROP_GREEN_PRIO_1] + + s[OCELOT_STAT_DROP_GREEN_PRIO_2] + + s[OCELOT_STAT_DROP_GREEN_PRIO_3] + + s[OCELOT_STAT_DROP_GREEN_PRIO_4] + + s[OCELOT_STAT_DROP_GREEN_PRIO_5] + + s[OCELOT_STAT_DROP_GREEN_PRIO_6] + + s[OCELOT_STAT_DROP_GREEN_PRIO_7]; =20 /* Get Tx stats */ stats->tx_bytes =3D s[OCELOT_STAT_TX_OCTETS]; --=20 2.34.1 From nobody Mon Apr 6 08:10:03 2026 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id B1A72C38145 for ; Thu, 8 Sep 2022 16:49:07 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231243AbiIHQtF (ORCPT ); Thu, 8 Sep 2022 12:49:05 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44014 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230521AbiIHQtA (ORCPT ); Thu, 8 Sep 2022 12:49:00 -0400 Received: from EUR02-HE1-obe.outbound.protection.outlook.com (mail-eopbgr10041.outbound.protection.outlook.com [40.107.1.41]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 717761228C2; Thu, 8 Sep 2022 09:48:59 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=KxKVcsT23gteEQ9HK10Xow6B6QwHAmGpd5wGjNJSXPIPA2VdmTUs7tfoDNzQpYYZPTukuAVF4XZi3A/6A/+0i2OtkVt4oefPz3lR5RctbMszK+p5DA0fatHBenN4YxEfNlhQBWxcWKcnNKdnP7UI9UOYP2Fz0zYNUlTKL0FUyQ+M6r2k8OjIRWLUpxmtX7Hweo0nG+5Dkguq4TxOMLe+WanxboxmBx2CpqyhsKFzxllzh0lvV2/WVa/viFAGKfMzXFh5vbxLk5+gGEif0HmzlPj7VYMFQLijYCknYjiyYxOyFlTsLc4wcraStKKJBHnq40kLCgoPE1XojxNSy1Ndaw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=mAiffZNoFypRNZQiiwDKuiuWoLk+o4WU7vrbWEc6DPQ=; b=nwpKKp8HDiOAKTbbrwTwUWA6ysAjKrvBcaO892Uq53iKttRYs9rwkuoUK1mSUPV1u7y60d2cjcnhBXh/Vxldno1SNWU1DpkdsNLrjXqiepueNdL7mYw661SUwMCO8b0ooTBY0XX0E1gESzeFTsM73jySuNmSMSR6N8Ni16vKT9pV9KFJ0JByQ49ONwpPKFalWkYGgMv1siPtfxsPAGhIXr3nUAcRq+tJUxsZPVv1oWG4uw97I0DHVHnXfn1z3oqx5TLdEaYcpPVkGVBYAsH3k/AWJnUYcwa9IO6gX86m+jR6WV2a3WBXPeUfA+Lr41PTD8TjjcwLofcxA1XDPh5zfA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=mAiffZNoFypRNZQiiwDKuiuWoLk+o4WU7vrbWEc6DPQ=; b=MRQXl3HeBlL4MXijqdankbe2nA+K2w2jzqQbR8IP6LlWZARNk/U9rdyHEhJTMC6leEAHjAB8xzu3fqHh6n/vz2HMKXQISduBj/Y3tNwZz4VABZdXa+qgESww7I04DxIkcR4M6Be5/kGeQfq6Zd1fEeHYjhpbkVoEQCq0RsNxrwc= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from VI1PR04MB5136.eurprd04.prod.outlook.com (2603:10a6:803:55::19) by DB7PR04MB5052.eurprd04.prod.outlook.com (2603:10a6:10:1b::32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5588.18; Thu, 8 Sep 2022 16:48:46 +0000 Received: from VI1PR04MB5136.eurprd04.prod.outlook.com ([fe80::3412:9d57:ec73:fef3]) by VI1PR04MB5136.eurprd04.prod.outlook.com ([fe80::3412:9d57:ec73:fef3%5]) with mapi id 15.20.5588.017; Thu, 8 Sep 2022 16:48:45 +0000 From: Vladimir Oltean To: netdev@vger.kernel.org Cc: "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Xiaoliang Yang , Claudiu Manoil , Alexandre Belloni , UNGLinuxDriver@microchip.com, Andrew Lunn , Vivien Didelot , Florian Fainelli , Maxim Kochetkov , Colin Foster , Richie Pearn , linux-kernel@vger.kernel.org Subject: [PATCH net-next 05/14] net: mscc: ocelot: sort Makefile files alphabetically Date: Thu, 8 Sep 2022 19:48:07 +0300 Message-Id: <20220908164816.3576795-6-vladimir.oltean@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220908164816.3576795-1-vladimir.oltean@nxp.com> References: <20220908164816.3576795-1-vladimir.oltean@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BEXP281CA0009.DEUP281.PROD.OUTLOOK.COM (2603:10a6:b10::19) To VI1PR04MB5136.eurprd04.prod.outlook.com (2603:10a6:803:55::19) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: c0a5f23e-f74a-4b3e-0b7d-08da91b9f74b X-MS-TrafficTypeDiagnostic: DB7PR04MB5052:EE_ X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: C1VnaK5HkfiiCydOd+uTfBnHETgebyp2IePgBZ5DZiTXP32eYhJcGhtzSkYS5XeG3MTihQH4SLsmtAfskOx65KAOypk94W4V3M0dKtDFusFySuzLcFej7JYLGMt8EP0wJ0/AZ0aBTTsQgsdSZ7wAz2Otxr0Mc6PdlsfOkrYC7hqPsFCgux7g9VQr4WfCETIfIuDzHrk6aFN6Uhk2XumE2Q6O3lpOcrjI95UbM3GIJvXEqSsKgJTBEFadxU0b9a9M3eM2Al98D8yQzfV3z95PJ5TGxQ2ivL8SppIbM//w429Gpmlu6zwPrQBW9EAfHHZrIFrujm2evdVgLxrKUxuEF6Bg1Zt0Cm0yzGPWaSAby8Lym81hvDb8hO/yR6whCY8id6mkbQmHaOuzC6054xgUsZLtP31fu7/RJwOV8MYL7oW7ODsx0zjmGjXmJQeYgygdQcIW92rxfzliVyZYKPdRilO864DfMqQcIZM5l4Q/lY+QCfpUczckGGoITS8lGwMnFOXoS1k2zNg7VvlBCa0XJeDjLJ+sb1E/lJDtp6JBx+V+6aoTGZGaaYyYZXGUTgS3GUsCVXa0uAgOL5ToLDO5E3J4KCoxwsGZ6N3UjJvjU2PFQ2u8vSTDopZFPoF/V7kXLsc8m50ycd3YAnFj/RK2K4+bz7Xkaj3rtjl87r8eIDDq41sbVHKrSzTQeF8224rYyIdRtu0uerOLmIOFXVFpCmCYtTDMaNwXgqYeZ84zhGR6MQDKZ5M1RWba5TXNHj7UF89jKn0NpHPs7Exzymg/EQ== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5136.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230016)(4636009)(136003)(39860400002)(396003)(346002)(366004)(376002)(38350700002)(8676002)(66476007)(66946007)(2616005)(6486002)(186003)(66556008)(38100700002)(36756003)(1076003)(4326008)(478600001)(83380400001)(8936002)(2906002)(5660300002)(44832011)(7416002)(4744005)(52116002)(41300700001)(6666004)(6506007)(6916009)(26005)(54906003)(6512007)(86362001)(316002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?VaCLgWda9wSNVEtf7qGQ3UuvG0BHt5bEE1JtnL4rx7lu/vFoC73b4hFBrojd?= =?us-ascii?Q?1/lnn+Rz0gF1HwOGsIFcdE63JRk0x/OrlDfwmdIuuI2lPJdbfJXiuDAss19c?= =?us-ascii?Q?KfAnPQJ2dRh1bFUAQcnxvSykH2WIO5zyhm4zJUFHupYOHasvOipiJaQGigwc?= =?us-ascii?Q?e1ym/EADj00yqBxjKkFrM5tACbcVt07HHLIiGN7n5OVGVjGomm3fDG8RXbH9?= =?us-ascii?Q?T5DZwQxon+wyUV1xwHuZE/zhlR0V171vRWUkpTUnoYIPXk/bruepeTCPIG0X?= =?us-ascii?Q?t2+JPE6x0aRaOo7Z6m5xroXYQzheeR0pCsflli95EcgHoiGM3ttlqLFu7GWC?= =?us-ascii?Q?Tc69wN75x6V4A/5Ac0jT+1JZ6R6G2wpeNpSqQi7ekFC4FbPqpZOYKGlS342N?= =?us-ascii?Q?e7WX117RbttAzERk9zK0zt7hhllBvH0pk+W6U3Wq2bzc/RNv8NqabeNLfUTZ?= =?us-ascii?Q?mlb15o4l+kylTIciRivrIQqMeLqHTrBJDzJPaURHHl3CD1DI2xjPpbDGkXD8?= =?us-ascii?Q?klpuuPltGBbeIXBUocfZhe0JxKOF0Pzgywx6VhWTAMOPQBNWTnjBJfqq0l0l?= =?us-ascii?Q?mDJV5cpEibyYqI2/uPsTqQVuhTwssSalzANDLXs+gzcCKdWvIk7pACTl7W9q?= =?us-ascii?Q?OTg1mYAWEjJIOzvDVGKzRyBB3mDbYxjSOgAL5Ss5XbLjBiNuHkoOF7BRUOnu?= =?us-ascii?Q?NZdYIJBXAXeoIBcFQrXsydjcS0aHUG1m/hvMaXb9HEkCCjuXa1Ja2ode71p9?= =?us-ascii?Q?6xvLEL61gE58CEU5gGlMswvh4CAqCH2QjcM0xb1lzeyLpBLgH5kMCvk4M8+K?= =?us-ascii?Q?uHR/Z9KK8thrmqE/rfwsv+diPhuYJkfZyEQkiUgeugmrWh7pWgj9jup5GjJm?= =?us-ascii?Q?t6exIS/mwxMfl3HKSYrQe7Tyua1ZGHI5gyyDPEbyw2hclMnCcwBzJh8P5JNi?= =?us-ascii?Q?B/2rFCI22WUS7Rnx51l5KoKSGrJoTxcfImW7r7CXtNqH7y3iLw9wtkZyjzb/?= =?us-ascii?Q?yXQtTa12leLXRxqz1XFqKvbj4HKWwAq6+PqSq4XANhdHrGWwlmAMK0EBdvNU?= =?us-ascii?Q?Lqgp0o6RzIIcthbLoh2a3qRQDvOowVEo/y3O+/kJUtKwAwMUCCQUFxopmMJd?= =?us-ascii?Q?a1aDzp0duLWDtpbOv7vt0do0qNkLMb3wX4hDL/LY61+PNbCr1ORkTwB7qU6h?= =?us-ascii?Q?e69mIM4RcV/VfgFBu0ue0tbpSL+5rgltV1n2WUcZvoZkjI48N1UbvumnKFeu?= =?us-ascii?Q?hejhKj5cDoxb/ODC05EeXOXiy79obk6GDmn4xlnySGKB1SdGqkmvU/CSP9pk?= =?us-ascii?Q?NoBX8aUyYeZ/TCMHRtj/7T0UX3Mhu/2IsRQ144w59n7NBM+4LKSZeFPua44O?= =?us-ascii?Q?gmZhZldMnlg17DB/K/6YsNexhSfvC0LzKqHM499idVFPddO0AEUQHW8VkFyt?= =?us-ascii?Q?h3zXGnKtBRFsk338Trpsa1VryWagUEislPSpnm27iE2wBqwQ2yDm8HpL9NBt?= =?us-ascii?Q?25oLEE1imhEqsO3o6V0LVPVnktktmH2YSkisi8mJ8hgttmr3QmvFf6FL8HEq?= =?us-ascii?Q?OUOdqWUeL0ygwra7OlanxfvPTEzRN9nFFY4jbDC0tjU8ZN/BTlW3woPLTRQQ?= =?us-ascii?Q?Pw=3D=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: c0a5f23e-f74a-4b3e-0b7d-08da91b9f74b X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5136.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Sep 2022 16:48:33.2089 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: w1VHRJluCEcJ/vIFPpvjfgACKHLwOSbpCtqwfyR8XIV5/NP3T9fdtnqC4p3kivgfcLveSnXtO73LSTr57U3dOw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB7PR04MB5052 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Create a clear ordering of the files used to compile the switch lib and the switchdev driver. Signed-off-by: Vladimir Oltean --- drivers/net/ethernet/mscc/Makefile | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/drivers/net/ethernet/mscc/Makefile b/drivers/net/ethernet/mscc= /Makefile index 41b34a509308..e8427d3b41e4 100644 --- a/drivers/net/ethernet/mscc/Makefile +++ b/drivers/net/ethernet/mscc/Makefile @@ -2,16 +2,16 @@ obj-$(CONFIG_MSCC_OCELOT_SWITCH_LIB) +=3D mscc_ocelot_switch_lib.o mscc_ocelot_switch_lib-y :=3D \ ocelot.o \ + ocelot_devlink.o \ + ocelot_flower.o \ ocelot_io.o \ ocelot_police.o \ - ocelot_vcap.o \ - ocelot_flower.o \ ocelot_ptp.o \ - ocelot_devlink.o \ + ocelot_vcap.o \ vsc7514_regs.o mscc_ocelot_switch_lib-$(CONFIG_BRIDGE_MRP) +=3D ocelot_mrp.o obj-$(CONFIG_MSCC_OCELOT_SWITCH) +=3D mscc_ocelot.o mscc_ocelot-y :=3D \ ocelot_fdma.o \ - ocelot_vsc7514.o \ - ocelot_net.o + ocelot_net.o \ + ocelot_vsc7514.o --=20 2.34.1 From nobody Mon Apr 6 08:10:03 2026 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id C8DD3C54EE9 for ; Thu, 8 Sep 2022 16:49:27 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231493AbiIHQtY (ORCPT ); Thu, 8 Sep 2022 12:49:24 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44060 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231258AbiIHQtG (ORCPT ); Thu, 8 Sep 2022 12:49:06 -0400 Received: from EUR02-VE1-obe.outbound.protection.outlook.com (mail-eopbgr20043.outbound.protection.outlook.com [40.107.2.43]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D9AEC12BFBD; Thu, 8 Sep 2022 09:49:04 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=aYetsb605grqQz6o74djdPpmMFHrhB/at1cJjB084VsBleExaLlq7Vjm7pXWqhC3QUGoo/W2NdkCRnE8pkMSI7nHo3V9C5U2qfG0L52+DO7kFB2wpYIAdc9rF6XMr19xiIETMHbQnONWoSnNQVjdQGL98c0ZurGvxu3NMQheaxY+JMVF195t5XJp29oGv+HdWb46Lq+2ci+LBbkQjyDZ7SRoADMiq3Q1J0B88da5tjubFUE9VaGTIS3ZDlBdjim14qaO1qkqOH+VfbxEfnDrsAYXAN7mRyr2g0MA05YX5SOFq5Mg35EWG9xTiNdV+wqcmPK4OYDZMN3KwObb9GyUuQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=XGOygotCz6ZAX0Td7fbHo+E/YH/NBEWjC6Yb9rhPQnk=; b=UsvZYEpminTy/E1NQJkL3qt/x/ZZvSxwrDPWNXy8DJi4EIByF5ksEnpFw14Wn9E6XYbacmUuKcPrta9F3cnnOJtW492YMyYJwVYyx6MuFtb9UI284N79+hNLH9mHsbsfJXYuSYp1Ln+sWqb26a3m3XzcgsJI34J620HcXOWX6bQGcfkm/42wsMQ21T42c51IqFnxCSo+z7DKEsQtLMs2b4F1YhI4YhzHU0KYzk0BKmg3mB0yCQRhUZQbK+8sT44EHZRzy6cKwg8aHa7xZMaQQlgoE/9xAK6A97ftLl6L2VRo//bZ77VhAVT/mjeMFVo8hCpiU8zw5pl3dhzYVSyGKg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=XGOygotCz6ZAX0Td7fbHo+E/YH/NBEWjC6Yb9rhPQnk=; b=CS7DtJl/ArlG9xsviG9gsZKzb83VzfCcYmd0ClIEckNf2IGaH9svIZ46soUdyntf8RbW1s+0AjHUG47MZs9gpwl0X7T9Td1vw77ARWbM1eVJRQd+ZHpPq/8u3+oIVzERJDgKTDZSrOnnPeeekYi/DyYHzPsDfbjYPilGzkSqHjs= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from VI1PR04MB5136.eurprd04.prod.outlook.com (2603:10a6:803:55::19) by DB7PR04MB5052.eurprd04.prod.outlook.com (2603:10a6:10:1b::32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5588.18; Thu, 8 Sep 2022 16:48:54 +0000 Received: from VI1PR04MB5136.eurprd04.prod.outlook.com ([fe80::3412:9d57:ec73:fef3]) by VI1PR04MB5136.eurprd04.prod.outlook.com ([fe80::3412:9d57:ec73:fef3%5]) with mapi id 15.20.5588.017; Thu, 8 Sep 2022 16:48:54 +0000 From: Vladimir Oltean To: netdev@vger.kernel.org Cc: "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Xiaoliang Yang , Claudiu Manoil , Alexandre Belloni , UNGLinuxDriver@microchip.com, Andrew Lunn , Vivien Didelot , Florian Fainelli , Maxim Kochetkov , Colin Foster , Richie Pearn , linux-kernel@vger.kernel.org Subject: [PATCH net-next 06/14] net: mscc: ocelot: move stats code to ocelot_stats.c Date: Thu, 8 Sep 2022 19:48:08 +0300 Message-Id: <20220908164816.3576795-7-vladimir.oltean@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220908164816.3576795-1-vladimir.oltean@nxp.com> References: <20220908164816.3576795-1-vladimir.oltean@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BEXP281CA0009.DEUP281.PROD.OUTLOOK.COM (2603:10a6:b10::19) To VI1PR04MB5136.eurprd04.prod.outlook.com (2603:10a6:803:55::19) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 2ab84009-a164-492a-88d5-08da91b9f80e X-MS-TrafficTypeDiagnostic: DB7PR04MB5052:EE_ X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: XWXHfho1tf0IyR4VOytzfA5A8uVWAzLKjQyF0SD1ZOO0ciRjsKwzvzPBAof+tpUbAYjcKM35bvci990lWySBcaWQVh1tX/KrbfTvosHLzAusVSYbxk4AFojrlvmW2iMKdnTtqYeFU5mzhz+u+8NQPdXyAFNFT7xFF0FDJ/Wbe3b1+2hNJJDLT7SCEJ0/Qmkm/LhKq8XayzEP/rdDWkDG0rwbkDibZJQ1JwgAwpD8fPfpm47bohNmwoXgy4QOJe9UkQhPWkqcHJwQKznR+1urktrZAVFXk0EiDyz+ejtvxWvDOD6D8vmRHAGl5YxgbQakZKCAdhk37Kmg5nUmipmqFWW63zyJ+iLuL0NJWXl2JwQrtd7qwfVoH5zcZZYyBu13Hq7P/qxi6t/9Nycek97frTL5wqYV0Jo9huNbOuS2CJfCsm7eVMXMTyOXNvuK0IZ94ToWJ5ekhF76NkreUD7OFspeIviOin21a4/S0H6Ho2NE43QMXFJb2YpHagSS9OjJmyYtY/ouZPZhEXE0PisiInOZ5WBt6b2zT5kum4aEGAGtX3SNXr2pqlMK3vOkN/ibqE8RNrkBMgt1jZLab2xLdt1vhoIxn8yN0p5CbXZiUO73MfwEPr/SqfOILULBVBL+xi8c/F9U3iPZIYoPufp3K+YK+XQV72pkhYRmMm5twr5fbKvML7w2p6OhY0zWh1+j3xwsLxsbLa4PwRYxKiKdD58/ObPcVmbBL/GQIkaTqBeGiMXJIUQ4vhyIQKiewcioTRejSVV6GT2Fg9WQOT0CTA== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5136.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230016)(4636009)(136003)(39860400002)(396003)(346002)(366004)(376002)(38350700002)(8676002)(66476007)(66946007)(2616005)(6486002)(186003)(66556008)(38100700002)(36756003)(1076003)(4326008)(478600001)(83380400001)(8936002)(2906002)(5660300002)(44832011)(30864003)(7416002)(52116002)(41300700001)(6666004)(6506007)(6916009)(26005)(54906003)(6512007)(86362001)(316002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?bR5quzM2GG/xdKKrvGeqV4Y9AAVp8cYa0ariWcWxYDaaxjGaOkP+pnAxARzu?= =?us-ascii?Q?9zWgjpC0AiMQZjU0naSDlIR5aK9dYDQgfknO/PWiGcy261g3nnNAWfwnHMLe?= =?us-ascii?Q?vtoqeIayE8ZvbkJhY8qGNjnI63PvcqYsh/Jss/l5Cqjciem7M59envM9zdZd?= =?us-ascii?Q?DrZnSCTuptTNrnsWPJDKRFQlBYnT6a7vbvsFD+oL+Aq74oBvlfqhWQekrfkq?= =?us-ascii?Q?JbKIf6R9dgL4cxKDjU2Gn7URhZGvFbBi7IddIxCVG5AEhqSYihHWdtxrnaoX?= =?us-ascii?Q?YlN2hMIYIgg8Qykp4Ou09TkpmuPUjEnkP3OWKDC+0YDOSlnq8YvrfYJV7TeU?= =?us-ascii?Q?dlPs6QG1zlZMrb/N39zQrW3++m5b/5MONuSreDPQP9il4zSEsSSQ5XwLuR1i?= =?us-ascii?Q?SdhmO/GcdnE6MJ3CppU5xgNDyeX0AUBkmosFtGOTSMwpiMYwoas3aNb66Xsd?= =?us-ascii?Q?cMn6uAlBIB6hAJBZelAfjMNugwte/JumjzsYlf1alWJKgy+b3BbYrSa5lRLw?= =?us-ascii?Q?p5nPytWdNEurXLOpV5O+2NnTie1B1DUgqNNAcJRkqbelH2Ol2gj2/dv+GuMW?= =?us-ascii?Q?/3D85BmYcVN6JOedHs+H3mMqfk0xncuNtp/G4EeazvMEm+vL1EoTyLboTEEp?= =?us-ascii?Q?RkkeGaix5TVTKo1IxzXnVVlmpTt2KvCJku4rmJB751i8nr3MwDbLU8jj+1Gu?= =?us-ascii?Q?4BjMP19l/Hi9apaZY0U1SwATAfqezRsz2L2EWAblDz/fCQN1pDvq6XmdBet+?= =?us-ascii?Q?iziQA1umxMT5NVVTPDvIPisaFCNPCuxCmfeBRUfUMjRbvETgXoKNBa+5hQX3?= =?us-ascii?Q?7mJdggb3gW/HftPdp67ZYWWoe5Ed09zgfe0kOJtyZK09FStSHIU/39OQye11?= =?us-ascii?Q?MiG4pl0APer9m3AFjEmdQ1iPXd94zkzYBAmELAMHNwTB61F06efMlHZRbFoW?= =?us-ascii?Q?z568Ji/WpiNHQa3U1C6SPsYj/5+HZgzvRZNywCpcsHtYWEEZX/wIj52TCsY4?= =?us-ascii?Q?M5zKxeQ0WFyMP4HdJVv50BLTrNyX2bbzNnDAsornJxy838UKAxyXP+B14Tik?= =?us-ascii?Q?qblJ3u4bBrSLPjfcgX7a3dNyLB6opX76Tp43QZIV3FHUCGaGMBZ8wIs1VRo4?= =?us-ascii?Q?0hoviQ92eJUzWNwJSWBnRZTReIb1Ry9OsmDGL/aPkNb6mBm7F/0Yvz5pdwUW?= =?us-ascii?Q?1wWiuiCRWhlMA9GHZZPjpe7vNtPew1SllLlhNPryAnGaWS3rMEeS5zvbXeB3?= =?us-ascii?Q?y7tRSgpBl+k9USBuifk7LSuHtuXj7oCIutXh6Z4vU/ot6nUcopr9Oa5h+6z+?= =?us-ascii?Q?42VXj/+KUnwxoqAUsRhL5u3ec2pV3HdUd1PmhHVft9CZ3Oka+0Iq+SsEf0R2?= =?us-ascii?Q?7tv3lUOzEOAZ/c4fFAdrRe3Dh4xhD9w9O7rXtRuPAOvHzrK4akjEpz9Ot/Gi?= =?us-ascii?Q?nbHBt5W7WjMnB6wDVB/elx4fcoZ8+Se9SARjz7aiUZ3cqcjS1VTjbAsdSDOl?= =?us-ascii?Q?tzBCcJE4jVKQd5qRrDYyO2GvTEZoDh4MvDRLM4YEB8JlgebKtQlFsEbQsD0E?= =?us-ascii?Q?q1dEztYsYa+Y4H4E0wRRbzNdUNsTCtoyuZRqgeCNg2+RmwvNgF8R+DLNjbEx?= =?us-ascii?Q?1A=3D=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2ab84009-a164-492a-88d5-08da91b9f80e X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5136.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Sep 2022 16:48:34.4900 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: Nqd7LyvXHFUlwY8n2AhqgPIOmn7mBg2paLJb0JVVdwRnLlQzjCx/cE1FGGZ+Gqp1nso8l6nUfyosLZYK9ifQXg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB7PR04MB5052 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" The main C file of the ocelot switch lib, ocelot.c, is getting larger and larger, and there are plans to add more logic related to stats. So it seems like an appropriate moment to split the statistics code to a new file. Signed-off-by: Vladimir Oltean --- drivers/net/ethernet/mscc/Makefile | 1 + drivers/net/ethernet/mscc/ocelot.c | 214 +-------------------- drivers/net/ethernet/mscc/ocelot.h | 3 + drivers/net/ethernet/mscc/ocelot_stats.c | 226 +++++++++++++++++++++++ 4 files changed, 237 insertions(+), 207 deletions(-) create mode 100644 drivers/net/ethernet/mscc/ocelot_stats.c diff --git a/drivers/net/ethernet/mscc/Makefile b/drivers/net/ethernet/mscc= /Makefile index e8427d3b41e4..5d435a565d4c 100644 --- a/drivers/net/ethernet/mscc/Makefile +++ b/drivers/net/ethernet/mscc/Makefile @@ -7,6 +7,7 @@ mscc_ocelot_switch_lib-y :=3D \ ocelot_io.o \ ocelot_police.o \ ocelot_ptp.o \ + ocelot_stats.o \ ocelot_vcap.o \ vsc7514_regs.o mscc_ocelot_switch_lib-$(CONFIG_BRIDGE_MRP) +=3D ocelot_mrp.o diff --git a/drivers/net/ethernet/mscc/ocelot.c b/drivers/net/ethernet/mscc= /ocelot.c index 8e063322625a..be3c25ea278a 100644 --- a/drivers/net/ethernet/mscc/ocelot.c +++ b/drivers/net/ethernet/mscc/ocelot.c @@ -1853,184 +1853,6 @@ int ocelot_hwstamp_set(struct ocelot *ocelot, int p= ort, struct ifreq *ifr) } EXPORT_SYMBOL(ocelot_hwstamp_set); =20 -void ocelot_get_strings(struct ocelot *ocelot, int port, u32 sset, u8 *dat= a) -{ - int i; - - if (sset !=3D ETH_SS_STATS) - return; - - for (i =3D 0; i < OCELOT_NUM_STATS; i++) { - if (ocelot->stats_layout[i].name[0] =3D=3D '\0') - continue; - - memcpy(data + i * ETH_GSTRING_LEN, ocelot->stats_layout[i].name, - ETH_GSTRING_LEN); - } -} -EXPORT_SYMBOL(ocelot_get_strings); - -/* Read the counters from hardware and keep them in region->buf. - * Caller must hold &ocelot->stat_view_lock. - */ -static int ocelot_port_update_stats(struct ocelot *ocelot, int port) -{ - struct ocelot_stats_region *region; - int err; - - /* Configure the port to read the stats from */ - ocelot_write(ocelot, SYS_STAT_CFG_STAT_VIEW(port), SYS_STAT_CFG); - - list_for_each_entry(region, &ocelot->stats_regions, node) { - err =3D ocelot_bulk_read(ocelot, region->base, region->buf, - region->count); - if (err) - return err; - } - - return 0; -} - -/* Transfer the counters from region->buf to ocelot->stats. - * Caller must hold &ocelot->stat_view_lock and &ocelot->stats_lock. - */ -static void ocelot_port_transfer_stats(struct ocelot *ocelot, int port) -{ - unsigned int idx =3D port * OCELOT_NUM_STATS; - struct ocelot_stats_region *region; - int j; - - list_for_each_entry(region, &ocelot->stats_regions, node) { - for (j =3D 0; j < region->count; j++) { - u64 *stat =3D &ocelot->stats[idx + j]; - u64 val =3D region->buf[j]; - - if (val < (*stat & U32_MAX)) - *stat +=3D (u64)1 << 32; - - *stat =3D (*stat & ~(u64)U32_MAX) + val; - } - - idx +=3D region->count; - } -} - -static void ocelot_check_stats_work(struct work_struct *work) -{ - struct delayed_work *del_work =3D to_delayed_work(work); - struct ocelot *ocelot =3D container_of(del_work, struct ocelot, - stats_work); - int port, err; - - mutex_lock(&ocelot->stat_view_lock); - - for (port =3D 0; port < ocelot->num_phys_ports; port++) { - err =3D ocelot_port_update_stats(ocelot, port); - if (err) - break; - - spin_lock(&ocelot->stats_lock); - ocelot_port_transfer_stats(ocelot, port); - spin_unlock(&ocelot->stats_lock); - } - - if (!err && ocelot->ops->update_stats) - ocelot->ops->update_stats(ocelot); - - mutex_unlock(&ocelot->stat_view_lock); - - if (err) - dev_err(ocelot->dev, "Error %d updating ethtool stats\n", err); - - queue_delayed_work(ocelot->stats_queue, &ocelot->stats_work, - OCELOT_STATS_CHECK_DELAY); -} - -void ocelot_get_ethtool_stats(struct ocelot *ocelot, int port, u64 *data) -{ - int i, err; - - mutex_lock(&ocelot->stat_view_lock); - - /* check and update now */ - err =3D ocelot_port_update_stats(ocelot, port); - - spin_lock(&ocelot->stats_lock); - - ocelot_port_transfer_stats(ocelot, port); - - /* Copy all supported counters */ - for (i =3D 0; i < OCELOT_NUM_STATS; i++) { - int index =3D port * OCELOT_NUM_STATS + i; - - if (ocelot->stats_layout[i].name[0] =3D=3D '\0') - continue; - - *data++ =3D ocelot->stats[index]; - } - - spin_unlock(&ocelot->stats_lock); - - mutex_unlock(&ocelot->stat_view_lock); - - if (err) - dev_err(ocelot->dev, "Error %d updating ethtool stats\n", err); -} -EXPORT_SYMBOL(ocelot_get_ethtool_stats); - -int ocelot_get_sset_count(struct ocelot *ocelot, int port, int sset) -{ - int i, num_stats =3D 0; - - if (sset !=3D ETH_SS_STATS) - return -EOPNOTSUPP; - - for (i =3D 0; i < OCELOT_NUM_STATS; i++) - if (ocelot->stats_layout[i].name[0] !=3D '\0') - num_stats++; - - return num_stats; -} -EXPORT_SYMBOL(ocelot_get_sset_count); - -static int ocelot_prepare_stats_regions(struct ocelot *ocelot) -{ - struct ocelot_stats_region *region =3D NULL; - unsigned int last; - int i; - - INIT_LIST_HEAD(&ocelot->stats_regions); - - for (i =3D 0; i < OCELOT_NUM_STATS; i++) { - if (ocelot->stats_layout[i].name[0] =3D=3D '\0') - continue; - - if (region && ocelot->stats_layout[i].reg =3D=3D last + 4) { - region->count++; - } else { - region =3D devm_kzalloc(ocelot->dev, sizeof(*region), - GFP_KERNEL); - if (!region) - return -ENOMEM; - - region->base =3D ocelot->stats_layout[i].reg; - region->count =3D 1; - list_add_tail(®ion->node, &ocelot->stats_regions); - } - - last =3D ocelot->stats_layout[i].reg; - } - - list_for_each_entry(region, &ocelot->stats_regions, node) { - region->buf =3D devm_kcalloc(ocelot->dev, region->count, - sizeof(*region->buf), GFP_KERNEL); - if (!region->buf) - return -ENOMEM; - } - - return 0; -} - int ocelot_get_ts_info(struct ocelot *ocelot, int port, struct ethtool_ts_info *info) { @@ -3405,7 +3227,6 @@ static void ocelot_detect_features(struct ocelot *oce= lot) =20 int ocelot_init(struct ocelot *ocelot) { - char queue_name[32]; int i, ret; u32 port; =20 @@ -3417,30 +3238,21 @@ int ocelot_init(struct ocelot *ocelot) } } =20 - ocelot->stats =3D devm_kcalloc(ocelot->dev, - ocelot->num_phys_ports * OCELOT_NUM_STATS, - sizeof(u64), GFP_KERNEL); - if (!ocelot->stats) - return -ENOMEM; - - spin_lock_init(&ocelot->stats_lock); - mutex_init(&ocelot->stat_view_lock); mutex_init(&ocelot->ptp_lock); mutex_init(&ocelot->mact_lock); mutex_init(&ocelot->fwd_domain_lock); mutex_init(&ocelot->tas_lock); spin_lock_init(&ocelot->ptp_clock_lock); spin_lock_init(&ocelot->ts_id_lock); - snprintf(queue_name, sizeof(queue_name), "%s-stats", - dev_name(ocelot->dev)); - ocelot->stats_queue =3D create_singlethread_workqueue(queue_name); - if (!ocelot->stats_queue) - return -ENOMEM; =20 ocelot->owq =3D alloc_ordered_workqueue("ocelot-owq", 0); - if (!ocelot->owq) { - destroy_workqueue(ocelot->stats_queue); + if (!ocelot->owq) return -ENOMEM; + + ret =3D ocelot_stats_init(ocelot); + if (ret) { + destroy_workqueue(ocelot->owq); + return ret; } =20 INIT_LIST_HEAD(&ocelot->multicast); @@ -3552,25 +3364,13 @@ int ocelot_init(struct ocelot *ocelot) ANA_CPUQ_8021_CFG_CPUQ_BPDU_VAL(6), ANA_CPUQ_8021_CFG, i); =20 - ret =3D ocelot_prepare_stats_regions(ocelot); - if (ret) { - destroy_workqueue(ocelot->stats_queue); - destroy_workqueue(ocelot->owq); - return ret; - } - - INIT_DELAYED_WORK(&ocelot->stats_work, ocelot_check_stats_work); - queue_delayed_work(ocelot->stats_queue, &ocelot->stats_work, - OCELOT_STATS_CHECK_DELAY); - return 0; } EXPORT_SYMBOL(ocelot_init); =20 void ocelot_deinit(struct ocelot *ocelot) { - cancel_delayed_work(&ocelot->stats_work); - destroy_workqueue(ocelot->stats_queue); + ocelot_stats_deinit(ocelot); destroy_workqueue(ocelot->owq); } EXPORT_SYMBOL(ocelot_deinit); diff --git a/drivers/net/ethernet/mscc/ocelot.h b/drivers/net/ethernet/mscc= /ocelot.h index 6d65cc87d757..37b79593cd5f 100644 --- a/drivers/net/ethernet/mscc/ocelot.h +++ b/drivers/net/ethernet/mscc/ocelot.h @@ -115,6 +115,9 @@ struct ocelot_mirror *ocelot_mirror_get(struct ocelot *= ocelot, int to, struct netlink_ext_ack *extack); void ocelot_mirror_put(struct ocelot *ocelot); =20 +int ocelot_stats_init(struct ocelot *ocelot); +void ocelot_stats_deinit(struct ocelot *ocelot); + extern struct notifier_block ocelot_netdevice_nb; extern struct notifier_block ocelot_switchdev_nb; extern struct notifier_block ocelot_switchdev_blocking_nb; diff --git a/drivers/net/ethernet/mscc/ocelot_stats.c b/drivers/net/etherne= t/mscc/ocelot_stats.c new file mode 100644 index 000000000000..f0f5f06af2e1 --- /dev/null +++ b/drivers/net/ethernet/mscc/ocelot_stats.c @@ -0,0 +1,226 @@ +// SPDX-License-Identifier: (GPL-2.0 OR MIT) +/* Statistics for Ocelot switch family + * + * Copyright (c) 2017 Microsemi Corporation + */ +#include +#include +#include +#include "ocelot.h" + +/* Read the counters from hardware and keep them in region->buf. + * Caller must hold &ocelot->stat_view_lock. + */ +static int ocelot_port_update_stats(struct ocelot *ocelot, int port) +{ + struct ocelot_stats_region *region; + int err; + + /* Configure the port to read the stats from */ + ocelot_write(ocelot, SYS_STAT_CFG_STAT_VIEW(port), SYS_STAT_CFG); + + list_for_each_entry(region, &ocelot->stats_regions, node) { + err =3D ocelot_bulk_read(ocelot, region->base, region->buf, + region->count); + if (err) + return err; + } + + return 0; +} + +/* Transfer the counters from region->buf to ocelot->stats. + * Caller must hold &ocelot->stat_view_lock and &ocelot->stats_lock. + */ +static void ocelot_port_transfer_stats(struct ocelot *ocelot, int port) +{ + unsigned int idx =3D port * OCELOT_NUM_STATS; + struct ocelot_stats_region *region; + int j; + + list_for_each_entry(region, &ocelot->stats_regions, node) { + for (j =3D 0; j < region->count; j++) { + u64 *stat =3D &ocelot->stats[idx + j]; + u64 val =3D region->buf[j]; + + if (val < (*stat & U32_MAX)) + *stat +=3D (u64)1 << 32; + + *stat =3D (*stat & ~(u64)U32_MAX) + val; + } + + idx +=3D region->count; + } +} + +static void ocelot_check_stats_work(struct work_struct *work) +{ + struct delayed_work *del_work =3D to_delayed_work(work); + struct ocelot *ocelot =3D container_of(del_work, struct ocelot, + stats_work); + int port, err; + + mutex_lock(&ocelot->stat_view_lock); + + for (port =3D 0; port < ocelot->num_phys_ports; port++) { + err =3D ocelot_port_update_stats(ocelot, port); + if (err) + break; + + spin_lock(&ocelot->stats_lock); + ocelot_port_transfer_stats(ocelot, port); + spin_unlock(&ocelot->stats_lock); + } + + if (!err && ocelot->ops->update_stats) + ocelot->ops->update_stats(ocelot); + + mutex_unlock(&ocelot->stat_view_lock); + + if (err) + dev_err(ocelot->dev, "Error %d updating ethtool stats\n", err); + + queue_delayed_work(ocelot->stats_queue, &ocelot->stats_work, + OCELOT_STATS_CHECK_DELAY); +} + +void ocelot_get_strings(struct ocelot *ocelot, int port, u32 sset, u8 *dat= a) +{ + int i; + + if (sset !=3D ETH_SS_STATS) + return; + + for (i =3D 0; i < OCELOT_NUM_STATS; i++) { + if (ocelot->stats_layout[i].name[0] =3D=3D '\0') + continue; + + memcpy(data + i * ETH_GSTRING_LEN, ocelot->stats_layout[i].name, + ETH_GSTRING_LEN); + } +} +EXPORT_SYMBOL(ocelot_get_strings); + +void ocelot_get_ethtool_stats(struct ocelot *ocelot, int port, u64 *data) +{ + int i, err; + + mutex_lock(&ocelot->stat_view_lock); + + /* check and update now */ + err =3D ocelot_port_update_stats(ocelot, port); + + spin_lock(&ocelot->stats_lock); + + ocelot_port_transfer_stats(ocelot, port); + + /* Copy all supported counters */ + for (i =3D 0; i < OCELOT_NUM_STATS; i++) { + int index =3D port * OCELOT_NUM_STATS + i; + + if (ocelot->stats_layout[i].name[0] =3D=3D '\0') + continue; + + *data++ =3D ocelot->stats[index]; + } + + spin_unlock(&ocelot->stats_lock); + + mutex_unlock(&ocelot->stat_view_lock); + + if (err) + dev_err(ocelot->dev, "Error %d updating ethtool stats\n", err); +} +EXPORT_SYMBOL(ocelot_get_ethtool_stats); + +int ocelot_get_sset_count(struct ocelot *ocelot, int port, int sset) +{ + int i, num_stats =3D 0; + + if (sset !=3D ETH_SS_STATS) + return -EOPNOTSUPP; + + for (i =3D 0; i < OCELOT_NUM_STATS; i++) + if (ocelot->stats_layout[i].name[0] !=3D '\0') + num_stats++; + + return num_stats; +} +EXPORT_SYMBOL(ocelot_get_sset_count); + +static int ocelot_prepare_stats_regions(struct ocelot *ocelot) +{ + struct ocelot_stats_region *region =3D NULL; + unsigned int last; + int i; + + INIT_LIST_HEAD(&ocelot->stats_regions); + + for (i =3D 0; i < OCELOT_NUM_STATS; i++) { + if (ocelot->stats_layout[i].name[0] =3D=3D '\0') + continue; + + if (region && ocelot->stats_layout[i].reg =3D=3D last + 4) { + region->count++; + } else { + region =3D devm_kzalloc(ocelot->dev, sizeof(*region), + GFP_KERNEL); + if (!region) + return -ENOMEM; + + region->base =3D ocelot->stats_layout[i].reg; + region->count =3D 1; + list_add_tail(®ion->node, &ocelot->stats_regions); + } + + last =3D ocelot->stats_layout[i].reg; + } + + list_for_each_entry(region, &ocelot->stats_regions, node) { + region->buf =3D devm_kcalloc(ocelot->dev, region->count, + sizeof(*region->buf), GFP_KERNEL); + if (!region->buf) + return -ENOMEM; + } + + return 0; +} + +int ocelot_stats_init(struct ocelot *ocelot) +{ + char queue_name[32]; + int ret; + + ocelot->stats =3D devm_kcalloc(ocelot->dev, + ocelot->num_phys_ports * OCELOT_NUM_STATS, + sizeof(u64), GFP_KERNEL); + if (!ocelot->stats) + return -ENOMEM; + + snprintf(queue_name, sizeof(queue_name), "%s-stats", + dev_name(ocelot->dev)); + ocelot->stats_queue =3D create_singlethread_workqueue(queue_name); + if (!ocelot->stats_queue) + return -ENOMEM; + + spin_lock_init(&ocelot->stats_lock); + mutex_init(&ocelot->stat_view_lock); + + ret =3D ocelot_prepare_stats_regions(ocelot); + if (ret) { + destroy_workqueue(ocelot->stats_queue); + return ret; + } + + INIT_DELAYED_WORK(&ocelot->stats_work, ocelot_check_stats_work); + queue_delayed_work(ocelot->stats_queue, &ocelot->stats_work, + OCELOT_STATS_CHECK_DELAY); + + return 0; +} + +void ocelot_stats_deinit(struct ocelot *ocelot) +{ + cancel_delayed_work(&ocelot->stats_work); + destroy_workqueue(ocelot->stats_queue); +} --=20 2.34.1 From nobody Mon Apr 6 08:10:03 2026 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id EF70FC6FA86 for ; Thu, 8 Sep 2022 16:49:42 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229616AbiIHQtk (ORCPT ); Thu, 8 Sep 2022 12:49:40 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44548 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231549AbiIHQtP (ORCPT ); Thu, 8 Sep 2022 12:49:15 -0400 Received: from EUR04-DB3-obe.outbound.protection.outlook.com (mail-eopbgr60072.outbound.protection.outlook.com [40.107.6.72]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id ED6A513B128; Thu, 8 Sep 2022 09:49:09 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=kCWtFN3f9ux6L51sna+x5sj1eJ/G1/QgCWjQoMBTUhAB4SZ3RXgfK4DtK/pDlIFIKDq0N+FlasMmHcXQdWcBihksCDZ/LfHts3ZcDt31V7vSbSMFX5sKnHkB1+K/djUX93dCw7g6zk4hbdwweL/Fg1734vMNb5ZIgMapGRxQFEOadK2WhYeo5MlsrzXPUdxHa2+lJHIJUL9GMgy+c0TWj99YGMpVRhxOcqtVqwA9RgRGHqMc6NAlzNXdHZZ9HnSDc7UTYjKIKu6SPfNsZ8BCRPMY/pnkiBjDZ0o3/V60br+JvEHP2OZXwT4NGxDShyvnjvc7vOnmS+SI0fUNIZGgAw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=DLihaKa6dsbnSMfBapGQRS2Sp5MMPgEOkztcaEuiQMo=; b=eeRcVHyLjU20NiEKRcFbgtVgik8Q5+JZrjuOSTywSSRPU6oRI5fXCIv4X+dR+Vum7XZkqUUF3rFszAqcM78qHH4MCnxNSMtyDnpIojJp6Lj46OGVziDCCgQVBQBRRt8EWHuM1pmvX18uwhrJCesx8sqAQLLRr/JGJEf5wtwXvgSg3uHRPzjcmXVGKr69aPrXuHnSEz0rzUoVgeqDWHdZ+zFLoJ7Z404WmHTjzsuScIvB5Bx0xPZsmRJxayH9pYCP5YNb6r9P9l6cSYRgaaPz2LASjSgKzkjePd16JSDCgvwDvd4QFQz2S3D7UQrZpyQ8cnXAsW9rS619BIGZ76JCiA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=DLihaKa6dsbnSMfBapGQRS2Sp5MMPgEOkztcaEuiQMo=; b=F0FN4zoXCuufxmgzpPgJI4R4qr37h7jf1sKfht109ZR5r8WD3yPom0dHcwPBZEDoRvduI7j9UiPMlKnccK/22VMw5qKYgZIdzGU4WyuGv7UUPMOrXLKTDnTVwg+x25hH4cx+H8GygatdUNMLpDYJ2XH3AOa+SVbBDhVpb1oqSyk= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from VI1PR04MB5136.eurprd04.prod.outlook.com (2603:10a6:803:55::19) by DB7PR04MB5052.eurprd04.prod.outlook.com (2603:10a6:10:1b::32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5588.18; Thu, 8 Sep 2022 16:49:00 +0000 Received: from VI1PR04MB5136.eurprd04.prod.outlook.com ([fe80::3412:9d57:ec73:fef3]) by VI1PR04MB5136.eurprd04.prod.outlook.com ([fe80::3412:9d57:ec73:fef3%5]) with mapi id 15.20.5588.017; Thu, 8 Sep 2022 16:49:00 +0000 From: Vladimir Oltean To: netdev@vger.kernel.org Cc: "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Xiaoliang Yang , Claudiu Manoil , Alexandre Belloni , UNGLinuxDriver@microchip.com, Andrew Lunn , Vivien Didelot , Florian Fainelli , Maxim Kochetkov , Colin Foster , Richie Pearn , linux-kernel@vger.kernel.org Subject: [PATCH net-next 07/14] net: mscc: ocelot: unexport ocelot_port_fdb_do_dump from the common lib Date: Thu, 8 Sep 2022 19:48:09 +0300 Message-Id: <20220908164816.3576795-8-vladimir.oltean@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220908164816.3576795-1-vladimir.oltean@nxp.com> References: <20220908164816.3576795-1-vladimir.oltean@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BEXP281CA0009.DEUP281.PROD.OUTLOOK.COM (2603:10a6:b10::19) To VI1PR04MB5136.eurprd04.prod.outlook.com (2603:10a6:803:55::19) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 18562b9d-99dd-4515-8d5f-08da91b9f8fa X-MS-TrafficTypeDiagnostic: DB7PR04MB5052:EE_ X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: w1OdY/sVxbQrz9lOQPOaOtP+EA3t8fltrewPAtBSiw//WhWzzdFdnNM04Sja9D35zZtvXCgmZ6FpnVV+qLRgI239i2CH/BhmSh/NuNmZ0XmUahYybMe+dKbmfTZ489CCXLDGiXle3NxQFemN0S+dgp4BvXTMbiWyDOA3OatWdYxU/xsPD99pKpkvA5HUlvOYb+Inx7xuW8UGFfrLRYICjmodZHFi/Dylz+BfltIKFYsejEcUfJiiuvH3K+NXkaouyO9dGZt2r9LkU3tioLeKIamngX2OyJvBVV0dqJ9DjRV7Y8wojnLUxUtJ6vEOgUMpkpJvuC4lFymvZ/qXdNuAz80W18GmB7fPKEXlSp4mgHYDw6bpXwxEpWfOYY3aIPi73YPQSVfaiKA964xl+pYP5/ZqMoMEGMfNHZYHBHkr0v0R1s0y43EYjWFb6WvNozobJ4lgNo5j0Oe2BXT+IPmk6cJSX0vDa4FQWdAlWDVQXi20gVDTI24Rcfv0WqD2vxiw5CfMrSJkU7xWcyv4gUDUvuIbyPFvylheS5WPwOCFXqpwFImjURGUWqroMEAIXThv40lD0xP+uwQdQXjHVyQHKAqfnm+rEEHtzJceHV5U8AkIznoja1+QyP76jhQEAUCCMXe2YTNxjxDUF1JrWzFtGb9mFsKWWTeoS9E3j2WJx3Bm+btrDGfPesADuYZywKnW9VG4HZmD3g+KbQiw/vxSO1Nkj57ZMlUT1hmXVePVKdxmYZx1iYlZgGGIFoDCuyGBhBVbKyBw3e2BicCtUBnCEg== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5136.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230016)(4636009)(136003)(39860400002)(396003)(346002)(366004)(376002)(38350700002)(8676002)(66476007)(66946007)(2616005)(6486002)(186003)(66556008)(38100700002)(36756003)(1076003)(4326008)(478600001)(83380400001)(8936002)(2906002)(5660300002)(44832011)(7416002)(52116002)(41300700001)(6506007)(6916009)(26005)(54906003)(6512007)(86362001)(316002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?RpRghoHyX0OAUKNYc/7dsZ+CiCTCPGqbRXbsS/d/Gl64FmGLmz8NLSI72YA+?= =?us-ascii?Q?x96wAZXqsq/iWYYSvm2SMncYRqJ2sJ9Qo4w772f7jzq1xCr/TnAIQBhZRjOt?= =?us-ascii?Q?jTZqwk6h+fkP5B9pwuA2woAz8F8nl6EPSrg1Zvu4TsxQWRr1oa2DVKPJWvbS?= =?us-ascii?Q?E+2+8rVht2BytOJKmIrcgbJYA3JAkIixM6mgNx4OpOGQFNI6X4ZvTSubGVB3?= =?us-ascii?Q?27iKLo9LULOKWKhPyM/Pbegu+0QFzKjJKDlWN1kMLa5IABpMTkye5gykUhD/?= =?us-ascii?Q?TlD0/O8Jgpdg1ont9B2piiFFFeuVvgnDbWrK2Tyz2JnfByoCjMwt5qrOCEr+?= =?us-ascii?Q?FLoozQl3OPPdHuNfJSmVWBcMDqCXoDzqDCNsFxhoTfJ1pkC2MTUueYjFcGpM?= =?us-ascii?Q?2EzrimGe/Ofyglui59tTj7Sj/rFA4Gk/dB0oov0vJL04epfXyfxZUCJqySBK?= =?us-ascii?Q?Y/YP+DNaDllxtQXFlHbiojI6iioQvXfJikqjdx9lJYni+zEYtXLblwBrUiXt?= =?us-ascii?Q?1AnPDioXmJ5eao1wtAd0Qximm/N4DEF+dSHtzV+a13gvzIH0Vrbgp9euE+d4?= =?us-ascii?Q?0L8NuWe1s5tnKPuGSu0ZGgFOpZHV9srqbS3XuEO9sSqGo7vO+F09GDKJOkYd?= =?us-ascii?Q?e44BI3ZbaalQc/fbUx7TDyr0tFrj/NxqbNigYTwUHUKdvWYb8+wdzt23eMKE?= =?us-ascii?Q?wQrGoZ6SAOhD6uCZ9/XxT0rmisX9CWSftBWzRIvcpzQ2v4DFa6DVhj1V0P7F?= =?us-ascii?Q?+9asRWPFbdeWPGz4TX363UBjyurk7YoVHPEvQml69uoXRP9+SXnNfARDr6bl?= =?us-ascii?Q?WoYUAOyFGiVX73N0nhlsKM1+PDxe+1xXVraDN2aOkTED2hG9xARiPxJL9ZoJ?= =?us-ascii?Q?yOcz/zP7azaerzYCsBpvuyQDH9s8HDORe0VmZn8XSNQUK0p9jWI9TXwe4YV1?= =?us-ascii?Q?3DMNvps1pD36VEoDqIG5gT3JAjLrv6ylyayPD1OmNcUhCs7I2BDlMZzbKZsZ?= =?us-ascii?Q?njqSe28F7+xNnSNVXn9v9mhoUW98CHt7/duBQTJVbM/NtDuAAoZDzJI7BA9K?= =?us-ascii?Q?owg8PQAhfT4HS4oYIoT3pB9ynQNhLQ1I6yoLSWZ8BlcJpRWBaSOwnzxSSHwd?= =?us-ascii?Q?8TYF76DtsTjdTWtMjzGnBF5IkJIR92S/EbQ6YVkwa56SOihvzUwdDK/0WvhN?= =?us-ascii?Q?S90IIqa0DjGsPpoKp4eP1hkzythuDP9FKB8QqKQp+2ztySO784067m+hIvN3?= =?us-ascii?Q?2m3lfVRBYrw8/t+aGNnyWVCdEmwM7JPFhzMIMvcal4gnbD8x+xevhdP4/PS/?= =?us-ascii?Q?XBwz0qelJjEHIo5oOyzF18HoJPwU4RHWjXWMiokgU/7kIbYPn3JAdjbElnYo?= =?us-ascii?Q?3y/Ha4tGi/kVlOlESSUaxolpuBAx47UtJDPJhurzi8UhlqMm4+8+WDd2Rivl?= =?us-ascii?Q?bAZlnZtgnDY//lGuE1Jwv19u2LcBl8Aryd87Qgakg3TFES9fBE+czxUzJahe?= =?us-ascii?Q?nQK9xqQQWpgWtg6Zow3LaFNhtVB52ma+lDOYSpGKAm6F4PVw76GN6X5zfRe4?= =?us-ascii?Q?/YamHI6IxWwv/74PSwxXj5DDTkl+DjbxH9drNpz1AfOmXunNXPc59GSiynAJ?= =?us-ascii?Q?OQ=3D=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 18562b9d-99dd-4515-8d5f-08da91b9f8fa X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5136.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Sep 2022 16:48:36.0055 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: MfNGnO+/WxYwR6h19aSIrNMYsWEJwsuZSEJui5fIX1QYHPwC6N5u3ycNkf8BaVabWZ6FCOLbON+Hwfw+8Kvdwg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB7PR04MB5052 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" ocelot_port_fdb_do_dump() is only used by ocelot_net.c, so move it there. Signed-off-by: Vladimir Oltean --- drivers/net/ethernet/mscc/ocelot.c | 44 ----------------------- drivers/net/ethernet/mscc/ocelot.h | 9 ----- drivers/net/ethernet/mscc/ocelot_net.c | 50 ++++++++++++++++++++++++++ 3 files changed, 50 insertions(+), 53 deletions(-) diff --git a/drivers/net/ethernet/mscc/ocelot.c b/drivers/net/ethernet/mscc= /ocelot.c index be3c25ea278a..d1bbc48cc246 100644 --- a/drivers/net/ethernet/mscc/ocelot.c +++ b/drivers/net/ethernet/mscc/ocelot.c @@ -1366,50 +1366,6 @@ int ocelot_fdb_del(struct ocelot *ocelot, int port, = const unsigned char *addr, } EXPORT_SYMBOL(ocelot_fdb_del); =20 -int ocelot_port_fdb_do_dump(const unsigned char *addr, u16 vid, - bool is_static, void *data) -{ - struct ocelot_dump_ctx *dump =3D data; - u32 portid =3D NETLINK_CB(dump->cb->skb).portid; - u32 seq =3D dump->cb->nlh->nlmsg_seq; - struct nlmsghdr *nlh; - struct ndmsg *ndm; - - if (dump->idx < dump->cb->args[2]) - goto skip; - - nlh =3D nlmsg_put(dump->skb, portid, seq, RTM_NEWNEIGH, - sizeof(*ndm), NLM_F_MULTI); - if (!nlh) - return -EMSGSIZE; - - ndm =3D nlmsg_data(nlh); - ndm->ndm_family =3D AF_BRIDGE; - ndm->ndm_pad1 =3D 0; - ndm->ndm_pad2 =3D 0; - ndm->ndm_flags =3D NTF_SELF; - ndm->ndm_type =3D 0; - ndm->ndm_ifindex =3D dump->dev->ifindex; - ndm->ndm_state =3D is_static ? NUD_NOARP : NUD_REACHABLE; - - if (nla_put(dump->skb, NDA_LLADDR, ETH_ALEN, addr)) - goto nla_put_failure; - - if (vid && nla_put_u16(dump->skb, NDA_VLAN, vid)) - goto nla_put_failure; - - nlmsg_end(dump->skb, nlh); - -skip: - dump->idx++; - return 0; - -nla_put_failure: - nlmsg_cancel(dump->skb, nlh); - return -EMSGSIZE; -} -EXPORT_SYMBOL(ocelot_port_fdb_do_dump); - /* Caller must hold &ocelot->mact_lock */ static int ocelot_mact_read(struct ocelot *ocelot, int port, int row, int = col, struct ocelot_mact_entry *entry) diff --git a/drivers/net/ethernet/mscc/ocelot.h b/drivers/net/ethernet/mscc= /ocelot.h index 37b79593cd5f..70dbd9c4e512 100644 --- a/drivers/net/ethernet/mscc/ocelot.h +++ b/drivers/net/ethernet/mscc/ocelot.h @@ -51,13 +51,6 @@ struct ocelot_port_private { struct ocelot_port_tc tc; }; =20 -struct ocelot_dump_ctx { - struct net_device *dev; - struct sk_buff *skb; - struct netlink_callback *cb; - int idx; -}; - /* A (PGID) port mask structure, encoding the 2^ocelot->num_phys_ports * possibilities of egress port masks for L2 multicast traffic. * For a switch with 9 user ports, there are 512 possible port masks, but = the @@ -84,8 +77,6 @@ struct ocelot_multicast { int ocelot_bridge_num_find(struct ocelot *ocelot, const struct net_device *bridge); =20 -int ocelot_port_fdb_do_dump(const unsigned char *addr, u16 vid, - bool is_static, void *data); int ocelot_mact_learn(struct ocelot *ocelot, int port, const unsigned char mac[ETH_ALEN], unsigned int vid, enum macaccess_entry_type type); diff --git a/drivers/net/ethernet/mscc/ocelot_net.c b/drivers/net/ethernet/= mscc/ocelot_net.c index d7956fd051e6..6d41ddd71bf4 100644 --- a/drivers/net/ethernet/mscc/ocelot_net.c +++ b/drivers/net/ethernet/mscc/ocelot_net.c @@ -20,6 +20,13 @@ =20 #define OCELOT_MAC_QUIRKS OCELOT_QUIRK_QSGMII_PORTS_MUST_BE_UP =20 +struct ocelot_dump_ctx { + struct net_device *dev; + struct sk_buff *skb; + struct netlink_callback *cb; + int idx; +}; + static bool ocelot_netdevice_dev_check(const struct net_device *dev); =20 static struct ocelot *devlink_port_to_ocelot(struct devlink_port *dlp) @@ -815,6 +822,49 @@ static int ocelot_port_fdb_del(struct ndmsg *ndm, stru= ct nlattr *tb[], return ocelot_fdb_del(ocelot, port, addr, vid, ocelot_port->bridge); } =20 +static int ocelot_port_fdb_do_dump(const unsigned char *addr, u16 vid, + bool is_static, void *data) +{ + struct ocelot_dump_ctx *dump =3D data; + u32 portid =3D NETLINK_CB(dump->cb->skb).portid; + u32 seq =3D dump->cb->nlh->nlmsg_seq; + struct nlmsghdr *nlh; + struct ndmsg *ndm; + + if (dump->idx < dump->cb->args[2]) + goto skip; + + nlh =3D nlmsg_put(dump->skb, portid, seq, RTM_NEWNEIGH, + sizeof(*ndm), NLM_F_MULTI); + if (!nlh) + return -EMSGSIZE; + + ndm =3D nlmsg_data(nlh); + ndm->ndm_family =3D AF_BRIDGE; + ndm->ndm_pad1 =3D 0; + ndm->ndm_pad2 =3D 0; + ndm->ndm_flags =3D NTF_SELF; + ndm->ndm_type =3D 0; + ndm->ndm_ifindex =3D dump->dev->ifindex; + ndm->ndm_state =3D is_static ? NUD_NOARP : NUD_REACHABLE; + + if (nla_put(dump->skb, NDA_LLADDR, ETH_ALEN, addr)) + goto nla_put_failure; + + if (vid && nla_put_u16(dump->skb, NDA_VLAN, vid)) + goto nla_put_failure; + + nlmsg_end(dump->skb, nlh); + +skip: + dump->idx++; + return 0; + +nla_put_failure: + nlmsg_cancel(dump->skb, nlh); + return -EMSGSIZE; +} + static int ocelot_port_fdb_dump(struct sk_buff *skb, struct netlink_callback *cb, struct net_device *dev, --=20 2.34.1 From nobody Mon Apr 6 08:10:03 2026 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9390BC38145 for ; Thu, 8 Sep 2022 16:49:51 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230521AbiIHQtt (ORCPT ); Thu, 8 Sep 2022 12:49:49 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44260 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231569AbiIHQtR (ORCPT ); Thu, 8 Sep 2022 12:49:17 -0400 Received: from EUR04-DB3-obe.outbound.protection.outlook.com (mail-eopbgr60072.outbound.protection.outlook.com [40.107.6.72]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6C77013B13C; Thu, 8 Sep 2022 09:49:13 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=AypFLXTB4UMWrOvWD5nTuONTN2n3mu9kWQyuwFCmb1ObW74LDnOFZ9FK/MXHRPBVFhTE8IA/zOiLisMTbsLkxvklopWbvxnCQbDZJtizeWwqA62eLi0jgVdif0mkd7GjG+ugDsz+SsMPzoUhnCmel3MqAijispREU6BOx3dEcjM7c4Pn0znUgBB+6gGCJiFFmxbri8vnK+0PmeyU0UFJk7ADaqTYV+sTRKzGrjqah+wzVvi8lmAW7CVkf9imGwztjfE7Uaql7gR1NaW4bnNSp7AkEF/736Z+D3QgqadvUFgjjXJU1CZGoSUpmgOQz8sDnXTMDAIL7b802Yma22+1LA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=T2iRSxjYVHk4OCwZ/reTTbpapcos1TCJ7hYFRS8ERBk=; b=IoAeHgWToMf0p62fxfS++sAJ6A+ruJWdsmul/3bmJ6fjsM8ejF8cZBiq0ve7OKPy8itCAp2rIrh4brRmYOBGtUGUAt8EEEixGko0bxHgup89g0UmwqDqECRux293f9RaSa1mP4ojI5wvyCXlASDjNIEX7iJakHBK205OeUyK+IdJqhlJvWePb+2dfYBeRDTMkg4mXlW1MDGkM4cXOx03MW0DgLT+kpfGW+RcJMFpeNyx2v2YjnkYZHMM1bJ5XF7xu29wNMA8TdPluqaQkStuvDf939+onVEaxgiNsxXq/7rMzEjKq5NPXqGDxVwqkefJMq/Rbjc1eUxaER4fA2omrw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=T2iRSxjYVHk4OCwZ/reTTbpapcos1TCJ7hYFRS8ERBk=; b=Pdn4qHTzTLH4+voFdhkKcQBMH4xQTrEd6jteamt5wMvdg+A54jwqz7j/ONJFskUN5Wdg0O0H3d5sRT7x2oTnzoJ1adQWQKDXQ5AzYycfLVaV71p4r5x4SoBQOsLx4ppZCFCZOGCt4zCUv8sINFl1+AC6rFR7J1z5Fb5HF9rAdsE= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from VI1PR04MB5136.eurprd04.prod.outlook.com (2603:10a6:803:55::19) by DB7PR04MB5052.eurprd04.prod.outlook.com (2603:10a6:10:1b::32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5588.18; Thu, 8 Sep 2022 16:49:03 +0000 Received: from VI1PR04MB5136.eurprd04.prod.outlook.com ([fe80::3412:9d57:ec73:fef3]) by VI1PR04MB5136.eurprd04.prod.outlook.com ([fe80::3412:9d57:ec73:fef3%5]) with mapi id 15.20.5588.017; Thu, 8 Sep 2022 16:49:03 +0000 From: Vladimir Oltean To: netdev@vger.kernel.org Cc: "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Xiaoliang Yang , Claudiu Manoil , Alexandre Belloni , UNGLinuxDriver@microchip.com, Andrew Lunn , Vivien Didelot , Florian Fainelli , Maxim Kochetkov , Colin Foster , Richie Pearn , linux-kernel@vger.kernel.org Subject: [PATCH net-next 08/14] net: mscc: ocelot: move more PTP code from the lib to ocelot_ptp.c Date: Thu, 8 Sep 2022 19:48:10 +0300 Message-Id: <20220908164816.3576795-9-vladimir.oltean@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220908164816.3576795-1-vladimir.oltean@nxp.com> References: <20220908164816.3576795-1-vladimir.oltean@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BEXP281CA0009.DEUP281.PROD.OUTLOOK.COM (2603:10a6:b10::19) To VI1PR04MB5136.eurprd04.prod.outlook.com (2603:10a6:803:55::19) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 73745b91-c278-4dea-a859-08da91b9f9bb X-MS-TrafficTypeDiagnostic: DB7PR04MB5052:EE_ X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: akDK7vc4c9DnwzUrLev91UL0J1mp5QOk1n4O4fFrIxrygwM4l5XY6F5Ui2PmJFA87W3VNE6Piabbp5pb0zoyW5dDhqyLN7IHI/yHgAU0eZe5bGbH2BkyY6JY6VpAwnhLT/20at72iue7KypgxDllE8xnK9qhuLbJzVWVOvOxYMfhXs+wUpmrF9QcvvTY70LbvbfvvLMi9RKfsC4H2v5wmF48yuSvnh2B7kV/3WmJfwNzbkb5V+gnpR3HuAbjvv+FrZLT1u7Q6/8k52bJ+aiObIgA+558ss81jfU1VYzoIT6YsRT9lrtKsPtk9X3I9kdf3w2Tjx1qkPn/Qixds2t7OoOQbVKwg2VKFPzbdd/XNP5tCrrPrvbeEb4oUgBWHIDR5yy+rw+SZqtgS16ocaWJsAPDY8fjZSflursgXIjZusB3bO4sLmYAjgEqILN8Ptntvipn82BQA2JJwxKlV42ycFb9klhLyTZsYnJH2SB/0QIkpf9U0Br681w6V3qUXsRVOsxNf6tVzEGLLi+r3Kr9lmy4n8E3b7kVEfT8Pxou86O7eldou+Ca+F5bSy+4W7wrWnBaoDEcH9/xJDShEGgLYtNcFCdpfyJVmLYj0dnd1fVD2iTR9/dcp46AlJ45aWzLwXj8nQwpZ1ByidZDzrWuuca0+CzB+51UUIhPkoVGjhVU+oqppIJG5Wr6mf8ouOWqq3RoeiNJQOSkHxJ51HGl5P/3sZWbWq16DGsS6eVIqpuOaAnnznU+dCXgpVjx99SJAPOFg/u16Hd+XuFgfPyoTw== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5136.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230016)(4636009)(136003)(39860400002)(396003)(346002)(366004)(376002)(38350700002)(8676002)(66476007)(66946007)(2616005)(6486002)(186003)(66556008)(38100700002)(36756003)(1076003)(4326008)(478600001)(83380400001)(8936002)(2906002)(5660300002)(44832011)(30864003)(7416002)(52116002)(41300700001)(6666004)(6506007)(6916009)(26005)(54906003)(6512007)(86362001)(316002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?ucyH9Z7ZJIBxoYxrkrjCQ0+61PBc0UMc7MRaJO+32rAQr2qOIX3DKIeBip7j?= =?us-ascii?Q?dfS5avWbPdSs4z0DCeRwZBfgUZciStJ+v4fdUSCQ/PlPhMHYQmvFlLUEJ/Ui?= =?us-ascii?Q?rV15YhmbbHm9blc9/E/AGfuQVKWPdD/w5kVU432Pdu8iiqByzTb87l/TN/nF?= =?us-ascii?Q?a4i7CUX9rhDk86DXts7ptnoNIkv2A8UNT4KbHBovk3+4bXS6fBdIcCdqeOvi?= =?us-ascii?Q?xKaSad6KTj3oKPaVSSsq7pA0RCikQpgtdTrWGjQXLK/ZO252BK19Hn4UnjLw?= =?us-ascii?Q?H52l51LE4zAocfvV/yusjCdSwGmROCjWv2xEUVAWsACh+4iWKeG/0PlNobEa?= =?us-ascii?Q?MzGk889XDd0ChHc33m1DwxWefUqy97kJ538Jrs3CzNqD6/NR2+YW8yVWIF2S?= =?us-ascii?Q?HlBwGS4yPt967juIzIZMcAc2P0QdS+d2svtZbyIxcy7r3dDlsv/70lndhcRB?= =?us-ascii?Q?W/L+UdNoiwGgMNM19aLPCHsMeFz2Ma5ovQ6iOvEi1oXYRPtZFufc9wt3vnu8?= =?us-ascii?Q?Dx4noZwGrAp3mLs++r6qLGzBaa/XyIlk657R563CMQnanbbx2x/MN2DO7vj0?= =?us-ascii?Q?gqLtJfTUDnj1wm581YuHqQIYzmPKUm4LWCKnsDD6Ij294df4xTyXCpMids+q?= =?us-ascii?Q?v2EFBu+SytM5mROaKtoLX5QsyX5TfeYrABv4FO2ZB6LG/VgnH2NGw5sSix0X?= =?us-ascii?Q?Ur26/TIeuccHylw1XriJJv0Oi26v6pBzfd5z0QC3uB1vQCpY1wy6PXUATEcU?= =?us-ascii?Q?aH6xSrnpD3fvbCjMk9BDuWFDH5RkwJ4WTZe5fdD8ES0Q+CBE+thI0GQjkHLj?= =?us-ascii?Q?zmpunB4wwwDE8tE58VrK8xoANCtOzgJSaWgT+MMRg+Qgk7EBnTQwSx+Rym6S?= =?us-ascii?Q?61L0zLJoyzP/ydgJb3dxY/8sK/KunfskJL480hcXxK+J5YDm/T6lDijOpoEf?= =?us-ascii?Q?4yKTt5QBpd8Owo3QfFtk/6gBkb8OtL7JHibIrha2+Lb4x8U3Od01S0f0WHJi?= =?us-ascii?Q?QATky3mWVYAVP7+719OQ9t3RfwE15YeoglafPd1kzzbZKXN5eaeeDteYPKy3?= =?us-ascii?Q?2e3iPN3zo8EZ5f3LzhrJ0Z3JRyvhqnJo3msNckX5pnqcxqwJ2eCTcFFyWCrv?= =?us-ascii?Q?uqrZY3At7JFmSXKIwehFOq+MjycXri/Qv0U/FOqJASRmcdRLv2qPbu6bGoSB?= =?us-ascii?Q?ngC2F5zr3GfNZWmSRv1Spz9gZJZCUX3c3BDjDwZ2CkzBIeGS1TSGVsB1nXRn?= =?us-ascii?Q?Wi+O98mhsG6o4yKBPCWn11D33EFjYX6RsF5G9YMkjsN/OT2rnt/tvZlhL6nl?= =?us-ascii?Q?6QTJxebV306qBiqDsdaog/KNbYrOAyjvBvG8hMdmxncF9KFDeQj5T3zbMRCd?= =?us-ascii?Q?05+SKUARVyA2aG2CrVq+nGZVdNFBhNVAIT6wkehjlz7JEvc7m3uEAv2TvjFv?= =?us-ascii?Q?6mqOzOkSZJiE4T15FaHlXU/zhnqGOzRrLQwwdRblHNMewNOt5e6lUICYXSzZ?= =?us-ascii?Q?xmYj+Pzuw0d/rIstQUrdYmnHva5eGjR79hckT4Q9ycUok3yOfRlFmslIX+XI?= =?us-ascii?Q?cvgQNSTL3Nh7BsDIThWMb+KGhGPd2uvCV5Yv1lVpnYr7Pawezj3RgkwT2HcV?= =?us-ascii?Q?wQ=3D=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 73745b91-c278-4dea-a859-08da91b9f9bb X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5136.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Sep 2022 16:48:37.3023 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: L2sJnjbgH+cosrAz00FiCEsdQBG4cFUFU8yTrqEYuZc3mVdBKNNvnMMe1R5MUbTkWIACnRcf3+rzHMTiBChpUQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB7PR04MB5052 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Decongest ocelot.c a bit more by moving all PTP related logic (including timestamp processing and PTP packet traps) to ocelot_ptp.c. Signed-off-by: Vladimir Oltean --- drivers/net/ethernet/mscc/ocelot.c | 478 ------------------------ drivers/net/ethernet/mscc/ocelot_ptp.c | 481 +++++++++++++++++++++++++ 2 files changed, 481 insertions(+), 478 deletions(-) diff --git a/drivers/net/ethernet/mscc/ocelot.c b/drivers/net/ethernet/mscc= /ocelot.c index d1bbc48cc246..874fb2a5874e 100644 --- a/drivers/net/ethernet/mscc/ocelot.c +++ b/drivers/net/ethernet/mscc/ocelot.c @@ -6,7 +6,6 @@ */ #include #include -#include #include #include "ocelot.h" #include "ocelot_vcap.h" @@ -910,211 +909,6 @@ void ocelot_phylink_mac_link_up(struct ocelot *ocelot= , int port, } EXPORT_SYMBOL_GPL(ocelot_phylink_mac_link_up); =20 -static int ocelot_port_add_txtstamp_skb(struct ocelot *ocelot, int port, - struct sk_buff *clone) -{ - struct ocelot_port *ocelot_port =3D ocelot->ports[port]; - unsigned long flags; - - spin_lock_irqsave(&ocelot->ts_id_lock, flags); - - if (ocelot_port->ptp_skbs_in_flight =3D=3D OCELOT_MAX_PTP_ID || - ocelot->ptp_skbs_in_flight =3D=3D OCELOT_PTP_FIFO_SIZE) { - spin_unlock_irqrestore(&ocelot->ts_id_lock, flags); - return -EBUSY; - } - - skb_shinfo(clone)->tx_flags |=3D SKBTX_IN_PROGRESS; - /* Store timestamp ID in OCELOT_SKB_CB(clone)->ts_id */ - OCELOT_SKB_CB(clone)->ts_id =3D ocelot_port->ts_id; - - ocelot_port->ts_id++; - if (ocelot_port->ts_id =3D=3D OCELOT_MAX_PTP_ID) - ocelot_port->ts_id =3D 0; - - ocelot_port->ptp_skbs_in_flight++; - ocelot->ptp_skbs_in_flight++; - - skb_queue_tail(&ocelot_port->tx_skbs, clone); - - spin_unlock_irqrestore(&ocelot->ts_id_lock, flags); - - return 0; -} - -static bool ocelot_ptp_is_onestep_sync(struct sk_buff *skb, - unsigned int ptp_class) -{ - struct ptp_header *hdr; - u8 msgtype, twostep; - - hdr =3D ptp_parse_header(skb, ptp_class); - if (!hdr) - return false; - - msgtype =3D ptp_get_msgtype(hdr, ptp_class); - twostep =3D hdr->flag_field[0] & 0x2; - - if (msgtype =3D=3D PTP_MSGTYPE_SYNC && twostep =3D=3D 0) - return true; - - return false; -} - -int ocelot_port_txtstamp_request(struct ocelot *ocelot, int port, - struct sk_buff *skb, - struct sk_buff **clone) -{ - struct ocelot_port *ocelot_port =3D ocelot->ports[port]; - u8 ptp_cmd =3D ocelot_port->ptp_cmd; - unsigned int ptp_class; - int err; - - /* Don't do anything if PTP timestamping not enabled */ - if (!ptp_cmd) - return 0; - - ptp_class =3D ptp_classify_raw(skb); - if (ptp_class =3D=3D PTP_CLASS_NONE) - return -EINVAL; - - /* Store ptp_cmd in OCELOT_SKB_CB(skb)->ptp_cmd */ - if (ptp_cmd =3D=3D IFH_REW_OP_ORIGIN_PTP) { - if (ocelot_ptp_is_onestep_sync(skb, ptp_class)) { - OCELOT_SKB_CB(skb)->ptp_cmd =3D ptp_cmd; - return 0; - } - - /* Fall back to two-step timestamping */ - ptp_cmd =3D IFH_REW_OP_TWO_STEP_PTP; - } - - if (ptp_cmd =3D=3D IFH_REW_OP_TWO_STEP_PTP) { - *clone =3D skb_clone_sk(skb); - if (!(*clone)) - return -ENOMEM; - - err =3D ocelot_port_add_txtstamp_skb(ocelot, port, *clone); - if (err) - return err; - - OCELOT_SKB_CB(skb)->ptp_cmd =3D ptp_cmd; - OCELOT_SKB_CB(*clone)->ptp_class =3D ptp_class; - } - - return 0; -} -EXPORT_SYMBOL(ocelot_port_txtstamp_request); - -static void ocelot_get_hwtimestamp(struct ocelot *ocelot, - struct timespec64 *ts) -{ - unsigned long flags; - u32 val; - - spin_lock_irqsave(&ocelot->ptp_clock_lock, flags); - - /* Read current PTP time to get seconds */ - val =3D ocelot_read_rix(ocelot, PTP_PIN_CFG, TOD_ACC_PIN); - - val &=3D ~(PTP_PIN_CFG_SYNC | PTP_PIN_CFG_ACTION_MASK | PTP_PIN_CFG_DOM); - val |=3D PTP_PIN_CFG_ACTION(PTP_PIN_ACTION_SAVE); - ocelot_write_rix(ocelot, val, PTP_PIN_CFG, TOD_ACC_PIN); - ts->tv_sec =3D ocelot_read_rix(ocelot, PTP_PIN_TOD_SEC_LSB, TOD_ACC_PIN); - - /* Read packet HW timestamp from FIFO */ - val =3D ocelot_read(ocelot, SYS_PTP_TXSTAMP); - ts->tv_nsec =3D SYS_PTP_TXSTAMP_PTP_TXSTAMP(val); - - /* Sec has incremented since the ts was registered */ - if ((ts->tv_sec & 0x1) !=3D !!(val & SYS_PTP_TXSTAMP_PTP_TXSTAMP_SEC)) - ts->tv_sec--; - - spin_unlock_irqrestore(&ocelot->ptp_clock_lock, flags); -} - -static bool ocelot_validate_ptp_skb(struct sk_buff *clone, u16 seqid) -{ - struct ptp_header *hdr; - - hdr =3D ptp_parse_header(clone, OCELOT_SKB_CB(clone)->ptp_class); - if (WARN_ON(!hdr)) - return false; - - return seqid =3D=3D ntohs(hdr->sequence_id); -} - -void ocelot_get_txtstamp(struct ocelot *ocelot) -{ - int budget =3D OCELOT_PTP_QUEUE_SZ; - - while (budget--) { - struct sk_buff *skb, *skb_tmp, *skb_match =3D NULL; - struct skb_shared_hwtstamps shhwtstamps; - u32 val, id, seqid, txport; - struct ocelot_port *port; - struct timespec64 ts; - unsigned long flags; - - val =3D ocelot_read(ocelot, SYS_PTP_STATUS); - - /* Check if a timestamp can be retrieved */ - if (!(val & SYS_PTP_STATUS_PTP_MESS_VLD)) - break; - - WARN_ON(val & SYS_PTP_STATUS_PTP_OVFL); - - /* Retrieve the ts ID and Tx port */ - id =3D SYS_PTP_STATUS_PTP_MESS_ID_X(val); - txport =3D SYS_PTP_STATUS_PTP_MESS_TXPORT_X(val); - seqid =3D SYS_PTP_STATUS_PTP_MESS_SEQ_ID(val); - - port =3D ocelot->ports[txport]; - - spin_lock(&ocelot->ts_id_lock); - port->ptp_skbs_in_flight--; - ocelot->ptp_skbs_in_flight--; - spin_unlock(&ocelot->ts_id_lock); - - /* Retrieve its associated skb */ -try_again: - spin_lock_irqsave(&port->tx_skbs.lock, flags); - - skb_queue_walk_safe(&port->tx_skbs, skb, skb_tmp) { - if (OCELOT_SKB_CB(skb)->ts_id !=3D id) - continue; - __skb_unlink(skb, &port->tx_skbs); - skb_match =3D skb; - break; - } - - spin_unlock_irqrestore(&port->tx_skbs.lock, flags); - - if (WARN_ON(!skb_match)) - continue; - - if (!ocelot_validate_ptp_skb(skb_match, seqid)) { - dev_err_ratelimited(ocelot->dev, - "port %d received stale TX timestamp for seqid %d, discarding\n", - txport, seqid); - dev_kfree_skb_any(skb); - goto try_again; - } - - /* Get the h/w timestamp */ - ocelot_get_hwtimestamp(ocelot, &ts); - - /* Set the timestamp into the skb */ - memset(&shhwtstamps, 0, sizeof(shhwtstamps)); - shhwtstamps.hwtstamp =3D ktime_set(ts.tv_sec, ts.tv_nsec); - skb_complete_tx_timestamp(skb_match, &shhwtstamps); - - /* Next ts */ - ocelot_write(ocelot, SYS_PTP_NXT_PTP_NXT, SYS_PTP_NXT); - } -} -EXPORT_SYMBOL(ocelot_get_txtstamp); - static int ocelot_rx_frame_word(struct ocelot *ocelot, u8 grp, bool ifh, u32 *rval) { @@ -1497,53 +1291,6 @@ int ocelot_fdb_dump(struct ocelot *ocelot, int port, } EXPORT_SYMBOL(ocelot_fdb_dump); =20 -static void ocelot_populate_l2_ptp_trap_key(struct ocelot_vcap_filter *tra= p) -{ - trap->key_type =3D OCELOT_VCAP_KEY_ETYPE; - *(__be16 *)trap->key.etype.etype.value =3D htons(ETH_P_1588); - *(__be16 *)trap->key.etype.etype.mask =3D htons(0xffff); -} - -static void -ocelot_populate_ipv4_ptp_event_trap_key(struct ocelot_vcap_filter *trap) -{ - trap->key_type =3D OCELOT_VCAP_KEY_IPV4; - trap->key.ipv4.proto.value[0] =3D IPPROTO_UDP; - trap->key.ipv4.proto.mask[0] =3D 0xff; - trap->key.ipv4.dport.value =3D PTP_EV_PORT; - trap->key.ipv4.dport.mask =3D 0xffff; -} - -static void -ocelot_populate_ipv6_ptp_event_trap_key(struct ocelot_vcap_filter *trap) -{ - trap->key_type =3D OCELOT_VCAP_KEY_IPV6; - trap->key.ipv4.proto.value[0] =3D IPPROTO_UDP; - trap->key.ipv4.proto.mask[0] =3D 0xff; - trap->key.ipv6.dport.value =3D PTP_EV_PORT; - trap->key.ipv6.dport.mask =3D 0xffff; -} - -static void -ocelot_populate_ipv4_ptp_general_trap_key(struct ocelot_vcap_filter *trap) -{ - trap->key_type =3D OCELOT_VCAP_KEY_IPV4; - trap->key.ipv4.proto.value[0] =3D IPPROTO_UDP; - trap->key.ipv4.proto.mask[0] =3D 0xff; - trap->key.ipv4.dport.value =3D PTP_GEN_PORT; - trap->key.ipv4.dport.mask =3D 0xffff; -} - -static void -ocelot_populate_ipv6_ptp_general_trap_key(struct ocelot_vcap_filter *trap) -{ - trap->key_type =3D OCELOT_VCAP_KEY_IPV6; - trap->key.ipv4.proto.value[0] =3D IPPROTO_UDP; - trap->key.ipv4.proto.mask[0] =3D 0xff; - trap->key.ipv6.dport.value =3D PTP_GEN_PORT; - trap->key.ipv6.dport.mask =3D 0xffff; -} - int ocelot_trap_add(struct ocelot *ocelot, int port, unsigned long cookie, bool take_ts, void (*populate)(struct ocelot_vcap_filter *f)) @@ -1612,231 +1359,6 @@ int ocelot_trap_del(struct ocelot *ocelot, int port= , unsigned long cookie) return ocelot_vcap_filter_replace(ocelot, trap); } =20 -static int ocelot_l2_ptp_trap_add(struct ocelot *ocelot, int port) -{ - unsigned long l2_cookie =3D OCELOT_VCAP_IS2_L2_PTP_TRAP(ocelot); - - return ocelot_trap_add(ocelot, port, l2_cookie, true, - ocelot_populate_l2_ptp_trap_key); -} - -static int ocelot_l2_ptp_trap_del(struct ocelot *ocelot, int port) -{ - unsigned long l2_cookie =3D OCELOT_VCAP_IS2_L2_PTP_TRAP(ocelot); - - return ocelot_trap_del(ocelot, port, l2_cookie); -} - -static int ocelot_ipv4_ptp_trap_add(struct ocelot *ocelot, int port) -{ - unsigned long ipv4_gen_cookie =3D OCELOT_VCAP_IS2_IPV4_GEN_PTP_TRAP(ocelo= t); - unsigned long ipv4_ev_cookie =3D OCELOT_VCAP_IS2_IPV4_EV_PTP_TRAP(ocelot); - int err; - - err =3D ocelot_trap_add(ocelot, port, ipv4_ev_cookie, true, - ocelot_populate_ipv4_ptp_event_trap_key); - if (err) - return err; - - err =3D ocelot_trap_add(ocelot, port, ipv4_gen_cookie, false, - ocelot_populate_ipv4_ptp_general_trap_key); - if (err) - ocelot_trap_del(ocelot, port, ipv4_ev_cookie); - - return err; -} - -static int ocelot_ipv4_ptp_trap_del(struct ocelot *ocelot, int port) -{ - unsigned long ipv4_gen_cookie =3D OCELOT_VCAP_IS2_IPV4_GEN_PTP_TRAP(ocelo= t); - unsigned long ipv4_ev_cookie =3D OCELOT_VCAP_IS2_IPV4_EV_PTP_TRAP(ocelot); - int err; - - err =3D ocelot_trap_del(ocelot, port, ipv4_ev_cookie); - err |=3D ocelot_trap_del(ocelot, port, ipv4_gen_cookie); - return err; -} - -static int ocelot_ipv6_ptp_trap_add(struct ocelot *ocelot, int port) -{ - unsigned long ipv6_gen_cookie =3D OCELOT_VCAP_IS2_IPV6_GEN_PTP_TRAP(ocelo= t); - unsigned long ipv6_ev_cookie =3D OCELOT_VCAP_IS2_IPV6_EV_PTP_TRAP(ocelot); - int err; - - err =3D ocelot_trap_add(ocelot, port, ipv6_ev_cookie, true, - ocelot_populate_ipv6_ptp_event_trap_key); - if (err) - return err; - - err =3D ocelot_trap_add(ocelot, port, ipv6_gen_cookie, false, - ocelot_populate_ipv6_ptp_general_trap_key); - if (err) - ocelot_trap_del(ocelot, port, ipv6_ev_cookie); - - return err; -} - -static int ocelot_ipv6_ptp_trap_del(struct ocelot *ocelot, int port) -{ - unsigned long ipv6_gen_cookie =3D OCELOT_VCAP_IS2_IPV6_GEN_PTP_TRAP(ocelo= t); - unsigned long ipv6_ev_cookie =3D OCELOT_VCAP_IS2_IPV6_EV_PTP_TRAP(ocelot); - int err; - - err =3D ocelot_trap_del(ocelot, port, ipv6_ev_cookie); - err |=3D ocelot_trap_del(ocelot, port, ipv6_gen_cookie); - return err; -} - -static int ocelot_setup_ptp_traps(struct ocelot *ocelot, int port, - bool l2, bool l4) -{ - int err; - - if (l2) - err =3D ocelot_l2_ptp_trap_add(ocelot, port); - else - err =3D ocelot_l2_ptp_trap_del(ocelot, port); - if (err) - return err; - - if (l4) { - err =3D ocelot_ipv4_ptp_trap_add(ocelot, port); - if (err) - goto err_ipv4; - - err =3D ocelot_ipv6_ptp_trap_add(ocelot, port); - if (err) - goto err_ipv6; - } else { - err =3D ocelot_ipv4_ptp_trap_del(ocelot, port); - - err |=3D ocelot_ipv6_ptp_trap_del(ocelot, port); - } - if (err) - return err; - - return 0; - -err_ipv6: - ocelot_ipv4_ptp_trap_del(ocelot, port); -err_ipv4: - if (l2) - ocelot_l2_ptp_trap_del(ocelot, port); - return err; -} - -int ocelot_hwstamp_get(struct ocelot *ocelot, int port, struct ifreq *ifr) -{ - return copy_to_user(ifr->ifr_data, &ocelot->hwtstamp_config, - sizeof(ocelot->hwtstamp_config)) ? -EFAULT : 0; -} -EXPORT_SYMBOL(ocelot_hwstamp_get); - -int ocelot_hwstamp_set(struct ocelot *ocelot, int port, struct ifreq *ifr) -{ - struct ocelot_port *ocelot_port =3D ocelot->ports[port]; - bool l2 =3D false, l4 =3D false; - struct hwtstamp_config cfg; - int err; - - if (copy_from_user(&cfg, ifr->ifr_data, sizeof(cfg))) - return -EFAULT; - - /* Tx type sanity check */ - switch (cfg.tx_type) { - case HWTSTAMP_TX_ON: - ocelot_port->ptp_cmd =3D IFH_REW_OP_TWO_STEP_PTP; - break; - case HWTSTAMP_TX_ONESTEP_SYNC: - /* IFH_REW_OP_ONE_STEP_PTP updates the correctional field, we - * need to update the origin time. - */ - ocelot_port->ptp_cmd =3D IFH_REW_OP_ORIGIN_PTP; - break; - case HWTSTAMP_TX_OFF: - ocelot_port->ptp_cmd =3D 0; - break; - default: - return -ERANGE; - } - - mutex_lock(&ocelot->ptp_lock); - - switch (cfg.rx_filter) { - case HWTSTAMP_FILTER_NONE: - break; - case HWTSTAMP_FILTER_PTP_V2_L4_EVENT: - case HWTSTAMP_FILTER_PTP_V2_L4_SYNC: - case HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ: - l4 =3D true; - break; - case HWTSTAMP_FILTER_PTP_V2_L2_EVENT: - case HWTSTAMP_FILTER_PTP_V2_L2_SYNC: - case HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ: - l2 =3D true; - break; - case HWTSTAMP_FILTER_PTP_V2_EVENT: - case HWTSTAMP_FILTER_PTP_V2_SYNC: - case HWTSTAMP_FILTER_PTP_V2_DELAY_REQ: - l2 =3D true; - l4 =3D true; - break; - default: - mutex_unlock(&ocelot->ptp_lock); - return -ERANGE; - } - - err =3D ocelot_setup_ptp_traps(ocelot, port, l2, l4); - if (err) { - mutex_unlock(&ocelot->ptp_lock); - return err; - } - - if (l2 && l4) - cfg.rx_filter =3D HWTSTAMP_FILTER_PTP_V2_EVENT; - else if (l2) - cfg.rx_filter =3D HWTSTAMP_FILTER_PTP_V2_L2_EVENT; - else if (l4) - cfg.rx_filter =3D HWTSTAMP_FILTER_PTP_V2_L4_EVENT; - else - cfg.rx_filter =3D HWTSTAMP_FILTER_NONE; - - /* Commit back the result & save it */ - memcpy(&ocelot->hwtstamp_config, &cfg, sizeof(cfg)); - mutex_unlock(&ocelot->ptp_lock); - - return copy_to_user(ifr->ifr_data, &cfg, sizeof(cfg)) ? -EFAULT : 0; -} -EXPORT_SYMBOL(ocelot_hwstamp_set); - -int ocelot_get_ts_info(struct ocelot *ocelot, int port, - struct ethtool_ts_info *info) -{ - info->phc_index =3D ocelot->ptp_clock ? - ptp_clock_index(ocelot->ptp_clock) : -1; - if (info->phc_index =3D=3D -1) { - info->so_timestamping |=3D SOF_TIMESTAMPING_TX_SOFTWARE | - SOF_TIMESTAMPING_RX_SOFTWARE | - SOF_TIMESTAMPING_SOFTWARE; - return 0; - } - info->so_timestamping |=3D SOF_TIMESTAMPING_TX_SOFTWARE | - SOF_TIMESTAMPING_RX_SOFTWARE | - SOF_TIMESTAMPING_SOFTWARE | - SOF_TIMESTAMPING_TX_HARDWARE | - SOF_TIMESTAMPING_RX_HARDWARE | - SOF_TIMESTAMPING_RAW_HARDWARE; - info->tx_types =3D BIT(HWTSTAMP_TX_OFF) | BIT(HWTSTAMP_TX_ON) | - BIT(HWTSTAMP_TX_ONESTEP_SYNC); - info->rx_filters =3D BIT(HWTSTAMP_FILTER_NONE) | - BIT(HWTSTAMP_FILTER_PTP_V2_EVENT) | - BIT(HWTSTAMP_FILTER_PTP_V2_L2_EVENT) | - BIT(HWTSTAMP_FILTER_PTP_V2_L4_EVENT); - - return 0; -} -EXPORT_SYMBOL(ocelot_get_ts_info); - static u32 ocelot_get_bond_mask(struct ocelot *ocelot, struct net_device *= bond) { u32 mask =3D 0; diff --git a/drivers/net/ethernet/mscc/ocelot_ptp.c b/drivers/net/ethernet/= mscc/ocelot_ptp.c index 09c703efe946..1a82f10c8853 100644 --- a/drivers/net/ethernet/mscc/ocelot_ptp.c +++ b/drivers/net/ethernet/mscc/ocelot_ptp.c @@ -6,9 +6,13 @@ */ #include =20 +#include +#include #include #include +#include #include +#include "ocelot.h" =20 int ocelot_ptp_gettime64(struct ptp_clock_info *ptp, struct timespec64 *ts) { @@ -310,6 +314,483 @@ int ocelot_ptp_enable(struct ptp_clock_info *ptp, } EXPORT_SYMBOL(ocelot_ptp_enable); =20 +static void ocelot_populate_l2_ptp_trap_key(struct ocelot_vcap_filter *tra= p) +{ + trap->key_type =3D OCELOT_VCAP_KEY_ETYPE; + *(__be16 *)trap->key.etype.etype.value =3D htons(ETH_P_1588); + *(__be16 *)trap->key.etype.etype.mask =3D htons(0xffff); +} + +static void +ocelot_populate_ipv4_ptp_event_trap_key(struct ocelot_vcap_filter *trap) +{ + trap->key_type =3D OCELOT_VCAP_KEY_IPV4; + trap->key.ipv4.proto.value[0] =3D IPPROTO_UDP; + trap->key.ipv4.proto.mask[0] =3D 0xff; + trap->key.ipv4.dport.value =3D PTP_EV_PORT; + trap->key.ipv4.dport.mask =3D 0xffff; +} + +static void +ocelot_populate_ipv6_ptp_event_trap_key(struct ocelot_vcap_filter *trap) +{ + trap->key_type =3D OCELOT_VCAP_KEY_IPV6; + trap->key.ipv4.proto.value[0] =3D IPPROTO_UDP; + trap->key.ipv4.proto.mask[0] =3D 0xff; + trap->key.ipv6.dport.value =3D PTP_EV_PORT; + trap->key.ipv6.dport.mask =3D 0xffff; +} + +static void +ocelot_populate_ipv4_ptp_general_trap_key(struct ocelot_vcap_filter *trap) +{ + trap->key_type =3D OCELOT_VCAP_KEY_IPV4; + trap->key.ipv4.proto.value[0] =3D IPPROTO_UDP; + trap->key.ipv4.proto.mask[0] =3D 0xff; + trap->key.ipv4.dport.value =3D PTP_GEN_PORT; + trap->key.ipv4.dport.mask =3D 0xffff; +} + +static void +ocelot_populate_ipv6_ptp_general_trap_key(struct ocelot_vcap_filter *trap) +{ + trap->key_type =3D OCELOT_VCAP_KEY_IPV6; + trap->key.ipv4.proto.value[0] =3D IPPROTO_UDP; + trap->key.ipv4.proto.mask[0] =3D 0xff; + trap->key.ipv6.dport.value =3D PTP_GEN_PORT; + trap->key.ipv6.dport.mask =3D 0xffff; +} + +static int ocelot_l2_ptp_trap_add(struct ocelot *ocelot, int port) +{ + unsigned long l2_cookie =3D OCELOT_VCAP_IS2_L2_PTP_TRAP(ocelot); + + return ocelot_trap_add(ocelot, port, l2_cookie, true, + ocelot_populate_l2_ptp_trap_key); +} + +static int ocelot_l2_ptp_trap_del(struct ocelot *ocelot, int port) +{ + unsigned long l2_cookie =3D OCELOT_VCAP_IS2_L2_PTP_TRAP(ocelot); + + return ocelot_trap_del(ocelot, port, l2_cookie); +} + +static int ocelot_ipv4_ptp_trap_add(struct ocelot *ocelot, int port) +{ + unsigned long ipv4_gen_cookie =3D OCELOT_VCAP_IS2_IPV4_GEN_PTP_TRAP(ocelo= t); + unsigned long ipv4_ev_cookie =3D OCELOT_VCAP_IS2_IPV4_EV_PTP_TRAP(ocelot); + int err; + + err =3D ocelot_trap_add(ocelot, port, ipv4_ev_cookie, true, + ocelot_populate_ipv4_ptp_event_trap_key); + if (err) + return err; + + err =3D ocelot_trap_add(ocelot, port, ipv4_gen_cookie, false, + ocelot_populate_ipv4_ptp_general_trap_key); + if (err) + ocelot_trap_del(ocelot, port, ipv4_ev_cookie); + + return err; +} + +static int ocelot_ipv4_ptp_trap_del(struct ocelot *ocelot, int port) +{ + unsigned long ipv4_gen_cookie =3D OCELOT_VCAP_IS2_IPV4_GEN_PTP_TRAP(ocelo= t); + unsigned long ipv4_ev_cookie =3D OCELOT_VCAP_IS2_IPV4_EV_PTP_TRAP(ocelot); + int err; + + err =3D ocelot_trap_del(ocelot, port, ipv4_ev_cookie); + err |=3D ocelot_trap_del(ocelot, port, ipv4_gen_cookie); + return err; +} + +static int ocelot_ipv6_ptp_trap_add(struct ocelot *ocelot, int port) +{ + unsigned long ipv6_gen_cookie =3D OCELOT_VCAP_IS2_IPV6_GEN_PTP_TRAP(ocelo= t); + unsigned long ipv6_ev_cookie =3D OCELOT_VCAP_IS2_IPV6_EV_PTP_TRAP(ocelot); + int err; + + err =3D ocelot_trap_add(ocelot, port, ipv6_ev_cookie, true, + ocelot_populate_ipv6_ptp_event_trap_key); + if (err) + return err; + + err =3D ocelot_trap_add(ocelot, port, ipv6_gen_cookie, false, + ocelot_populate_ipv6_ptp_general_trap_key); + if (err) + ocelot_trap_del(ocelot, port, ipv6_ev_cookie); + + return err; +} + +static int ocelot_ipv6_ptp_trap_del(struct ocelot *ocelot, int port) +{ + unsigned long ipv6_gen_cookie =3D OCELOT_VCAP_IS2_IPV6_GEN_PTP_TRAP(ocelo= t); + unsigned long ipv6_ev_cookie =3D OCELOT_VCAP_IS2_IPV6_EV_PTP_TRAP(ocelot); + int err; + + err =3D ocelot_trap_del(ocelot, port, ipv6_ev_cookie); + err |=3D ocelot_trap_del(ocelot, port, ipv6_gen_cookie); + return err; +} + +static int ocelot_setup_ptp_traps(struct ocelot *ocelot, int port, + bool l2, bool l4) +{ + int err; + + if (l2) + err =3D ocelot_l2_ptp_trap_add(ocelot, port); + else + err =3D ocelot_l2_ptp_trap_del(ocelot, port); + if (err) + return err; + + if (l4) { + err =3D ocelot_ipv4_ptp_trap_add(ocelot, port); + if (err) + goto err_ipv4; + + err =3D ocelot_ipv6_ptp_trap_add(ocelot, port); + if (err) + goto err_ipv6; + } else { + err =3D ocelot_ipv4_ptp_trap_del(ocelot, port); + + err |=3D ocelot_ipv6_ptp_trap_del(ocelot, port); + } + if (err) + return err; + + return 0; + +err_ipv6: + ocelot_ipv4_ptp_trap_del(ocelot, port); +err_ipv4: + if (l2) + ocelot_l2_ptp_trap_del(ocelot, port); + return err; +} + +int ocelot_hwstamp_get(struct ocelot *ocelot, int port, struct ifreq *ifr) +{ + return copy_to_user(ifr->ifr_data, &ocelot->hwtstamp_config, + sizeof(ocelot->hwtstamp_config)) ? -EFAULT : 0; +} +EXPORT_SYMBOL(ocelot_hwstamp_get); + +int ocelot_hwstamp_set(struct ocelot *ocelot, int port, struct ifreq *ifr) +{ + struct ocelot_port *ocelot_port =3D ocelot->ports[port]; + bool l2 =3D false, l4 =3D false; + struct hwtstamp_config cfg; + int err; + + if (copy_from_user(&cfg, ifr->ifr_data, sizeof(cfg))) + return -EFAULT; + + /* Tx type sanity check */ + switch (cfg.tx_type) { + case HWTSTAMP_TX_ON: + ocelot_port->ptp_cmd =3D IFH_REW_OP_TWO_STEP_PTP; + break; + case HWTSTAMP_TX_ONESTEP_SYNC: + /* IFH_REW_OP_ONE_STEP_PTP updates the correctional field, we + * need to update the origin time. + */ + ocelot_port->ptp_cmd =3D IFH_REW_OP_ORIGIN_PTP; + break; + case HWTSTAMP_TX_OFF: + ocelot_port->ptp_cmd =3D 0; + break; + default: + return -ERANGE; + } + + mutex_lock(&ocelot->ptp_lock); + + switch (cfg.rx_filter) { + case HWTSTAMP_FILTER_NONE: + break; + case HWTSTAMP_FILTER_PTP_V2_L4_EVENT: + case HWTSTAMP_FILTER_PTP_V2_L4_SYNC: + case HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ: + l4 =3D true; + break; + case HWTSTAMP_FILTER_PTP_V2_L2_EVENT: + case HWTSTAMP_FILTER_PTP_V2_L2_SYNC: + case HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ: + l2 =3D true; + break; + case HWTSTAMP_FILTER_PTP_V2_EVENT: + case HWTSTAMP_FILTER_PTP_V2_SYNC: + case HWTSTAMP_FILTER_PTP_V2_DELAY_REQ: + l2 =3D true; + l4 =3D true; + break; + default: + mutex_unlock(&ocelot->ptp_lock); + return -ERANGE; + } + + err =3D ocelot_setup_ptp_traps(ocelot, port, l2, l4); + if (err) { + mutex_unlock(&ocelot->ptp_lock); + return err; + } + + if (l2 && l4) + cfg.rx_filter =3D HWTSTAMP_FILTER_PTP_V2_EVENT; + else if (l2) + cfg.rx_filter =3D HWTSTAMP_FILTER_PTP_V2_L2_EVENT; + else if (l4) + cfg.rx_filter =3D HWTSTAMP_FILTER_PTP_V2_L4_EVENT; + else + cfg.rx_filter =3D HWTSTAMP_FILTER_NONE; + + /* Commit back the result & save it */ + memcpy(&ocelot->hwtstamp_config, &cfg, sizeof(cfg)); + mutex_unlock(&ocelot->ptp_lock); + + return copy_to_user(ifr->ifr_data, &cfg, sizeof(cfg)) ? -EFAULT : 0; +} +EXPORT_SYMBOL(ocelot_hwstamp_set); + +int ocelot_get_ts_info(struct ocelot *ocelot, int port, + struct ethtool_ts_info *info) +{ + info->phc_index =3D ocelot->ptp_clock ? + ptp_clock_index(ocelot->ptp_clock) : -1; + if (info->phc_index =3D=3D -1) { + info->so_timestamping |=3D SOF_TIMESTAMPING_TX_SOFTWARE | + SOF_TIMESTAMPING_RX_SOFTWARE | + SOF_TIMESTAMPING_SOFTWARE; + return 0; + } + info->so_timestamping |=3D SOF_TIMESTAMPING_TX_SOFTWARE | + SOF_TIMESTAMPING_RX_SOFTWARE | + SOF_TIMESTAMPING_SOFTWARE | + SOF_TIMESTAMPING_TX_HARDWARE | + SOF_TIMESTAMPING_RX_HARDWARE | + SOF_TIMESTAMPING_RAW_HARDWARE; + info->tx_types =3D BIT(HWTSTAMP_TX_OFF) | BIT(HWTSTAMP_TX_ON) | + BIT(HWTSTAMP_TX_ONESTEP_SYNC); + info->rx_filters =3D BIT(HWTSTAMP_FILTER_NONE) | + BIT(HWTSTAMP_FILTER_PTP_V2_EVENT) | + BIT(HWTSTAMP_FILTER_PTP_V2_L2_EVENT) | + BIT(HWTSTAMP_FILTER_PTP_V2_L4_EVENT); + + return 0; +} +EXPORT_SYMBOL(ocelot_get_ts_info); + +static int ocelot_port_add_txtstamp_skb(struct ocelot *ocelot, int port, + struct sk_buff *clone) +{ + struct ocelot_port *ocelot_port =3D ocelot->ports[port]; + unsigned long flags; + + spin_lock_irqsave(&ocelot->ts_id_lock, flags); + + if (ocelot_port->ptp_skbs_in_flight =3D=3D OCELOT_MAX_PTP_ID || + ocelot->ptp_skbs_in_flight =3D=3D OCELOT_PTP_FIFO_SIZE) { + spin_unlock_irqrestore(&ocelot->ts_id_lock, flags); + return -EBUSY; + } + + skb_shinfo(clone)->tx_flags |=3D SKBTX_IN_PROGRESS; + /* Store timestamp ID in OCELOT_SKB_CB(clone)->ts_id */ + OCELOT_SKB_CB(clone)->ts_id =3D ocelot_port->ts_id; + + ocelot_port->ts_id++; + if (ocelot_port->ts_id =3D=3D OCELOT_MAX_PTP_ID) + ocelot_port->ts_id =3D 0; + + ocelot_port->ptp_skbs_in_flight++; + ocelot->ptp_skbs_in_flight++; + + skb_queue_tail(&ocelot_port->tx_skbs, clone); + + spin_unlock_irqrestore(&ocelot->ts_id_lock, flags); + + return 0; +} + +static bool ocelot_ptp_is_onestep_sync(struct sk_buff *skb, + unsigned int ptp_class) +{ + struct ptp_header *hdr; + u8 msgtype, twostep; + + hdr =3D ptp_parse_header(skb, ptp_class); + if (!hdr) + return false; + + msgtype =3D ptp_get_msgtype(hdr, ptp_class); + twostep =3D hdr->flag_field[0] & 0x2; + + if (msgtype =3D=3D PTP_MSGTYPE_SYNC && twostep =3D=3D 0) + return true; + + return false; +} + +int ocelot_port_txtstamp_request(struct ocelot *ocelot, int port, + struct sk_buff *skb, + struct sk_buff **clone) +{ + struct ocelot_port *ocelot_port =3D ocelot->ports[port]; + u8 ptp_cmd =3D ocelot_port->ptp_cmd; + unsigned int ptp_class; + int err; + + /* Don't do anything if PTP timestamping not enabled */ + if (!ptp_cmd) + return 0; + + ptp_class =3D ptp_classify_raw(skb); + if (ptp_class =3D=3D PTP_CLASS_NONE) + return -EINVAL; + + /* Store ptp_cmd in OCELOT_SKB_CB(skb)->ptp_cmd */ + if (ptp_cmd =3D=3D IFH_REW_OP_ORIGIN_PTP) { + if (ocelot_ptp_is_onestep_sync(skb, ptp_class)) { + OCELOT_SKB_CB(skb)->ptp_cmd =3D ptp_cmd; + return 0; + } + + /* Fall back to two-step timestamping */ + ptp_cmd =3D IFH_REW_OP_TWO_STEP_PTP; + } + + if (ptp_cmd =3D=3D IFH_REW_OP_TWO_STEP_PTP) { + *clone =3D skb_clone_sk(skb); + if (!(*clone)) + return -ENOMEM; + + err =3D ocelot_port_add_txtstamp_skb(ocelot, port, *clone); + if (err) + return err; + + OCELOT_SKB_CB(skb)->ptp_cmd =3D ptp_cmd; + OCELOT_SKB_CB(*clone)->ptp_class =3D ptp_class; + } + + return 0; +} +EXPORT_SYMBOL(ocelot_port_txtstamp_request); + +static void ocelot_get_hwtimestamp(struct ocelot *ocelot, + struct timespec64 *ts) +{ + unsigned long flags; + u32 val; + + spin_lock_irqsave(&ocelot->ptp_clock_lock, flags); + + /* Read current PTP time to get seconds */ + val =3D ocelot_read_rix(ocelot, PTP_PIN_CFG, TOD_ACC_PIN); + + val &=3D ~(PTP_PIN_CFG_SYNC | PTP_PIN_CFG_ACTION_MASK | PTP_PIN_CFG_DOM); + val |=3D PTP_PIN_CFG_ACTION(PTP_PIN_ACTION_SAVE); + ocelot_write_rix(ocelot, val, PTP_PIN_CFG, TOD_ACC_PIN); + ts->tv_sec =3D ocelot_read_rix(ocelot, PTP_PIN_TOD_SEC_LSB, TOD_ACC_PIN); + + /* Read packet HW timestamp from FIFO */ + val =3D ocelot_read(ocelot, SYS_PTP_TXSTAMP); + ts->tv_nsec =3D SYS_PTP_TXSTAMP_PTP_TXSTAMP(val); + + /* Sec has incremented since the ts was registered */ + if ((ts->tv_sec & 0x1) !=3D !!(val & SYS_PTP_TXSTAMP_PTP_TXSTAMP_SEC)) + ts->tv_sec--; + + spin_unlock_irqrestore(&ocelot->ptp_clock_lock, flags); +} + +static bool ocelot_validate_ptp_skb(struct sk_buff *clone, u16 seqid) +{ + struct ptp_header *hdr; + + hdr =3D ptp_parse_header(clone, OCELOT_SKB_CB(clone)->ptp_class); + if (WARN_ON(!hdr)) + return false; + + return seqid =3D=3D ntohs(hdr->sequence_id); +} + +void ocelot_get_txtstamp(struct ocelot *ocelot) +{ + int budget =3D OCELOT_PTP_QUEUE_SZ; + + while (budget--) { + struct sk_buff *skb, *skb_tmp, *skb_match =3D NULL; + struct skb_shared_hwtstamps shhwtstamps; + u32 val, id, seqid, txport; + struct ocelot_port *port; + struct timespec64 ts; + unsigned long flags; + + val =3D ocelot_read(ocelot, SYS_PTP_STATUS); + + /* Check if a timestamp can be retrieved */ + if (!(val & SYS_PTP_STATUS_PTP_MESS_VLD)) + break; + + WARN_ON(val & SYS_PTP_STATUS_PTP_OVFL); + + /* Retrieve the ts ID and Tx port */ + id =3D SYS_PTP_STATUS_PTP_MESS_ID_X(val); + txport =3D SYS_PTP_STATUS_PTP_MESS_TXPORT_X(val); + seqid =3D SYS_PTP_STATUS_PTP_MESS_SEQ_ID(val); + + port =3D ocelot->ports[txport]; + + spin_lock(&ocelot->ts_id_lock); + port->ptp_skbs_in_flight--; + ocelot->ptp_skbs_in_flight--; + spin_unlock(&ocelot->ts_id_lock); + + /* Retrieve its associated skb */ +try_again: + spin_lock_irqsave(&port->tx_skbs.lock, flags); + + skb_queue_walk_safe(&port->tx_skbs, skb, skb_tmp) { + if (OCELOT_SKB_CB(skb)->ts_id !=3D id) + continue; + __skb_unlink(skb, &port->tx_skbs); + skb_match =3D skb; + break; + } + + spin_unlock_irqrestore(&port->tx_skbs.lock, flags); + + if (WARN_ON(!skb_match)) + continue; + + if (!ocelot_validate_ptp_skb(skb_match, seqid)) { + dev_err_ratelimited(ocelot->dev, + "port %d received stale TX timestamp for seqid %d, discarding\n", + txport, seqid); + dev_kfree_skb_any(skb); + goto try_again; + } + + /* Get the h/w timestamp */ + ocelot_get_hwtimestamp(ocelot, &ts); + + /* Set the timestamp into the skb */ + memset(&shhwtstamps, 0, sizeof(shhwtstamps)); + shhwtstamps.hwtstamp =3D ktime_set(ts.tv_sec, ts.tv_nsec); + skb_complete_tx_timestamp(skb_match, &shhwtstamps); + + /* Next ts */ + ocelot_write(ocelot, SYS_PTP_NXT_PTP_NXT, SYS_PTP_NXT); + } +} +EXPORT_SYMBOL(ocelot_get_txtstamp); + int ocelot_init_timestamp(struct ocelot *ocelot, const struct ptp_clock_info *info) { --=20 2.34.1 From nobody Mon Apr 6 08:10:03 2026 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id C02AEC54EE9 for ; Thu, 8 Sep 2022 16:49:57 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231859AbiIHQtz (ORCPT ); Thu, 8 Sep 2022 12:49:55 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44114 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231574AbiIHQtR (ORCPT ); Thu, 8 Sep 2022 12:49:17 -0400 Received: from EUR04-DB3-obe.outbound.protection.outlook.com (mail-eopbgr60072.outbound.protection.outlook.com [40.107.6.72]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 84C1212BFAE; Thu, 8 Sep 2022 09:49:16 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=A7xGmPyq1TROg3h4Ui8H0nRwAN7s11tSE5qQq/cp2zFUrWchzB1RU16OXpr7qLzkC3t1/v/AxjcK52QiuHBic2lJhJt3G0FRdJ5/+pmzkoHZoCKLQewxzFbJ467tO+aYM3lNiqFM9jJ6bl6p2lkWEQlUAhy/AVsNU3rNkXyErUXlby/P1tBc8iVt4M4bmkQ0PZZHpp4Zeirqycn3zprdY1NZzxDa+SBI1xrUN0hTWtCY6ApeCe4QidynSGu644xbilkvmURPkE6hV/OdA/Kyei3wescQkRPbq7QgRAGxlOmH65RCykwzo4KSvB5tvix0E8oZxCj5ZG8ushxqUuKjgA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=FQ/7yZplwdr2eHPsy6FblXlqRUMxVCEJov26ATdLlg4=; b=Lycc38bCmS7UZNum12/w6hqIj27ZgS/O6dAX4PF6oJwUJX4zLQLDzGl0ReaURZGpveT62ktoHqcU38lK8zzOzeh6iC6b5P+pon9lhKV5vcm24FttaUI3SrXg3MlToIjV/U+Maj3KIc6f/Kijeb3XMX6UnByat/rUrSQgUtSX1xqbfry4xWHOAMPQDZRV9XJqvTQARPRTasMNdsgCUreFCFCKlY+riWnXLVpgWqCciJ8t8XTt92mpxkMAk6RXjNjLEJ343PTnErvk4dAN8te0qwlEUsinqq+eKe4YOjuMfol32Q94pYv57qhFWQ11x18HwAyOU5VSTreJ2Bx2QQb/6A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=FQ/7yZplwdr2eHPsy6FblXlqRUMxVCEJov26ATdLlg4=; b=oYifQaWrV3STKzhHUo80y5O+9ApuyhcHGKi1cF07EAXB/2HpT/WoFDz6i9gYUfaAld7lGhyfeJnDtOjgVcwdd2Dj35kpBpigedTNbCKnkXiiqGrJKUHiTWtxkUliOj4Jbj/35Il9ARHqVfw9smKrf8N5AEsVkJ8Xg5YDzkX7NB0= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from VI1PR04MB5136.eurprd04.prod.outlook.com (2603:10a6:803:55::19) by DB7PR04MB5052.eurprd04.prod.outlook.com (2603:10a6:10:1b::32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5588.18; Thu, 8 Sep 2022 16:49:09 +0000 Received: from VI1PR04MB5136.eurprd04.prod.outlook.com ([fe80::3412:9d57:ec73:fef3]) by VI1PR04MB5136.eurprd04.prod.outlook.com ([fe80::3412:9d57:ec73:fef3%5]) with mapi id 15.20.5588.017; Thu, 8 Sep 2022 16:49:09 +0000 From: Vladimir Oltean To: netdev@vger.kernel.org Cc: "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Xiaoliang Yang , Claudiu Manoil , Alexandre Belloni , UNGLinuxDriver@microchip.com, Andrew Lunn , Vivien Didelot , Florian Fainelli , Maxim Kochetkov , Colin Foster , Richie Pearn , linux-kernel@vger.kernel.org Subject: [PATCH net-next 09/14] net: dsa: felix: use ocelot's ndo_get_stats64 method Date: Thu, 8 Sep 2022 19:48:11 +0300 Message-Id: <20220908164816.3576795-10-vladimir.oltean@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220908164816.3576795-1-vladimir.oltean@nxp.com> References: <20220908164816.3576795-1-vladimir.oltean@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BEXP281CA0009.DEUP281.PROD.OUTLOOK.COM (2603:10a6:b10::19) To VI1PR04MB5136.eurprd04.prod.outlook.com (2603:10a6:803:55::19) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 3237aa52-c53d-4078-25b3-08da91b9fa7f X-MS-TrafficTypeDiagnostic: DB7PR04MB5052:EE_ X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: tatO+I0c8nGTgeKWarSpV2qTknL/Fp1uHO/UQ8OBw68g1VQRKPdKMLHyqWvenxtzKAE08FC3t6d8UfW3n2dPUCR0MKm7iFOO1YMRpdOHjgAlb1RqgqJQMZfPAoKYFJ+ZRjkXbVFsJvJaXLAi5uTWG/S0UrvySOjG9GxMlnS/PlDiDO3ApjHkiETqP+zhilXta7MUl1zi+yKw0dgyXeGw4GLncw37LeJCcoQk0/LHIB5qQVGLNfi+VuGQ1iOdxMIfcMPtPRn13k01szv6KolBGtWJrYb8FEFpFRTSdLvA0UBteS4EaEj8Uj/dC4Qn2Hobx3wc/QgxHaMmkX/EV3xs9PONFVVomAWg6Xn6St22se+xv6WNdN2TEr/6YOT7HQd2+YfD+wnc/i+s809pQkS73gEJohU46llNl0abyy+jzXOd/dd38rp10jHWpZkjhNLT1cJ3SHIEg7m+Rv1gdTXAzbjQKMt3fGKLXmSpwJhqvJBhISkWClPOz6lqJKz63OVxM+fTggmB75x/oWfI5YUXVEhnO1R/3mWmkGePh4z+H16VNw9l5jrSn/dBfVMQ4/rLCzc/QtzhbrepkVsHbmdobD7zBJX150u/ovwa4jU7Z6WjOKgflG/iglB2eSHDb9G4hn6t+dk0kibHsLo4XdwGAJF+7H4VjMIAGf8WxW9C2+QGVVs2Uojyudzwe3REwkqcC2h+dJZVeZZvcfQTm7Sxp415BQjxznONH6ZomOoIyoL/WC/DjhyXYg5J4Q2z/6wz+EuKmg+viSmCRv7GuW1Frw== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5136.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230016)(4636009)(136003)(39860400002)(396003)(346002)(366004)(376002)(38350700002)(8676002)(66476007)(66946007)(2616005)(6486002)(186003)(66556008)(38100700002)(36756003)(1076003)(4326008)(478600001)(83380400001)(8936002)(2906002)(5660300002)(44832011)(7416002)(52116002)(41300700001)(6666004)(6506007)(6916009)(26005)(54906003)(6512007)(86362001)(316002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?B7byR3AIYTtHYstiuyHVGKo7EzyBKK1HY+PXnkEZdOk9xpoQ0/2sSwBh67Ws?= =?us-ascii?Q?zq1sUZ1cEeCt3ls36MnYbixanPYou06BWPRFsjdqjK/X+lM0RHB6HcfXaPZV?= =?us-ascii?Q?rGVqdrRsPOcbCFwbN5bR0CzxZFmETNV7WLkV6NlfVZKsi0BsXVY6wh51I5VL?= =?us-ascii?Q?Y//KxcrN/UgUcInU0WCyj+P1/DIGpGQL1Wwu47slBp/6wp8eI/IFoU+Hrc7c?= =?us-ascii?Q?xm/pl8vU3ORMFVjK4TmumQqXiGmXQWrfFkoHzot+ruiSe4mT4dGYF7FhpjoP?= =?us-ascii?Q?N+JJt5c+dT80oswx5S0AQ1jvBiRDEPFk4QX8/MNrQm+A5gDHWNZRWAry2+3q?= =?us-ascii?Q?KeHzJqXXTSLECQGzl5DaSfkHE4hxhQK0o3OUfWW5kETJiFfZJyBo5rkiOkE5?= =?us-ascii?Q?yCkI+AKhi42Ccjw/1aLlCnzXM537eQYfjtxccDD9m7DSlx1ZJp5LVTydE0ku?= =?us-ascii?Q?HXnYrGie4V4K4D12rzEnYpR3szgSDFH6Eafeie6vUmkgPTK5bRihYNTqpJbm?= =?us-ascii?Q?4eCurMOhbRY0cpdQZr4byWXklsdRgFmyTCwn5a1vq2RG/hZjrPoy7W2ZOb2i?= =?us-ascii?Q?7Xpfj0JKC68BeDmP8XFK0mJYPcYwD02JOnLRFt06BlIrWXVtL+KVfuLFNd/U?= =?us-ascii?Q?TRCxVz6/yPBnhkyyu2US9tov0TBVIuaN1GMc0/DI9bJwyq9t+4SQifXXcZSu?= =?us-ascii?Q?9USrsZsvaPejYM9dy15aTF0phXLyuig+3BXy+T+ItLD4DFBFdlMBjkshGBCp?= =?us-ascii?Q?FU+cuQztePuPDHRVmhTgEqYaBnnqOw8+8OOjP2EAn9bAFQ0TKGtYNY01rUtM?= =?us-ascii?Q?NAZ+EsA2mGB5bMAamShbMhysAQ34r5criNjvigiVSRXDE+JVg43Tj4KcGLni?= =?us-ascii?Q?qmrbSa8kYlYFxg6yUP5qRzNIu0awYUNcBOK39iqUAI+NnDTddvZLTdQhlVcf?= =?us-ascii?Q?lV3qNFpSmo1uGqowUi51EyXdmDqTjDTJXGEayLIrolCvuV2+OHS+omLoFyZn?= =?us-ascii?Q?Ot1RULQomfm0b7bKHsX8YMp80/ByBU/gkRdev1hAkUvN20txFMFqoX0/D3G8?= =?us-ascii?Q?5LIG9vB2o67we4p//4v/x7F8NOXYpaFCdFxYp9WcfQ31akj0eIjW/URvKFB/?= =?us-ascii?Q?x3rmIz5AHhvmZ0Y9W7FQhKX/I9oN3JDvAECoxDGb/vombMe4VdSYwvQIDQHq?= =?us-ascii?Q?6gFhq+m2ZJ9A976gyer/vRQjSa1CWceOV42ERZ+CBzeMGzMtciVuJtjVVGcC?= =?us-ascii?Q?8DSTp8kdvnPpI83JxUwgwSeZZ2F5lGa/JPeFMIL9vOV2OIi4rwc92VQE1jzb?= =?us-ascii?Q?acDMNWggfKdyjUpSq1N2L6G08IZ5lIbOJwqc0VnMnwAw2R/4UtgX9EBwr8Dz?= =?us-ascii?Q?qt2GEXK+IR1SJK7osHNPDciKVNkOLPMx5B+Jc2ZSEvnPKXmr6vfSA0lahPug?= =?us-ascii?Q?0gSzgKpJBHXQJdDxqkB1/e3DVS3HpqKh2ooSbhBfZLOEFtRlBsCuLqZxk117?= =?us-ascii?Q?xDE0prM+Gyoj+4GTbYgh+vD60H7phrZSDa2gEuKBQ5hoeuSVSXNdPvSIZBv4?= =?us-ascii?Q?RHI885Yj7FhjmWUq0UGjK9GKnKqFrkXz144oOoJHDeaqrpYrFHeJZYxdaBYR?= =?us-ascii?Q?tw=3D=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3237aa52-c53d-4078-25b3-08da91b9fa7f X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5136.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Sep 2022 16:48:38.5835 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 1fRenNwn2f5oy2ZX2KOpXFfeP2UR7ledivJSo1V3jSY9pH7UixFHsGtch4OpjWINKOu9ByAJ6WeqUQwKsfX/bg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB7PR04MB5052 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Move the logic from the ocelot switchdev driver's ocelot_get_stats64() method to the common switch lib and reuse it for the DSA driver. Signed-off-by: Vladimir Oltean --- drivers/net/dsa/ocelot/felix.c | 9 ++++ drivers/net/ethernet/mscc/ocelot_net.c | 63 +---------------------- drivers/net/ethernet/mscc/ocelot_stats.c | 65 ++++++++++++++++++++++++ include/soc/mscc/ocelot.h | 2 + 4 files changed, 78 insertions(+), 61 deletions(-) diff --git a/drivers/net/dsa/ocelot/felix.c b/drivers/net/dsa/ocelot/felix.c index ee19ed96f284..71e22990aa67 100644 --- a/drivers/net/dsa/ocelot/felix.c +++ b/drivers/net/dsa/ocelot/felix.c @@ -1034,6 +1034,14 @@ static void felix_port_qos_map_init(struct ocelot *o= celot, int port) } } =20 +static void felix_get_stats64(struct dsa_switch *ds, int port, + struct rtnl_link_stats64 *stats) +{ + struct ocelot *ocelot =3D ds->priv; + + ocelot_port_get_stats64(ocelot, port, stats); +} + static void felix_get_strings(struct dsa_switch *ds, int port, u32 stringset, u8 *data) { @@ -1848,6 +1856,7 @@ const struct dsa_switch_ops felix_switch_ops =3D { .setup =3D felix_setup, .teardown =3D felix_teardown, .set_ageing_time =3D felix_set_ageing_time, + .get_stats64 =3D felix_get_stats64, .get_strings =3D felix_get_strings, .get_ethtool_stats =3D felix_get_ethtool_stats, .get_sset_count =3D felix_get_sset_count, diff --git a/drivers/net/ethernet/mscc/ocelot_net.c b/drivers/net/ethernet/= mscc/ocelot_net.c index 6d41ddd71bf4..2979fb1ba0f7 100644 --- a/drivers/net/ethernet/mscc/ocelot_net.c +++ b/drivers/net/ethernet/mscc/ocelot_net.c @@ -732,67 +732,8 @@ static void ocelot_get_stats64(struct net_device *dev, struct ocelot_port_private *priv =3D netdev_priv(dev); struct ocelot *ocelot =3D priv->port.ocelot; int port =3D priv->port.index; - u64 *s; - - spin_lock(&ocelot->stats_lock); - - s =3D &ocelot->stats[port * OCELOT_NUM_STATS]; - - /* Get Rx stats */ - stats->rx_bytes =3D s[OCELOT_STAT_RX_OCTETS]; - stats->rx_packets =3D s[OCELOT_STAT_RX_SHORTS] + - s[OCELOT_STAT_RX_FRAGMENTS] + - s[OCELOT_STAT_RX_JABBERS] + - s[OCELOT_STAT_RX_LONGS] + - s[OCELOT_STAT_RX_64] + - s[OCELOT_STAT_RX_65_127] + - s[OCELOT_STAT_RX_128_255] + - s[OCELOT_STAT_RX_256_511] + - s[OCELOT_STAT_RX_512_1023] + - s[OCELOT_STAT_RX_1024_1526] + - s[OCELOT_STAT_RX_1527_MAX]; - stats->multicast =3D s[OCELOT_STAT_RX_MULTICAST]; - stats->rx_missed_errors =3D s[OCELOT_STAT_DROP_TAIL]; - stats->rx_dropped =3D s[OCELOT_STAT_RX_RED_PRIO_0] + - s[OCELOT_STAT_RX_RED_PRIO_1] + - s[OCELOT_STAT_RX_RED_PRIO_2] + - s[OCELOT_STAT_RX_RED_PRIO_3] + - s[OCELOT_STAT_RX_RED_PRIO_4] + - s[OCELOT_STAT_RX_RED_PRIO_5] + - s[OCELOT_STAT_RX_RED_PRIO_6] + - s[OCELOT_STAT_RX_RED_PRIO_7] + - s[OCELOT_STAT_DROP_LOCAL] + - s[OCELOT_STAT_DROP_YELLOW_PRIO_0] + - s[OCELOT_STAT_DROP_YELLOW_PRIO_1] + - s[OCELOT_STAT_DROP_YELLOW_PRIO_2] + - s[OCELOT_STAT_DROP_YELLOW_PRIO_3] + - s[OCELOT_STAT_DROP_YELLOW_PRIO_4] + - s[OCELOT_STAT_DROP_YELLOW_PRIO_5] + - s[OCELOT_STAT_DROP_YELLOW_PRIO_6] + - s[OCELOT_STAT_DROP_YELLOW_PRIO_7] + - s[OCELOT_STAT_DROP_GREEN_PRIO_0] + - s[OCELOT_STAT_DROP_GREEN_PRIO_1] + - s[OCELOT_STAT_DROP_GREEN_PRIO_2] + - s[OCELOT_STAT_DROP_GREEN_PRIO_3] + - s[OCELOT_STAT_DROP_GREEN_PRIO_4] + - s[OCELOT_STAT_DROP_GREEN_PRIO_5] + - s[OCELOT_STAT_DROP_GREEN_PRIO_6] + - s[OCELOT_STAT_DROP_GREEN_PRIO_7]; - - /* Get Tx stats */ - stats->tx_bytes =3D s[OCELOT_STAT_TX_OCTETS]; - stats->tx_packets =3D s[OCELOT_STAT_TX_64] + - s[OCELOT_STAT_TX_65_127] + - s[OCELOT_STAT_TX_128_255] + - s[OCELOT_STAT_TX_256_511] + - s[OCELOT_STAT_TX_512_1023] + - s[OCELOT_STAT_TX_1024_1526] + - s[OCELOT_STAT_TX_1527_MAX]; - stats->tx_dropped =3D s[OCELOT_STAT_TX_DROPS] + - s[OCELOT_STAT_TX_AGED]; - stats->collisions =3D s[OCELOT_STAT_TX_COLLISION]; - - spin_unlock(&ocelot->stats_lock); + + return ocelot_port_get_stats64(ocelot, port, stats); } =20 static int ocelot_port_fdb_add(struct ndmsg *ndm, struct nlattr *tb[], diff --git a/drivers/net/ethernet/mscc/ocelot_stats.c b/drivers/net/etherne= t/mscc/ocelot_stats.c index f0f5f06af2e1..64356614e69a 100644 --- a/drivers/net/ethernet/mscc/ocelot_stats.c +++ b/drivers/net/ethernet/mscc/ocelot_stats.c @@ -148,6 +148,71 @@ int ocelot_get_sset_count(struct ocelot *ocelot, int p= ort, int sset) } EXPORT_SYMBOL(ocelot_get_sset_count); =20 +void ocelot_port_get_stats64(struct ocelot *ocelot, int port, + struct rtnl_link_stats64 *stats) +{ + u64 *s =3D &ocelot->stats[port * OCELOT_NUM_STATS]; + + spin_lock(&ocelot->stats_lock); + + /* Get Rx stats */ + stats->rx_bytes =3D s[OCELOT_STAT_RX_OCTETS]; + stats->rx_packets =3D s[OCELOT_STAT_RX_SHORTS] + + s[OCELOT_STAT_RX_FRAGMENTS] + + s[OCELOT_STAT_RX_JABBERS] + + s[OCELOT_STAT_RX_LONGS] + + s[OCELOT_STAT_RX_64] + + s[OCELOT_STAT_RX_65_127] + + s[OCELOT_STAT_RX_128_255] + + s[OCELOT_STAT_RX_256_511] + + s[OCELOT_STAT_RX_512_1023] + + s[OCELOT_STAT_RX_1024_1526] + + s[OCELOT_STAT_RX_1527_MAX]; + stats->multicast =3D s[OCELOT_STAT_RX_MULTICAST]; + stats->rx_missed_errors =3D s[OCELOT_STAT_DROP_TAIL]; + stats->rx_dropped =3D s[OCELOT_STAT_RX_RED_PRIO_0] + + s[OCELOT_STAT_RX_RED_PRIO_1] + + s[OCELOT_STAT_RX_RED_PRIO_2] + + s[OCELOT_STAT_RX_RED_PRIO_3] + + s[OCELOT_STAT_RX_RED_PRIO_4] + + s[OCELOT_STAT_RX_RED_PRIO_5] + + s[OCELOT_STAT_RX_RED_PRIO_6] + + s[OCELOT_STAT_RX_RED_PRIO_7] + + s[OCELOT_STAT_DROP_LOCAL] + + s[OCELOT_STAT_DROP_YELLOW_PRIO_0] + + s[OCELOT_STAT_DROP_YELLOW_PRIO_1] + + s[OCELOT_STAT_DROP_YELLOW_PRIO_2] + + s[OCELOT_STAT_DROP_YELLOW_PRIO_3] + + s[OCELOT_STAT_DROP_YELLOW_PRIO_4] + + s[OCELOT_STAT_DROP_YELLOW_PRIO_5] + + s[OCELOT_STAT_DROP_YELLOW_PRIO_6] + + s[OCELOT_STAT_DROP_YELLOW_PRIO_7] + + s[OCELOT_STAT_DROP_GREEN_PRIO_0] + + s[OCELOT_STAT_DROP_GREEN_PRIO_1] + + s[OCELOT_STAT_DROP_GREEN_PRIO_2] + + s[OCELOT_STAT_DROP_GREEN_PRIO_3] + + s[OCELOT_STAT_DROP_GREEN_PRIO_4] + + s[OCELOT_STAT_DROP_GREEN_PRIO_5] + + s[OCELOT_STAT_DROP_GREEN_PRIO_6] + + s[OCELOT_STAT_DROP_GREEN_PRIO_7]; + + /* Get Tx stats */ + stats->tx_bytes =3D s[OCELOT_STAT_TX_OCTETS]; + stats->tx_packets =3D s[OCELOT_STAT_TX_64] + + s[OCELOT_STAT_TX_65_127] + + s[OCELOT_STAT_TX_128_255] + + s[OCELOT_STAT_TX_256_511] + + s[OCELOT_STAT_TX_512_1023] + + s[OCELOT_STAT_TX_1024_1526] + + s[OCELOT_STAT_TX_1527_MAX]; + stats->tx_dropped =3D s[OCELOT_STAT_TX_DROPS] + + s[OCELOT_STAT_TX_AGED]; + stats->collisions =3D s[OCELOT_STAT_TX_COLLISION]; + + spin_unlock(&ocelot->stats_lock); +} +EXPORT_SYMBOL(ocelot_port_get_stats64); + static int ocelot_prepare_stats_regions(struct ocelot *ocelot) { struct ocelot_stats_region *region =3D NULL; diff --git a/include/soc/mscc/ocelot.h b/include/soc/mscc/ocelot.h index bc6ca1be08f3..2f639ef88f8f 100644 --- a/include/soc/mscc/ocelot.h +++ b/include/soc/mscc/ocelot.h @@ -1043,6 +1043,8 @@ u32 ocelot_port_assigned_dsa_8021q_cpu_mask(struct oc= elot *ocelot, int port); void ocelot_get_strings(struct ocelot *ocelot, int port, u32 sset, u8 *dat= a); void ocelot_get_ethtool_stats(struct ocelot *ocelot, int port, u64 *data); int ocelot_get_sset_count(struct ocelot *ocelot, int port, int sset); +void ocelot_port_get_stats64(struct ocelot *ocelot, int port, + struct rtnl_link_stats64 *stats); int ocelot_get_ts_info(struct ocelot *ocelot, int port, struct ethtool_ts_info *info); void ocelot_set_ageing_time(struct ocelot *ocelot, unsigned int msecs); --=20 2.34.1 From nobody Mon Apr 6 08:10:03 2026 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id F3969C6FA86 for ; Thu, 8 Sep 2022 16:50:04 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231911AbiIHQuC (ORCPT ); Thu, 8 Sep 2022 12:50:02 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44058 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231281AbiIHQtT (ORCPT ); Thu, 8 Sep 2022 12:49:19 -0400 Received: from EUR04-DB3-obe.outbound.protection.outlook.com (mail-eopbgr60072.outbound.protection.outlook.com [40.107.6.72]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id EE3D61223B8; Thu, 8 Sep 2022 09:49:17 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=CrO6ev7Y0hjNugYCU79YgWLxQkp/SfiCTHxCwQXnUdoqREfz0ZL1EuCucDoNM6SSvAdmuSanVIt8ktZMqgCNTXKlpA85tByNKqd4eA/0KACUMDzMl+qvcaF8aFYllo0IT88yWotPJ7RTpoOfUhnlgfxmcLOhcUBV3vhjtB8uvXh7DI50PhJh4ivRzM+rbwvKWEqQzRZnXse/W8cteS6VPOyxmTP5mxzcWsAdIkGLsPTGB5EzVLG5kHVSh5SXzof2pOBVszWyCobcpuO77Z1oe6VEOUlcIU+3kNtInrrv71mpVrZUEJlFSdXosY2w33da8wzkD5BmLg8QRfF7NgnDdw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=ScpUIvhkbmuddD4iIitniuiLIpelSyPuQxtPKCGEYFs=; b=JX9fH0VGOgWoQ+Rg9OhHq7gCEXH8uMJ5q7CE+lEs5mdZiWwSss08i0HqRKUOvOx9l0AOwWbG2MzXqGOXTSCyY/5s+CxqSHQTEuY5bHeVBiijKVq79c2uYYGQAAgRSLJO06lm4xob968DusuJ9T2nBGxQNorrsqRx0VAxmhyV91F3VLKQMd9KO7yuODLBd4IvHtyDEm/XmaDcTr7V2w40awCbk601zaU12MPSdOviM8WGLi4GBGRglCSXTrjZoZ8t2QrEjKB3JF3s7zruUFi52vcHAq0mDAESqjWfqOyEdG3Fa+hFNj1VZl0T5ZW26sdlS0kbArCBbKzv9MQsC+TkHg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ScpUIvhkbmuddD4iIitniuiLIpelSyPuQxtPKCGEYFs=; b=a6QMuGafOakaes7oK/9jXiL0sjOoKyoUuZ5KwQVkHz67VUVFp3w6lgLSv8cA1JAceYBh93L5a3zG45LfBS9pe/JRpsHoeiU2K/2AkIy1bESXbkc39QXJX+qV9xoeui7eVtX5ir8Whc5BNvtoylh1LotWathRi/CIXAzr8QXOuUs= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from VI1PR04MB5136.eurprd04.prod.outlook.com (2603:10a6:803:55::19) by DB7PR04MB5052.eurprd04.prod.outlook.com (2603:10a6:10:1b::32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5588.18; Thu, 8 Sep 2022 16:49:12 +0000 Received: from VI1PR04MB5136.eurprd04.prod.outlook.com ([fe80::3412:9d57:ec73:fef3]) by VI1PR04MB5136.eurprd04.prod.outlook.com ([fe80::3412:9d57:ec73:fef3%5]) with mapi id 15.20.5588.017; Thu, 8 Sep 2022 16:49:12 +0000 From: Vladimir Oltean To: netdev@vger.kernel.org Cc: "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Xiaoliang Yang , Claudiu Manoil , Alexandre Belloni , UNGLinuxDriver@microchip.com, Andrew Lunn , Vivien Didelot , Florian Fainelli , Maxim Kochetkov , Colin Foster , Richie Pearn , linux-kernel@vger.kernel.org Subject: [PATCH net-next 10/14] net: mscc: ocelot: exclude stats from bulk regions based on reg, not name Date: Thu, 8 Sep 2022 19:48:12 +0300 Message-Id: <20220908164816.3576795-11-vladimir.oltean@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220908164816.3576795-1-vladimir.oltean@nxp.com> References: <20220908164816.3576795-1-vladimir.oltean@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BEXP281CA0009.DEUP281.PROD.OUTLOOK.COM (2603:10a6:b10::19) To VI1PR04MB5136.eurprd04.prod.outlook.com (2603:10a6:803:55::19) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: f8592f36-2477-432d-a300-08da91b9fb42 X-MS-TrafficTypeDiagnostic: DB7PR04MB5052:EE_ X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: kO28bRERMBDdDt7na0O+TO4JDYtkxcJoUTvsAM/kosD0+nXBEuGaX9tNjNprMxsbyKxVbdEhcuk4+UgDCknfJqnxSInpdWLYmsov8o8ZGg7OuuknHEAw3AT1tU7FyJMSNF3x9Z8NJFnrkZ4UKeNqVxCA8dhk5E1e9EvGSdLB2ZQ+JQQXfa/x/G6ldAnZOORQRteTgfTQg1617V2uOsJe6qHJKWsMaEWSpcTTLohq1RQOCqoJwOrOht+fOjocRoBa/JOSPTha9ojg/rci014Vk51LQ2gIFgP0LsQ14M22yWhSfvkLBTJmcKkh55cffizEt9mX6OnCDf6NFZHuHCj8CecEV8OK4MkA1mw8VunvQF3jXZnfyfgG5lyWQ3F0esz3wejw9ZzSHuQCWJiQLBPpywuiEQy8YIhxjM6CTTPB0XuYlWjp3G94VzXc58cU71FGhoLbljU+N1S9pdPLpfLMVwW0fDBHQiPmY/6EelyCrYGmkNXF8QDjLNmAfgcdhLIy4d14y3vowKIBqwfzfrmP4wMZKDy1IpqRoG2nWDAtfexB3h4T0wSXCMtHcLEdGD/42YgNUQb6SNI5wbPyfcSrzHSXYU9umXU071YC+sCl8xxWTtT+Ue86guH8ZiUUE3ENDZFg/ujnpyMQeAAjL23VuPVW/klApLORF4JXTNUJT+e2gsJ6O7u2cp+0Z4Knf0z8SR91HoDC9oweAyXNXmU7tCdOBbLwwpKe2mXdpkPnFt7M63l6rRRxyTjnDKRhVvM5kX4xOkeu+TVw5B7XU/GYHA== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5136.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230016)(4636009)(136003)(39860400002)(396003)(346002)(366004)(376002)(38350700002)(8676002)(66476007)(66946007)(2616005)(6486002)(186003)(66556008)(38100700002)(36756003)(1076003)(4326008)(478600001)(83380400001)(8936002)(2906002)(5660300002)(44832011)(7416002)(52116002)(41300700001)(6506007)(6916009)(26005)(54906003)(6512007)(86362001)(316002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?BAgI2q24GWK9HDnZoGzp13Ka/cSfcx2EG3O4B0EQ7odtAXlwv39BJslC6bd8?= =?us-ascii?Q?+KCOJd+8aO5VFZ3DK92+sizb+6Ka1TvQEC1AACfDHvP7MASsngkSKq69Vgi+?= =?us-ascii?Q?d4gX8ja1noLWZOMabSGM6p6o8/+uCIzkOZpn4gPzfEjWhUDwVE4UUflvK8Rs?= =?us-ascii?Q?6WiyqUhqqAMMr0ghHdF6oST1r5RwiupiMb/YmiRoXJX6sWJ06GFMyA4aPgsa?= =?us-ascii?Q?PqHVMeKrsoTDwmQLIs5XxguWKW3cVxO2fJ09sZkk4qB/g3iiMGpP6ES63zoV?= =?us-ascii?Q?zYLb7Pf4Z4MS2FPLmyJswYC6DB2hlAzpIqjZcO/A45qcIpPjd7NUog9FeXZr?= =?us-ascii?Q?WPv3ITNFoH0vW+uyaJDqpE1MP6iSCInpeKzrANyYtJ/yZ2rQ0ruhejea2Boo?= =?us-ascii?Q?Gr5bb1eQv8cWsqAsmKroOX1g7PyO3wVGreHJtHCMhXKMYDMPtO29DVieHpuL?= =?us-ascii?Q?E6vYpZHUlzhNPScVbJ+RyVzM9do7Y9mvpjymcFeWrSASZ9AmcINHTvk28Q60?= =?us-ascii?Q?vD58kIJhcblrKQLNyyTqxQ9mqBiPyONElL/q2mCv0Qw1mqV7xv5Q0peJV+vi?= =?us-ascii?Q?p/et/Ka09w/dpMZSO9vnT6Fi7XKM7sBCmd0BVr+VqBhdOdcqZj+7diLjZSLy?= =?us-ascii?Q?uf6SRZMcyQgHCnd+zDN3OBz983/haK7m0OITY5tNo5Agv9/Nb1h/8ThWx+CC?= =?us-ascii?Q?WES5hMgnfqGUOwpsIxHlg1s7FLo96zkFu2nsNYYv1RByWqEOZVnVpE6FA9we?= =?us-ascii?Q?rmtpznTu7up3CdQGhHBu3DfP5c8rIwJIKLR7kuYyS77x8PS1/fkkhRlnfx7v?= =?us-ascii?Q?QB+oBjP+PCWxcVcnVYAWaGf4vkkc+FCQrea2LfMfHBG4L2YcntXNg0v/ELyR?= =?us-ascii?Q?XIDlPLF3xQGa+FIMlao/rFAf2Yi4/R50yZt6GIKbAJpmzOTv08k7mtNWeUM8?= =?us-ascii?Q?J5kN0QnbyFPSDRG6Vj5mxC0ZBUNMTgxUApy/px0M/ohdr83DZsEh4H4WlMLD?= =?us-ascii?Q?PUCgGTcaqsweUBf8vMLGMx45r8Hla8DA9HEihK1+HTgVUTTqUlEnNyqEoycx?= =?us-ascii?Q?7T0ohdp9bc39JgBt2FG9f/eQSRgbKAnX/EKJJVwQMTdupZdAPe1ExLLdmO2B?= =?us-ascii?Q?ge95yRbRgsKM1U4d1b+aX6Cj6eAeYcWQ8wSn7cTLVQcH2RD0ssOtKwjfDvgF?= =?us-ascii?Q?k1FyvLO4CimZxUFljEBEQYgjGzOazc8ym1ANFdrNxwz8y0LJH4JEZbNOzq2B?= =?us-ascii?Q?h3OQnkl2pelVd5yBxb2H8ojNiUA/0hPaKvDA+z6Zl0rgZj9C/cM3aKFwWZ8d?= =?us-ascii?Q?aYg+JyNWKI7R3Cfd71VWR+KtKSV4bXwbV/geAPNCNtlY8MnbDadalmEhkx9B?= =?us-ascii?Q?ub+eZGaYaTEZemWZccq3OuXL7o4gVWW3kCzhBSDCgm/W8/HQ3T2RWWbalqT2?= =?us-ascii?Q?pfYDPxw2AZX0ghQiYhLqKdmW76OltbdrGPQ7MZ2pSJ8DIxY4RpZ+a/H8sQh4?= =?us-ascii?Q?WNZ01vuEfXJSpJTuqNX1EQPp6/hy8cvNotPifyMc2WaA+5zWK/ta9P8QFteA?= =?us-ascii?Q?kD68lS4P4DNi/sNsN+QmsxMShVAEbNH7CgAVo/PJNKXMZtElIR7GFbBJPE0G?= =?us-ascii?Q?ZA=3D=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: f8592f36-2477-432d-a300-08da91b9fb42 X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5136.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Sep 2022 16:48:39.8490 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: tXG7KUmaFLgR9jkuGxW3rUAy3KvspS6NV0hgBaW0Kj3TaOnpnxJbp8p3T27E7vCuOV++EZKWTYc/Fwup++Tc8w== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB7PR04MB5052 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" We want to introduce elements kept in ocelot->stats that aren't exposed to the unstructured ethtool -S (so they won't have their name populated), but are otherwise checked for 32-bit wraparounds by ocelot_port_update_stats(). This isn't possible today because ocelot_prepare_stats_regions() skips over ocelot_stat_layout elements with no name. Now that we've changed struct ocelot_stat_layout to keep the absolute register address rather than the offset relative to SYS_CNT, we can make use of the unpopulated "reg" value of 0 to mean that the counter isn't present on the current switch revision, and skip it from the preparation of bulk regions. Signed-off-by: Vladimir Oltean --- drivers/net/ethernet/mscc/ocelot_stats.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/net/ethernet/mscc/ocelot_stats.c b/drivers/net/etherne= t/mscc/ocelot_stats.c index 64356614e69a..2926d2661af4 100644 --- a/drivers/net/ethernet/mscc/ocelot_stats.c +++ b/drivers/net/ethernet/mscc/ocelot_stats.c @@ -222,7 +222,7 @@ static int ocelot_prepare_stats_regions(struct ocelot *= ocelot) INIT_LIST_HEAD(&ocelot->stats_regions); =20 for (i =3D 0; i < OCELOT_NUM_STATS; i++) { - if (ocelot->stats_layout[i].name[0] =3D=3D '\0') + if (!ocelot->stats_layout[i].reg) continue; =20 if (region && ocelot->stats_layout[i].reg =3D=3D last + 4) { --=20 2.34.1 From nobody Mon Apr 6 08:10:03 2026 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id C63C8C38145 for ; Thu, 8 Sep 2022 16:50:20 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231940AbiIHQuQ (ORCPT ); Thu, 8 Sep 2022 12:50:16 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44722 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231445AbiIHQtU (ORCPT ); Thu, 8 Sep 2022 12:49:20 -0400 Received: from EUR04-DB3-obe.outbound.protection.outlook.com (mail-eopbgr60072.outbound.protection.outlook.com [40.107.6.72]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 57A3312BF98; Thu, 8 Sep 2022 09:49:19 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=fk/BX8p3fmK0gFSbLjjEH+kBnLLFm3EoyfdMi2+810jnw4m6QDykH68tCvCzilx5rU+ObFamzLvA4jseVjosro+bD1sfFFTObC58L8IGKUQBmCBXQJKDWUNl2JE5aIPALzql1MdvaXUQdIgt+9n2EVUgHtBYZVoz53E1eiYqkleN2XPAGhiCzOlMTqPdw+rFC+z4lGUbvqPqnFP54baQT27AixvjKmQl2TePm5QWYyCuE3kKqHpx5nmnq4zhSVeFg18FcQDqaAB4QVRrBcZpsDEvThRQFMmgfWhAF9jmq7vhb6AiQgYObVWCldtZ0FLweHP6XolLyVIW/ABvs0FSlw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=5iQqOY1/tDR8KDGSOtNUmtcN+KlaNtXZM2GaBrgmGOo=; b=NZnjPrbk64TppRPyfkwyjgCghntP5v6vrM64IViZqKcovr4WcolfKOHMITO4t5w9/D+X7ZioGeedOpYqkscpk+wrGeo3GScOkCQqdxOiuMmYfHDoT+0WO1ek20zXgbUTR24WJJw8V4JrE9iyMICnvxe8+7owyzUdHSDyoHA6TDYFzWAavnaffXIWDNScIdaZJvCo4XsYMuqAKsf+fd/RQP3pMm/3FxwSDzFmES2yGS8WrFi9ZS3ewwaZluVwNN0dEaOY4EmCMpH5kXlbg0rrwdQnm2Q7K4Z1u8miGSp3QhLeRhIGpNpeA23sPT7iMlYWf2bdTB3iL6suVKI7LTmlgw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=5iQqOY1/tDR8KDGSOtNUmtcN+KlaNtXZM2GaBrgmGOo=; b=ASArvijFeiyLC/Q6lRUR28fAvrTVvLa+3/3QPwmnmZlWzRjIP16F/yx82ESFOYhB0VTR3smWCY+5nxSIeVSUhyfkT/i3ZK116leEsKAKr0Bre56WvrSqhF9n9eFuSR8+fQhKQypXaO/7zlzXJ1N8iAJjZpngakOVbTagBdjzgf8= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from VI1PR04MB5136.eurprd04.prod.outlook.com (2603:10a6:803:55::19) by DB7PR04MB5052.eurprd04.prod.outlook.com (2603:10a6:10:1b::32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5588.18; Thu, 8 Sep 2022 16:49:13 +0000 Received: from VI1PR04MB5136.eurprd04.prod.outlook.com ([fe80::3412:9d57:ec73:fef3]) by VI1PR04MB5136.eurprd04.prod.outlook.com ([fe80::3412:9d57:ec73:fef3%5]) with mapi id 15.20.5588.017; Thu, 8 Sep 2022 16:49:13 +0000 From: Vladimir Oltean To: netdev@vger.kernel.org Cc: "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Xiaoliang Yang , Claudiu Manoil , Alexandre Belloni , UNGLinuxDriver@microchip.com, Andrew Lunn , Vivien Didelot , Florian Fainelli , Maxim Kochetkov , Colin Foster , Richie Pearn , linux-kernel@vger.kernel.org Subject: [PATCH net-next 11/14] net: mscc: ocelot: add support for all sorts of standardized counters present in DSA Date: Thu, 8 Sep 2022 19:48:13 +0300 Message-Id: <20220908164816.3576795-12-vladimir.oltean@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220908164816.3576795-1-vladimir.oltean@nxp.com> References: <20220908164816.3576795-1-vladimir.oltean@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BEXP281CA0009.DEUP281.PROD.OUTLOOK.COM (2603:10a6:b10::19) To VI1PR04MB5136.eurprd04.prod.outlook.com (2603:10a6:803:55::19) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 57bb4739-3121-44ff-f966-08da91b9fbfe X-MS-TrafficTypeDiagnostic: DB7PR04MB5052:EE_ X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: aHHBPUFVW5PzFPwC3AwjHOuFpzNET55qVgRO2gwB+iyA8h373fBCXMKa8GgL8hhvq4YzmP3NgFMjSYf95vaQN74t2PERN3c3/o6jBsVSiRnTRym199+P9ZVUrhadRAKooZP1gg+Z/Co003h3RktsCuHl/ZEzouqBi8DPKnxfOmK36zwBfMrVIvq90yu/RlzzlzEz/c3cmiq5prslLSBBtE8TjEC/YmxayRnBkpB3tvAtBoaiZ3dqVeKrD5hBxzUSQz1t7AoyPbu8U1EHhYfSFU8fJPDBQT1GtyuTqaqQNM/iO/z06MBX+pwY0hLL/ksXwPvEsaxydHmYGTwob5UzCXJl2bWdhTysYDqQweY16PxbRLmCen/C21WMgAEJ4/BKSYL+somRstPOBxxHf6nnrn3b6tMcOm+y6/38pO09Ra4QY2O7rPgUcbgEChkKElvtGeZfOataaOeX6C0e9Nac+gNKKAzg/6nMYS8gx1MrH9ORrYVY/okgdGwVba6pbTf3Xu7LzIxKKqC2NxatsXW2gAmo/Kw0eenO3xAE1P3qONtXzP0V0SexVdw4vjj9Wqe+dUCqECNOxkHh68mWUHOcJkug5xlwqL34fCgqJtOnSiKL9K3Jku3HgJxfmnJIM92zrHmUhqCTRwZf4r/L3Xzqvt/N2EaLXak8Xc9pOzqSqR3xy4CCLAPTegaejZKAxr0Q8REp5DkXxeyBSCIMt6i5gDgnWw2zggb/xlTbtx7T4MeIvLBzHy0ITS4btUlNzJ9Zw1nMVGdmsOVhg3ib69ni4Q== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5136.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230016)(4636009)(136003)(39860400002)(396003)(346002)(366004)(376002)(38350700002)(8676002)(66476007)(66946007)(2616005)(6486002)(186003)(66556008)(38100700002)(36756003)(1076003)(4326008)(478600001)(83380400001)(8936002)(2906002)(5660300002)(44832011)(30864003)(7416002)(52116002)(41300700001)(6506007)(40140700001)(6916009)(26005)(54906003)(6512007)(86362001)(316002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?HfgPmuyZOW8iepf1Wr1tZ1FKp6qu3WpZkxGwcW5VFUJrKn8bM07qazuy/L9F?= =?us-ascii?Q?r5CObZV0XvOvy4Uu/l3QPui63jjmYAr7CYCCRd26y/Wbjg0zau1gKD8CYk4T?= =?us-ascii?Q?TuJuJwSr0Y7NPYuz4HI+ilp1uBE3YatgdhAHO5REsN05b61N2yBcGQU68xou?= =?us-ascii?Q?QLWMDc2oZiYpNqTLAS9yZN/rmL/f3GFJvfIbW/QjD31jIp8Rz4/zgBxsXLNl?= =?us-ascii?Q?CSIEAGNFkgbijSiTv+vIdGJ+GAll2/iyUttKG3Vx1/h1dzLLKoTHCyrHsRa1?= =?us-ascii?Q?UAyb2VmmZjN8lmTBk80A/KDAMeh4eTJOf7zDjZhmuZqUgSqC1CtFdoUvb7yQ?= =?us-ascii?Q?XnZp4/6y7hLo9Tnka/zguy3xqoSdKBWNAVPopAf97ZAh1p1Z9sJ74wwqj7+c?= =?us-ascii?Q?vfyGyt1NJuUqMF+z8NqOAuokOFl6U9H4Nd4l6N09OruPmbfLufqeBYTkbfZq?= =?us-ascii?Q?TmaOpZYNTBJhsfjB8ANzCOvh8NAO4ZAeUrVZ5djLLpS/WUQc15Anb3n/4pYQ?= =?us-ascii?Q?RCtlayyZm5iHaZR0e5EsofhN3Hew+R1CmmpizVaehA6JKJKTjv9FslWwZfvl?= =?us-ascii?Q?xcMskkYyGL4KyzRVt2LRj79E31WSn/i2GwTim0gOdOomsr0P/UYDiV0BhLhK?= =?us-ascii?Q?Dt5s0zRMDvQcGXKGJgLcd+3HwPgkt8iM2vdoW/ia3zXL9gudZuUx1ZFtdF/F?= =?us-ascii?Q?qHdGXUHfFcT5PzdWEtBFeS17Nwj38+CHVFbxzad01kVTFy5ASeAEWDSO7FCx?= =?us-ascii?Q?MHxz6cbu6HoQuXqAeV6TigBnLGD+N0WhicIY7BK2i0QYnv66fv2eLlueeIl/?= =?us-ascii?Q?7vDz5sQoBFsVd69eFbZptLhWe3J3s6ISnKxz+qcT9NPiNpXqZYYLle/bV6qP?= =?us-ascii?Q?6aHxY6Pu8qtjiZPIFljIQvUSBEy8PbjAAeIMergGm4mhQ7pCR1WdI0A2LGbF?= =?us-ascii?Q?srwXRVJ0y0JH1ozybgvUGZDdqLivQxf7DvLphUUNOsvBp9w2PadTp+gEL26a?= =?us-ascii?Q?DzxgWKqtf4G5kFj85L64jij29dFPejEwEIYUne5qSjYh4rz/aiAhS3g1c7pM?= =?us-ascii?Q?4OvBpTPqrFWa6lQNhDs5bG8R8UP+FBfBTD4IkYxE7zpIobqmfzGqjVi7BLUE?= =?us-ascii?Q?NdpAj9OddIJf5dIF7cZeLiRL8DsKsM7WSGKd7JFlhlr28WwBUodGDgAjwjSH?= =?us-ascii?Q?i8pEaxyg0edcebzrO7BetNQSfeygrruWXPjfk6XvfWZKgO1nlOJoewiVIsmh?= =?us-ascii?Q?hw9v8uFlHsr8JpGlq3YR2C4jFiqVH2vKi8buhT43U4potKc4Rr/K8ZRigI0Z?= =?us-ascii?Q?jknnJ4+jJEbJ7hl0TzIzjKNQUBNQvrsmdj1bJk0qmPLANxzz6ujtcLbR/Eup?= =?us-ascii?Q?S3FpfEaIzGzRgVQ+sNj834fxhnH5ohH64L0UsVO5zIxdO7gJ9EczJ8m92wY3?= =?us-ascii?Q?SmR4LQ3uQNN0yh8SkSi7pTV+wlCI34wCIdc4aZBY65PhDND3Up5/XpbUIQKw?= =?us-ascii?Q?9Eil6/8VKE3Eg6gMzEgTfctAnMg1n3S27G9vBP3rH+Ib1UHUXqNvGcgosFUS?= =?us-ascii?Q?5msvgJ80xqa4ALWVTp0rxsp06b8juLOWXRLRIws+8HnUUM40n/dRBj7ubMZg?= =?us-ascii?Q?mg=3D=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 57bb4739-3121-44ff-f966-08da91b9fbfe X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5136.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Sep 2022 16:48:41.0989 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: O5Dm/I2NKs/1hILZkRpVzAekBmjiPl0GJGYfg1Wyvo3dn7xsIQTBBAw7PlurRCTIFTdT5D4qLPS5c2q4uXOsrA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB7PR04MB5052 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" DSA is integrated with the new standardized ethtool -S --groups option, but the felix driver only exports unstructured statistics. Reuse the array of 64-bit statistics collected by ocelot_check_stats_work(), but just export select values from it. Since ocelot_check_stats_work() runs periodically to avoid 32-bit overflow, and the ethtool calling context is sleepable, we update the 64-bit stats one more time, to provide up-to-date values. The locking scheme with a mutex followed by a spinlock is a bit hard to digest, so we create and use a ocelot_port_stats_run() helper with a callback that populates the ethool stats group the caller is interested in. The exported stats are: ethtool -S swp0 --groups eth-phy ethtool -S swp0 --groups eth-mac ethtool -S swp0 --groups eth-ctrl ethtool -S swp0 --groups rmon ethtool --include-statistics --show-pause swp0 Signed-off-by: Vladimir Oltean --- drivers/net/dsa/ocelot/felix.c | 46 ++++++ drivers/net/ethernet/mscc/ocelot_stats.c | 201 +++++++++++++++++++++-- include/soc/mscc/ocelot.h | 11 ++ 3 files changed, 241 insertions(+), 17 deletions(-) diff --git a/drivers/net/dsa/ocelot/felix.c b/drivers/net/dsa/ocelot/felix.c index 71e22990aa67..c73ef5f7aa64 100644 --- a/drivers/net/dsa/ocelot/felix.c +++ b/drivers/net/dsa/ocelot/felix.c @@ -1042,6 +1042,47 @@ static void felix_get_stats64(struct dsa_switch *ds,= int port, ocelot_port_get_stats64(ocelot, port, stats); } =20 +static void felix_get_pause_stats(struct dsa_switch *ds, int port, + struct ethtool_pause_stats *pause_stats) +{ + struct ocelot *ocelot =3D ds->priv; + + ocelot_port_get_pause_stats(ocelot, port, pause_stats); +} + +static void felix_get_rmon_stats(struct dsa_switch *ds, int port, + struct ethtool_rmon_stats *rmon_stats, + const struct ethtool_rmon_hist_range **ranges) +{ + struct ocelot *ocelot =3D ds->priv; + + ocelot_port_get_rmon_stats(ocelot, port, rmon_stats, ranges); +} + +static void felix_get_eth_ctrl_stats(struct dsa_switch *ds, int port, + struct ethtool_eth_ctrl_stats *ctrl_stats) +{ + struct ocelot *ocelot =3D ds->priv; + + ocelot_port_get_eth_ctrl_stats(ocelot, port, ctrl_stats); +} + +static void felix_get_eth_mac_stats(struct dsa_switch *ds, int port, + struct ethtool_eth_mac_stats *mac_stats) +{ + struct ocelot *ocelot =3D ds->priv; + + ocelot_port_get_eth_mac_stats(ocelot, port, mac_stats); +} + +static void felix_get_eth_phy_stats(struct dsa_switch *ds, int port, + struct ethtool_eth_phy_stats *phy_stats) +{ + struct ocelot *ocelot =3D ds->priv; + + ocelot_port_get_eth_phy_stats(ocelot, port, phy_stats); +} + static void felix_get_strings(struct dsa_switch *ds, int port, u32 stringset, u8 *data) { @@ -1857,6 +1898,11 @@ const struct dsa_switch_ops felix_switch_ops =3D { .teardown =3D felix_teardown, .set_ageing_time =3D felix_set_ageing_time, .get_stats64 =3D felix_get_stats64, + .get_pause_stats =3D felix_get_pause_stats, + .get_rmon_stats =3D felix_get_rmon_stats, + .get_eth_ctrl_stats =3D felix_get_eth_ctrl_stats, + .get_eth_mac_stats =3D felix_get_eth_mac_stats, + .get_eth_phy_stats =3D felix_get_eth_phy_stats, .get_strings =3D felix_get_strings, .get_ethtool_stats =3D felix_get_ethtool_stats, .get_sset_count =3D felix_get_sset_count, diff --git a/drivers/net/ethernet/mscc/ocelot_stats.c b/drivers/net/etherne= t/mscc/ocelot_stats.c index 2926d2661af4..dbd20b125cea 100644 --- a/drivers/net/ethernet/mscc/ocelot_stats.c +++ b/drivers/net/ethernet/mscc/ocelot_stats.c @@ -2,6 +2,7 @@ /* Statistics for Ocelot switch family * * Copyright (c) 2017 Microsemi Corporation + * Copyright 2022 NXP */ #include #include @@ -101,37 +102,32 @@ void ocelot_get_strings(struct ocelot *ocelot, int po= rt, u32 sset, u8 *data) } EXPORT_SYMBOL(ocelot_get_strings); =20 -void ocelot_get_ethtool_stats(struct ocelot *ocelot, int port, u64 *data) +/* Update ocelot->stats for the given port and run the given callback */ +static void ocelot_port_stats_run(struct ocelot *ocelot, int port, void *p= riv, + void (*cb)(struct ocelot *ocelot, int port, + void *priv)) { - int i, err; + int err; =20 mutex_lock(&ocelot->stat_view_lock); =20 - /* check and update now */ err =3D ocelot_port_update_stats(ocelot, port); + if (err) { + dev_err(ocelot->dev, "Failed to update port %d stats: %pe\n", + port, ERR_PTR(err)); + goto out_unlock; + } =20 spin_lock(&ocelot->stats_lock); =20 ocelot_port_transfer_stats(ocelot, port); - - /* Copy all supported counters */ - for (i =3D 0; i < OCELOT_NUM_STATS; i++) { - int index =3D port * OCELOT_NUM_STATS + i; - - if (ocelot->stats_layout[i].name[0] =3D=3D '\0') - continue; - - *data++ =3D ocelot->stats[index]; - } + cb(ocelot, port, priv); =20 spin_unlock(&ocelot->stats_lock); =20 +out_unlock: mutex_unlock(&ocelot->stat_view_lock); - - if (err) - dev_err(ocelot->dev, "Error %d updating ethtool stats\n", err); } -EXPORT_SYMBOL(ocelot_get_ethtool_stats); =20 int ocelot_get_sset_count(struct ocelot *ocelot, int port, int sset) { @@ -148,6 +144,177 @@ int ocelot_get_sset_count(struct ocelot *ocelot, int = port, int sset) } EXPORT_SYMBOL(ocelot_get_sset_count); =20 +static void ocelot_port_ethtool_stats_cb(struct ocelot *ocelot, int port, + void *priv) +{ + u64 *data =3D priv; + int i; + + /* Copy all supported counters */ + for (i =3D 0; i < OCELOT_NUM_STATS; i++) { + int index =3D port * OCELOT_NUM_STATS + i; + + if (ocelot->stats_layout[i].name[0] =3D=3D '\0') + continue; + + *data++ =3D ocelot->stats[index]; + } +} + +void ocelot_get_ethtool_stats(struct ocelot *ocelot, int port, u64 *data) +{ + ocelot_port_stats_run(ocelot, port, data, ocelot_port_ethtool_stats_cb); +} +EXPORT_SYMBOL(ocelot_get_ethtool_stats); + +static void ocelot_port_pause_stats_cb(struct ocelot *ocelot, int port, vo= id *priv) +{ + u64 *s =3D &ocelot->stats[port * OCELOT_NUM_STATS]; + struct ethtool_pause_stats *pause_stats =3D priv; + + pause_stats->tx_pause_frames =3D s[OCELOT_STAT_TX_PAUSE]; + pause_stats->rx_pause_frames =3D s[OCELOT_STAT_RX_PAUSE]; +} + +void ocelot_port_get_pause_stats(struct ocelot *ocelot, int port, + struct ethtool_pause_stats *pause_stats) +{ + ocelot_port_stats_run(ocelot, port, pause_stats, + ocelot_port_pause_stats_cb); +} +EXPORT_SYMBOL_GPL(ocelot_port_get_pause_stats); + +static const struct ethtool_rmon_hist_range ocelot_rmon_ranges[] =3D { + { 64, 64 }, + { 65, 127 }, + { 128, 255 }, + { 256, 511 }, + { 512, 1023 }, + { 1024, 1526 }, + { 1527, 65535 }, + {}, +}; + +static void ocelot_port_rmon_stats_cb(struct ocelot *ocelot, int port, voi= d *priv) +{ + u64 *s =3D &ocelot->stats[port * OCELOT_NUM_STATS]; + struct ethtool_rmon_stats *rmon_stats =3D priv; + + rmon_stats->undersize_pkts =3D s[OCELOT_STAT_RX_SHORTS]; + rmon_stats->oversize_pkts =3D s[OCELOT_STAT_RX_LONGS]; + rmon_stats->fragments =3D s[OCELOT_STAT_RX_FRAGMENTS]; + rmon_stats->jabbers =3D s[OCELOT_STAT_RX_JABBERS]; + + rmon_stats->hist[0] =3D s[OCELOT_STAT_RX_64]; + rmon_stats->hist[1] =3D s[OCELOT_STAT_RX_65_127]; + rmon_stats->hist[2] =3D s[OCELOT_STAT_RX_128_255]; + rmon_stats->hist[3] =3D s[OCELOT_STAT_RX_256_511]; + rmon_stats->hist[4] =3D s[OCELOT_STAT_RX_512_1023]; + rmon_stats->hist[5] =3D s[OCELOT_STAT_RX_1024_1526]; + rmon_stats->hist[6] =3D s[OCELOT_STAT_RX_1527_MAX]; + + rmon_stats->hist_tx[0] =3D s[OCELOT_STAT_TX_64]; + rmon_stats->hist_tx[1] =3D s[OCELOT_STAT_TX_65_127]; + rmon_stats->hist_tx[2] =3D s[OCELOT_STAT_TX_128_255]; + rmon_stats->hist_tx[3] =3D s[OCELOT_STAT_TX_128_255]; + rmon_stats->hist_tx[4] =3D s[OCELOT_STAT_TX_256_511]; + rmon_stats->hist_tx[5] =3D s[OCELOT_STAT_TX_512_1023]; + rmon_stats->hist_tx[6] =3D s[OCELOT_STAT_TX_1024_1526]; +} + +void ocelot_port_get_rmon_stats(struct ocelot *ocelot, int port, + struct ethtool_rmon_stats *rmon_stats, + const struct ethtool_rmon_hist_range **ranges) +{ + *ranges =3D ocelot_rmon_ranges; + + ocelot_port_stats_run(ocelot, port, rmon_stats, + ocelot_port_rmon_stats_cb); +} +EXPORT_SYMBOL_GPL(ocelot_port_get_rmon_stats); + +static void ocelot_port_ctrl_stats_cb(struct ocelot *ocelot, int port, voi= d *priv) +{ + u64 *s =3D &ocelot->stats[port * OCELOT_NUM_STATS]; + struct ethtool_eth_ctrl_stats *ctrl_stats =3D priv; + + ctrl_stats->MACControlFramesReceived =3D s[OCELOT_STAT_RX_CONTROL]; +} + +void ocelot_port_get_eth_ctrl_stats(struct ocelot *ocelot, int port, + struct ethtool_eth_ctrl_stats *ctrl_stats) +{ + ocelot_port_stats_run(ocelot, port, ctrl_stats, + ocelot_port_ctrl_stats_cb); +} +EXPORT_SYMBOL_GPL(ocelot_port_get_eth_ctrl_stats); + +static void ocelot_port_mac_stats_cb(struct ocelot *ocelot, int port, void= *priv) +{ + u64 *s =3D &ocelot->stats[port * OCELOT_NUM_STATS]; + struct ethtool_eth_mac_stats *mac_stats =3D priv; + + mac_stats->OctetsTransmittedOK =3D s[OCELOT_STAT_TX_OCTETS]; + mac_stats->FramesTransmittedOK =3D s[OCELOT_STAT_TX_64] + + s[OCELOT_STAT_TX_65_127] + + s[OCELOT_STAT_TX_128_255] + + s[OCELOT_STAT_TX_256_511] + + s[OCELOT_STAT_TX_512_1023] + + s[OCELOT_STAT_TX_1024_1526] + + s[OCELOT_STAT_TX_1527_MAX]; + mac_stats->OctetsReceivedOK =3D s[OCELOT_STAT_RX_OCTETS]; + mac_stats->FramesReceivedOK =3D s[OCELOT_STAT_RX_GREEN_PRIO_0] + + s[OCELOT_STAT_RX_GREEN_PRIO_1] + + s[OCELOT_STAT_RX_GREEN_PRIO_2] + + s[OCELOT_STAT_RX_GREEN_PRIO_3] + + s[OCELOT_STAT_RX_GREEN_PRIO_4] + + s[OCELOT_STAT_RX_GREEN_PRIO_5] + + s[OCELOT_STAT_RX_GREEN_PRIO_6] + + s[OCELOT_STAT_RX_GREEN_PRIO_7] + + s[OCELOT_STAT_RX_YELLOW_PRIO_0] + + s[OCELOT_STAT_RX_YELLOW_PRIO_1] + + s[OCELOT_STAT_RX_YELLOW_PRIO_2] + + s[OCELOT_STAT_RX_YELLOW_PRIO_3] + + s[OCELOT_STAT_RX_YELLOW_PRIO_4] + + s[OCELOT_STAT_RX_YELLOW_PRIO_5] + + s[OCELOT_STAT_RX_YELLOW_PRIO_6] + + s[OCELOT_STAT_RX_YELLOW_PRIO_7]; + mac_stats->MulticastFramesXmittedOK =3D s[OCELOT_STAT_TX_MULTICAST]; + mac_stats->BroadcastFramesXmittedOK =3D s[OCELOT_STAT_TX_BROADCAST]; + mac_stats->MulticastFramesReceivedOK =3D s[OCELOT_STAT_RX_MULTICAST]; + mac_stats->BroadcastFramesReceivedOK =3D s[OCELOT_STAT_RX_BROADCAST]; + mac_stats->FrameTooLongErrors =3D s[OCELOT_STAT_RX_LONGS]; + /* Sadly, C_RX_CRC is the sum of FCS and alignment errors, they are not + * counted individually. + */ + mac_stats->FrameCheckSequenceErrors =3D s[OCELOT_STAT_RX_CRC_ALIGN_ERRS]; + mac_stats->AlignmentErrors =3D s[OCELOT_STAT_RX_CRC_ALIGN_ERRS]; +} + +void ocelot_port_get_eth_mac_stats(struct ocelot *ocelot, int port, + struct ethtool_eth_mac_stats *mac_stats) +{ + ocelot_port_stats_run(ocelot, port, mac_stats, + ocelot_port_mac_stats_cb); +} +EXPORT_SYMBOL_GPL(ocelot_port_get_eth_mac_stats); + +static void ocelot_port_phy_stats_cb(struct ocelot *ocelot, int port, void= *priv) +{ + u64 *s =3D &ocelot->stats[port * OCELOT_NUM_STATS]; + struct ethtool_eth_phy_stats *phy_stats =3D priv; + + phy_stats->SymbolErrorDuringCarrier =3D s[OCELOT_STAT_RX_SYM_ERRS]; +} + +void ocelot_port_get_eth_phy_stats(struct ocelot *ocelot, int port, + struct ethtool_eth_phy_stats *phy_stats) +{ + ocelot_port_stats_run(ocelot, port, phy_stats, + ocelot_port_phy_stats_cb); +} +EXPORT_SYMBOL_GPL(ocelot_port_get_eth_phy_stats); + void ocelot_port_get_stats64(struct ocelot *ocelot, int port, struct rtnl_link_stats64 *stats) { diff --git a/include/soc/mscc/ocelot.h b/include/soc/mscc/ocelot.h index 2f639ef88f8f..050e142518e6 100644 --- a/include/soc/mscc/ocelot.h +++ b/include/soc/mscc/ocelot.h @@ -1045,6 +1045,17 @@ void ocelot_get_ethtool_stats(struct ocelot *ocelot,= int port, u64 *data); int ocelot_get_sset_count(struct ocelot *ocelot, int port, int sset); void ocelot_port_get_stats64(struct ocelot *ocelot, int port, struct rtnl_link_stats64 *stats); +void ocelot_port_get_pause_stats(struct ocelot *ocelot, int port, + struct ethtool_pause_stats *pause_stats); +void ocelot_port_get_rmon_stats(struct ocelot *ocelot, int port, + struct ethtool_rmon_stats *rmon_stats, + const struct ethtool_rmon_hist_range **ranges); +void ocelot_port_get_eth_ctrl_stats(struct ocelot *ocelot, int port, + struct ethtool_eth_ctrl_stats *ctrl_stats); +void ocelot_port_get_eth_mac_stats(struct ocelot *ocelot, int port, + struct ethtool_eth_mac_stats *mac_stats); +void ocelot_port_get_eth_phy_stats(struct ocelot *ocelot, int port, + struct ethtool_eth_phy_stats *phy_stats); int ocelot_get_ts_info(struct ocelot *ocelot, int port, struct ethtool_ts_info *info); void ocelot_set_ageing_time(struct ocelot *ocelot, unsigned int msecs); --=20 2.34.1 From nobody Mon Apr 6 08:10:03 2026 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 69590C38145 for ; Thu, 8 Sep 2022 16:50:25 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231258AbiIHQuX (ORCPT ); Thu, 8 Sep 2022 12:50:23 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44846 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231476AbiIHQtX (ORCPT ); Thu, 8 Sep 2022 12:49:23 -0400 Received: from EUR04-DB3-obe.outbound.protection.outlook.com (mail-eopbgr60072.outbound.protection.outlook.com [40.107.6.72]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id CACF112950E; Thu, 8 Sep 2022 09:49:20 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=aDmZeX5c8KgNPCot3SjGuXCSrjpF5/EQpaxCkL0Fsg7gwlPCfSYBI2sOk9sHX7m/CIEeMvocJf9dqRs2AVnWt2sHPAvVxpxooWCyZpHy7pw1mO0vJXwWyTMo6youzeIpmwF3c5uUdbG3t8OSMbVQXkQ+VHGPhDvz4FG9Lq27KFn1suR4hLYhNu6j1EVlwB5Gmlc/Ibz2d69GTobqjX1vRa7bLysCMeVWGdfsx+lxCEgOkqLWCVkZnuAKIete5rpki3hAwIIxK2343bukMFaKnjIVsqWDoaO2RZzLFSELmimVHpNAZPl+wQsljDZBeymhx4r9twYB509l9rOT7umrmA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=zOmORmOPPS+er3uZOA5Qky4mvzw44WhH855XFJBfPAU=; b=ASoJeo9Qw2cI89OsEse8KOuuHBuQsK0kdcOL/SdmM5/gTQOpCZsRBmvAx6lPsswxrH86dPIdGQk5bf47LcyQASTN4iwwVc8cqV7ki0QW7JNxnxzH/mMvW5rSv9x84Ha5orjSPKl5Vtb9Y6mVl30Sx3aLsLxlR7wQus+ZkGtQB8ocm5PAu4tLlU8pI2F0SgcCP/NRSkgLTkOHcsYtK0zSXy4fc6BfMXVROehGquQTms+d+0m7Wh1DZAw/GMb0vDUPHBN0bz55r4Ex2b+ayKzEJb2VCUX9gzitf4ceWS/4oDZxn5IlXO+ga/rWkEqzdwobymOU3fgyKjj5Qsg+J2P8Kw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=zOmORmOPPS+er3uZOA5Qky4mvzw44WhH855XFJBfPAU=; b=kdXbxDhzKom/spLTxPUjhxaFcUU+wRQHtECpzZZONRApzt1fmJmsY493XElkPSk/1yaWM97iSazaMiW5uXe4X+ceWCly6wGLl+OiaF+Yxz7al8dsAFCxgfTDzUxOfsPQncLsJ4+xSJwpF5hLPckpDbSENeAvzagfWSCplYi4vJw= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from VI1PR04MB5136.eurprd04.prod.outlook.com (2603:10a6:803:55::19) by DB7PR04MB5052.eurprd04.prod.outlook.com (2603:10a6:10:1b::32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5588.18; Thu, 8 Sep 2022 16:49:14 +0000 Received: from VI1PR04MB5136.eurprd04.prod.outlook.com ([fe80::3412:9d57:ec73:fef3]) by VI1PR04MB5136.eurprd04.prod.outlook.com ([fe80::3412:9d57:ec73:fef3%5]) with mapi id 15.20.5588.017; Thu, 8 Sep 2022 16:49:14 +0000 From: Vladimir Oltean To: netdev@vger.kernel.org Cc: "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Xiaoliang Yang , Claudiu Manoil , Alexandre Belloni , UNGLinuxDriver@microchip.com, Andrew Lunn , Vivien Didelot , Florian Fainelli , Maxim Kochetkov , Colin Foster , Richie Pearn , linux-kernel@vger.kernel.org Subject: [PATCH net-next 12/14] net: mscc: ocelot: harmonize names of SYS_COUNT_TX_AGING and OCELOT_STAT_TX_AGED Date: Thu, 8 Sep 2022 19:48:14 +0300 Message-Id: <20220908164816.3576795-13-vladimir.oltean@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220908164816.3576795-1-vladimir.oltean@nxp.com> References: <20220908164816.3576795-1-vladimir.oltean@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BEXP281CA0009.DEUP281.PROD.OUTLOOK.COM (2603:10a6:b10::19) To VI1PR04MB5136.eurprd04.prod.outlook.com (2603:10a6:803:55::19) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 766dc45a-c93c-472a-b210-08da91b9fcbd X-MS-TrafficTypeDiagnostic: DB7PR04MB5052:EE_ X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: dg44Gb2QK9coMKhyH/DiQvrA//veion5MU+qf8zuAK9KD8x3jpLRt3vfqKzAiGJO2pJhVOgWeSaLhSWSuaTbySVAWx/aC2GGl9zrR9BBS7ektM66cefZFS/LUFH2jGImRCw222+gAtXFRsukTXbo36ydZTMrVNpTWk5B+TCNOGVKog1LKJZ0iwiUFWn+fc32kV6WAWu0VAj1ZCurQcDumHHWl9cwftC0VmOkKj2gs8ZLlM9eYb/RK0NzypHllEio22PW6c1HMkRSYm8JQv1akO6Y8IwCOcTnHzZhIJRvfRhjYu3xUZLSAGWyvlODldJqwFyrLdmjJjwR8naVjb7YGtKL/xLmKqdpMFBtHFHCBcmtxyqng2rli25U/UwPHoD/FvcVvneqHDNjcHJI1Tvs5FBC/iL5VdHPAU6LUh8rmza1Nfn3ppjB2jyLl5x9afm+EZrZZziXBxNNgRimTcWzGf+vgyjEAyrHXVteJOyxrDCEhVkPEwbPCj2A+VhFEKfB+T9M48N6ADdYOFgEb/a6KDpgA2GocClskDqPxl8TQePcwjTpvl+5V0V2GXnyTKMetdWJRBVGnOqaMP9H96J3g2h6FO/N+qFK9oXOdeNeqBmbPPsYhDNTVp6aXXxjHnt+YrDFs+dW06LvvzZNw/kxRZFBniHB71aMfx/px82EaKyusWAwJ2JL2foZpxP/ufPUzdwSSVfJqEAxNSMQqGafaxPAUQRS0jc5dp/kUIb3P18VgVFUPSX/MJlh8RZNjmCml5nJMNwY9ju893vepO3ZjA== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5136.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230016)(4636009)(136003)(39860400002)(396003)(346002)(366004)(376002)(38350700002)(8676002)(66476007)(66946007)(2616005)(6486002)(186003)(66556008)(38100700002)(36756003)(1076003)(4326008)(478600001)(83380400001)(8936002)(2906002)(5660300002)(44832011)(7416002)(52116002)(41300700001)(6506007)(6916009)(26005)(54906003)(6512007)(86362001)(316002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?PijMBkDK3ujKsFmRiEyWo/3q6dX4BtQprz9+R8g4LTsMcC5W4ENd5wIn1OFI?= =?us-ascii?Q?8/NoeJty+E7fRKqcydD5+qwSUUSycoGDaufrGjKzCst2RnzgWFXYrcuyy7gA?= =?us-ascii?Q?qKnKOcAJSKqVdbKPjNS4h/+kA5qtbkwSEBx251qbGhF5wyipnso8KVXJTG00?= =?us-ascii?Q?1T7MI+GsiLTU75PmRJv7Moqz1ijIuFb8UxTU8t41/Kteon16dkdPlxr3Qf8/?= =?us-ascii?Q?Q0qukv42CkCay32YuyiRJ8puUZV9LF6Auxw0VfrU4a65BAE0TTg4Hzl2QY8+?= =?us-ascii?Q?lsAzsi5nVtpfswGEJN0lNGPPO5bbXZxTk1t3+CpQZmfXfvRd5W8BfJ4So8WW?= =?us-ascii?Q?lKJXCcLs93oOyCGHUHj4SWfQFRSFr3goDNeavzoXmgyNT5fr3DI80y/E//L9?= =?us-ascii?Q?x3QNLOFjbBblV6BWWZfGUTyXLhmX6xRkPbBuLZPpXC5mq18P2ke3ZzfxWz6E?= =?us-ascii?Q?7W/t2gkoyTZfnC4x4zasa7vuijTrf41IuWKt8WpjlK8ZN8IKG4loWOt8fy0f?= =?us-ascii?Q?frpeelvQek5Hevj7i9OhwloAudcRiRkUNO/w3uO/Ttz9C35j/+iOj/yVQOZV?= =?us-ascii?Q?NdNv33Yz8egOi3BiwTsb9gvWBf9GYFh/sEhln+MbKsua889D45PVxVSvPsK3?= =?us-ascii?Q?cHc8eZ6wZ2mOojTME8Dm3Ez6zuXelnonof7PPLxg4iUzLb8mjz8g71CUxJB7?= =?us-ascii?Q?/ExDbICu8XTOjiNDHY+I4Lu9KDtIKQudAqe3b0w04u5NREQLQBG3evfvKLsH?= =?us-ascii?Q?FDnCQmU52eES+HJCCw7zmnTr5k55wmvXxGtKSIfJBXTLcG7YgUQnOh293B+2?= =?us-ascii?Q?/6hI5YjnApNVVqvJTHtuGbv8ZdrRoV07F6SkKRC2AgDzT9Xf8P5ec5ZBzbt0?= =?us-ascii?Q?G/g4DunXNmKD24lHBW115iRV1N+bi9SvLlyhfD5RrPPUhM5CsP10oaMYsSgQ?= =?us-ascii?Q?RBqyS0hvj2R90/Hdkdr5OpPZPsXWkVSWG8Rtkrw1yllAmy28gHb3ivSJxFxP?= =?us-ascii?Q?0G8RVNIx9aw9ms4U9OgbamjQ5j9Ya4/9dlo9hKGbFnblQcYSzGFGHRuOPS/Q?= =?us-ascii?Q?2oQ1UHUH/APVw7Q9q5e9KDGh+k9LlfoyQm0YjPQ3+jmL6EQAGgXYPsuLw2/j?= =?us-ascii?Q?FGggtIksezx4Px2cmlXqjufi6jkY+anrhzzm5xTVoHAaE6gHxPFICFSsNfLn?= =?us-ascii?Q?nmq0Dq4hJbm7+Vv1ibl26py7T765yDAsehB6MrTHd736zPTiSA7eWeoDxuBW?= =?us-ascii?Q?dJQoNUF6tqXP+BIW7unA4PPUdHflzlWOERG9jf2ojicC5/+KKm0m2zVBOvF2?= =?us-ascii?Q?iChva2QMQpi/y8dIAKTEHw9xo0vaqu7aBU64vAU3s/wvDGdh7c7lfiJRlgp8?= =?us-ascii?Q?XNWmyrWUfdzatV95iEFbsJx0/WY6zMy+Zyx6tTuekIRXIMNG+q61vKP/bO4W?= =?us-ascii?Q?/oU0HrcgecnaOF/gh9GDroi2HYWd+BNvv7j6KNTgegBcMSW1f6vX15JcUhU3?= =?us-ascii?Q?kkeZ26p51CFphUHHYvwt49mvYvYi3o5Bg1JYtlY818Uwv/GrfGfqL3nzKc4L?= =?us-ascii?Q?S8gmPRMLkCP3VdYXnUq0jbpM9URtFNgVEqEl+lQ7C7TpfR5ZDcZjgyFuoxK0?= =?us-ascii?Q?Ng=3D=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 766dc45a-c93c-472a-b210-08da91b9fcbd X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5136.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Sep 2022 16:48:42.3645 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: +T5OCA+aoonbGwcTrkSe4IPVahAeVQUVldvOkbe/RWj5MTHr9X87CiP1LnPnqfzdUQXEXCZJtCLtiustT1ocVg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB7PR04MB5052 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" The hardware counter is called C_TX_AGED, so rename SYS_COUNT_TX_AGING to SYS_COUNT_TX_AGED. This will become important since we want to minimize the way in which we declare struct ocelot_stat_layout elements, using the C preprocessor. Signed-off-by: Vladimir Oltean --- drivers/net/dsa/ocelot/felix_vsc9959.c | 4 ++-- drivers/net/dsa/ocelot/seville_vsc9953.c | 4 ++-- drivers/net/ethernet/mscc/ocelot_vsc7514.c | 2 +- drivers/net/ethernet/mscc/vsc7514_regs.c | 2 +- include/soc/mscc/ocelot.h | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/drivers/net/dsa/ocelot/felix_vsc9959.c b/drivers/net/dsa/ocelo= t/felix_vsc9959.c index b56aad84b6cb..c8377a79d5ec 100644 --- a/drivers/net/dsa/ocelot/felix_vsc9959.c +++ b/drivers/net/dsa/ocelot/felix_vsc9959.c @@ -347,7 +347,7 @@ static const u32 vsc9959_sys_regmap[] =3D { REG(SYS_COUNT_TX_GREEN_PRIO_5, 0x00026c), REG(SYS_COUNT_TX_GREEN_PRIO_6, 0x000270), REG(SYS_COUNT_TX_GREEN_PRIO_7, 0x000274), - REG(SYS_COUNT_TX_AGING, 0x000278), + REG(SYS_COUNT_TX_AGED, 0x000278), REG(SYS_COUNT_DROP_LOCAL, 0x000400), REG(SYS_COUNT_DROP_TAIL, 0x000404), REG(SYS_COUNT_DROP_YELLOW_PRIO_0, 0x000408), @@ -920,7 +920,7 @@ static const struct ocelot_stat_layout vsc9959_stats_la= yout[OCELOT_NUM_STATS] =3D }, [OCELOT_STAT_TX_AGED] =3D { .name =3D "tx_aged", - .reg =3D SYS_COUNT_TX_AGING, + .reg =3D SYS_COUNT_TX_AGED, }, [OCELOT_STAT_DROP_LOCAL] =3D { .name =3D "drop_local", diff --git a/drivers/net/dsa/ocelot/seville_vsc9953.c b/drivers/net/dsa/oce= lot/seville_vsc9953.c index 26fdd0d90724..5799c4e50e36 100644 --- a/drivers/net/dsa/ocelot/seville_vsc9953.c +++ b/drivers/net/dsa/ocelot/seville_vsc9953.c @@ -343,7 +343,7 @@ static const u32 vsc9953_sys_regmap[] =3D { REG(SYS_COUNT_TX_GREEN_PRIO_5, 0x00016c), REG(SYS_COUNT_TX_GREEN_PRIO_6, 0x000170), REG(SYS_COUNT_TX_GREEN_PRIO_7, 0x000174), - REG(SYS_COUNT_TX_AGING, 0x000178), + REG(SYS_COUNT_TX_AGED, 0x000178), REG(SYS_COUNT_DROP_LOCAL, 0x000200), REG(SYS_COUNT_DROP_TAIL, 0x000204), REG(SYS_COUNT_DROP_YELLOW_PRIO_0, 0x000208), @@ -912,7 +912,7 @@ static const struct ocelot_stat_layout vsc9953_stats_la= yout[OCELOT_NUM_STATS] =3D }, [OCELOT_STAT_TX_AGED] =3D { .name =3D "tx_aged", - .reg =3D SYS_COUNT_TX_AGING, + .reg =3D SYS_COUNT_TX_AGED, }, [OCELOT_STAT_DROP_LOCAL] =3D { .name =3D "drop_local", diff --git a/drivers/net/ethernet/mscc/ocelot_vsc7514.c b/drivers/net/ether= net/mscc/ocelot_vsc7514.c index 9c488953f541..fc1c890e3db1 100644 --- a/drivers/net/ethernet/mscc/ocelot_vsc7514.c +++ b/drivers/net/ethernet/mscc/ocelot_vsc7514.c @@ -395,7 +395,7 @@ static const struct ocelot_stat_layout ocelot_stats_lay= out[OCELOT_NUM_STATS] =3D { }, [OCELOT_STAT_TX_AGED] =3D { .name =3D "tx_aged", - .reg =3D SYS_COUNT_TX_AGING, + .reg =3D SYS_COUNT_TX_AGED, }, [OCELOT_STAT_DROP_LOCAL] =3D { .name =3D "drop_local", diff --git a/drivers/net/ethernet/mscc/vsc7514_regs.c b/drivers/net/etherne= t/mscc/vsc7514_regs.c index bd062203a6b2..9d2d3e13cacf 100644 --- a/drivers/net/ethernet/mscc/vsc7514_regs.c +++ b/drivers/net/ethernet/mscc/vsc7514_regs.c @@ -242,7 +242,7 @@ const u32 vsc7514_sys_regmap[] =3D { REG(SYS_COUNT_TX_GREEN_PRIO_5, 0x00016c), REG(SYS_COUNT_TX_GREEN_PRIO_6, 0x000170), REG(SYS_COUNT_TX_GREEN_PRIO_7, 0x000174), - REG(SYS_COUNT_TX_AGING, 0x000178), + REG(SYS_COUNT_TX_AGED, 0x000178), REG(SYS_COUNT_DROP_LOCAL, 0x000200), REG(SYS_COUNT_DROP_TAIL, 0x000204), REG(SYS_COUNT_DROP_YELLOW_PRIO_0, 0x000208), diff --git a/include/soc/mscc/ocelot.h b/include/soc/mscc/ocelot.h index 050e142518e6..860ec592c689 100644 --- a/include/soc/mscc/ocelot.h +++ b/include/soc/mscc/ocelot.h @@ -392,7 +392,7 @@ enum ocelot_reg { SYS_COUNT_TX_GREEN_PRIO_5, SYS_COUNT_TX_GREEN_PRIO_6, SYS_COUNT_TX_GREEN_PRIO_7, - SYS_COUNT_TX_AGING, + SYS_COUNT_TX_AGED, SYS_COUNT_DROP_LOCAL, SYS_COUNT_DROP_TAIL, SYS_COUNT_DROP_YELLOW_PRIO_0, --=20 2.34.1 From nobody Mon Apr 6 08:10:03 2026 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id AC093C54EE9 for ; Thu, 8 Sep 2022 16:50:59 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231680AbiIHQu5 (ORCPT ); Thu, 8 Sep 2022 12:50:57 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44550 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229794AbiIHQte (ORCPT ); Thu, 8 Sep 2022 12:49:34 -0400 Received: from EUR04-DB3-obe.outbound.protection.outlook.com (mail-eopbgr60072.outbound.protection.outlook.com [40.107.6.72]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id AD7DDE54; Thu, 8 Sep 2022 09:49:22 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=UoBrZ/dHJ9uqXfpSxE8pm7CkzbrLNQKhV4bEiT0hOlbqrgGzMcZ8tNHg99DOkczoHn82xQNYpCbyeBodvdmgPXSuxYOhqpGVEsf6L+QqzU2xEzB/q7Suy5mHK0Ga/TbP0tzBmatIXI8NhpkFhNL0GLcwarVEPCoYHW23726kBmZNx2xvLRUaF4y8AJq28GlXFalZX4U+SKiqmNjypP9DX/tRQ1/R6/fWnr6lQVbncLO1lXQdqBaJiQ684d4kx8pO3PxYN5U5ZnlG3ym2ZQBkSCrk2RsF2Xp/nEyWXOJG4Zx3OVe/+mqQToS2VgLSMf/wm32AGPrBrMpgBSxSeN5Ppw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=34nTt03rCshPh/KGzPIEU3vcwniaxwtbS9f64Bk+RK8=; b=E8FeJ9FnhhDsQW1lp7jclJ4SfINZ3nOIHFNgRASOBNh21NtsCKti/NCKT2rtGvI+jz3PpgdTOYSTYiosx7ULP/Mh60PUbqWCTGIXwIazwfb4fH5T0eQ2yK6kia3kLd7RwrXIgd9mBRf9AiGiBopVAkjSg8j+o7R9S65kuPSAudFcp0MoPewzmv6vGJI5/m2bWuhu4cZmlbOYXMPvoKK79Tc+pwcIqbTw+cp4TknYwBDo1RC6+OfRC8MtaW+s8tO6en5aePTOhDK4vgilHC6mpYRv6ZrvLiabIAbjIZ19GgAgFOadxTFWMdNAisjGPYi1HPBoSnbPZwsG4hLPO/D/Mw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=34nTt03rCshPh/KGzPIEU3vcwniaxwtbS9f64Bk+RK8=; b=sGqrQQMFI8ouAkTjeQTjSv0WX2eqT9FBGlHhjrr3NZpIvT+lPh49mzuFF9u3/C3su2SrU2/JRG6f4BtFd68vyXYMc8GzFpF61Yi3C7ClBD/FLlaG3I+q5OPZAqrQPuzHa0ecGIszGM0OhU3/x13qgOaxnyGKuObRBLr0cl+exJY= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from VI1PR04MB5136.eurprd04.prod.outlook.com (2603:10a6:803:55::19) by DB7PR04MB5052.eurprd04.prod.outlook.com (2603:10a6:10:1b::32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5588.18; Thu, 8 Sep 2022 16:49:15 +0000 Received: from VI1PR04MB5136.eurprd04.prod.outlook.com ([fe80::3412:9d57:ec73:fef3]) by VI1PR04MB5136.eurprd04.prod.outlook.com ([fe80::3412:9d57:ec73:fef3%5]) with mapi id 15.20.5588.017; Thu, 8 Sep 2022 16:49:15 +0000 From: Vladimir Oltean To: netdev@vger.kernel.org Cc: "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Xiaoliang Yang , Claudiu Manoil , Alexandre Belloni , UNGLinuxDriver@microchip.com, Andrew Lunn , Vivien Didelot , Florian Fainelli , Maxim Kochetkov , Colin Foster , Richie Pearn , linux-kernel@vger.kernel.org Subject: [PATCH net-next 13/14] net: mscc: ocelot: minimize definitions for stats Date: Thu, 8 Sep 2022 19:48:15 +0300 Message-Id: <20220908164816.3576795-14-vladimir.oltean@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220908164816.3576795-1-vladimir.oltean@nxp.com> References: <20220908164816.3576795-1-vladimir.oltean@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BEXP281CA0009.DEUP281.PROD.OUTLOOK.COM (2603:10a6:b10::19) To VI1PR04MB5136.eurprd04.prod.outlook.com (2603:10a6:803:55::19) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: eda8af15-8251-43f0-2f61-08da91b9fd81 X-MS-TrafficTypeDiagnostic: DB7PR04MB5052:EE_ X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: typNsTt0O5Jh2lAnfxOw33xy2+4Cs61BI/H7cUaQ6vNvwNpmZNmEfig1YGS3v7Pzcpk4osi5HY/w8hoJAWz8t4kdmq/OcAYdNCGJX3XQmNl1UskvCywK26bwuPDKrRH2MMCSoSv8tFpGt1713rETsJ4B0qGoq65MbXnUvOasMYVuu/7n74rboVLfD5tnrgi74qXNtm6rnSuK/a+etxNtkGxgU3rDRrSC6/GQHQpeAOW58WcKhOwh4Ekg9Lr2LlPW0AKrCkhaTvSiVRL2sd0HfjNfRRpaEFId6Cz9FxwHzwAHeqbQQsbExueACnS+MUFaVNq2cMa/jPF1slbX6qE0CIXrUMznMqCJGOFHUFDL5S+9vW0n0VZxEYQr8U09j9cl655dIuaKJ16QVvoKA3i7SAEW2pgNtXlA4LpnDIT5EIyf61VMNDaxOdzLZBDmdTSi9A7IWSUKJNrt7OhZBnhvLs9DBtZMoVlA9PLXmIpNDixGgWa9NBlZnn+ilZGCcwbNuN8DPj7nPa+HRgt5AjfGa4cyUPskxkf42zsmHrtcMqAFHvU7RA/lXx0YCGqBPMWJD1FzIBrGqI1df+ak2uohjxtZbMOL9gTu/9bh4Zon3ip/IJhIFMO7efdmyM7CFyg8eybnJlwTKmYlHkSRFWsVEimYR8rtSECABcwjO76JKYw8XNJyDamExpp9OWLmSd7gAgkXgU3p16ogBI82qR2cjnJ9R1ezxKge/ELe94ctHTTXASAb2HvtG5b0UD5gdgwX X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5136.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230016)(4636009)(136003)(39860400002)(396003)(346002)(366004)(376002)(38350700002)(8676002)(66476007)(66946007)(2616005)(6486002)(186003)(66556008)(38100700002)(36756003)(1076003)(4326008)(478600001)(83380400001)(8936002)(2906002)(5660300002)(44832011)(30864003)(7416002)(52116002)(41300700001)(6506007)(6916009)(26005)(54906003)(6512007)(86362001)(316002)(559001)(579004);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?Ugl3ahwBj0cMfA9Oht7Jbtunfhl3aIwHqQXYqfn5gHLOOIbqQ7RYJBGBUzfJ?= =?us-ascii?Q?rbIpYXa6cg68MMa9VLrYVbU9z7x5CNmxuLsTqEWHuyZzeNOChRQKq9jO7Bn5?= =?us-ascii?Q?p4wYvD59CPzxm3uQCxMoLbTapeq+z6LtKpUL5FNBqDxg54BJF1XKk4EihyjQ?= =?us-ascii?Q?EKHBAUBGIpJWSG3Wr+TRREy0JGdAsx2dyYN+rHEgw0OmQZyrgJ7JuALZxBAx?= =?us-ascii?Q?h9X9zwudYPIzPXdZWsRaHcAlIATLIVLMztEfIJrw0UbfaGlW1KjaiCRB4wpH?= =?us-ascii?Q?oYa80XUsz0dKLzj3AkKoofdBoOkFwIXlGU7K+QKQXRTDYMH8OEDuHykc4rFJ?= =?us-ascii?Q?xqXt70rDykllBUv8P9+xzOk2lsGRw+rCzXvcdX5W7qv7+JUUQzw49tyBcKMc?= =?us-ascii?Q?2Na9Ps4Pwxx+Ry1cGSEMyI3/0RA+86J38MqijVTDnwur4q0JE4ye2y+Ytpeh?= =?us-ascii?Q?vtMdXlAqsSd6zdXcLvMnwoKUDusX0TwzN16y31h8T59yrUfu+SB4fjcwqF55?= =?us-ascii?Q?r6vo0me/hZauN6A4FVgdPZSfSxThSg9EcT+x1fLpVrZ+VToZ2JhtPHyAGEQD?= =?us-ascii?Q?vTHqRrvqJQBChSy1dWhgMuU4fOl3HGlLo83UGh15zePgJ+r5eUh+vPApCiEN?= =?us-ascii?Q?Y2G3fcQMzXLcGJHBWtP7syyqOdzgWfOqvrfWGHVctFZW9Wi66M9M5RsCtiGb?= =?us-ascii?Q?zt7e+trlrcNModVA/bjq94VRgpbAtpk3BoO3hJpkIB3Uu/NBs8RnZvj+llFa?= =?us-ascii?Q?J4/7f46iqick4asBHtTVyQOMN3zGZGtuocqiqb/CYjz/Ipvq0fRvX+d1vC3G?= =?us-ascii?Q?TCLfo20ZH4Gokg8CoW1ieAbQlZMbvOR6yA4N6RfZvKqkJF9wGPSF3rdAjXfu?= =?us-ascii?Q?yimzQpCe8JFnoGcfJn/JaQawdVocrEKnADdfIn54PgjkldOYv/3iVDxRxItB?= =?us-ascii?Q?MkZSojQI5kzAET6VS+nendkO4W/YhZ2CYQCvLSjGsT4deOFvpqKbFvbyxBxh?= =?us-ascii?Q?DNhY+hbKDWle1rU8EMtgq9+HQjCixeBjLkQddlxOFtSfTb1b6H1wUUBx3O09?= =?us-ascii?Q?8KJCPpBWGsgf9H4731K4WE0BgJVahP7ldmgx/54gWeuj6xLvP8QAJHX/deEJ?= =?us-ascii?Q?i0t338FBMafxUe7kYO/FmwmQqazrO1/K1DVgHrgNu5AVtmnxB0oIg8J/cLnt?= =?us-ascii?Q?oHyiqnPWg9IXBfnnPxqObbTA7wovlULHu1HobyfrE+RUorqj2V2E/aPvtGeh?= =?us-ascii?Q?xlxTvMTo8ISihEf09J8ZyPtc5auK67EAOtZItTu/2E5MDoGMK0Oob3ertC/I?= =?us-ascii?Q?OsT9SIr/8yL9TQ2ZnfwHx9L44c4wQlMCiWjdJYvrnnqBqASv2SraEBTc5iEH?= =?us-ascii?Q?VGJRQqflHkaaGQIKx2T5NSJHF+bo48QyoiXI1GM6V0iSIxki4EDWHUfSgeHW?= =?us-ascii?Q?CLglF64PbZpKLiurfJkkROa21JZR/9hRV5IR431sNWxKtu6cNTSWDEsFnTvR?= =?us-ascii?Q?5QxsIOKEGci79pWNNcj0nABtOgrqmPd6hyxQdK25HtNnQK9dEaYog/1Jd6xF?= =?us-ascii?Q?IQX9nC9afHu6Jq5ZW+T13ek69TYOsct24Ma4RNIVV4bPXZ+oAVeMhKkitUAk?= =?us-ascii?Q?8A=3D=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: eda8af15-8251-43f0-2f61-08da91b9fd81 X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5136.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Sep 2022 16:48:43.6300 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 6irvKOLZvUTO8vUFX/iCzuVZEZv5YwA6WSBY0JKmn8HmjQzukm6PKt+tWCpJ9xjW2boseGIcq9RVHY5pOkpoWw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB7PR04MB5052 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" The current definition of struct ocelot_stat_layout is long-winded (4 lines per entry, and we have hundreds of entries), so we could make an effort to use the C preprocessor and reduce the line count. Create an implicit correspondence between enum ocelot_reg, which tells us the register address (SYS_COUNT_RX_OCTETS etc) and enum ocelot_stat which allows us to index the ocelot->stats array (OCELOT_STAT_RX_OCTETS etc), and don't require us to specify both when we define what stats each switch family has. Create an OCELOT_STAT() macro that pairs only an enum ocelot_stat to an enum ocelot_reg, and an OCELOT_STAT_ETHTOOL() macro which also contains a name exported to the unstructured ethtool -S stringset API. For now, we define all counters as having the OCELOT_STAT_ETHTOOL() kind, but we will add more counters in the future which are not exported to the unstructured ethtool -S. Signed-off-by: Vladimir Oltean --- drivers/net/dsa/ocelot/felix_vsc9959.c | 465 +++++---------------- drivers/net/dsa/ocelot/seville_vsc9953.c | 465 +++++---------------- drivers/net/ethernet/mscc/ocelot_vsc7514.c | 465 +++++---------------- include/soc/mscc/ocelot.h | 11 + 4 files changed, 290 insertions(+), 1116 deletions(-) diff --git a/drivers/net/dsa/ocelot/felix_vsc9959.c b/drivers/net/dsa/ocelo= t/felix_vsc9959.c index c8377a79d5ec..07641915fcf0 100644 --- a/drivers/net/dsa/ocelot/felix_vsc9959.c +++ b/drivers/net/dsa/ocelot/felix_vsc9959.c @@ -622,378 +622,99 @@ static const struct reg_field vsc9959_regfields[REGF= IELD_MAX] =3D { }; =20 static const struct ocelot_stat_layout vsc9959_stats_layout[OCELOT_NUM_STA= TS] =3D { - [OCELOT_STAT_RX_OCTETS] =3D { - .name =3D "rx_octets", - .reg =3D SYS_COUNT_RX_OCTETS, - }, - [OCELOT_STAT_RX_UNICAST] =3D { - .name =3D "rx_unicast", - .reg =3D SYS_COUNT_RX_UNICAST, - }, - [OCELOT_STAT_RX_MULTICAST] =3D { - .name =3D "rx_multicast", - .reg =3D SYS_COUNT_RX_MULTICAST, - }, - [OCELOT_STAT_RX_BROADCAST] =3D { - .name =3D "rx_broadcast", - .reg =3D SYS_COUNT_RX_BROADCAST, - }, - [OCELOT_STAT_RX_SHORTS] =3D { - .name =3D "rx_shorts", - .reg =3D SYS_COUNT_RX_SHORTS, - }, - [OCELOT_STAT_RX_FRAGMENTS] =3D { - .name =3D "rx_fragments", - .reg =3D SYS_COUNT_RX_FRAGMENTS, - }, - [OCELOT_STAT_RX_JABBERS] =3D { - .name =3D "rx_jabbers", - .reg =3D SYS_COUNT_RX_JABBERS, - }, - [OCELOT_STAT_RX_CRC_ALIGN_ERRS] =3D { - .name =3D "rx_crc_align_errs", - .reg =3D SYS_COUNT_RX_CRC_ALIGN_ERRS, - }, - [OCELOT_STAT_RX_SYM_ERRS] =3D { - .name =3D "rx_sym_errs", - .reg =3D SYS_COUNT_RX_SYM_ERRS, - }, - [OCELOT_STAT_RX_64] =3D { - .name =3D "rx_frames_below_65_octets", - .reg =3D SYS_COUNT_RX_64, - }, - [OCELOT_STAT_RX_65_127] =3D { - .name =3D "rx_frames_65_to_127_octets", - .reg =3D SYS_COUNT_RX_65_127, - }, - [OCELOT_STAT_RX_128_255] =3D { - .name =3D "rx_frames_128_to_255_octets", - .reg =3D SYS_COUNT_RX_128_255, - }, - [OCELOT_STAT_RX_256_511] =3D { - .name =3D "rx_frames_256_to_511_octets", - .reg =3D SYS_COUNT_RX_256_511, - }, - [OCELOT_STAT_RX_512_1023] =3D { - .name =3D "rx_frames_512_to_1023_octets", - .reg =3D SYS_COUNT_RX_512_1023, - }, - [OCELOT_STAT_RX_1024_1526] =3D { - .name =3D "rx_frames_1024_to_1526_octets", - .reg =3D SYS_COUNT_RX_1024_1526, - }, - [OCELOT_STAT_RX_1527_MAX] =3D { - .name =3D "rx_frames_over_1526_octets", - .reg =3D SYS_COUNT_RX_1527_MAX, - }, - [OCELOT_STAT_RX_PAUSE] =3D { - .name =3D "rx_pause", - .reg =3D SYS_COUNT_RX_PAUSE, - }, - [OCELOT_STAT_RX_CONTROL] =3D { - .name =3D "rx_control", - .reg =3D SYS_COUNT_RX_CONTROL, - }, - [OCELOT_STAT_RX_LONGS] =3D { - .name =3D "rx_longs", - .reg =3D SYS_COUNT_RX_LONGS, - }, - [OCELOT_STAT_RX_CLASSIFIED_DROPS] =3D { - .name =3D "rx_classified_drops", - .reg =3D SYS_COUNT_RX_CLASSIFIED_DROPS, - }, - [OCELOT_STAT_RX_RED_PRIO_0] =3D { - .name =3D "rx_red_prio_0", - .reg =3D SYS_COUNT_RX_RED_PRIO_0, - }, - [OCELOT_STAT_RX_RED_PRIO_1] =3D { - .name =3D "rx_red_prio_1", - .reg =3D SYS_COUNT_RX_RED_PRIO_1, - }, - [OCELOT_STAT_RX_RED_PRIO_2] =3D { - .name =3D "rx_red_prio_2", - .reg =3D SYS_COUNT_RX_RED_PRIO_2, - }, - [OCELOT_STAT_RX_RED_PRIO_3] =3D { - .name =3D "rx_red_prio_3", - .reg =3D SYS_COUNT_RX_RED_PRIO_3, - }, - [OCELOT_STAT_RX_RED_PRIO_4] =3D { - .name =3D "rx_red_prio_4", - .reg =3D SYS_COUNT_RX_RED_PRIO_4, - }, - [OCELOT_STAT_RX_RED_PRIO_5] =3D { - .name =3D "rx_red_prio_5", - .reg =3D SYS_COUNT_RX_RED_PRIO_5, - }, - [OCELOT_STAT_RX_RED_PRIO_6] =3D { - .name =3D "rx_red_prio_6", - .reg =3D SYS_COUNT_RX_RED_PRIO_6, - }, - [OCELOT_STAT_RX_RED_PRIO_7] =3D { - .name =3D "rx_red_prio_7", - .reg =3D SYS_COUNT_RX_RED_PRIO_7, - }, - [OCELOT_STAT_RX_YELLOW_PRIO_0] =3D { - .name =3D "rx_yellow_prio_0", - .reg =3D SYS_COUNT_RX_YELLOW_PRIO_0, - }, - [OCELOT_STAT_RX_YELLOW_PRIO_1] =3D { - .name =3D "rx_yellow_prio_1", - .reg =3D SYS_COUNT_RX_YELLOW_PRIO_1, - }, - [OCELOT_STAT_RX_YELLOW_PRIO_2] =3D { - .name =3D "rx_yellow_prio_2", - .reg =3D SYS_COUNT_RX_YELLOW_PRIO_2, - }, - [OCELOT_STAT_RX_YELLOW_PRIO_3] =3D { - .name =3D "rx_yellow_prio_3", - .reg =3D SYS_COUNT_RX_YELLOW_PRIO_3, - }, - [OCELOT_STAT_RX_YELLOW_PRIO_4] =3D { - .name =3D "rx_yellow_prio_4", - .reg =3D SYS_COUNT_RX_YELLOW_PRIO_4, - }, - [OCELOT_STAT_RX_YELLOW_PRIO_5] =3D { - .name =3D "rx_yellow_prio_5", - .reg =3D SYS_COUNT_RX_YELLOW_PRIO_5, - }, - [OCELOT_STAT_RX_YELLOW_PRIO_6] =3D { - .name =3D "rx_yellow_prio_6", - .reg =3D SYS_COUNT_RX_YELLOW_PRIO_6, - }, - [OCELOT_STAT_RX_YELLOW_PRIO_7] =3D { - .name =3D "rx_yellow_prio_7", - .reg =3D SYS_COUNT_RX_YELLOW_PRIO_7, - }, - [OCELOT_STAT_RX_GREEN_PRIO_0] =3D { - .name =3D "rx_green_prio_0", - .reg =3D SYS_COUNT_RX_GREEN_PRIO_0, - }, - [OCELOT_STAT_RX_GREEN_PRIO_1] =3D { - .name =3D "rx_green_prio_1", - .reg =3D SYS_COUNT_RX_GREEN_PRIO_1, - }, - [OCELOT_STAT_RX_GREEN_PRIO_2] =3D { - .name =3D "rx_green_prio_2", - .reg =3D SYS_COUNT_RX_GREEN_PRIO_2, - }, - [OCELOT_STAT_RX_GREEN_PRIO_3] =3D { - .name =3D "rx_green_prio_3", - .reg =3D SYS_COUNT_RX_GREEN_PRIO_3, - }, - [OCELOT_STAT_RX_GREEN_PRIO_4] =3D { - .name =3D "rx_green_prio_4", - .reg =3D SYS_COUNT_RX_GREEN_PRIO_4, - }, - [OCELOT_STAT_RX_GREEN_PRIO_5] =3D { - .name =3D "rx_green_prio_5", - .reg =3D SYS_COUNT_RX_GREEN_PRIO_5, - }, - [OCELOT_STAT_RX_GREEN_PRIO_6] =3D { - .name =3D "rx_green_prio_6", - .reg =3D SYS_COUNT_RX_GREEN_PRIO_6, - }, - [OCELOT_STAT_RX_GREEN_PRIO_7] =3D { - .name =3D "rx_green_prio_7", - .reg =3D SYS_COUNT_RX_GREEN_PRIO_7, - }, - [OCELOT_STAT_TX_OCTETS] =3D { - .name =3D "tx_octets", - .reg =3D SYS_COUNT_TX_OCTETS, - }, - [OCELOT_STAT_TX_UNICAST] =3D { - .name =3D "tx_unicast", - .reg =3D SYS_COUNT_TX_UNICAST, - }, - [OCELOT_STAT_TX_MULTICAST] =3D { - .name =3D "tx_multicast", - .reg =3D SYS_COUNT_TX_MULTICAST, - }, - [OCELOT_STAT_TX_BROADCAST] =3D { - .name =3D "tx_broadcast", - .reg =3D SYS_COUNT_TX_BROADCAST, - }, - [OCELOT_STAT_TX_COLLISION] =3D { - .name =3D "tx_collision", - .reg =3D SYS_COUNT_TX_COLLISION, - }, - [OCELOT_STAT_TX_DROPS] =3D { - .name =3D "tx_drops", - .reg =3D SYS_COUNT_TX_DROPS, - }, - [OCELOT_STAT_TX_PAUSE] =3D { - .name =3D "tx_pause", - .reg =3D SYS_COUNT_TX_PAUSE, - }, - [OCELOT_STAT_TX_64] =3D { - .name =3D "tx_frames_below_65_octets", - .reg =3D SYS_COUNT_TX_64, - }, - [OCELOT_STAT_TX_65_127] =3D { - .name =3D "tx_frames_65_to_127_octets", - .reg =3D SYS_COUNT_TX_65_127, - }, - [OCELOT_STAT_TX_128_255] =3D { - .name =3D "tx_frames_128_255_octets", - .reg =3D SYS_COUNT_TX_128_255, - }, - [OCELOT_STAT_TX_256_511] =3D { - .name =3D "tx_frames_256_511_octets", - .reg =3D SYS_COUNT_TX_256_511, - }, - [OCELOT_STAT_TX_512_1023] =3D { - .name =3D "tx_frames_512_1023_octets", - .reg =3D SYS_COUNT_TX_512_1023, - }, - [OCELOT_STAT_TX_1024_1526] =3D { - .name =3D "tx_frames_1024_1526_octets", - .reg =3D SYS_COUNT_TX_1024_1526, - }, - [OCELOT_STAT_TX_1527_MAX] =3D { - .name =3D "tx_frames_over_1526_octets", - .reg =3D SYS_COUNT_TX_1527_MAX, - }, - [OCELOT_STAT_TX_YELLOW_PRIO_0] =3D { - .name =3D "tx_yellow_prio_0", - .reg =3D SYS_COUNT_TX_YELLOW_PRIO_0, - }, - [OCELOT_STAT_TX_YELLOW_PRIO_1] =3D { - .name =3D "tx_yellow_prio_1", - .reg =3D SYS_COUNT_TX_YELLOW_PRIO_1, - }, - [OCELOT_STAT_TX_YELLOW_PRIO_2] =3D { - .name =3D "tx_yellow_prio_2", - .reg =3D SYS_COUNT_TX_YELLOW_PRIO_2, - }, - [OCELOT_STAT_TX_YELLOW_PRIO_3] =3D { - .name =3D "tx_yellow_prio_3", - .reg =3D SYS_COUNT_TX_YELLOW_PRIO_3, - }, - [OCELOT_STAT_TX_YELLOW_PRIO_4] =3D { - .name =3D "tx_yellow_prio_4", - .reg =3D SYS_COUNT_TX_YELLOW_PRIO_4, - }, - [OCELOT_STAT_TX_YELLOW_PRIO_5] =3D { - .name =3D "tx_yellow_prio_5", - .reg =3D SYS_COUNT_TX_YELLOW_PRIO_5, - }, - [OCELOT_STAT_TX_YELLOW_PRIO_6] =3D { - .name =3D "tx_yellow_prio_6", - .reg =3D SYS_COUNT_TX_YELLOW_PRIO_6, - }, - [OCELOT_STAT_TX_YELLOW_PRIO_7] =3D { - .name =3D "tx_yellow_prio_7", - .reg =3D SYS_COUNT_TX_YELLOW_PRIO_7, - }, - [OCELOT_STAT_TX_GREEN_PRIO_0] =3D { - .name =3D "tx_green_prio_0", - .reg =3D SYS_COUNT_TX_GREEN_PRIO_0, - }, - [OCELOT_STAT_TX_GREEN_PRIO_1] =3D { - .name =3D "tx_green_prio_1", - .reg =3D SYS_COUNT_TX_GREEN_PRIO_1, - }, - [OCELOT_STAT_TX_GREEN_PRIO_2] =3D { - .name =3D "tx_green_prio_2", - .reg =3D SYS_COUNT_TX_GREEN_PRIO_2, - }, - [OCELOT_STAT_TX_GREEN_PRIO_3] =3D { - .name =3D "tx_green_prio_3", - .reg =3D SYS_COUNT_TX_GREEN_PRIO_3, - }, - [OCELOT_STAT_TX_GREEN_PRIO_4] =3D { - .name =3D "tx_green_prio_4", - .reg =3D SYS_COUNT_TX_GREEN_PRIO_4, - }, - [OCELOT_STAT_TX_GREEN_PRIO_5] =3D { - .name =3D "tx_green_prio_5", - .reg =3D SYS_COUNT_TX_GREEN_PRIO_5, - }, - [OCELOT_STAT_TX_GREEN_PRIO_6] =3D { - .name =3D "tx_green_prio_6", - .reg =3D SYS_COUNT_TX_GREEN_PRIO_6, - }, - [OCELOT_STAT_TX_GREEN_PRIO_7] =3D { - .name =3D "tx_green_prio_7", - .reg =3D SYS_COUNT_TX_GREEN_PRIO_7, - }, - [OCELOT_STAT_TX_AGED] =3D { - .name =3D "tx_aged", - .reg =3D SYS_COUNT_TX_AGED, - }, - [OCELOT_STAT_DROP_LOCAL] =3D { - .name =3D "drop_local", - .reg =3D SYS_COUNT_DROP_LOCAL, - }, - [OCELOT_STAT_DROP_TAIL] =3D { - .name =3D "drop_tail", - .reg =3D SYS_COUNT_DROP_TAIL, - }, - [OCELOT_STAT_DROP_YELLOW_PRIO_0] =3D { - .name =3D "drop_yellow_prio_0", - .reg =3D SYS_COUNT_DROP_YELLOW_PRIO_0, - }, - [OCELOT_STAT_DROP_YELLOW_PRIO_1] =3D { - .name =3D "drop_yellow_prio_1", - .reg =3D SYS_COUNT_DROP_YELLOW_PRIO_1, - }, - [OCELOT_STAT_DROP_YELLOW_PRIO_2] =3D { - .name =3D "drop_yellow_prio_2", - .reg =3D SYS_COUNT_DROP_YELLOW_PRIO_2, - }, - [OCELOT_STAT_DROP_YELLOW_PRIO_3] =3D { - .name =3D "drop_yellow_prio_3", - .reg =3D SYS_COUNT_DROP_YELLOW_PRIO_3, - }, - [OCELOT_STAT_DROP_YELLOW_PRIO_4] =3D { - .name =3D "drop_yellow_prio_4", - .reg =3D SYS_COUNT_DROP_YELLOW_PRIO_4, - }, - [OCELOT_STAT_DROP_YELLOW_PRIO_5] =3D { - .name =3D "drop_yellow_prio_5", - .reg =3D SYS_COUNT_DROP_YELLOW_PRIO_5, - }, - [OCELOT_STAT_DROP_YELLOW_PRIO_6] =3D { - .name =3D "drop_yellow_prio_6", - .reg =3D SYS_COUNT_DROP_YELLOW_PRIO_6, - }, - [OCELOT_STAT_DROP_YELLOW_PRIO_7] =3D { - .name =3D "drop_yellow_prio_7", - .reg =3D SYS_COUNT_DROP_YELLOW_PRIO_7, - }, - [OCELOT_STAT_DROP_GREEN_PRIO_0] =3D { - .name =3D "drop_green_prio_0", - .reg =3D SYS_COUNT_DROP_GREEN_PRIO_0, - }, - [OCELOT_STAT_DROP_GREEN_PRIO_1] =3D { - .name =3D "drop_green_prio_1", - .reg =3D SYS_COUNT_DROP_GREEN_PRIO_1, - }, - [OCELOT_STAT_DROP_GREEN_PRIO_2] =3D { - .name =3D "drop_green_prio_2", - .reg =3D SYS_COUNT_DROP_GREEN_PRIO_2, - }, - [OCELOT_STAT_DROP_GREEN_PRIO_3] =3D { - .name =3D "drop_green_prio_3", - .reg =3D SYS_COUNT_DROP_GREEN_PRIO_3, - }, - [OCELOT_STAT_DROP_GREEN_PRIO_4] =3D { - .name =3D "drop_green_prio_4", - .reg =3D SYS_COUNT_DROP_GREEN_PRIO_4, - }, - [OCELOT_STAT_DROP_GREEN_PRIO_5] =3D { - .name =3D "drop_green_prio_5", - .reg =3D SYS_COUNT_DROP_GREEN_PRIO_5, - }, - [OCELOT_STAT_DROP_GREEN_PRIO_6] =3D { - .name =3D "drop_green_prio_6", - .reg =3D SYS_COUNT_DROP_GREEN_PRIO_6, - }, - [OCELOT_STAT_DROP_GREEN_PRIO_7] =3D { - .name =3D "drop_green_prio_7", - .reg =3D SYS_COUNT_DROP_GREEN_PRIO_7, - }, + OCELOT_STAT_ETHTOOL(RX_OCTETS, "rx_octets"), + OCELOT_STAT_ETHTOOL(RX_UNICAST, "rx_unicast"), + OCELOT_STAT_ETHTOOL(RX_MULTICAST, "rx_multicast"), + OCELOT_STAT_ETHTOOL(RX_BROADCAST, "rx_broadcast"), + OCELOT_STAT_ETHTOOL(RX_SHORTS, "rx_shorts"), + OCELOT_STAT_ETHTOOL(RX_FRAGMENTS, "rx_fragments"), + OCELOT_STAT_ETHTOOL(RX_JABBERS, "rx_jabbers"), + OCELOT_STAT_ETHTOOL(RX_CRC_ALIGN_ERRS, "rx_crc_align_errs"), + OCELOT_STAT_ETHTOOL(RX_SYM_ERRS, "rx_sym_errs"), + OCELOT_STAT_ETHTOOL(RX_64, "rx_frames_below_65_octets"), + OCELOT_STAT_ETHTOOL(RX_65_127, "rx_frames_65_to_127_octets"), + OCELOT_STAT_ETHTOOL(RX_128_255, "rx_frames_128_to_255_octets"), + OCELOT_STAT_ETHTOOL(RX_256_511, "rx_frames_256_to_511_octets"), + OCELOT_STAT_ETHTOOL(RX_512_1023, "rx_frames_512_to_1023_octets"), + OCELOT_STAT_ETHTOOL(RX_1024_1526, "rx_frames_1024_to_1526_octets"), + OCELOT_STAT_ETHTOOL(RX_1527_MAX, "rx_frames_over_1526_octets"), + OCELOT_STAT_ETHTOOL(RX_PAUSE, "rx_pause"), + OCELOT_STAT_ETHTOOL(RX_CONTROL, "rx_control"), + OCELOT_STAT_ETHTOOL(RX_LONGS, "rx_longs"), + OCELOT_STAT_ETHTOOL(RX_CLASSIFIED_DROPS, "rx_classified_drops"), + OCELOT_STAT_ETHTOOL(RX_RED_PRIO_0, "rx_red_prio_0"), + OCELOT_STAT_ETHTOOL(RX_RED_PRIO_1, "rx_red_prio_1"), + OCELOT_STAT_ETHTOOL(RX_RED_PRIO_2, "rx_red_prio_2"), + OCELOT_STAT_ETHTOOL(RX_RED_PRIO_3, "rx_red_prio_3"), + OCELOT_STAT_ETHTOOL(RX_RED_PRIO_4, "rx_red_prio_4"), + OCELOT_STAT_ETHTOOL(RX_RED_PRIO_5, "rx_red_prio_5"), + OCELOT_STAT_ETHTOOL(RX_RED_PRIO_6, "rx_red_prio_6"), + OCELOT_STAT_ETHTOOL(RX_RED_PRIO_7, "rx_red_prio_7"), + OCELOT_STAT_ETHTOOL(RX_YELLOW_PRIO_0, "rx_yellow_prio_0"), + OCELOT_STAT_ETHTOOL(RX_YELLOW_PRIO_1, "rx_yellow_prio_1"), + OCELOT_STAT_ETHTOOL(RX_YELLOW_PRIO_2, "rx_yellow_prio_2"), + OCELOT_STAT_ETHTOOL(RX_YELLOW_PRIO_3, "rx_yellow_prio_3"), + OCELOT_STAT_ETHTOOL(RX_YELLOW_PRIO_4, "rx_yellow_prio_4"), + OCELOT_STAT_ETHTOOL(RX_YELLOW_PRIO_5, "rx_yellow_prio_5"), + OCELOT_STAT_ETHTOOL(RX_YELLOW_PRIO_6, "rx_yellow_prio_6"), + OCELOT_STAT_ETHTOOL(RX_YELLOW_PRIO_7, "rx_yellow_prio_7"), + OCELOT_STAT_ETHTOOL(RX_GREEN_PRIO_0, "rx_green_prio_0"), + OCELOT_STAT_ETHTOOL(RX_GREEN_PRIO_1, "rx_green_prio_1"), + OCELOT_STAT_ETHTOOL(RX_GREEN_PRIO_2, "rx_green_prio_2"), + OCELOT_STAT_ETHTOOL(RX_GREEN_PRIO_3, "rx_green_prio_3"), + OCELOT_STAT_ETHTOOL(RX_GREEN_PRIO_4, "rx_green_prio_4"), + OCELOT_STAT_ETHTOOL(RX_GREEN_PRIO_5, "rx_green_prio_5"), + OCELOT_STAT_ETHTOOL(RX_GREEN_PRIO_6, "rx_green_prio_6"), + OCELOT_STAT_ETHTOOL(RX_GREEN_PRIO_7, "rx_green_prio_7"), + OCELOT_STAT_ETHTOOL(TX_OCTETS, "tx_octets"), + OCELOT_STAT_ETHTOOL(TX_UNICAST, "tx_unicast"), + OCELOT_STAT_ETHTOOL(TX_MULTICAST, "tx_multicast"), + OCELOT_STAT_ETHTOOL(TX_BROADCAST, "tx_broadcast"), + OCELOT_STAT_ETHTOOL(TX_COLLISION, "tx_collision"), + OCELOT_STAT_ETHTOOL(TX_DROPS, "tx_drops"), + OCELOT_STAT_ETHTOOL(TX_PAUSE, "tx_pause"), + OCELOT_STAT_ETHTOOL(TX_64, "tx_frames_below_65_octets"), + OCELOT_STAT_ETHTOOL(TX_65_127, "tx_frames_65_to_127_octets"), + OCELOT_STAT_ETHTOOL(TX_128_255, "tx_frames_128_255_octets"), + OCELOT_STAT_ETHTOOL(TX_256_511, "tx_frames_256_511_octets"), + OCELOT_STAT_ETHTOOL(TX_512_1023, "tx_frames_512_1023_octets"), + OCELOT_STAT_ETHTOOL(TX_1024_1526, "tx_frames_1024_1526_octets"), + OCELOT_STAT_ETHTOOL(TX_1527_MAX, "tx_frames_over_1526_octets"), + OCELOT_STAT_ETHTOOL(TX_YELLOW_PRIO_0, "tx_yellow_prio_0"), + OCELOT_STAT_ETHTOOL(TX_YELLOW_PRIO_1, "tx_yellow_prio_1"), + OCELOT_STAT_ETHTOOL(TX_YELLOW_PRIO_2, "tx_yellow_prio_2"), + OCELOT_STAT_ETHTOOL(TX_YELLOW_PRIO_3, "tx_yellow_prio_3"), + OCELOT_STAT_ETHTOOL(TX_YELLOW_PRIO_4, "tx_yellow_prio_4"), + OCELOT_STAT_ETHTOOL(TX_YELLOW_PRIO_5, "tx_yellow_prio_5"), + OCELOT_STAT_ETHTOOL(TX_YELLOW_PRIO_6, "tx_yellow_prio_6"), + OCELOT_STAT_ETHTOOL(TX_YELLOW_PRIO_7, "tx_yellow_prio_7"), + OCELOT_STAT_ETHTOOL(TX_GREEN_PRIO_0, "tx_green_prio_0"), + OCELOT_STAT_ETHTOOL(TX_GREEN_PRIO_1, "tx_green_prio_1"), + OCELOT_STAT_ETHTOOL(TX_GREEN_PRIO_2, "tx_green_prio_2"), + OCELOT_STAT_ETHTOOL(TX_GREEN_PRIO_3, "tx_green_prio_3"), + OCELOT_STAT_ETHTOOL(TX_GREEN_PRIO_4, "tx_green_prio_4"), + OCELOT_STAT_ETHTOOL(TX_GREEN_PRIO_5, "tx_green_prio_5"), + OCELOT_STAT_ETHTOOL(TX_GREEN_PRIO_6, "tx_green_prio_6"), + OCELOT_STAT_ETHTOOL(TX_GREEN_PRIO_7, "tx_green_prio_7"), + OCELOT_STAT_ETHTOOL(TX_AGED, "tx_aged"), + OCELOT_STAT_ETHTOOL(DROP_LOCAL, "drop_local"), + OCELOT_STAT_ETHTOOL(DROP_TAIL, "drop_tail"), + OCELOT_STAT_ETHTOOL(DROP_YELLOW_PRIO_0, "drop_yellow_prio_0"), + OCELOT_STAT_ETHTOOL(DROP_YELLOW_PRIO_1, "drop_yellow_prio_1"), + OCELOT_STAT_ETHTOOL(DROP_YELLOW_PRIO_2, "drop_yellow_prio_2"), + OCELOT_STAT_ETHTOOL(DROP_YELLOW_PRIO_3, "drop_yellow_prio_3"), + OCELOT_STAT_ETHTOOL(DROP_YELLOW_PRIO_4, "drop_yellow_prio_4"), + OCELOT_STAT_ETHTOOL(DROP_YELLOW_PRIO_5, "drop_yellow_prio_5"), + OCELOT_STAT_ETHTOOL(DROP_YELLOW_PRIO_6, "drop_yellow_prio_6"), + OCELOT_STAT_ETHTOOL(DROP_YELLOW_PRIO_7, "drop_yellow_prio_7"), + OCELOT_STAT_ETHTOOL(DROP_GREEN_PRIO_0, "drop_green_prio_0"), + OCELOT_STAT_ETHTOOL(DROP_GREEN_PRIO_1, "drop_green_prio_1"), + OCELOT_STAT_ETHTOOL(DROP_GREEN_PRIO_2, "drop_green_prio_2"), + OCELOT_STAT_ETHTOOL(DROP_GREEN_PRIO_3, "drop_green_prio_3"), + OCELOT_STAT_ETHTOOL(DROP_GREEN_PRIO_4, "drop_green_prio_4"), + OCELOT_STAT_ETHTOOL(DROP_GREEN_PRIO_5, "drop_green_prio_5"), + OCELOT_STAT_ETHTOOL(DROP_GREEN_PRIO_6, "drop_green_prio_6"), + OCELOT_STAT_ETHTOOL(DROP_GREEN_PRIO_7, "drop_green_prio_7"), }; =20 static const struct vcap_field vsc9959_vcap_es0_keys[] =3D { diff --git a/drivers/net/dsa/ocelot/seville_vsc9953.c b/drivers/net/dsa/oce= lot/seville_vsc9953.c index 5799c4e50e36..a8f69d483abf 100644 --- a/drivers/net/dsa/ocelot/seville_vsc9953.c +++ b/drivers/net/dsa/ocelot/seville_vsc9953.c @@ -614,378 +614,99 @@ static const struct reg_field vsc9953_regfields[REGF= IELD_MAX] =3D { }; =20 static const struct ocelot_stat_layout vsc9953_stats_layout[OCELOT_NUM_STA= TS] =3D { - [OCELOT_STAT_RX_OCTETS] =3D { - .name =3D "rx_octets", - .reg =3D SYS_COUNT_RX_OCTETS, - }, - [OCELOT_STAT_RX_UNICAST] =3D { - .name =3D "rx_unicast", - .reg =3D SYS_COUNT_RX_UNICAST, - }, - [OCELOT_STAT_RX_MULTICAST] =3D { - .name =3D "rx_multicast", - .reg =3D SYS_COUNT_RX_MULTICAST, - }, - [OCELOT_STAT_RX_BROADCAST] =3D { - .name =3D "rx_broadcast", - .reg =3D SYS_COUNT_RX_BROADCAST, - }, - [OCELOT_STAT_RX_SHORTS] =3D { - .name =3D "rx_shorts", - .reg =3D SYS_COUNT_RX_SHORTS, - }, - [OCELOT_STAT_RX_FRAGMENTS] =3D { - .name =3D "rx_fragments", - .reg =3D SYS_COUNT_RX_FRAGMENTS, - }, - [OCELOT_STAT_RX_JABBERS] =3D { - .name =3D "rx_jabbers", - .reg =3D SYS_COUNT_RX_JABBERS, - }, - [OCELOT_STAT_RX_CRC_ALIGN_ERRS] =3D { - .name =3D "rx_crc_align_errs", - .reg =3D SYS_COUNT_RX_CRC_ALIGN_ERRS, - }, - [OCELOT_STAT_RX_SYM_ERRS] =3D { - .name =3D "rx_sym_errs", - .reg =3D SYS_COUNT_RX_SYM_ERRS, - }, - [OCELOT_STAT_RX_64] =3D { - .name =3D "rx_frames_below_65_octets", - .reg =3D SYS_COUNT_RX_64, - }, - [OCELOT_STAT_RX_65_127] =3D { - .name =3D "rx_frames_65_to_127_octets", - .reg =3D SYS_COUNT_RX_65_127, - }, - [OCELOT_STAT_RX_128_255] =3D { - .name =3D "rx_frames_128_to_255_octets", - .reg =3D SYS_COUNT_RX_128_255, - }, - [OCELOT_STAT_RX_256_511] =3D { - .name =3D "rx_frames_256_to_511_octets", - .reg =3D SYS_COUNT_RX_256_511, - }, - [OCELOT_STAT_RX_512_1023] =3D { - .name =3D "rx_frames_512_to_1023_octets", - .reg =3D SYS_COUNT_RX_512_1023, - }, - [OCELOT_STAT_RX_1024_1526] =3D { - .name =3D "rx_frames_1024_to_1526_octets", - .reg =3D SYS_COUNT_RX_1024_1526, - }, - [OCELOT_STAT_RX_1527_MAX] =3D { - .name =3D "rx_frames_over_1526_octets", - .reg =3D SYS_COUNT_RX_1527_MAX, - }, - [OCELOT_STAT_RX_PAUSE] =3D { - .name =3D "rx_pause", - .reg =3D SYS_COUNT_RX_PAUSE, - }, - [OCELOT_STAT_RX_CONTROL] =3D { - .name =3D "rx_control", - .reg =3D SYS_COUNT_RX_CONTROL, - }, - [OCELOT_STAT_RX_LONGS] =3D { - .name =3D "rx_longs", - .reg =3D SYS_COUNT_RX_LONGS, - }, - [OCELOT_STAT_RX_CLASSIFIED_DROPS] =3D { - .name =3D "rx_classified_drops", - .reg =3D SYS_COUNT_RX_CLASSIFIED_DROPS, - }, - [OCELOT_STAT_RX_RED_PRIO_0] =3D { - .name =3D "rx_red_prio_0", - .reg =3D SYS_COUNT_RX_RED_PRIO_0, - }, - [OCELOT_STAT_RX_RED_PRIO_1] =3D { - .name =3D "rx_red_prio_1", - .reg =3D SYS_COUNT_RX_RED_PRIO_1, - }, - [OCELOT_STAT_RX_RED_PRIO_2] =3D { - .name =3D "rx_red_prio_2", - .reg =3D SYS_COUNT_RX_RED_PRIO_2, - }, - [OCELOT_STAT_RX_RED_PRIO_3] =3D { - .name =3D "rx_red_prio_3", - .reg =3D SYS_COUNT_RX_RED_PRIO_3, - }, - [OCELOT_STAT_RX_RED_PRIO_4] =3D { - .name =3D "rx_red_prio_4", - .reg =3D SYS_COUNT_RX_RED_PRIO_4, - }, - [OCELOT_STAT_RX_RED_PRIO_5] =3D { - .name =3D "rx_red_prio_5", - .reg =3D SYS_COUNT_RX_RED_PRIO_5, - }, - [OCELOT_STAT_RX_RED_PRIO_6] =3D { - .name =3D "rx_red_prio_6", - .reg =3D SYS_COUNT_RX_RED_PRIO_6, - }, - [OCELOT_STAT_RX_RED_PRIO_7] =3D { - .name =3D "rx_red_prio_7", - .reg =3D SYS_COUNT_RX_RED_PRIO_7, - }, - [OCELOT_STAT_RX_YELLOW_PRIO_0] =3D { - .name =3D "rx_yellow_prio_0", - .reg =3D SYS_COUNT_RX_YELLOW_PRIO_0, - }, - [OCELOT_STAT_RX_YELLOW_PRIO_1] =3D { - .name =3D "rx_yellow_prio_1", - .reg =3D SYS_COUNT_RX_YELLOW_PRIO_1, - }, - [OCELOT_STAT_RX_YELLOW_PRIO_2] =3D { - .name =3D "rx_yellow_prio_2", - .reg =3D SYS_COUNT_RX_YELLOW_PRIO_2, - }, - [OCELOT_STAT_RX_YELLOW_PRIO_3] =3D { - .name =3D "rx_yellow_prio_3", - .reg =3D SYS_COUNT_RX_YELLOW_PRIO_3, - }, - [OCELOT_STAT_RX_YELLOW_PRIO_4] =3D { - .name =3D "rx_yellow_prio_4", - .reg =3D SYS_COUNT_RX_YELLOW_PRIO_4, - }, - [OCELOT_STAT_RX_YELLOW_PRIO_5] =3D { - .name =3D "rx_yellow_prio_5", - .reg =3D SYS_COUNT_RX_YELLOW_PRIO_5, - }, - [OCELOT_STAT_RX_YELLOW_PRIO_6] =3D { - .name =3D "rx_yellow_prio_6", - .reg =3D SYS_COUNT_RX_YELLOW_PRIO_6, - }, - [OCELOT_STAT_RX_YELLOW_PRIO_7] =3D { - .name =3D "rx_yellow_prio_7", - .reg =3D SYS_COUNT_RX_YELLOW_PRIO_7, - }, - [OCELOT_STAT_RX_GREEN_PRIO_0] =3D { - .name =3D "rx_green_prio_0", - .reg =3D SYS_COUNT_RX_GREEN_PRIO_0, - }, - [OCELOT_STAT_RX_GREEN_PRIO_1] =3D { - .name =3D "rx_green_prio_1", - .reg =3D SYS_COUNT_RX_GREEN_PRIO_1, - }, - [OCELOT_STAT_RX_GREEN_PRIO_2] =3D { - .name =3D "rx_green_prio_2", - .reg =3D SYS_COUNT_RX_GREEN_PRIO_2, - }, - [OCELOT_STAT_RX_GREEN_PRIO_3] =3D { - .name =3D "rx_green_prio_3", - .reg =3D SYS_COUNT_RX_GREEN_PRIO_3, - }, - [OCELOT_STAT_RX_GREEN_PRIO_4] =3D { - .name =3D "rx_green_prio_4", - .reg =3D SYS_COUNT_RX_GREEN_PRIO_4, - }, - [OCELOT_STAT_RX_GREEN_PRIO_5] =3D { - .name =3D "rx_green_prio_5", - .reg =3D SYS_COUNT_RX_GREEN_PRIO_5, - }, - [OCELOT_STAT_RX_GREEN_PRIO_6] =3D { - .name =3D "rx_green_prio_6", - .reg =3D SYS_COUNT_RX_GREEN_PRIO_6, - }, - [OCELOT_STAT_RX_GREEN_PRIO_7] =3D { - .name =3D "rx_green_prio_7", - .reg =3D SYS_COUNT_RX_GREEN_PRIO_7, - }, - [OCELOT_STAT_TX_OCTETS] =3D { - .name =3D "tx_octets", - .reg =3D SYS_COUNT_TX_OCTETS, - }, - [OCELOT_STAT_TX_UNICAST] =3D { - .name =3D "tx_unicast", - .reg =3D SYS_COUNT_TX_UNICAST, - }, - [OCELOT_STAT_TX_MULTICAST] =3D { - .name =3D "tx_multicast", - .reg =3D SYS_COUNT_TX_MULTICAST, - }, - [OCELOT_STAT_TX_BROADCAST] =3D { - .name =3D "tx_broadcast", - .reg =3D SYS_COUNT_TX_BROADCAST, - }, - [OCELOT_STAT_TX_COLLISION] =3D { - .name =3D "tx_collision", - .reg =3D SYS_COUNT_TX_COLLISION, - }, - [OCELOT_STAT_TX_DROPS] =3D { - .name =3D "tx_drops", - .reg =3D SYS_COUNT_TX_DROPS, - }, - [OCELOT_STAT_TX_PAUSE] =3D { - .name =3D "tx_pause", - .reg =3D SYS_COUNT_TX_PAUSE, - }, - [OCELOT_STAT_TX_64] =3D { - .name =3D "tx_frames_below_65_octets", - .reg =3D SYS_COUNT_TX_64, - }, - [OCELOT_STAT_TX_65_127] =3D { - .name =3D "tx_frames_65_to_127_octets", - .reg =3D SYS_COUNT_TX_65_127, - }, - [OCELOT_STAT_TX_128_255] =3D { - .name =3D "tx_frames_128_255_octets", - .reg =3D SYS_COUNT_TX_128_255, - }, - [OCELOT_STAT_TX_256_511] =3D { - .name =3D "tx_frames_256_511_octets", - .reg =3D SYS_COUNT_TX_256_511, - }, - [OCELOT_STAT_TX_512_1023] =3D { - .name =3D "tx_frames_512_1023_octets", - .reg =3D SYS_COUNT_TX_512_1023, - }, - [OCELOT_STAT_TX_1024_1526] =3D { - .name =3D "tx_frames_1024_1526_octets", - .reg =3D SYS_COUNT_TX_1024_1526, - }, - [OCELOT_STAT_TX_1527_MAX] =3D { - .name =3D "tx_frames_over_1526_octets", - .reg =3D SYS_COUNT_TX_1527_MAX, - }, - [OCELOT_STAT_TX_YELLOW_PRIO_0] =3D { - .name =3D "tx_yellow_prio_0", - .reg =3D SYS_COUNT_TX_YELLOW_PRIO_0, - }, - [OCELOT_STAT_TX_YELLOW_PRIO_1] =3D { - .name =3D "tx_yellow_prio_1", - .reg =3D SYS_COUNT_TX_YELLOW_PRIO_1, - }, - [OCELOT_STAT_TX_YELLOW_PRIO_2] =3D { - .name =3D "tx_yellow_prio_2", - .reg =3D SYS_COUNT_TX_YELLOW_PRIO_2, - }, - [OCELOT_STAT_TX_YELLOW_PRIO_3] =3D { - .name =3D "tx_yellow_prio_3", - .reg =3D SYS_COUNT_TX_YELLOW_PRIO_3, - }, - [OCELOT_STAT_TX_YELLOW_PRIO_4] =3D { - .name =3D "tx_yellow_prio_4", - .reg =3D SYS_COUNT_TX_YELLOW_PRIO_4, - }, - [OCELOT_STAT_TX_YELLOW_PRIO_5] =3D { - .name =3D "tx_yellow_prio_5", - .reg =3D SYS_COUNT_TX_YELLOW_PRIO_5, - }, - [OCELOT_STAT_TX_YELLOW_PRIO_6] =3D { - .name =3D "tx_yellow_prio_6", - .reg =3D SYS_COUNT_TX_YELLOW_PRIO_6, - }, - [OCELOT_STAT_TX_YELLOW_PRIO_7] =3D { - .name =3D "tx_yellow_prio_7", - .reg =3D SYS_COUNT_TX_YELLOW_PRIO_7, - }, - [OCELOT_STAT_TX_GREEN_PRIO_0] =3D { - .name =3D "tx_green_prio_0", - .reg =3D SYS_COUNT_TX_GREEN_PRIO_0, - }, - [OCELOT_STAT_TX_GREEN_PRIO_1] =3D { - .name =3D "tx_green_prio_1", - .reg =3D SYS_COUNT_TX_GREEN_PRIO_1, - }, - [OCELOT_STAT_TX_GREEN_PRIO_2] =3D { - .name =3D "tx_green_prio_2", - .reg =3D SYS_COUNT_TX_GREEN_PRIO_2, - }, - [OCELOT_STAT_TX_GREEN_PRIO_3] =3D { - .name =3D "tx_green_prio_3", - .reg =3D SYS_COUNT_TX_GREEN_PRIO_3, - }, - [OCELOT_STAT_TX_GREEN_PRIO_4] =3D { - .name =3D "tx_green_prio_4", - .reg =3D SYS_COUNT_TX_GREEN_PRIO_4, - }, - [OCELOT_STAT_TX_GREEN_PRIO_5] =3D { - .name =3D "tx_green_prio_5", - .reg =3D SYS_COUNT_TX_GREEN_PRIO_5, - }, - [OCELOT_STAT_TX_GREEN_PRIO_6] =3D { - .name =3D "tx_green_prio_6", - .reg =3D SYS_COUNT_TX_GREEN_PRIO_6, - }, - [OCELOT_STAT_TX_GREEN_PRIO_7] =3D { - .name =3D "tx_green_prio_7", - .reg =3D SYS_COUNT_TX_GREEN_PRIO_7, - }, - [OCELOT_STAT_TX_AGED] =3D { - .name =3D "tx_aged", - .reg =3D SYS_COUNT_TX_AGED, - }, - [OCELOT_STAT_DROP_LOCAL] =3D { - .name =3D "drop_local", - .reg =3D SYS_COUNT_DROP_LOCAL, - }, - [OCELOT_STAT_DROP_TAIL] =3D { - .name =3D "drop_tail", - .reg =3D SYS_COUNT_DROP_TAIL, - }, - [OCELOT_STAT_DROP_YELLOW_PRIO_0] =3D { - .name =3D "drop_yellow_prio_0", - .reg =3D SYS_COUNT_DROP_YELLOW_PRIO_0, - }, - [OCELOT_STAT_DROP_YELLOW_PRIO_1] =3D { - .name =3D "drop_yellow_prio_1", - .reg =3D SYS_COUNT_DROP_YELLOW_PRIO_1, - }, - [OCELOT_STAT_DROP_YELLOW_PRIO_2] =3D { - .name =3D "drop_yellow_prio_2", - .reg =3D SYS_COUNT_DROP_YELLOW_PRIO_2, - }, - [OCELOT_STAT_DROP_YELLOW_PRIO_3] =3D { - .name =3D "drop_yellow_prio_3", - .reg =3D SYS_COUNT_DROP_YELLOW_PRIO_3, - }, - [OCELOT_STAT_DROP_YELLOW_PRIO_4] =3D { - .name =3D "drop_yellow_prio_4", - .reg =3D SYS_COUNT_DROP_YELLOW_PRIO_4, - }, - [OCELOT_STAT_DROP_YELLOW_PRIO_5] =3D { - .name =3D "drop_yellow_prio_5", - .reg =3D SYS_COUNT_DROP_YELLOW_PRIO_5, - }, - [OCELOT_STAT_DROP_YELLOW_PRIO_6] =3D { - .name =3D "drop_yellow_prio_6", - .reg =3D SYS_COUNT_DROP_YELLOW_PRIO_6, - }, - [OCELOT_STAT_DROP_YELLOW_PRIO_7] =3D { - .name =3D "drop_yellow_prio_7", - .reg =3D SYS_COUNT_DROP_YELLOW_PRIO_7, - }, - [OCELOT_STAT_DROP_GREEN_PRIO_0] =3D { - .name =3D "drop_green_prio_0", - .reg =3D SYS_COUNT_DROP_GREEN_PRIO_0, - }, - [OCELOT_STAT_DROP_GREEN_PRIO_1] =3D { - .name =3D "drop_green_prio_1", - .reg =3D SYS_COUNT_DROP_GREEN_PRIO_1, - }, - [OCELOT_STAT_DROP_GREEN_PRIO_2] =3D { - .name =3D "drop_green_prio_2", - .reg =3D SYS_COUNT_DROP_GREEN_PRIO_2, - }, - [OCELOT_STAT_DROP_GREEN_PRIO_3] =3D { - .name =3D "drop_green_prio_3", - .reg =3D SYS_COUNT_DROP_GREEN_PRIO_3, - }, - [OCELOT_STAT_DROP_GREEN_PRIO_4] =3D { - .name =3D "drop_green_prio_4", - .reg =3D SYS_COUNT_DROP_GREEN_PRIO_4, - }, - [OCELOT_STAT_DROP_GREEN_PRIO_5] =3D { - .name =3D "drop_green_prio_5", - .reg =3D SYS_COUNT_DROP_GREEN_PRIO_5, - }, - [OCELOT_STAT_DROP_GREEN_PRIO_6] =3D { - .name =3D "drop_green_prio_6", - .reg =3D SYS_COUNT_DROP_GREEN_PRIO_6, - }, - [OCELOT_STAT_DROP_GREEN_PRIO_7] =3D { - .name =3D "drop_green_prio_7", - .reg =3D SYS_COUNT_DROP_GREEN_PRIO_7, - }, + OCELOT_STAT_ETHTOOL(RX_OCTETS, "rx_octets"), + OCELOT_STAT_ETHTOOL(RX_UNICAST, "rx_unicast"), + OCELOT_STAT_ETHTOOL(RX_MULTICAST, "rx_multicast"), + OCELOT_STAT_ETHTOOL(RX_BROADCAST, "rx_broadcast"), + OCELOT_STAT_ETHTOOL(RX_SHORTS, "rx_shorts"), + OCELOT_STAT_ETHTOOL(RX_FRAGMENTS, "rx_fragments"), + OCELOT_STAT_ETHTOOL(RX_JABBERS, "rx_jabbers"), + OCELOT_STAT_ETHTOOL(RX_CRC_ALIGN_ERRS, "rx_crc_align_errs"), + OCELOT_STAT_ETHTOOL(RX_SYM_ERRS, "rx_sym_errs"), + OCELOT_STAT_ETHTOOL(RX_64, "rx_frames_below_65_octets"), + OCELOT_STAT_ETHTOOL(RX_65_127, "rx_frames_65_to_127_octets"), + OCELOT_STAT_ETHTOOL(RX_128_255, "rx_frames_128_to_255_octets"), + OCELOT_STAT_ETHTOOL(RX_256_511, "rx_frames_256_to_511_octets"), + OCELOT_STAT_ETHTOOL(RX_512_1023, "rx_frames_512_to_1023_octets"), + OCELOT_STAT_ETHTOOL(RX_1024_1526, "rx_frames_1024_to_1526_octets"), + OCELOT_STAT_ETHTOOL(RX_1527_MAX, "rx_frames_over_1526_octets"), + OCELOT_STAT_ETHTOOL(RX_PAUSE, "rx_pause"), + OCELOT_STAT_ETHTOOL(RX_CONTROL, "rx_control"), + OCELOT_STAT_ETHTOOL(RX_LONGS, "rx_longs"), + OCELOT_STAT_ETHTOOL(RX_CLASSIFIED_DROPS, "rx_classified_drops"), + OCELOT_STAT_ETHTOOL(RX_RED_PRIO_0, "rx_red_prio_0"), + OCELOT_STAT_ETHTOOL(RX_RED_PRIO_1, "rx_red_prio_1"), + OCELOT_STAT_ETHTOOL(RX_RED_PRIO_2, "rx_red_prio_2"), + OCELOT_STAT_ETHTOOL(RX_RED_PRIO_3, "rx_red_prio_3"), + OCELOT_STAT_ETHTOOL(RX_RED_PRIO_4, "rx_red_prio_4"), + OCELOT_STAT_ETHTOOL(RX_RED_PRIO_5, "rx_red_prio_5"), + OCELOT_STAT_ETHTOOL(RX_RED_PRIO_6, "rx_red_prio_6"), + OCELOT_STAT_ETHTOOL(RX_RED_PRIO_7, "rx_red_prio_7"), + OCELOT_STAT_ETHTOOL(RX_YELLOW_PRIO_0, "rx_yellow_prio_0"), + OCELOT_STAT_ETHTOOL(RX_YELLOW_PRIO_1, "rx_yellow_prio_1"), + OCELOT_STAT_ETHTOOL(RX_YELLOW_PRIO_2, "rx_yellow_prio_2"), + OCELOT_STAT_ETHTOOL(RX_YELLOW_PRIO_3, "rx_yellow_prio_3"), + OCELOT_STAT_ETHTOOL(RX_YELLOW_PRIO_4, "rx_yellow_prio_4"), + OCELOT_STAT_ETHTOOL(RX_YELLOW_PRIO_5, "rx_yellow_prio_5"), + OCELOT_STAT_ETHTOOL(RX_YELLOW_PRIO_6, "rx_yellow_prio_6"), + OCELOT_STAT_ETHTOOL(RX_YELLOW_PRIO_7, "rx_yellow_prio_7"), + OCELOT_STAT_ETHTOOL(RX_GREEN_PRIO_0, "rx_green_prio_0"), + OCELOT_STAT_ETHTOOL(RX_GREEN_PRIO_1, "rx_green_prio_1"), + OCELOT_STAT_ETHTOOL(RX_GREEN_PRIO_2, "rx_green_prio_2"), + OCELOT_STAT_ETHTOOL(RX_GREEN_PRIO_3, "rx_green_prio_3"), + OCELOT_STAT_ETHTOOL(RX_GREEN_PRIO_4, "rx_green_prio_4"), + OCELOT_STAT_ETHTOOL(RX_GREEN_PRIO_5, "rx_green_prio_5"), + OCELOT_STAT_ETHTOOL(RX_GREEN_PRIO_6, "rx_green_prio_6"), + OCELOT_STAT_ETHTOOL(RX_GREEN_PRIO_7, "rx_green_prio_7"), + OCELOT_STAT_ETHTOOL(TX_OCTETS, "tx_octets"), + OCELOT_STAT_ETHTOOL(TX_UNICAST, "tx_unicast"), + OCELOT_STAT_ETHTOOL(TX_MULTICAST, "tx_multicast"), + OCELOT_STAT_ETHTOOL(TX_BROADCAST, "tx_broadcast"), + OCELOT_STAT_ETHTOOL(TX_COLLISION, "tx_collision"), + OCELOT_STAT_ETHTOOL(TX_DROPS, "tx_drops"), + OCELOT_STAT_ETHTOOL(TX_PAUSE, "tx_pause"), + OCELOT_STAT_ETHTOOL(TX_64, "tx_frames_below_65_octets"), + OCELOT_STAT_ETHTOOL(TX_65_127, "tx_frames_65_to_127_octets"), + OCELOT_STAT_ETHTOOL(TX_128_255, "tx_frames_128_255_octets"), + OCELOT_STAT_ETHTOOL(TX_256_511, "tx_frames_256_511_octets"), + OCELOT_STAT_ETHTOOL(TX_512_1023, "tx_frames_512_1023_octets"), + OCELOT_STAT_ETHTOOL(TX_1024_1526, "tx_frames_1024_1526_octets"), + OCELOT_STAT_ETHTOOL(TX_1527_MAX, "tx_frames_over_1526_octets"), + OCELOT_STAT_ETHTOOL(TX_YELLOW_PRIO_0, "tx_yellow_prio_0"), + OCELOT_STAT_ETHTOOL(TX_YELLOW_PRIO_1, "tx_yellow_prio_1"), + OCELOT_STAT_ETHTOOL(TX_YELLOW_PRIO_2, "tx_yellow_prio_2"), + OCELOT_STAT_ETHTOOL(TX_YELLOW_PRIO_3, "tx_yellow_prio_3"), + OCELOT_STAT_ETHTOOL(TX_YELLOW_PRIO_4, "tx_yellow_prio_4"), + OCELOT_STAT_ETHTOOL(TX_YELLOW_PRIO_5, "tx_yellow_prio_5"), + OCELOT_STAT_ETHTOOL(TX_YELLOW_PRIO_6, "tx_yellow_prio_6"), + OCELOT_STAT_ETHTOOL(TX_YELLOW_PRIO_7, "tx_yellow_prio_7"), + OCELOT_STAT_ETHTOOL(TX_GREEN_PRIO_0, "tx_green_prio_0"), + OCELOT_STAT_ETHTOOL(TX_GREEN_PRIO_1, "tx_green_prio_1"), + OCELOT_STAT_ETHTOOL(TX_GREEN_PRIO_2, "tx_green_prio_2"), + OCELOT_STAT_ETHTOOL(TX_GREEN_PRIO_3, "tx_green_prio_3"), + OCELOT_STAT_ETHTOOL(TX_GREEN_PRIO_4, "tx_green_prio_4"), + OCELOT_STAT_ETHTOOL(TX_GREEN_PRIO_5, "tx_green_prio_5"), + OCELOT_STAT_ETHTOOL(TX_GREEN_PRIO_6, "tx_green_prio_6"), + OCELOT_STAT_ETHTOOL(TX_GREEN_PRIO_7, "tx_green_prio_7"), + OCELOT_STAT_ETHTOOL(TX_AGED, "tx_aged"), + OCELOT_STAT_ETHTOOL(DROP_LOCAL, "drop_local"), + OCELOT_STAT_ETHTOOL(DROP_TAIL, "drop_tail"), + OCELOT_STAT_ETHTOOL(DROP_YELLOW_PRIO_0, "drop_yellow_prio_0"), + OCELOT_STAT_ETHTOOL(DROP_YELLOW_PRIO_1, "drop_yellow_prio_1"), + OCELOT_STAT_ETHTOOL(DROP_YELLOW_PRIO_2, "drop_yellow_prio_2"), + OCELOT_STAT_ETHTOOL(DROP_YELLOW_PRIO_3, "drop_yellow_prio_3"), + OCELOT_STAT_ETHTOOL(DROP_YELLOW_PRIO_4, "drop_yellow_prio_4"), + OCELOT_STAT_ETHTOOL(DROP_YELLOW_PRIO_5, "drop_yellow_prio_5"), + OCELOT_STAT_ETHTOOL(DROP_YELLOW_PRIO_6, "drop_yellow_prio_6"), + OCELOT_STAT_ETHTOOL(DROP_YELLOW_PRIO_7, "drop_yellow_prio_7"), + OCELOT_STAT_ETHTOOL(DROP_GREEN_PRIO_0, "drop_green_prio_0"), + OCELOT_STAT_ETHTOOL(DROP_GREEN_PRIO_1, "drop_green_prio_1"), + OCELOT_STAT_ETHTOOL(DROP_GREEN_PRIO_2, "drop_green_prio_2"), + OCELOT_STAT_ETHTOOL(DROP_GREEN_PRIO_3, "drop_green_prio_3"), + OCELOT_STAT_ETHTOOL(DROP_GREEN_PRIO_4, "drop_green_prio_4"), + OCELOT_STAT_ETHTOOL(DROP_GREEN_PRIO_5, "drop_green_prio_5"), + OCELOT_STAT_ETHTOOL(DROP_GREEN_PRIO_6, "drop_green_prio_6"), + OCELOT_STAT_ETHTOOL(DROP_GREEN_PRIO_7, "drop_green_prio_7"), }; =20 static const struct vcap_field vsc9953_vcap_es0_keys[] =3D { diff --git a/drivers/net/ethernet/mscc/ocelot_vsc7514.c b/drivers/net/ether= net/mscc/ocelot_vsc7514.c index fc1c890e3db1..8fe84d753cc9 100644 --- a/drivers/net/ethernet/mscc/ocelot_vsc7514.c +++ b/drivers/net/ethernet/mscc/ocelot_vsc7514.c @@ -97,378 +97,99 @@ static const struct reg_field ocelot_regfields[REGFIEL= D_MAX] =3D { }; =20 static const struct ocelot_stat_layout ocelot_stats_layout[OCELOT_NUM_STAT= S] =3D { - [OCELOT_STAT_RX_OCTETS] =3D { - .name =3D "rx_octets", - .reg =3D SYS_COUNT_RX_OCTETS, - }, - [OCELOT_STAT_RX_UNICAST] =3D { - .name =3D "rx_unicast", - .reg =3D SYS_COUNT_RX_UNICAST, - }, - [OCELOT_STAT_RX_MULTICAST] =3D { - .name =3D "rx_multicast", - .reg =3D SYS_COUNT_RX_MULTICAST, - }, - [OCELOT_STAT_RX_BROADCAST] =3D { - .name =3D "rx_broadcast", - .reg =3D SYS_COUNT_RX_BROADCAST, - }, - [OCELOT_STAT_RX_SHORTS] =3D { - .name =3D "rx_shorts", - .reg =3D SYS_COUNT_RX_SHORTS, - }, - [OCELOT_STAT_RX_FRAGMENTS] =3D { - .name =3D "rx_fragments", - .reg =3D SYS_COUNT_RX_FRAGMENTS, - }, - [OCELOT_STAT_RX_JABBERS] =3D { - .name =3D "rx_jabbers", - .reg =3D SYS_COUNT_RX_JABBERS, - }, - [OCELOT_STAT_RX_CRC_ALIGN_ERRS] =3D { - .name =3D "rx_crc_align_errs", - .reg =3D SYS_COUNT_RX_CRC_ALIGN_ERRS, - }, - [OCELOT_STAT_RX_SYM_ERRS] =3D { - .name =3D "rx_sym_errs", - .reg =3D SYS_COUNT_RX_SYM_ERRS, - }, - [OCELOT_STAT_RX_64] =3D { - .name =3D "rx_frames_below_65_octets", - .reg =3D SYS_COUNT_RX_64, - }, - [OCELOT_STAT_RX_65_127] =3D { - .name =3D "rx_frames_65_to_127_octets", - .reg =3D SYS_COUNT_RX_65_127, - }, - [OCELOT_STAT_RX_128_255] =3D { - .name =3D "rx_frames_128_to_255_octets", - .reg =3D SYS_COUNT_RX_128_255, - }, - [OCELOT_STAT_RX_256_511] =3D { - .name =3D "rx_frames_256_to_511_octets", - .reg =3D SYS_COUNT_RX_256_511, - }, - [OCELOT_STAT_RX_512_1023] =3D { - .name =3D "rx_frames_512_to_1023_octets", - .reg =3D SYS_COUNT_RX_512_1023, - }, - [OCELOT_STAT_RX_1024_1526] =3D { - .name =3D "rx_frames_1024_to_1526_octets", - .reg =3D SYS_COUNT_RX_1024_1526, - }, - [OCELOT_STAT_RX_1527_MAX] =3D { - .name =3D "rx_frames_over_1526_octets", - .reg =3D SYS_COUNT_RX_1527_MAX, - }, - [OCELOT_STAT_RX_PAUSE] =3D { - .name =3D "rx_pause", - .reg =3D SYS_COUNT_RX_PAUSE, - }, - [OCELOT_STAT_RX_CONTROL] =3D { - .name =3D "rx_control", - .reg =3D SYS_COUNT_RX_CONTROL, - }, - [OCELOT_STAT_RX_LONGS] =3D { - .name =3D "rx_longs", - .reg =3D SYS_COUNT_RX_LONGS, - }, - [OCELOT_STAT_RX_CLASSIFIED_DROPS] =3D { - .name =3D "rx_classified_drops", - .reg =3D SYS_COUNT_RX_CLASSIFIED_DROPS, - }, - [OCELOT_STAT_RX_RED_PRIO_0] =3D { - .name =3D "rx_red_prio_0", - .reg =3D SYS_COUNT_RX_RED_PRIO_0, - }, - [OCELOT_STAT_RX_RED_PRIO_1] =3D { - .name =3D "rx_red_prio_1", - .reg =3D SYS_COUNT_RX_RED_PRIO_1, - }, - [OCELOT_STAT_RX_RED_PRIO_2] =3D { - .name =3D "rx_red_prio_2", - .reg =3D SYS_COUNT_RX_RED_PRIO_2, - }, - [OCELOT_STAT_RX_RED_PRIO_3] =3D { - .name =3D "rx_red_prio_3", - .reg =3D SYS_COUNT_RX_RED_PRIO_3, - }, - [OCELOT_STAT_RX_RED_PRIO_4] =3D { - .name =3D "rx_red_prio_4", - .reg =3D SYS_COUNT_RX_RED_PRIO_4, - }, - [OCELOT_STAT_RX_RED_PRIO_5] =3D { - .name =3D "rx_red_prio_5", - .reg =3D SYS_COUNT_RX_RED_PRIO_5, - }, - [OCELOT_STAT_RX_RED_PRIO_6] =3D { - .name =3D "rx_red_prio_6", - .reg =3D SYS_COUNT_RX_RED_PRIO_6, - }, - [OCELOT_STAT_RX_RED_PRIO_7] =3D { - .name =3D "rx_red_prio_7", - .reg =3D SYS_COUNT_RX_RED_PRIO_7, - }, - [OCELOT_STAT_RX_YELLOW_PRIO_0] =3D { - .name =3D "rx_yellow_prio_0", - .reg =3D SYS_COUNT_RX_YELLOW_PRIO_0, - }, - [OCELOT_STAT_RX_YELLOW_PRIO_1] =3D { - .name =3D "rx_yellow_prio_1", - .reg =3D SYS_COUNT_RX_YELLOW_PRIO_1, - }, - [OCELOT_STAT_RX_YELLOW_PRIO_2] =3D { - .name =3D "rx_yellow_prio_2", - .reg =3D SYS_COUNT_RX_YELLOW_PRIO_2, - }, - [OCELOT_STAT_RX_YELLOW_PRIO_3] =3D { - .name =3D "rx_yellow_prio_3", - .reg =3D SYS_COUNT_RX_YELLOW_PRIO_3, - }, - [OCELOT_STAT_RX_YELLOW_PRIO_4] =3D { - .name =3D "rx_yellow_prio_4", - .reg =3D SYS_COUNT_RX_YELLOW_PRIO_4, - }, - [OCELOT_STAT_RX_YELLOW_PRIO_5] =3D { - .name =3D "rx_yellow_prio_5", - .reg =3D SYS_COUNT_RX_YELLOW_PRIO_5, - }, - [OCELOT_STAT_RX_YELLOW_PRIO_6] =3D { - .name =3D "rx_yellow_prio_6", - .reg =3D SYS_COUNT_RX_YELLOW_PRIO_6, - }, - [OCELOT_STAT_RX_YELLOW_PRIO_7] =3D { - .name =3D "rx_yellow_prio_7", - .reg =3D SYS_COUNT_RX_YELLOW_PRIO_7, - }, - [OCELOT_STAT_RX_GREEN_PRIO_0] =3D { - .name =3D "rx_green_prio_0", - .reg =3D SYS_COUNT_RX_GREEN_PRIO_0, - }, - [OCELOT_STAT_RX_GREEN_PRIO_1] =3D { - .name =3D "rx_green_prio_1", - .reg =3D SYS_COUNT_RX_GREEN_PRIO_1, - }, - [OCELOT_STAT_RX_GREEN_PRIO_2] =3D { - .name =3D "rx_green_prio_2", - .reg =3D SYS_COUNT_RX_GREEN_PRIO_2, - }, - [OCELOT_STAT_RX_GREEN_PRIO_3] =3D { - .name =3D "rx_green_prio_3", - .reg =3D SYS_COUNT_RX_GREEN_PRIO_3, - }, - [OCELOT_STAT_RX_GREEN_PRIO_4] =3D { - .name =3D "rx_green_prio_4", - .reg =3D SYS_COUNT_RX_GREEN_PRIO_4, - }, - [OCELOT_STAT_RX_GREEN_PRIO_5] =3D { - .name =3D "rx_green_prio_5", - .reg =3D SYS_COUNT_RX_GREEN_PRIO_5, - }, - [OCELOT_STAT_RX_GREEN_PRIO_6] =3D { - .name =3D "rx_green_prio_6", - .reg =3D SYS_COUNT_RX_GREEN_PRIO_6, - }, - [OCELOT_STAT_RX_GREEN_PRIO_7] =3D { - .name =3D "rx_green_prio_7", - .reg =3D SYS_COUNT_RX_GREEN_PRIO_7, - }, - [OCELOT_STAT_TX_OCTETS] =3D { - .name =3D "tx_octets", - .reg =3D SYS_COUNT_TX_OCTETS, - }, - [OCELOT_STAT_TX_UNICAST] =3D { - .name =3D "tx_unicast", - .reg =3D SYS_COUNT_TX_UNICAST, - }, - [OCELOT_STAT_TX_MULTICAST] =3D { - .name =3D "tx_multicast", - .reg =3D SYS_COUNT_TX_MULTICAST, - }, - [OCELOT_STAT_TX_BROADCAST] =3D { - .name =3D "tx_broadcast", - .reg =3D SYS_COUNT_TX_BROADCAST, - }, - [OCELOT_STAT_TX_COLLISION] =3D { - .name =3D "tx_collision", - .reg =3D SYS_COUNT_TX_COLLISION, - }, - [OCELOT_STAT_TX_DROPS] =3D { - .name =3D "tx_drops", - .reg =3D SYS_COUNT_TX_DROPS, - }, - [OCELOT_STAT_TX_PAUSE] =3D { - .name =3D "tx_pause", - .reg =3D SYS_COUNT_TX_PAUSE, - }, - [OCELOT_STAT_TX_64] =3D { - .name =3D "tx_frames_below_65_octets", - .reg =3D SYS_COUNT_TX_64, - }, - [OCELOT_STAT_TX_65_127] =3D { - .name =3D "tx_frames_65_to_127_octets", - .reg =3D SYS_COUNT_TX_65_127, - }, - [OCELOT_STAT_TX_128_255] =3D { - .name =3D "tx_frames_128_255_octets", - .reg =3D SYS_COUNT_TX_128_255, - }, - [OCELOT_STAT_TX_256_511] =3D { - .name =3D "tx_frames_256_511_octets", - .reg =3D SYS_COUNT_TX_256_511, - }, - [OCELOT_STAT_TX_512_1023] =3D { - .name =3D "tx_frames_512_1023_octets", - .reg =3D SYS_COUNT_TX_512_1023, - }, - [OCELOT_STAT_TX_1024_1526] =3D { - .name =3D "tx_frames_1024_1526_octets", - .reg =3D SYS_COUNT_TX_1024_1526, - }, - [OCELOT_STAT_TX_1527_MAX] =3D { - .name =3D "tx_frames_over_1526_octets", - .reg =3D SYS_COUNT_TX_1527_MAX, - }, - [OCELOT_STAT_TX_YELLOW_PRIO_0] =3D { - .name =3D "tx_yellow_prio_0", - .reg =3D SYS_COUNT_TX_YELLOW_PRIO_0, - }, - [OCELOT_STAT_TX_YELLOW_PRIO_1] =3D { - .name =3D "tx_yellow_prio_1", - .reg =3D SYS_COUNT_TX_YELLOW_PRIO_1, - }, - [OCELOT_STAT_TX_YELLOW_PRIO_2] =3D { - .name =3D "tx_yellow_prio_2", - .reg =3D SYS_COUNT_TX_YELLOW_PRIO_2, - }, - [OCELOT_STAT_TX_YELLOW_PRIO_3] =3D { - .name =3D "tx_yellow_prio_3", - .reg =3D SYS_COUNT_TX_YELLOW_PRIO_3, - }, - [OCELOT_STAT_TX_YELLOW_PRIO_4] =3D { - .name =3D "tx_yellow_prio_4", - .reg =3D SYS_COUNT_TX_YELLOW_PRIO_4, - }, - [OCELOT_STAT_TX_YELLOW_PRIO_5] =3D { - .name =3D "tx_yellow_prio_5", - .reg =3D SYS_COUNT_TX_YELLOW_PRIO_5, - }, - [OCELOT_STAT_TX_YELLOW_PRIO_6] =3D { - .name =3D "tx_yellow_prio_6", - .reg =3D SYS_COUNT_TX_YELLOW_PRIO_6, - }, - [OCELOT_STAT_TX_YELLOW_PRIO_7] =3D { - .name =3D "tx_yellow_prio_7", - .reg =3D SYS_COUNT_TX_YELLOW_PRIO_7, - }, - [OCELOT_STAT_TX_GREEN_PRIO_0] =3D { - .name =3D "tx_green_prio_0", - .reg =3D SYS_COUNT_TX_GREEN_PRIO_0, - }, - [OCELOT_STAT_TX_GREEN_PRIO_1] =3D { - .name =3D "tx_green_prio_1", - .reg =3D SYS_COUNT_TX_GREEN_PRIO_1, - }, - [OCELOT_STAT_TX_GREEN_PRIO_2] =3D { - .name =3D "tx_green_prio_2", - .reg =3D SYS_COUNT_TX_GREEN_PRIO_2, - }, - [OCELOT_STAT_TX_GREEN_PRIO_3] =3D { - .name =3D "tx_green_prio_3", - .reg =3D SYS_COUNT_TX_GREEN_PRIO_3, - }, - [OCELOT_STAT_TX_GREEN_PRIO_4] =3D { - .name =3D "tx_green_prio_4", - .reg =3D SYS_COUNT_TX_GREEN_PRIO_4, - }, - [OCELOT_STAT_TX_GREEN_PRIO_5] =3D { - .name =3D "tx_green_prio_5", - .reg =3D SYS_COUNT_TX_GREEN_PRIO_5, - }, - [OCELOT_STAT_TX_GREEN_PRIO_6] =3D { - .name =3D "tx_green_prio_6", - .reg =3D SYS_COUNT_TX_GREEN_PRIO_6, - }, - [OCELOT_STAT_TX_GREEN_PRIO_7] =3D { - .name =3D "tx_green_prio_7", - .reg =3D SYS_COUNT_TX_GREEN_PRIO_7, - }, - [OCELOT_STAT_TX_AGED] =3D { - .name =3D "tx_aged", - .reg =3D SYS_COUNT_TX_AGED, - }, - [OCELOT_STAT_DROP_LOCAL] =3D { - .name =3D "drop_local", - .reg =3D SYS_COUNT_DROP_LOCAL, - }, - [OCELOT_STAT_DROP_TAIL] =3D { - .name =3D "drop_tail", - .reg =3D SYS_COUNT_DROP_TAIL, - }, - [OCELOT_STAT_DROP_YELLOW_PRIO_0] =3D { - .name =3D "drop_yellow_prio_0", - .reg =3D SYS_COUNT_DROP_YELLOW_PRIO_0, - }, - [OCELOT_STAT_DROP_YELLOW_PRIO_1] =3D { - .name =3D "drop_yellow_prio_1", - .reg =3D SYS_COUNT_DROP_YELLOW_PRIO_1, - }, - [OCELOT_STAT_DROP_YELLOW_PRIO_2] =3D { - .name =3D "drop_yellow_prio_2", - .reg =3D SYS_COUNT_DROP_YELLOW_PRIO_2, - }, - [OCELOT_STAT_DROP_YELLOW_PRIO_3] =3D { - .name =3D "drop_yellow_prio_3", - .reg =3D SYS_COUNT_DROP_YELLOW_PRIO_3, - }, - [OCELOT_STAT_DROP_YELLOW_PRIO_4] =3D { - .name =3D "drop_yellow_prio_4", - .reg =3D SYS_COUNT_DROP_YELLOW_PRIO_4, - }, - [OCELOT_STAT_DROP_YELLOW_PRIO_5] =3D { - .name =3D "drop_yellow_prio_5", - .reg =3D SYS_COUNT_DROP_YELLOW_PRIO_5, - }, - [OCELOT_STAT_DROP_YELLOW_PRIO_6] =3D { - .name =3D "drop_yellow_prio_6", - .reg =3D SYS_COUNT_DROP_YELLOW_PRIO_6, - }, - [OCELOT_STAT_DROP_YELLOW_PRIO_7] =3D { - .name =3D "drop_yellow_prio_7", - .reg =3D SYS_COUNT_DROP_YELLOW_PRIO_7, - }, - [OCELOT_STAT_DROP_GREEN_PRIO_0] =3D { - .name =3D "drop_green_prio_0", - .reg =3D SYS_COUNT_DROP_GREEN_PRIO_0, - }, - [OCELOT_STAT_DROP_GREEN_PRIO_1] =3D { - .name =3D "drop_green_prio_1", - .reg =3D SYS_COUNT_DROP_GREEN_PRIO_1, - }, - [OCELOT_STAT_DROP_GREEN_PRIO_2] =3D { - .name =3D "drop_green_prio_2", - .reg =3D SYS_COUNT_DROP_GREEN_PRIO_2, - }, - [OCELOT_STAT_DROP_GREEN_PRIO_3] =3D { - .name =3D "drop_green_prio_3", - .reg =3D SYS_COUNT_DROP_GREEN_PRIO_3, - }, - [OCELOT_STAT_DROP_GREEN_PRIO_4] =3D { - .name =3D "drop_green_prio_4", - .reg =3D SYS_COUNT_DROP_GREEN_PRIO_4, - }, - [OCELOT_STAT_DROP_GREEN_PRIO_5] =3D { - .name =3D "drop_green_prio_5", - .reg =3D SYS_COUNT_DROP_GREEN_PRIO_5, - }, - [OCELOT_STAT_DROP_GREEN_PRIO_6] =3D { - .name =3D "drop_green_prio_6", - .reg =3D SYS_COUNT_DROP_GREEN_PRIO_6, - }, - [OCELOT_STAT_DROP_GREEN_PRIO_7] =3D { - .name =3D "drop_green_prio_7", - .reg =3D SYS_COUNT_DROP_GREEN_PRIO_7, - }, + OCELOT_STAT_ETHTOOL(RX_OCTETS, "rx_octets"), + OCELOT_STAT_ETHTOOL(RX_UNICAST, "rx_unicast"), + OCELOT_STAT_ETHTOOL(RX_MULTICAST, "rx_multicast"), + OCELOT_STAT_ETHTOOL(RX_BROADCAST, "rx_broadcast"), + OCELOT_STAT_ETHTOOL(RX_SHORTS, "rx_shorts"), + OCELOT_STAT_ETHTOOL(RX_FRAGMENTS, "rx_fragments"), + OCELOT_STAT_ETHTOOL(RX_JABBERS, "rx_jabbers"), + OCELOT_STAT_ETHTOOL(RX_CRC_ALIGN_ERRS, "rx_crc_align_errs"), + OCELOT_STAT_ETHTOOL(RX_SYM_ERRS, "rx_sym_errs"), + OCELOT_STAT_ETHTOOL(RX_64, "rx_frames_below_65_octets"), + OCELOT_STAT_ETHTOOL(RX_65_127, "rx_frames_65_to_127_octets"), + OCELOT_STAT_ETHTOOL(RX_128_255, "rx_frames_128_to_255_octets"), + OCELOT_STAT_ETHTOOL(RX_256_511, "rx_frames_256_to_511_octets"), + OCELOT_STAT_ETHTOOL(RX_512_1023, "rx_frames_512_to_1023_octets"), + OCELOT_STAT_ETHTOOL(RX_1024_1526, "rx_frames_1024_to_1526_octets"), + OCELOT_STAT_ETHTOOL(RX_1527_MAX, "rx_frames_over_1526_octets"), + OCELOT_STAT_ETHTOOL(RX_PAUSE, "rx_pause"), + OCELOT_STAT_ETHTOOL(RX_CONTROL, "rx_control"), + OCELOT_STAT_ETHTOOL(RX_LONGS, "rx_longs"), + OCELOT_STAT_ETHTOOL(RX_CLASSIFIED_DROPS, "rx_classified_drops"), + OCELOT_STAT_ETHTOOL(RX_RED_PRIO_0, "rx_red_prio_0"), + OCELOT_STAT_ETHTOOL(RX_RED_PRIO_1, "rx_red_prio_1"), + OCELOT_STAT_ETHTOOL(RX_RED_PRIO_2, "rx_red_prio_2"), + OCELOT_STAT_ETHTOOL(RX_RED_PRIO_3, "rx_red_prio_3"), + OCELOT_STAT_ETHTOOL(RX_RED_PRIO_4, "rx_red_prio_4"), + OCELOT_STAT_ETHTOOL(RX_RED_PRIO_5, "rx_red_prio_5"), + OCELOT_STAT_ETHTOOL(RX_RED_PRIO_6, "rx_red_prio_6"), + OCELOT_STAT_ETHTOOL(RX_RED_PRIO_7, "rx_red_prio_7"), + OCELOT_STAT_ETHTOOL(RX_YELLOW_PRIO_0, "rx_yellow_prio_0"), + OCELOT_STAT_ETHTOOL(RX_YELLOW_PRIO_1, "rx_yellow_prio_1"), + OCELOT_STAT_ETHTOOL(RX_YELLOW_PRIO_2, "rx_yellow_prio_2"), + OCELOT_STAT_ETHTOOL(RX_YELLOW_PRIO_3, "rx_yellow_prio_3"), + OCELOT_STAT_ETHTOOL(RX_YELLOW_PRIO_4, "rx_yellow_prio_4"), + OCELOT_STAT_ETHTOOL(RX_YELLOW_PRIO_5, "rx_yellow_prio_5"), + OCELOT_STAT_ETHTOOL(RX_YELLOW_PRIO_6, "rx_yellow_prio_6"), + OCELOT_STAT_ETHTOOL(RX_YELLOW_PRIO_7, "rx_yellow_prio_7"), + OCELOT_STAT_ETHTOOL(RX_GREEN_PRIO_0, "rx_green_prio_0"), + OCELOT_STAT_ETHTOOL(RX_GREEN_PRIO_1, "rx_green_prio_1"), + OCELOT_STAT_ETHTOOL(RX_GREEN_PRIO_2, "rx_green_prio_2"), + OCELOT_STAT_ETHTOOL(RX_GREEN_PRIO_3, "rx_green_prio_3"), + OCELOT_STAT_ETHTOOL(RX_GREEN_PRIO_4, "rx_green_prio_4"), + OCELOT_STAT_ETHTOOL(RX_GREEN_PRIO_5, "rx_green_prio_5"), + OCELOT_STAT_ETHTOOL(RX_GREEN_PRIO_6, "rx_green_prio_6"), + OCELOT_STAT_ETHTOOL(RX_GREEN_PRIO_7, "rx_green_prio_7"), + OCELOT_STAT_ETHTOOL(TX_OCTETS, "tx_octets"), + OCELOT_STAT_ETHTOOL(TX_UNICAST, "tx_unicast"), + OCELOT_STAT_ETHTOOL(TX_MULTICAST, "tx_multicast"), + OCELOT_STAT_ETHTOOL(TX_BROADCAST, "tx_broadcast"), + OCELOT_STAT_ETHTOOL(TX_COLLISION, "tx_collision"), + OCELOT_STAT_ETHTOOL(TX_DROPS, "tx_drops"), + OCELOT_STAT_ETHTOOL(TX_PAUSE, "tx_pause"), + OCELOT_STAT_ETHTOOL(TX_64, "tx_frames_below_65_octets"), + OCELOT_STAT_ETHTOOL(TX_65_127, "tx_frames_65_to_127_octets"), + OCELOT_STAT_ETHTOOL(TX_128_255, "tx_frames_128_255_octets"), + OCELOT_STAT_ETHTOOL(TX_256_511, "tx_frames_256_511_octets"), + OCELOT_STAT_ETHTOOL(TX_512_1023, "tx_frames_512_1023_octets"), + OCELOT_STAT_ETHTOOL(TX_1024_1526, "tx_frames_1024_1526_octets"), + OCELOT_STAT_ETHTOOL(TX_1527_MAX, "tx_frames_over_1526_octets"), + OCELOT_STAT_ETHTOOL(TX_YELLOW_PRIO_0, "tx_yellow_prio_0"), + OCELOT_STAT_ETHTOOL(TX_YELLOW_PRIO_1, "tx_yellow_prio_1"), + OCELOT_STAT_ETHTOOL(TX_YELLOW_PRIO_2, "tx_yellow_prio_2"), + OCELOT_STAT_ETHTOOL(TX_YELLOW_PRIO_3, "tx_yellow_prio_3"), + OCELOT_STAT_ETHTOOL(TX_YELLOW_PRIO_4, "tx_yellow_prio_4"), + OCELOT_STAT_ETHTOOL(TX_YELLOW_PRIO_5, "tx_yellow_prio_5"), + OCELOT_STAT_ETHTOOL(TX_YELLOW_PRIO_6, "tx_yellow_prio_6"), + OCELOT_STAT_ETHTOOL(TX_YELLOW_PRIO_7, "tx_yellow_prio_7"), + OCELOT_STAT_ETHTOOL(TX_GREEN_PRIO_0, "tx_green_prio_0"), + OCELOT_STAT_ETHTOOL(TX_GREEN_PRIO_1, "tx_green_prio_1"), + OCELOT_STAT_ETHTOOL(TX_GREEN_PRIO_2, "tx_green_prio_2"), + OCELOT_STAT_ETHTOOL(TX_GREEN_PRIO_3, "tx_green_prio_3"), + OCELOT_STAT_ETHTOOL(TX_GREEN_PRIO_4, "tx_green_prio_4"), + OCELOT_STAT_ETHTOOL(TX_GREEN_PRIO_5, "tx_green_prio_5"), + OCELOT_STAT_ETHTOOL(TX_GREEN_PRIO_6, "tx_green_prio_6"), + OCELOT_STAT_ETHTOOL(TX_GREEN_PRIO_7, "tx_green_prio_7"), + OCELOT_STAT_ETHTOOL(TX_AGED, "tx_aged"), + OCELOT_STAT_ETHTOOL(DROP_LOCAL, "drop_local"), + OCELOT_STAT_ETHTOOL(DROP_TAIL, "drop_tail"), + OCELOT_STAT_ETHTOOL(DROP_YELLOW_PRIO_0, "drop_yellow_prio_0"), + OCELOT_STAT_ETHTOOL(DROP_YELLOW_PRIO_1, "drop_yellow_prio_1"), + OCELOT_STAT_ETHTOOL(DROP_YELLOW_PRIO_2, "drop_yellow_prio_2"), + OCELOT_STAT_ETHTOOL(DROP_YELLOW_PRIO_3, "drop_yellow_prio_3"), + OCELOT_STAT_ETHTOOL(DROP_YELLOW_PRIO_4, "drop_yellow_prio_4"), + OCELOT_STAT_ETHTOOL(DROP_YELLOW_PRIO_5, "drop_yellow_prio_5"), + OCELOT_STAT_ETHTOOL(DROP_YELLOW_PRIO_6, "drop_yellow_prio_6"), + OCELOT_STAT_ETHTOOL(DROP_YELLOW_PRIO_7, "drop_yellow_prio_7"), + OCELOT_STAT_ETHTOOL(DROP_GREEN_PRIO_0, "drop_green_prio_0"), + OCELOT_STAT_ETHTOOL(DROP_GREEN_PRIO_1, "drop_green_prio_1"), + OCELOT_STAT_ETHTOOL(DROP_GREEN_PRIO_2, "drop_green_prio_2"), + OCELOT_STAT_ETHTOOL(DROP_GREEN_PRIO_3, "drop_green_prio_3"), + OCELOT_STAT_ETHTOOL(DROP_GREEN_PRIO_4, "drop_green_prio_4"), + OCELOT_STAT_ETHTOOL(DROP_GREEN_PRIO_5, "drop_green_prio_5"), + OCELOT_STAT_ETHTOOL(DROP_GREEN_PRIO_6, "drop_green_prio_6"), + OCELOT_STAT_ETHTOOL(DROP_GREEN_PRIO_7, "drop_green_prio_7"), }; =20 static void ocelot_pll5_init(struct ocelot *ocelot) diff --git a/include/soc/mscc/ocelot.h b/include/soc/mscc/ocelot.h index 860ec592c689..2fd8486bb7f0 100644 --- a/include/soc/mscc/ocelot.h +++ b/include/soc/mscc/ocelot.h @@ -698,6 +698,17 @@ struct ocelot_stat_layout { char name[ETH_GSTRING_LEN]; }; =20 +/* 32-bit counter checked for wraparound by ocelot_port_update_stats() + * and copied to ocelot->stats. + */ +#define OCELOT_STAT(kind) \ + [OCELOT_STAT_ ## kind] =3D { .reg =3D SYS_COUNT_ ## kind } +/* Same as above, except also exported to ethtool -S. Standard counters sh= ould + * only be exposed to more specific interfaces rather than by their string= name. + */ +#define OCELOT_STAT_ETHTOOL(kind, ethtool_name) \ + [OCELOT_STAT_ ## kind] =3D { .reg =3D SYS_COUNT_ ## kind, .name =3D ethto= ol_name } + struct ocelot_stats_region { struct list_head node; u32 base; --=20 2.34.1 From nobody Mon Apr 6 08:10:03 2026 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id E28CEC38145 for ; Thu, 8 Sep 2022 16:51:04 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232038AbiIHQvC (ORCPT ); Thu, 8 Sep 2022 12:51:02 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45786 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231685AbiIHQti (ORCPT ); Thu, 8 Sep 2022 12:49:38 -0400 Received: from EUR04-DB3-obe.outbound.protection.outlook.com (mail-eopbgr60072.outbound.protection.outlook.com [40.107.6.72]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 81C636597; Thu, 8 Sep 2022 09:49:28 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=YR32ojZowtgH4u1WjyRXOObuD+4/zeJFnKw30dlPoe4axL7qKC5Ndhx5C5ACRIA+6beWUtTSHpGYC0P4TG+fmQhHXEzN3o2mMmTZKgPOoVid1RPAik2OoKV+wLlvbW3X7Bk+CSEAt70u3d6WpdAjN+usJMALlq5xU3X3956sDwrmmdfSoAuLUgr6TRxAvh5YB5XP9tMZboPFbLcKeIXHKh10j4/QUJ2o200E2yuPW2vvisdZhvOSOPUh1K2lXT08FkiJmo8WmZdfrY+djXZpelMNGnszRL2qkTWvOOaJ02xDAQWPq1sF6DOcYh4rIzCndJEoqR6N9y2J0xORsJkTCg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=VUqg0sG2YqREUBAXn9C2xU/pJTs0XyvdUGa6tVONOno=; b=mmyE3SN0N55VgPGtmSOahKE8/k1hiZtlqBpYZ+qi4R9kDAxq02wk2hf0YIePHsMACrWyMfd0hQkf/Vuaj/3p6cyPMwLsHhLzF3uhXzeu/amsZ73+/QqIKGgp5m6vUftfHd+qvnG8DomxoLZnBlMZUi4DA5ygVO0axe9i9W+fEW9FdRnIK3nP7xWcl2g/Y/4s3NLTYsPSjyVbQZixb5sZBdFZUjDFSNjxKLKHKqstKD23VGyTy5/3tV68GtZIG46CCFAAnGE3hkbrv7N62B0qrbdivxKVjUI0KcDljQwlgppmhO9SIvqauactXlSa42uYtF05m/ZfFczOEeOZj0GfpQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=VUqg0sG2YqREUBAXn9C2xU/pJTs0XyvdUGa6tVONOno=; b=KZ5amVjUdJlWL03KspCxv8CThsKWx30KfeUew9xHXBimgvqSijRlTdu/V2+ubobW93hdt88aWntafG8ddS4Nf90iv76KkkRc+JFq0XGhVqWtW9gOS4CItLGi3K4nnC0eBMsm61VTOqtqNdDxoxYuGJsdMdCIClPue3Jh7tMWFBE= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from VI1PR04MB5136.eurprd04.prod.outlook.com (2603:10a6:803:55::19) by DB7PR04MB5052.eurprd04.prod.outlook.com (2603:10a6:10:1b::32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5588.18; Thu, 8 Sep 2022 16:49:17 +0000 Received: from VI1PR04MB5136.eurprd04.prod.outlook.com ([fe80::3412:9d57:ec73:fef3]) by VI1PR04MB5136.eurprd04.prod.outlook.com ([fe80::3412:9d57:ec73:fef3%5]) with mapi id 15.20.5588.017; Thu, 8 Sep 2022 16:49:17 +0000 From: Vladimir Oltean To: netdev@vger.kernel.org Cc: "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Xiaoliang Yang , Claudiu Manoil , Alexandre Belloni , UNGLinuxDriver@microchip.com, Andrew Lunn , Vivien Didelot , Florian Fainelli , Maxim Kochetkov , Colin Foster , Richie Pearn , linux-kernel@vger.kernel.org Subject: [PATCH net-next 14/14] net: mscc: ocelot: share the common stat definitions between all drivers Date: Thu, 8 Sep 2022 19:48:16 +0300 Message-Id: <20220908164816.3576795-15-vladimir.oltean@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220908164816.3576795-1-vladimir.oltean@nxp.com> References: <20220908164816.3576795-1-vladimir.oltean@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BEXP281CA0009.DEUP281.PROD.OUTLOOK.COM (2603:10a6:b10::19) To VI1PR04MB5136.eurprd04.prod.outlook.com (2603:10a6:803:55::19) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: d762fce5-3a93-4437-4a5e-08da91b9fe42 X-MS-TrafficTypeDiagnostic: DB7PR04MB5052:EE_ X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: YyrsM12PTurL67pu1NUPpRjqiiaeuu5CUaB1+60S0cF/w5ZQRyWcT0zjVVPxI7Z7eX/VTXM6+xUyCzY5lU4nbK67oWzrRUSlObnxTGW1fre6Lx3j1un07yXu4fkWN+m9MSNlSPRNDZdx3WnZoGYqBJxFQ+NT/kK9zF4Wr3yRZaTR5aNAPIDUHoqtRvNbmSIXWGVxqMA3uafVRNHAtj2YRYF+7CQEXZcXrXY7MYzuS3lKqnW3+Y/dTKONND28C9/CZBluHF+jG5sBmTHkzsKOMFHRETzxfMyT8/ri37NQt9hLWLsv+NrFHX6ysJsPTumwJLYd8SjFVyFM6IpTTy/1oqYSdGZq+wVIVw7Ut9ZsoDPa1ufbnimuPmq94V7M2dVEp90xWxr2cQHiTweG7Fv8T5UoFLMULJWbJFU2pgECSlz4MET43/wKUmR5rx+8cLtQLsp0/ycwAlb7lcht8y2Qa7le2Wv1pTyp/MEzUbhs4JNnHBQLttA6qIjqXVdkXuuAInv42MZQLsHoCluCdTVlVwtD48Oi9v92bEUkZ1rCWi9eKzGECvHQAwOu533rlerSKy6gNEVTfJ2Me/PLiDXWp85QzfZYMCziTNEPeBjrust9wqu5lCx6r4m27b3uv2bjynq2Ta2SKOfsN3LOw75d+LfPoxJFtLtDfKv4rfa2tccF3bOmWQFJwh48JDpdKXcW4dl1kK2van3xNyDSIHK6i+HTMoB52wAhvUutw7jDEDsMyfhYxZDkJASfGAbKCegp X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5136.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230016)(4636009)(136003)(39860400002)(396003)(346002)(366004)(376002)(38350700002)(8676002)(66476007)(66946007)(2616005)(6486002)(186003)(66556008)(38100700002)(36756003)(1076003)(4326008)(478600001)(83380400001)(8936002)(2906002)(5660300002)(44832011)(30864003)(7416002)(52116002)(41300700001)(6506007)(6916009)(26005)(54906003)(6512007)(86362001)(316002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?BZBrUnCdUJmQWicfbdjybswbJ+lhF0bjtTQAca3lawgQh729UiqRwK326LKm?= =?us-ascii?Q?XxU2DgHLIU15qvmRO/B+VxBoHIePw6GyTRINCw1b6M2PWJv7quNS0q5+Ursm?= =?us-ascii?Q?2da3FHxH1IetAOyWzMkH62Tx2TfHnfl61liETwKlnrCJ4wz54GZn5WKddeLb?= =?us-ascii?Q?D98WtC9I+wX4rePjnpfCZy+YySnn4how6VuuRFgKIGgVIVGdI4yV19kKEosg?= =?us-ascii?Q?h6EmVWkb4delluzPpK9g0IASaP5ClX0kbuu+XQydcs8z2+hytpsEl9MTV7fl?= =?us-ascii?Q?EDYYQ/RMLkv1c0b/zXt2tpqsXkmtcKkIALH6EVhKvNP31a88kOgYJ/8jWYaI?= =?us-ascii?Q?dr4x3TvyLO/FOsmpviGPya2YzkDPhXEdWbbL4DAa3lviXwX+iQUZkDnURcp8?= =?us-ascii?Q?vhh8UBumTs9KrFvGo49vo00QA1GZIqWo91uVBdpIC5GXkj+/hsM+OW5L96CN?= =?us-ascii?Q?ESW9TrgEBo24guk3SLt7EqQdS29Uukie1+CIAX5HV6SR6pKNhXfhXRsqkZfH?= =?us-ascii?Q?1XWswhCfWTC0WkLJVrkgYjDjeQp0zjes21tOkhJFIzeFJBq6hKyN1jbp91Py?= =?us-ascii?Q?baiTkl+lfCIF3tjym4TvfLOryxQwNMHYojzHNDcz5t5FWOSo4uyB3qNLDf2k?= =?us-ascii?Q?W95mcDdXakFN3bgl0d3tu8ki3OS4Hn1FS1ICQ5qN8QXdhxuRa8O9buWAOfVL?= =?us-ascii?Q?DAdtH5UhHijTtP5zGyUVb57tSYQGVwA2iQz0o/xNVHTfEQDqylPgGYRCrLyg?= =?us-ascii?Q?UZBtdiErJNGyfvuqOsXlaKiTk4KhZFVBh+PDz+MvJSTVquD4iulUY6UGHTaa?= =?us-ascii?Q?BIVULA2f4zyj0zV75I+ou0EBq1fDT1KmDzLubhjvrnViyUUE2nb3S/v/LT1b?= =?us-ascii?Q?qbTpS3UCGuvL4ojWRag7IzDLUI53WX7/D5RqVTrL7L/HSVzlXUBkMnUQTb/P?= =?us-ascii?Q?joZaYe1T9k5FOlsfHJfJpea9EkSs5jMG0UxwNzXidYevAj9PjjkYCqaxNdAK?= =?us-ascii?Q?mLIW5tzkRDL52lpfxsEKzkOkuVjlzlgY1feFCP5c2RV6moEsSocwwqmIlOpM?= =?us-ascii?Q?ctstxF7xfBPHhVgNrFOIvgm/jQMk3CSNFc//CRIjqxLCCLun4HjayumyGiNF?= =?us-ascii?Q?gZakYQBX6zU8Zsd0lNSyQNBN9j6JguYoWZSInt1BA/e8CO+3j3YbFSvNIXdN?= =?us-ascii?Q?BKBAjqt1FKEvJ4Oc/974+XpKg9k4qyTfbbEdYycqzXLdLUMlNzdz7/sI2rDw?= =?us-ascii?Q?ef7gHTwWjCfk7G9GDnnybIfyEbm5SzlDF+gLb7Ms7TYNKPbVSVtsjRFgAlT6?= =?us-ascii?Q?QN2mlsoIqBoS4+GhV3CTCAbftL6xucPu4yqeuR2uMFu2NKFmqTunyB0pHhKn?= =?us-ascii?Q?lTX55vDTn68qqT0iEmOUn2Jo01AVLhBQJpBdletzWyuCtLF75JGOiTA4/2xF?= =?us-ascii?Q?lJoTRlO01BZnhybjIkWCmSvlvZW0ypdauNKFlMLfBZKCVxID3NgXo1MjPwqA?= =?us-ascii?Q?qvPcqdq2Z52QBd9iOnrI7AByXF8sPXJ3jQ61JFjA6GWhQmszrf5uiAQYY6K8?= =?us-ascii?Q?CCf671E/bO7OomgJQxb7skXMGI2LYn30UlOvuoNTrcMsN+cljYtcm7Hn8fYZ?= =?us-ascii?Q?PA=3D=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: d762fce5-3a93-4437-4a5e-08da91b9fe42 X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5136.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Sep 2022 16:48:44.8799 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: aGrrZp+6iAnZttM+PJ6mneepsR+O2wBpf3fO7aTHhmKYVgSkY3XpCaTQRweIQMVeagEsmguOi7J7eALTJM1vWQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB7PR04MB5052 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" All switch families supported by the ocelot lib (ocelot, felix, seville) export the same registers so far. But for example felix also has TSN counters, while the others don't. To reduce the bloat even further, create an OCELOT_COMMON_STATS() macro which just lists all stats that are common between switches. The array elements are still replicated among all of vsc9959_stats_layout, vsc9953_stats_layout and ocelot_stats_layout. Signed-off-by: Vladimir Oltean --- drivers/net/dsa/ocelot/felix_vsc9959.c | 94 +-------------------- drivers/net/dsa/ocelot/seville_vsc9953.c | 94 +-------------------- drivers/net/ethernet/mscc/ocelot_vsc7514.c | 94 +-------------------- include/soc/mscc/ocelot.h | 95 ++++++++++++++++++++++ 4 files changed, 98 insertions(+), 279 deletions(-) diff --git a/drivers/net/dsa/ocelot/felix_vsc9959.c b/drivers/net/dsa/ocelo= t/felix_vsc9959.c index 07641915fcf0..848c5839c9c0 100644 --- a/drivers/net/dsa/ocelot/felix_vsc9959.c +++ b/drivers/net/dsa/ocelot/felix_vsc9959.c @@ -622,99 +622,7 @@ static const struct reg_field vsc9959_regfields[REGFIE= LD_MAX] =3D { }; =20 static const struct ocelot_stat_layout vsc9959_stats_layout[OCELOT_NUM_STA= TS] =3D { - OCELOT_STAT_ETHTOOL(RX_OCTETS, "rx_octets"), - OCELOT_STAT_ETHTOOL(RX_UNICAST, "rx_unicast"), - OCELOT_STAT_ETHTOOL(RX_MULTICAST, "rx_multicast"), - OCELOT_STAT_ETHTOOL(RX_BROADCAST, "rx_broadcast"), - OCELOT_STAT_ETHTOOL(RX_SHORTS, "rx_shorts"), - OCELOT_STAT_ETHTOOL(RX_FRAGMENTS, "rx_fragments"), - OCELOT_STAT_ETHTOOL(RX_JABBERS, "rx_jabbers"), - OCELOT_STAT_ETHTOOL(RX_CRC_ALIGN_ERRS, "rx_crc_align_errs"), - OCELOT_STAT_ETHTOOL(RX_SYM_ERRS, "rx_sym_errs"), - OCELOT_STAT_ETHTOOL(RX_64, "rx_frames_below_65_octets"), - OCELOT_STAT_ETHTOOL(RX_65_127, "rx_frames_65_to_127_octets"), - OCELOT_STAT_ETHTOOL(RX_128_255, "rx_frames_128_to_255_octets"), - OCELOT_STAT_ETHTOOL(RX_256_511, "rx_frames_256_to_511_octets"), - OCELOT_STAT_ETHTOOL(RX_512_1023, "rx_frames_512_to_1023_octets"), - OCELOT_STAT_ETHTOOL(RX_1024_1526, "rx_frames_1024_to_1526_octets"), - OCELOT_STAT_ETHTOOL(RX_1527_MAX, "rx_frames_over_1526_octets"), - OCELOT_STAT_ETHTOOL(RX_PAUSE, "rx_pause"), - OCELOT_STAT_ETHTOOL(RX_CONTROL, "rx_control"), - OCELOT_STAT_ETHTOOL(RX_LONGS, "rx_longs"), - OCELOT_STAT_ETHTOOL(RX_CLASSIFIED_DROPS, "rx_classified_drops"), - OCELOT_STAT_ETHTOOL(RX_RED_PRIO_0, "rx_red_prio_0"), - OCELOT_STAT_ETHTOOL(RX_RED_PRIO_1, "rx_red_prio_1"), - OCELOT_STAT_ETHTOOL(RX_RED_PRIO_2, "rx_red_prio_2"), - OCELOT_STAT_ETHTOOL(RX_RED_PRIO_3, "rx_red_prio_3"), - OCELOT_STAT_ETHTOOL(RX_RED_PRIO_4, "rx_red_prio_4"), - OCELOT_STAT_ETHTOOL(RX_RED_PRIO_5, "rx_red_prio_5"), - OCELOT_STAT_ETHTOOL(RX_RED_PRIO_6, "rx_red_prio_6"), - OCELOT_STAT_ETHTOOL(RX_RED_PRIO_7, "rx_red_prio_7"), - OCELOT_STAT_ETHTOOL(RX_YELLOW_PRIO_0, "rx_yellow_prio_0"), - OCELOT_STAT_ETHTOOL(RX_YELLOW_PRIO_1, "rx_yellow_prio_1"), - OCELOT_STAT_ETHTOOL(RX_YELLOW_PRIO_2, "rx_yellow_prio_2"), - OCELOT_STAT_ETHTOOL(RX_YELLOW_PRIO_3, "rx_yellow_prio_3"), - OCELOT_STAT_ETHTOOL(RX_YELLOW_PRIO_4, "rx_yellow_prio_4"), - OCELOT_STAT_ETHTOOL(RX_YELLOW_PRIO_5, "rx_yellow_prio_5"), - OCELOT_STAT_ETHTOOL(RX_YELLOW_PRIO_6, "rx_yellow_prio_6"), - OCELOT_STAT_ETHTOOL(RX_YELLOW_PRIO_7, "rx_yellow_prio_7"), - OCELOT_STAT_ETHTOOL(RX_GREEN_PRIO_0, "rx_green_prio_0"), - OCELOT_STAT_ETHTOOL(RX_GREEN_PRIO_1, "rx_green_prio_1"), - OCELOT_STAT_ETHTOOL(RX_GREEN_PRIO_2, "rx_green_prio_2"), - OCELOT_STAT_ETHTOOL(RX_GREEN_PRIO_3, "rx_green_prio_3"), - OCELOT_STAT_ETHTOOL(RX_GREEN_PRIO_4, "rx_green_prio_4"), - OCELOT_STAT_ETHTOOL(RX_GREEN_PRIO_5, "rx_green_prio_5"), - OCELOT_STAT_ETHTOOL(RX_GREEN_PRIO_6, "rx_green_prio_6"), - OCELOT_STAT_ETHTOOL(RX_GREEN_PRIO_7, "rx_green_prio_7"), - OCELOT_STAT_ETHTOOL(TX_OCTETS, "tx_octets"), - OCELOT_STAT_ETHTOOL(TX_UNICAST, "tx_unicast"), - OCELOT_STAT_ETHTOOL(TX_MULTICAST, "tx_multicast"), - OCELOT_STAT_ETHTOOL(TX_BROADCAST, "tx_broadcast"), - OCELOT_STAT_ETHTOOL(TX_COLLISION, "tx_collision"), - OCELOT_STAT_ETHTOOL(TX_DROPS, "tx_drops"), - OCELOT_STAT_ETHTOOL(TX_PAUSE, "tx_pause"), - OCELOT_STAT_ETHTOOL(TX_64, "tx_frames_below_65_octets"), - OCELOT_STAT_ETHTOOL(TX_65_127, "tx_frames_65_to_127_octets"), - OCELOT_STAT_ETHTOOL(TX_128_255, "tx_frames_128_255_octets"), - OCELOT_STAT_ETHTOOL(TX_256_511, "tx_frames_256_511_octets"), - OCELOT_STAT_ETHTOOL(TX_512_1023, "tx_frames_512_1023_octets"), - OCELOT_STAT_ETHTOOL(TX_1024_1526, "tx_frames_1024_1526_octets"), - OCELOT_STAT_ETHTOOL(TX_1527_MAX, "tx_frames_over_1526_octets"), - OCELOT_STAT_ETHTOOL(TX_YELLOW_PRIO_0, "tx_yellow_prio_0"), - OCELOT_STAT_ETHTOOL(TX_YELLOW_PRIO_1, "tx_yellow_prio_1"), - OCELOT_STAT_ETHTOOL(TX_YELLOW_PRIO_2, "tx_yellow_prio_2"), - OCELOT_STAT_ETHTOOL(TX_YELLOW_PRIO_3, "tx_yellow_prio_3"), - OCELOT_STAT_ETHTOOL(TX_YELLOW_PRIO_4, "tx_yellow_prio_4"), - OCELOT_STAT_ETHTOOL(TX_YELLOW_PRIO_5, "tx_yellow_prio_5"), - OCELOT_STAT_ETHTOOL(TX_YELLOW_PRIO_6, "tx_yellow_prio_6"), - OCELOT_STAT_ETHTOOL(TX_YELLOW_PRIO_7, "tx_yellow_prio_7"), - OCELOT_STAT_ETHTOOL(TX_GREEN_PRIO_0, "tx_green_prio_0"), - OCELOT_STAT_ETHTOOL(TX_GREEN_PRIO_1, "tx_green_prio_1"), - OCELOT_STAT_ETHTOOL(TX_GREEN_PRIO_2, "tx_green_prio_2"), - OCELOT_STAT_ETHTOOL(TX_GREEN_PRIO_3, "tx_green_prio_3"), - OCELOT_STAT_ETHTOOL(TX_GREEN_PRIO_4, "tx_green_prio_4"), - OCELOT_STAT_ETHTOOL(TX_GREEN_PRIO_5, "tx_green_prio_5"), - OCELOT_STAT_ETHTOOL(TX_GREEN_PRIO_6, "tx_green_prio_6"), - OCELOT_STAT_ETHTOOL(TX_GREEN_PRIO_7, "tx_green_prio_7"), - OCELOT_STAT_ETHTOOL(TX_AGED, "tx_aged"), - OCELOT_STAT_ETHTOOL(DROP_LOCAL, "drop_local"), - OCELOT_STAT_ETHTOOL(DROP_TAIL, "drop_tail"), - OCELOT_STAT_ETHTOOL(DROP_YELLOW_PRIO_0, "drop_yellow_prio_0"), - OCELOT_STAT_ETHTOOL(DROP_YELLOW_PRIO_1, "drop_yellow_prio_1"), - OCELOT_STAT_ETHTOOL(DROP_YELLOW_PRIO_2, "drop_yellow_prio_2"), - OCELOT_STAT_ETHTOOL(DROP_YELLOW_PRIO_3, "drop_yellow_prio_3"), - OCELOT_STAT_ETHTOOL(DROP_YELLOW_PRIO_4, "drop_yellow_prio_4"), - OCELOT_STAT_ETHTOOL(DROP_YELLOW_PRIO_5, "drop_yellow_prio_5"), - OCELOT_STAT_ETHTOOL(DROP_YELLOW_PRIO_6, "drop_yellow_prio_6"), - OCELOT_STAT_ETHTOOL(DROP_YELLOW_PRIO_7, "drop_yellow_prio_7"), - OCELOT_STAT_ETHTOOL(DROP_GREEN_PRIO_0, "drop_green_prio_0"), - OCELOT_STAT_ETHTOOL(DROP_GREEN_PRIO_1, "drop_green_prio_1"), - OCELOT_STAT_ETHTOOL(DROP_GREEN_PRIO_2, "drop_green_prio_2"), - OCELOT_STAT_ETHTOOL(DROP_GREEN_PRIO_3, "drop_green_prio_3"), - OCELOT_STAT_ETHTOOL(DROP_GREEN_PRIO_4, "drop_green_prio_4"), - OCELOT_STAT_ETHTOOL(DROP_GREEN_PRIO_5, "drop_green_prio_5"), - OCELOT_STAT_ETHTOOL(DROP_GREEN_PRIO_6, "drop_green_prio_6"), - OCELOT_STAT_ETHTOOL(DROP_GREEN_PRIO_7, "drop_green_prio_7"), + OCELOT_COMMON_STATS, }; =20 static const struct vcap_field vsc9959_vcap_es0_keys[] =3D { diff --git a/drivers/net/dsa/ocelot/seville_vsc9953.c b/drivers/net/dsa/oce= lot/seville_vsc9953.c index a8f69d483abf..3ce1cd1a8d4a 100644 --- a/drivers/net/dsa/ocelot/seville_vsc9953.c +++ b/drivers/net/dsa/ocelot/seville_vsc9953.c @@ -614,99 +614,7 @@ static const struct reg_field vsc9953_regfields[REGFIE= LD_MAX] =3D { }; =20 static const struct ocelot_stat_layout vsc9953_stats_layout[OCELOT_NUM_STA= TS] =3D { - OCELOT_STAT_ETHTOOL(RX_OCTETS, "rx_octets"), - OCELOT_STAT_ETHTOOL(RX_UNICAST, "rx_unicast"), - OCELOT_STAT_ETHTOOL(RX_MULTICAST, "rx_multicast"), - OCELOT_STAT_ETHTOOL(RX_BROADCAST, "rx_broadcast"), - OCELOT_STAT_ETHTOOL(RX_SHORTS, "rx_shorts"), - OCELOT_STAT_ETHTOOL(RX_FRAGMENTS, "rx_fragments"), - OCELOT_STAT_ETHTOOL(RX_JABBERS, "rx_jabbers"), - OCELOT_STAT_ETHTOOL(RX_CRC_ALIGN_ERRS, "rx_crc_align_errs"), - OCELOT_STAT_ETHTOOL(RX_SYM_ERRS, "rx_sym_errs"), - OCELOT_STAT_ETHTOOL(RX_64, "rx_frames_below_65_octets"), - OCELOT_STAT_ETHTOOL(RX_65_127, "rx_frames_65_to_127_octets"), - OCELOT_STAT_ETHTOOL(RX_128_255, "rx_frames_128_to_255_octets"), - OCELOT_STAT_ETHTOOL(RX_256_511, "rx_frames_256_to_511_octets"), - OCELOT_STAT_ETHTOOL(RX_512_1023, "rx_frames_512_to_1023_octets"), - OCELOT_STAT_ETHTOOL(RX_1024_1526, "rx_frames_1024_to_1526_octets"), - OCELOT_STAT_ETHTOOL(RX_1527_MAX, "rx_frames_over_1526_octets"), - OCELOT_STAT_ETHTOOL(RX_PAUSE, "rx_pause"), - OCELOT_STAT_ETHTOOL(RX_CONTROL, "rx_control"), - OCELOT_STAT_ETHTOOL(RX_LONGS, "rx_longs"), - OCELOT_STAT_ETHTOOL(RX_CLASSIFIED_DROPS, "rx_classified_drops"), - OCELOT_STAT_ETHTOOL(RX_RED_PRIO_0, "rx_red_prio_0"), - OCELOT_STAT_ETHTOOL(RX_RED_PRIO_1, "rx_red_prio_1"), - OCELOT_STAT_ETHTOOL(RX_RED_PRIO_2, "rx_red_prio_2"), - OCELOT_STAT_ETHTOOL(RX_RED_PRIO_3, "rx_red_prio_3"), - OCELOT_STAT_ETHTOOL(RX_RED_PRIO_4, "rx_red_prio_4"), - OCELOT_STAT_ETHTOOL(RX_RED_PRIO_5, "rx_red_prio_5"), - OCELOT_STAT_ETHTOOL(RX_RED_PRIO_6, "rx_red_prio_6"), - OCELOT_STAT_ETHTOOL(RX_RED_PRIO_7, "rx_red_prio_7"), - OCELOT_STAT_ETHTOOL(RX_YELLOW_PRIO_0, "rx_yellow_prio_0"), - OCELOT_STAT_ETHTOOL(RX_YELLOW_PRIO_1, "rx_yellow_prio_1"), - OCELOT_STAT_ETHTOOL(RX_YELLOW_PRIO_2, "rx_yellow_prio_2"), - OCELOT_STAT_ETHTOOL(RX_YELLOW_PRIO_3, "rx_yellow_prio_3"), - OCELOT_STAT_ETHTOOL(RX_YELLOW_PRIO_4, "rx_yellow_prio_4"), - OCELOT_STAT_ETHTOOL(RX_YELLOW_PRIO_5, "rx_yellow_prio_5"), - OCELOT_STAT_ETHTOOL(RX_YELLOW_PRIO_6, "rx_yellow_prio_6"), - OCELOT_STAT_ETHTOOL(RX_YELLOW_PRIO_7, "rx_yellow_prio_7"), - OCELOT_STAT_ETHTOOL(RX_GREEN_PRIO_0, "rx_green_prio_0"), - OCELOT_STAT_ETHTOOL(RX_GREEN_PRIO_1, "rx_green_prio_1"), - OCELOT_STAT_ETHTOOL(RX_GREEN_PRIO_2, "rx_green_prio_2"), - OCELOT_STAT_ETHTOOL(RX_GREEN_PRIO_3, "rx_green_prio_3"), - OCELOT_STAT_ETHTOOL(RX_GREEN_PRIO_4, "rx_green_prio_4"), - OCELOT_STAT_ETHTOOL(RX_GREEN_PRIO_5, "rx_green_prio_5"), - OCELOT_STAT_ETHTOOL(RX_GREEN_PRIO_6, "rx_green_prio_6"), - OCELOT_STAT_ETHTOOL(RX_GREEN_PRIO_7, "rx_green_prio_7"), - OCELOT_STAT_ETHTOOL(TX_OCTETS, "tx_octets"), - OCELOT_STAT_ETHTOOL(TX_UNICAST, "tx_unicast"), - OCELOT_STAT_ETHTOOL(TX_MULTICAST, "tx_multicast"), - OCELOT_STAT_ETHTOOL(TX_BROADCAST, "tx_broadcast"), - OCELOT_STAT_ETHTOOL(TX_COLLISION, "tx_collision"), - OCELOT_STAT_ETHTOOL(TX_DROPS, "tx_drops"), - OCELOT_STAT_ETHTOOL(TX_PAUSE, "tx_pause"), - OCELOT_STAT_ETHTOOL(TX_64, "tx_frames_below_65_octets"), - OCELOT_STAT_ETHTOOL(TX_65_127, "tx_frames_65_to_127_octets"), - OCELOT_STAT_ETHTOOL(TX_128_255, "tx_frames_128_255_octets"), - OCELOT_STAT_ETHTOOL(TX_256_511, "tx_frames_256_511_octets"), - OCELOT_STAT_ETHTOOL(TX_512_1023, "tx_frames_512_1023_octets"), - OCELOT_STAT_ETHTOOL(TX_1024_1526, "tx_frames_1024_1526_octets"), - OCELOT_STAT_ETHTOOL(TX_1527_MAX, "tx_frames_over_1526_octets"), - OCELOT_STAT_ETHTOOL(TX_YELLOW_PRIO_0, "tx_yellow_prio_0"), - OCELOT_STAT_ETHTOOL(TX_YELLOW_PRIO_1, "tx_yellow_prio_1"), - OCELOT_STAT_ETHTOOL(TX_YELLOW_PRIO_2, "tx_yellow_prio_2"), - OCELOT_STAT_ETHTOOL(TX_YELLOW_PRIO_3, "tx_yellow_prio_3"), - OCELOT_STAT_ETHTOOL(TX_YELLOW_PRIO_4, "tx_yellow_prio_4"), - OCELOT_STAT_ETHTOOL(TX_YELLOW_PRIO_5, "tx_yellow_prio_5"), - OCELOT_STAT_ETHTOOL(TX_YELLOW_PRIO_6, "tx_yellow_prio_6"), - OCELOT_STAT_ETHTOOL(TX_YELLOW_PRIO_7, "tx_yellow_prio_7"), - OCELOT_STAT_ETHTOOL(TX_GREEN_PRIO_0, "tx_green_prio_0"), - OCELOT_STAT_ETHTOOL(TX_GREEN_PRIO_1, "tx_green_prio_1"), - OCELOT_STAT_ETHTOOL(TX_GREEN_PRIO_2, "tx_green_prio_2"), - OCELOT_STAT_ETHTOOL(TX_GREEN_PRIO_3, "tx_green_prio_3"), - OCELOT_STAT_ETHTOOL(TX_GREEN_PRIO_4, "tx_green_prio_4"), - OCELOT_STAT_ETHTOOL(TX_GREEN_PRIO_5, "tx_green_prio_5"), - OCELOT_STAT_ETHTOOL(TX_GREEN_PRIO_6, "tx_green_prio_6"), - OCELOT_STAT_ETHTOOL(TX_GREEN_PRIO_7, "tx_green_prio_7"), - OCELOT_STAT_ETHTOOL(TX_AGED, "tx_aged"), - OCELOT_STAT_ETHTOOL(DROP_LOCAL, "drop_local"), - OCELOT_STAT_ETHTOOL(DROP_TAIL, "drop_tail"), - OCELOT_STAT_ETHTOOL(DROP_YELLOW_PRIO_0, "drop_yellow_prio_0"), - OCELOT_STAT_ETHTOOL(DROP_YELLOW_PRIO_1, "drop_yellow_prio_1"), - OCELOT_STAT_ETHTOOL(DROP_YELLOW_PRIO_2, "drop_yellow_prio_2"), - OCELOT_STAT_ETHTOOL(DROP_YELLOW_PRIO_3, "drop_yellow_prio_3"), - OCELOT_STAT_ETHTOOL(DROP_YELLOW_PRIO_4, "drop_yellow_prio_4"), - OCELOT_STAT_ETHTOOL(DROP_YELLOW_PRIO_5, "drop_yellow_prio_5"), - OCELOT_STAT_ETHTOOL(DROP_YELLOW_PRIO_6, "drop_yellow_prio_6"), - OCELOT_STAT_ETHTOOL(DROP_YELLOW_PRIO_7, "drop_yellow_prio_7"), - OCELOT_STAT_ETHTOOL(DROP_GREEN_PRIO_0, "drop_green_prio_0"), - OCELOT_STAT_ETHTOOL(DROP_GREEN_PRIO_1, "drop_green_prio_1"), - OCELOT_STAT_ETHTOOL(DROP_GREEN_PRIO_2, "drop_green_prio_2"), - OCELOT_STAT_ETHTOOL(DROP_GREEN_PRIO_3, "drop_green_prio_3"), - OCELOT_STAT_ETHTOOL(DROP_GREEN_PRIO_4, "drop_green_prio_4"), - OCELOT_STAT_ETHTOOL(DROP_GREEN_PRIO_5, "drop_green_prio_5"), - OCELOT_STAT_ETHTOOL(DROP_GREEN_PRIO_6, "drop_green_prio_6"), - OCELOT_STAT_ETHTOOL(DROP_GREEN_PRIO_7, "drop_green_prio_7"), + OCELOT_COMMON_STATS, }; =20 static const struct vcap_field vsc9953_vcap_es0_keys[] =3D { diff --git a/drivers/net/ethernet/mscc/ocelot_vsc7514.c b/drivers/net/ether= net/mscc/ocelot_vsc7514.c index 8fe84d753cc9..ae42bbba5747 100644 --- a/drivers/net/ethernet/mscc/ocelot_vsc7514.c +++ b/drivers/net/ethernet/mscc/ocelot_vsc7514.c @@ -97,99 +97,7 @@ static const struct reg_field ocelot_regfields[REGFIELD_= MAX] =3D { }; =20 static const struct ocelot_stat_layout ocelot_stats_layout[OCELOT_NUM_STAT= S] =3D { - OCELOT_STAT_ETHTOOL(RX_OCTETS, "rx_octets"), - OCELOT_STAT_ETHTOOL(RX_UNICAST, "rx_unicast"), - OCELOT_STAT_ETHTOOL(RX_MULTICAST, "rx_multicast"), - OCELOT_STAT_ETHTOOL(RX_BROADCAST, "rx_broadcast"), - OCELOT_STAT_ETHTOOL(RX_SHORTS, "rx_shorts"), - OCELOT_STAT_ETHTOOL(RX_FRAGMENTS, "rx_fragments"), - OCELOT_STAT_ETHTOOL(RX_JABBERS, "rx_jabbers"), - OCELOT_STAT_ETHTOOL(RX_CRC_ALIGN_ERRS, "rx_crc_align_errs"), - OCELOT_STAT_ETHTOOL(RX_SYM_ERRS, "rx_sym_errs"), - OCELOT_STAT_ETHTOOL(RX_64, "rx_frames_below_65_octets"), - OCELOT_STAT_ETHTOOL(RX_65_127, "rx_frames_65_to_127_octets"), - OCELOT_STAT_ETHTOOL(RX_128_255, "rx_frames_128_to_255_octets"), - OCELOT_STAT_ETHTOOL(RX_256_511, "rx_frames_256_to_511_octets"), - OCELOT_STAT_ETHTOOL(RX_512_1023, "rx_frames_512_to_1023_octets"), - OCELOT_STAT_ETHTOOL(RX_1024_1526, "rx_frames_1024_to_1526_octets"), - OCELOT_STAT_ETHTOOL(RX_1527_MAX, "rx_frames_over_1526_octets"), - OCELOT_STAT_ETHTOOL(RX_PAUSE, "rx_pause"), - OCELOT_STAT_ETHTOOL(RX_CONTROL, "rx_control"), - OCELOT_STAT_ETHTOOL(RX_LONGS, "rx_longs"), - OCELOT_STAT_ETHTOOL(RX_CLASSIFIED_DROPS, "rx_classified_drops"), - OCELOT_STAT_ETHTOOL(RX_RED_PRIO_0, "rx_red_prio_0"), - OCELOT_STAT_ETHTOOL(RX_RED_PRIO_1, "rx_red_prio_1"), - OCELOT_STAT_ETHTOOL(RX_RED_PRIO_2, "rx_red_prio_2"), - OCELOT_STAT_ETHTOOL(RX_RED_PRIO_3, "rx_red_prio_3"), - OCELOT_STAT_ETHTOOL(RX_RED_PRIO_4, "rx_red_prio_4"), - OCELOT_STAT_ETHTOOL(RX_RED_PRIO_5, "rx_red_prio_5"), - OCELOT_STAT_ETHTOOL(RX_RED_PRIO_6, "rx_red_prio_6"), - OCELOT_STAT_ETHTOOL(RX_RED_PRIO_7, "rx_red_prio_7"), - OCELOT_STAT_ETHTOOL(RX_YELLOW_PRIO_0, "rx_yellow_prio_0"), - OCELOT_STAT_ETHTOOL(RX_YELLOW_PRIO_1, "rx_yellow_prio_1"), - OCELOT_STAT_ETHTOOL(RX_YELLOW_PRIO_2, "rx_yellow_prio_2"), - OCELOT_STAT_ETHTOOL(RX_YELLOW_PRIO_3, "rx_yellow_prio_3"), - OCELOT_STAT_ETHTOOL(RX_YELLOW_PRIO_4, "rx_yellow_prio_4"), - OCELOT_STAT_ETHTOOL(RX_YELLOW_PRIO_5, "rx_yellow_prio_5"), - OCELOT_STAT_ETHTOOL(RX_YELLOW_PRIO_6, "rx_yellow_prio_6"), - OCELOT_STAT_ETHTOOL(RX_YELLOW_PRIO_7, "rx_yellow_prio_7"), - OCELOT_STAT_ETHTOOL(RX_GREEN_PRIO_0, "rx_green_prio_0"), - OCELOT_STAT_ETHTOOL(RX_GREEN_PRIO_1, "rx_green_prio_1"), - OCELOT_STAT_ETHTOOL(RX_GREEN_PRIO_2, "rx_green_prio_2"), - OCELOT_STAT_ETHTOOL(RX_GREEN_PRIO_3, "rx_green_prio_3"), - OCELOT_STAT_ETHTOOL(RX_GREEN_PRIO_4, "rx_green_prio_4"), - OCELOT_STAT_ETHTOOL(RX_GREEN_PRIO_5, "rx_green_prio_5"), - OCELOT_STAT_ETHTOOL(RX_GREEN_PRIO_6, "rx_green_prio_6"), - OCELOT_STAT_ETHTOOL(RX_GREEN_PRIO_7, "rx_green_prio_7"), - OCELOT_STAT_ETHTOOL(TX_OCTETS, "tx_octets"), - OCELOT_STAT_ETHTOOL(TX_UNICAST, "tx_unicast"), - OCELOT_STAT_ETHTOOL(TX_MULTICAST, "tx_multicast"), - OCELOT_STAT_ETHTOOL(TX_BROADCAST, "tx_broadcast"), - OCELOT_STAT_ETHTOOL(TX_COLLISION, "tx_collision"), - OCELOT_STAT_ETHTOOL(TX_DROPS, "tx_drops"), - OCELOT_STAT_ETHTOOL(TX_PAUSE, "tx_pause"), - OCELOT_STAT_ETHTOOL(TX_64, "tx_frames_below_65_octets"), - OCELOT_STAT_ETHTOOL(TX_65_127, "tx_frames_65_to_127_octets"), - OCELOT_STAT_ETHTOOL(TX_128_255, "tx_frames_128_255_octets"), - OCELOT_STAT_ETHTOOL(TX_256_511, "tx_frames_256_511_octets"), - OCELOT_STAT_ETHTOOL(TX_512_1023, "tx_frames_512_1023_octets"), - OCELOT_STAT_ETHTOOL(TX_1024_1526, "tx_frames_1024_1526_octets"), - OCELOT_STAT_ETHTOOL(TX_1527_MAX, "tx_frames_over_1526_octets"), - OCELOT_STAT_ETHTOOL(TX_YELLOW_PRIO_0, "tx_yellow_prio_0"), - OCELOT_STAT_ETHTOOL(TX_YELLOW_PRIO_1, "tx_yellow_prio_1"), - OCELOT_STAT_ETHTOOL(TX_YELLOW_PRIO_2, "tx_yellow_prio_2"), - OCELOT_STAT_ETHTOOL(TX_YELLOW_PRIO_3, "tx_yellow_prio_3"), - OCELOT_STAT_ETHTOOL(TX_YELLOW_PRIO_4, "tx_yellow_prio_4"), - OCELOT_STAT_ETHTOOL(TX_YELLOW_PRIO_5, "tx_yellow_prio_5"), - OCELOT_STAT_ETHTOOL(TX_YELLOW_PRIO_6, "tx_yellow_prio_6"), - OCELOT_STAT_ETHTOOL(TX_YELLOW_PRIO_7, "tx_yellow_prio_7"), - OCELOT_STAT_ETHTOOL(TX_GREEN_PRIO_0, "tx_green_prio_0"), - OCELOT_STAT_ETHTOOL(TX_GREEN_PRIO_1, "tx_green_prio_1"), - OCELOT_STAT_ETHTOOL(TX_GREEN_PRIO_2, "tx_green_prio_2"), - OCELOT_STAT_ETHTOOL(TX_GREEN_PRIO_3, "tx_green_prio_3"), - OCELOT_STAT_ETHTOOL(TX_GREEN_PRIO_4, "tx_green_prio_4"), - OCELOT_STAT_ETHTOOL(TX_GREEN_PRIO_5, "tx_green_prio_5"), - OCELOT_STAT_ETHTOOL(TX_GREEN_PRIO_6, "tx_green_prio_6"), - OCELOT_STAT_ETHTOOL(TX_GREEN_PRIO_7, "tx_green_prio_7"), - OCELOT_STAT_ETHTOOL(TX_AGED, "tx_aged"), - OCELOT_STAT_ETHTOOL(DROP_LOCAL, "drop_local"), - OCELOT_STAT_ETHTOOL(DROP_TAIL, "drop_tail"), - OCELOT_STAT_ETHTOOL(DROP_YELLOW_PRIO_0, "drop_yellow_prio_0"), - OCELOT_STAT_ETHTOOL(DROP_YELLOW_PRIO_1, "drop_yellow_prio_1"), - OCELOT_STAT_ETHTOOL(DROP_YELLOW_PRIO_2, "drop_yellow_prio_2"), - OCELOT_STAT_ETHTOOL(DROP_YELLOW_PRIO_3, "drop_yellow_prio_3"), - OCELOT_STAT_ETHTOOL(DROP_YELLOW_PRIO_4, "drop_yellow_prio_4"), - OCELOT_STAT_ETHTOOL(DROP_YELLOW_PRIO_5, "drop_yellow_prio_5"), - OCELOT_STAT_ETHTOOL(DROP_YELLOW_PRIO_6, "drop_yellow_prio_6"), - OCELOT_STAT_ETHTOOL(DROP_YELLOW_PRIO_7, "drop_yellow_prio_7"), - OCELOT_STAT_ETHTOOL(DROP_GREEN_PRIO_0, "drop_green_prio_0"), - OCELOT_STAT_ETHTOOL(DROP_GREEN_PRIO_1, "drop_green_prio_1"), - OCELOT_STAT_ETHTOOL(DROP_GREEN_PRIO_2, "drop_green_prio_2"), - OCELOT_STAT_ETHTOOL(DROP_GREEN_PRIO_3, "drop_green_prio_3"), - OCELOT_STAT_ETHTOOL(DROP_GREEN_PRIO_4, "drop_green_prio_4"), - OCELOT_STAT_ETHTOOL(DROP_GREEN_PRIO_5, "drop_green_prio_5"), - OCELOT_STAT_ETHTOOL(DROP_GREEN_PRIO_6, "drop_green_prio_6"), - OCELOT_STAT_ETHTOOL(DROP_GREEN_PRIO_7, "drop_green_prio_7"), + OCELOT_COMMON_STATS, }; =20 static void ocelot_pll5_init(struct ocelot *ocelot) diff --git a/include/soc/mscc/ocelot.h b/include/soc/mscc/ocelot.h index 2fd8486bb7f0..355cfdedc43b 100644 --- a/include/soc/mscc/ocelot.h +++ b/include/soc/mscc/ocelot.h @@ -709,6 +709,101 @@ struct ocelot_stat_layout { #define OCELOT_STAT_ETHTOOL(kind, ethtool_name) \ [OCELOT_STAT_ ## kind] =3D { .reg =3D SYS_COUNT_ ## kind, .name =3D ethto= ol_name } =20 +#define OCELOT_COMMON_STATS \ + OCELOT_STAT_ETHTOOL(RX_OCTETS, "rx_octets"), \ + OCELOT_STAT_ETHTOOL(RX_UNICAST, "rx_unicast"), \ + OCELOT_STAT_ETHTOOL(RX_MULTICAST, "rx_multicast"), \ + OCELOT_STAT_ETHTOOL(RX_BROADCAST, "rx_broadcast"), \ + OCELOT_STAT_ETHTOOL(RX_SHORTS, "rx_shorts"), \ + OCELOT_STAT_ETHTOOL(RX_FRAGMENTS, "rx_fragments"), \ + OCELOT_STAT_ETHTOOL(RX_JABBERS, "rx_jabbers"), \ + OCELOT_STAT_ETHTOOL(RX_CRC_ALIGN_ERRS, "rx_crc_align_errs"), \ + OCELOT_STAT_ETHTOOL(RX_SYM_ERRS, "rx_sym_errs"), \ + OCELOT_STAT_ETHTOOL(RX_64, "rx_frames_below_65_octets"), \ + OCELOT_STAT_ETHTOOL(RX_65_127, "rx_frames_65_to_127_octets"), \ + OCELOT_STAT_ETHTOOL(RX_128_255, "rx_frames_128_to_255_octets"), \ + OCELOT_STAT_ETHTOOL(RX_256_511, "rx_frames_256_to_511_octets"), \ + OCELOT_STAT_ETHTOOL(RX_512_1023, "rx_frames_512_to_1023_octets"), \ + OCELOT_STAT_ETHTOOL(RX_1024_1526, "rx_frames_1024_to_1526_octets"), \ + OCELOT_STAT_ETHTOOL(RX_1527_MAX, "rx_frames_over_1526_octets"), \ + OCELOT_STAT_ETHTOOL(RX_PAUSE, "rx_pause"), \ + OCELOT_STAT_ETHTOOL(RX_CONTROL, "rx_control"), \ + OCELOT_STAT_ETHTOOL(RX_LONGS, "rx_longs"), \ + OCELOT_STAT_ETHTOOL(RX_CLASSIFIED_DROPS, "rx_classified_drops"), \ + OCELOT_STAT_ETHTOOL(RX_RED_PRIO_0, "rx_red_prio_0"), \ + OCELOT_STAT_ETHTOOL(RX_RED_PRIO_1, "rx_red_prio_1"), \ + OCELOT_STAT_ETHTOOL(RX_RED_PRIO_2, "rx_red_prio_2"), \ + OCELOT_STAT_ETHTOOL(RX_RED_PRIO_3, "rx_red_prio_3"), \ + OCELOT_STAT_ETHTOOL(RX_RED_PRIO_4, "rx_red_prio_4"), \ + OCELOT_STAT_ETHTOOL(RX_RED_PRIO_5, "rx_red_prio_5"), \ + OCELOT_STAT_ETHTOOL(RX_RED_PRIO_6, "rx_red_prio_6"), \ + OCELOT_STAT_ETHTOOL(RX_RED_PRIO_7, "rx_red_prio_7"), \ + OCELOT_STAT_ETHTOOL(RX_YELLOW_PRIO_0, "rx_yellow_prio_0"), \ + OCELOT_STAT_ETHTOOL(RX_YELLOW_PRIO_1, "rx_yellow_prio_1"), \ + OCELOT_STAT_ETHTOOL(RX_YELLOW_PRIO_2, "rx_yellow_prio_2"), \ + OCELOT_STAT_ETHTOOL(RX_YELLOW_PRIO_3, "rx_yellow_prio_3"), \ + OCELOT_STAT_ETHTOOL(RX_YELLOW_PRIO_4, "rx_yellow_prio_4"), \ + OCELOT_STAT_ETHTOOL(RX_YELLOW_PRIO_5, "rx_yellow_prio_5"), \ + OCELOT_STAT_ETHTOOL(RX_YELLOW_PRIO_6, "rx_yellow_prio_6"), \ + OCELOT_STAT_ETHTOOL(RX_YELLOW_PRIO_7, "rx_yellow_prio_7"), \ + OCELOT_STAT_ETHTOOL(RX_GREEN_PRIO_0, "rx_green_prio_0"), \ + OCELOT_STAT_ETHTOOL(RX_GREEN_PRIO_1, "rx_green_prio_1"), \ + OCELOT_STAT_ETHTOOL(RX_GREEN_PRIO_2, "rx_green_prio_2"), \ + OCELOT_STAT_ETHTOOL(RX_GREEN_PRIO_3, "rx_green_prio_3"), \ + OCELOT_STAT_ETHTOOL(RX_GREEN_PRIO_4, "rx_green_prio_4"), \ + OCELOT_STAT_ETHTOOL(RX_GREEN_PRIO_5, "rx_green_prio_5"), \ + OCELOT_STAT_ETHTOOL(RX_GREEN_PRIO_6, "rx_green_prio_6"), \ + OCELOT_STAT_ETHTOOL(RX_GREEN_PRIO_7, "rx_green_prio_7"), \ + OCELOT_STAT_ETHTOOL(TX_OCTETS, "tx_octets"), \ + OCELOT_STAT_ETHTOOL(TX_UNICAST, "tx_unicast"), \ + OCELOT_STAT_ETHTOOL(TX_MULTICAST, "tx_multicast"), \ + OCELOT_STAT_ETHTOOL(TX_BROADCAST, "tx_broadcast"), \ + OCELOT_STAT_ETHTOOL(TX_COLLISION, "tx_collision"), \ + OCELOT_STAT_ETHTOOL(TX_DROPS, "tx_drops"), \ + OCELOT_STAT_ETHTOOL(TX_PAUSE, "tx_pause"), \ + OCELOT_STAT_ETHTOOL(TX_64, "tx_frames_below_65_octets"), \ + OCELOT_STAT_ETHTOOL(TX_65_127, "tx_frames_65_to_127_octets"), \ + OCELOT_STAT_ETHTOOL(TX_128_255, "tx_frames_128_255_octets"), \ + OCELOT_STAT_ETHTOOL(TX_256_511, "tx_frames_256_511_octets"), \ + OCELOT_STAT_ETHTOOL(TX_512_1023, "tx_frames_512_1023_octets"), \ + OCELOT_STAT_ETHTOOL(TX_1024_1526, "tx_frames_1024_1526_octets"), \ + OCELOT_STAT_ETHTOOL(TX_1527_MAX, "tx_frames_over_1526_octets"), \ + OCELOT_STAT_ETHTOOL(TX_YELLOW_PRIO_0, "tx_yellow_prio_0"), \ + OCELOT_STAT_ETHTOOL(TX_YELLOW_PRIO_1, "tx_yellow_prio_1"), \ + OCELOT_STAT_ETHTOOL(TX_YELLOW_PRIO_2, "tx_yellow_prio_2"), \ + OCELOT_STAT_ETHTOOL(TX_YELLOW_PRIO_3, "tx_yellow_prio_3"), \ + OCELOT_STAT_ETHTOOL(TX_YELLOW_PRIO_4, "tx_yellow_prio_4"), \ + OCELOT_STAT_ETHTOOL(TX_YELLOW_PRIO_5, "tx_yellow_prio_5"), \ + OCELOT_STAT_ETHTOOL(TX_YELLOW_PRIO_6, "tx_yellow_prio_6"), \ + OCELOT_STAT_ETHTOOL(TX_YELLOW_PRIO_7, "tx_yellow_prio_7"), \ + OCELOT_STAT_ETHTOOL(TX_GREEN_PRIO_0, "tx_green_prio_0"), \ + OCELOT_STAT_ETHTOOL(TX_GREEN_PRIO_1, "tx_green_prio_1"), \ + OCELOT_STAT_ETHTOOL(TX_GREEN_PRIO_2, "tx_green_prio_2"), \ + OCELOT_STAT_ETHTOOL(TX_GREEN_PRIO_3, "tx_green_prio_3"), \ + OCELOT_STAT_ETHTOOL(TX_GREEN_PRIO_4, "tx_green_prio_4"), \ + OCELOT_STAT_ETHTOOL(TX_GREEN_PRIO_5, "tx_green_prio_5"), \ + OCELOT_STAT_ETHTOOL(TX_GREEN_PRIO_6, "tx_green_prio_6"), \ + OCELOT_STAT_ETHTOOL(TX_GREEN_PRIO_7, "tx_green_prio_7"), \ + OCELOT_STAT_ETHTOOL(TX_AGED, "tx_aged"), \ + OCELOT_STAT_ETHTOOL(DROP_LOCAL, "drop_local"), \ + OCELOT_STAT_ETHTOOL(DROP_TAIL, "drop_tail"), \ + OCELOT_STAT_ETHTOOL(DROP_YELLOW_PRIO_0, "drop_yellow_prio_0"), \ + OCELOT_STAT_ETHTOOL(DROP_YELLOW_PRIO_1, "drop_yellow_prio_1"), \ + OCELOT_STAT_ETHTOOL(DROP_YELLOW_PRIO_2, "drop_yellow_prio_2"), \ + OCELOT_STAT_ETHTOOL(DROP_YELLOW_PRIO_3, "drop_yellow_prio_3"), \ + OCELOT_STAT_ETHTOOL(DROP_YELLOW_PRIO_4, "drop_yellow_prio_4"), \ + OCELOT_STAT_ETHTOOL(DROP_YELLOW_PRIO_5, "drop_yellow_prio_5"), \ + OCELOT_STAT_ETHTOOL(DROP_YELLOW_PRIO_6, "drop_yellow_prio_6"), \ + OCELOT_STAT_ETHTOOL(DROP_YELLOW_PRIO_7, "drop_yellow_prio_7"), \ + OCELOT_STAT_ETHTOOL(DROP_GREEN_PRIO_0, "drop_green_prio_0"), \ + OCELOT_STAT_ETHTOOL(DROP_GREEN_PRIO_1, "drop_green_prio_1"), \ + OCELOT_STAT_ETHTOOL(DROP_GREEN_PRIO_2, "drop_green_prio_2"), \ + OCELOT_STAT_ETHTOOL(DROP_GREEN_PRIO_3, "drop_green_prio_3"), \ + OCELOT_STAT_ETHTOOL(DROP_GREEN_PRIO_4, "drop_green_prio_4"), \ + OCELOT_STAT_ETHTOOL(DROP_GREEN_PRIO_5, "drop_green_prio_5"), \ + OCELOT_STAT_ETHTOOL(DROP_GREEN_PRIO_6, "drop_green_prio_6"), \ + OCELOT_STAT_ETHTOOL(DROP_GREEN_PRIO_7, "drop_green_prio_7") + struct ocelot_stats_region { struct list_head node; u32 base; --=20 2.34.1