From patchwork Tue Mar 4 07:21:49 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Wei Fang X-Patchwork-Id: 14000121 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 4EAACC021B8 for ; Tue, 4 Mar 2025 07:42:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:MIME-Version:Content-Type: Content-Transfer-Encoding:References:In-Reply-To:Message-Id:Date:Subject:Cc: To:From:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=0yuIDpk/K+SVkzYqx3SDrMJd/VE7A4/qXTpZASLD06U=; b=Tn+AjDqX1WzJkRDsFl3hcNC2Ki ahMhvR1n7pT3rfurvqHrPloiFdxW+Vc1tsSAwIkL5ykHSkcVbf1FCM1sQx/bJUnGzFunLXAs0hodU felK+leoLsgdshPpIFPM3EwlQFS/Ac/rLwuEGEZB6H1j7Vx88wSXBKNsxqWLWzMRM0ixji6FzgWvw WuHYV5dj6KXV3zgQ2PcS6HSFro0BBnxftxVSHpy5+7kbcA7i22iAO2aCjUkczMwVL99oUzs0ZfQJk 502TmrBmSbtr22i7j/S22tKXSnDQPj/3UPUWD8CACf+fdB+c8jpPNIpNeY7pitcR11GmZX06ufC8m nLgzzxOw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tpMvN-00000003TsX-29Ik; Tue, 04 Mar 2025 07:42:45 +0000 Received: from mail-vi1eur02on2060d.outbound.protection.outlook.com ([2a01:111:f403:2607::60d] helo=EUR02-VI1-obe.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tpMsG-00000003SxO-2XtL for linux-arm-kernel@lists.infradead.org; Tue, 04 Mar 2025 07:39:34 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=YQEniPujKk0dPG9DDRqrtEimBIybLhQO+1WyL/dYvF4BRHosXUWAOLbVVaw/Gb7BAYEF+put3biHCrxlSNaro9ZzIsBfGxIER9J+cF8BEC6JUHXMqDLC7yUdBeUW09smIQBppf5GD+qmDXayJubNvOLaClZK7kPTg0wasac5yYbxeWH0leC9OgGJ+X5wOovqd8QdcQwrTojrxCVMf6v2N/XymTGqBFJfz3MnlLJYycwrUkzkmFvaYg4JVEzbrviKNtfCj+uQZxGCXU3ZfWYqN6NH0xWePwGEt0+OmkoekkNNp2Ux32ST0h7rvhQ8I12nCGe6tHF68cy0i6RHaoiL4Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=0yuIDpk/K+SVkzYqx3SDrMJd/VE7A4/qXTpZASLD06U=; b=Kn+vsHvRT/dBhWI3fH4Vj/n0ee8Ap8PPLIinmV9PWuMqim+js9Ygfo9p7Jen2wN/n+etEWpHZuU/dSSGH2pIjoqqEXQp2yOrETYlKceDa6gQl4KvHTrRc003S6O7N9Sd29BCf0q+DIbaTIpuzzsGfYe+9FRXaP5SxIK5R8BrOZUT29MO87AIGaUIQuQV7Ge/z3rXYxdTcBGbfdnTGJ/w3jrzPnf5OGuZH+EsPw0ZDKRAIO5Jq97VpUSoAGLon2avQcLiuo4Q62vlIyNMuJ7Y3n86sRJN9wXid/navu1fIO4gjmRg/i0/kFQLwhBoSM+z7T26O71PTMRHGNZt3VY7Og== 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=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=0yuIDpk/K+SVkzYqx3SDrMJd/VE7A4/qXTpZASLD06U=; b=H4EemvumrkKtZItx8FJhrFdyLlAu/Mo5jJLgwxeRiET8AG9nvngoaE8Dbu+mOrLezdArLtJb0pjqOpJS/FyZoFyfZGEjWCqGNO2MH1iRfAv2l+yO5wLYIdYUksgi1PoA3mCHjmtVNCYZsIcTcLVuOZ1epf5ARnp5eyDYMKzeKWr8ZsFjMellPE2cP/hOsr8/pGILyfZDNGID3svncH3DJNTXqJ1C7+gVI0ds4g9C5jPMPaDERbDVJCnIhnbNB6gcDbF+sHpDKTa89HdWS1v3BA5N7EXYzMwcNA/1oUjD3bu/nS0/In4Lwre0SMWpr0PUDK6tJvDEV2B0Lw0ZEUEhZQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from PAXPR04MB8510.eurprd04.prod.outlook.com (2603:10a6:102:211::7) by VI2PR04MB11171.eurprd04.prod.outlook.com (2603:10a6:800:29a::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8422.11; Tue, 4 Mar 2025 07:39:23 +0000 Received: from PAXPR04MB8510.eurprd04.prod.outlook.com ([fe80::a7c2:e2fa:8e04:40db]) by PAXPR04MB8510.eurprd04.prod.outlook.com ([fe80::a7c2:e2fa:8e04:40db%5]) with mapi id 15.20.8466.020; Tue, 4 Mar 2025 07:39:23 +0000 From: Wei Fang To: claudiu.manoil@nxp.com, vladimir.oltean@nxp.com, xiaoning.wang@nxp.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com Cc: christophe.leroy@csgroup.eu, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, imx@lists.linux.dev, linuxppc-dev@lists.ozlabs.org, linux-arm-kernel@lists.infradead.org Subject: [PATCH v3 net-next 01/13] net: enetc: add initial netc-lib driver to support NTMP Date: Tue, 4 Mar 2025 15:21:49 +0800 Message-Id: <20250304072201.1332603-2-wei.fang@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250304072201.1332603-1-wei.fang@nxp.com> References: <20250304072201.1332603-1-wei.fang@nxp.com> X-ClientProxiedBy: SG3P274CA0007.SGPP274.PROD.OUTLOOK.COM (2603:1096:4:be::19) To PAXPR04MB8510.eurprd04.prod.outlook.com (2603:10a6:102:211::7) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PAXPR04MB8510:EE_|VI2PR04MB11171:EE_ X-MS-Office365-Filtering-Correlation-Id: ca19a73a-4cf8-4b71-eb84-08dd5aefae5d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|52116014|366016|1800799024|376014|38350700014; X-Microsoft-Antispam-Message-Info: 3vpMTURMTwdo5GPgX95gOWo6PeMJp311BTCxj4ae9ZWptag+GNsaJI9xEPzQA4gWi3VOT9x4IDqR7lgG8xpjsoKEH+2qc6ZLpwj/4QyS311sAGeOOPfZx3JvggfDrBrYy7gFhV41zwbv0dGNikYJgDZPpRMETqWCXTn4/Y6DA+Vxkk5oAuPw2lA8T8UqaeCCwtsr3vxa85IxMfssTOO0xB391jpnzSV7vJd+9Uy9JRywlxP37D2pYlP/M7XWi9IF4bjPVU9M9G7wx0XL3NeoafayNWfJWU31rnyTBC1qJlpX6ovDmvvQUoD8IxPopugOZutoG3X5iDP1LQWp7JW02ONjwPSK+qjHV9E0j0m9BAFQJL3R+m8q5trmTdsfuE72ByC0qj8iyTH2ztAiBzpTGtYRxS3a80+j4os/fS3laJmmtZY7HSQob2hUJbDs+yQKD/ojBYem+oKjoztXvmIcA+o4Y957FxQ+SQcoRo9lDVxf1rWqeuXXNTJmjgvIFLy0zkQ4nrZdlxsMbXhHZeNDgenqUqesgh75VwthuRzeijQiQy9cB0NRjVLE8+8ZneR+LwZXMV43cyruLwzcsm8ACgBwwjZH5lKSNdmRkQi2iCt5Sd5vDSGw9kpWrUd8esllh1P31jVooPBZMqZd94788p6VcDBvdm6vfrXfyima97lnkly49P+Eb/ozL8S7OIhSQjstDmtG7d00GtEH1jLiIz+nBATxzfatCLuviJEQhnoCMbpZmjVjOjtiDTXQnO6g/yPMq/Ta/TX5H2oonL3NML3xEKWtAfWXuIKAYqTpCmg+CVuRF4B4zZuRSXG2CPiXOzPUXdJVI1fIpKF4dhsRU8NR5isVs48/mVJk4edeZkFFGDlFmWbap/t8TzX0/jRjuwhPWN4riRaDxJIJ/PATDGq1zmcz7fizyaQD7iZNKd9fXjaqo5MXydsT5fDC/ObK4ESH1SP8868gUIR3+x5E5NFKsqw8Yr/S/xjJmDXbESLKwgcQXNw4ObNKSc3fRxaQBqYR2LIS1UpsARlyNJ2Q7+c+b3btsBqm1rYS0zNuAOVcay2EDCGi2rEaJUbPD72fN3oP4uLJvB1h1rfMM7T4NbtRg4R//jnpud9WQB7DuWRA1BSM68LpIGurFY2mg2A/LZ2bPyvdPN0IEc2DEDP5I5+yLEqn2ns/PX8TCjyCqz6rX0qs3dsRwgxswgCB1jan332C4UtxI5O8AX4ZQMcHua15jXgqzmZYjWi2Z9hMHFWQ87qeroux+8CAfN8DELi3oGHyG9/Py52UNCskWxLcAYrfO1c8C5xb7J2VAxRpRNlIS1IqpolfDypbpx004Flq21QlIgcfhGrLW4aXM+s92RTSHcxZpwpF7HsPAa7UyLnayEYieU2Q+K7ZhVG+K0zHgzttsMJdFc5ZIxUNY7YIFoAEjduMQM726BWMsTSBfngUbK49jfIY4So2H9ISKQSb X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB8510.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(7416014)(52116014)(366016)(1800799024)(376014)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: Puj+YT317fPGqvgVD6+y2RObgxvH2fJozSIOkKwatQJeKGWISBdvCe6WZTOs6rushEPP3YbBchkW2p6Vihdy5nuw9dUgYZCEEG7TXUlAvb83A8RumLqCRLEfzx6mw5EqtZoh0PUkJDf+3JIst15+/qpsxUoLB5I/VKo2cxw3OjYrjbvvnxjO/3hKfTWFQnRzn2EH0814ENbOiDSnt14gNvZvWqMequC7fCadYb+I+psmuCD9Kz0rn08RVmKXlvg5K6zPALHuSYxK/aqnB+At3xAh+OkN57gboXGYWKS/CTpdRQjlNEGQiEQqq+l018gG7Rg7Cm5YxuwmXu49QiBronPUvvevrayk6lVtoxB9sxqbgeFZl8KG3RBrT6LYKHE0XIfwwJcn1HPtlGHd2PP/KjJAo9Qwh2cBsRtTUF3m3LX2NMYPDUUUNv+LXnZjQTZMokVZbbVYUKRM3aOoAaNCbmyHIAdu/dLuGCtQTx806ifzdS/mZdCA67fv9r42NK1DPqCxWyqK8J2/jSaW/V5XQHzowSMCt6dZUEwAkmtAM4tguqe9sTxOcxsEt++xS4uXfBuPFuluz2Kzvi9lFgc2bG0y4k90O0Qp5Fy2KAm2dnnLVtng5LX847Vlq8mk6PCt/litYu4vB4ijzOd5H73Z3oo1Hhz3ZCb7ZQP1sV/WEiUYKMwe/Z5Nhm+5kG6nNGlKO4jxLDXzZpaPaB8bW4cMvuURAK3HJD4lQjktz0PCv/TcRu+hJde6z9g3Y4LAFuSieKUdGH3ihNImMItArMcugxtjYUPAT99BY/H3IhPjtjWEe6OTajrhekQkwwLgZFS1u9rnaGojJwyT+uEsnTQ5PZB3u+EO5UYuiItfe4xdQnCebdEkWFYB3+1umdRraBzkB1usPhdNh/hRnwdD4apbqEIUYG9PuBjyB6V97YEFhXjqaAJZGfPShqOt/T1e/C8iQ92kVp6j0+KSJOcBNH3Re+nA9pvT6bnEr8xv+nKt7Swf00zD+kLTEFnbodtZlJMuypExMI/AtWvDBF2DmeaNtfUlVjIQsF/VSXZnLCF6fybIRXu6H5Q1FkVecqNK0y4d0W8UbLR36LXA0Rbk68j+1aC7Q+Y10lKWeSs4yuJqK8CoD1NJofLUl6UD8D22wrDpKlrKAoxknNj/PziSGb/kINmF20/MWVUftx/e34vkt8DmDUuwCKQYsNHCZxlxDRVM4rVEjaYYLiZE1qo0PmxdpC7+7xiMieucEhtFEDnQqCie5BIk9koA3JjRg9UqsQUz1mCdLdIl+89aD7lSbB3P6gvBRtc6GIq+t9pPPC9w8Mjp+Sem3HB1XNdAf5ajK/wz1mJVLGTfxQrbYN0ZTMY0j9qh5Y6RLwJPK5vm+qPsl/FaKWMqKdUGyABZtMNVgBHj9ryC3lpNcX16ViHHVt72ixIkGKQIhcVOvfdSKikpidpcC87EjC2wxIvYgtjmn/0VB2jF7QZkFQEkuzeTnhwmoIeHZHz4S/S0pfJGbYtjeg5ivrkDCHMVBFylam/y/xHsixacyAt2xNQvEEkWb1mCXmjF2yXZQYynWjLPKGF9MJZlGhPGknhj52zFx1609VVR X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: ca19a73a-4cf8-4b71-eb84-08dd5aefae5d X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB8510.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Mar 2025 07:39:23.0102 (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: 4/84WWU5P6wB2K0ItUqnbTHJ6KQO+P6q1KYOqLKstwu9z466xBNFFxpWOzdCdrPBWWYKC7pNnCRs5+Ow++ataw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI2PR04MB11171 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250303_233932_823771_DBAC4288 X-CRM114-Status: GOOD ( 25.28 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Some NETC functionality is controlled using control messages sent to the hardware using BD ring interface with 32B descriptor similar to transmit BD ring used on ENETC. This BD ring interface is referred to as command BD ring. It is used to configure functionality where the underlying resources may be shared between different entities or being too large to configure using direct registers. Therefore, a messaging protocol called NETC Table Management Protocol (NTMP) is provided for exchanging configuration and management information between the software and the hardware using the command BD ring interface. For i.MX95, NTMP has been upgraded to version 2.0, which is incompatible with LS1028A, because the message formats have been changed. Therefore, add the netc-lib driver to support NTMP 2.0 to operate various tables. Note that, only MAC address filter table and RSS table are supported at the moment. More tables will be supported in subsequent patches. It is worth mentioning that the purpose of the netc-lib driver is to provide some NTMP-based generic interfaces for ENETC and NETC Switch drivers. Currently, it only supports the configurations of some tables. Interfaces such as tc flower and debugfs will be added in the future. Signed-off-by: Wei Fang --- drivers/net/ethernet/freescale/enetc/Kconfig | 11 + drivers/net/ethernet/freescale/enetc/Makefile | 3 + drivers/net/ethernet/freescale/enetc/ntmp.c | 458 ++++++++++++++++++ .../ethernet/freescale/enetc/ntmp_private.h | 67 +++ include/linux/fsl/ntmp.h | 178 +++++++ 5 files changed, 717 insertions(+) create mode 100644 drivers/net/ethernet/freescale/enetc/ntmp.c create mode 100644 drivers/net/ethernet/freescale/enetc/ntmp_private.h create mode 100644 include/linux/fsl/ntmp.h diff --git a/drivers/net/ethernet/freescale/enetc/Kconfig b/drivers/net/ethernet/freescale/enetc/Kconfig index 6c2779047dcd..94db8e8d0eb3 100644 --- a/drivers/net/ethernet/freescale/enetc/Kconfig +++ b/drivers/net/ethernet/freescale/enetc/Kconfig @@ -15,6 +15,16 @@ config NXP_ENETC_PF_COMMON If compiled as module (M), the module name is nxp-enetc-pf-common. +config NXP_NETC_LIB + tristate "NETC Library" + help + This module provides common functionalities for both ENETC and NETC + Switch, such as NETC Table Management Protocol (NTMP) 2.0, common tc + flower and debugfs interfaces and so on. + + If compiled as module (M), the module name is nxp-netc-lib. + + config FSL_ENETC tristate "ENETC PF driver" depends on PCI_MSI @@ -40,6 +50,7 @@ config NXP_ENETC4 select FSL_ENETC_CORE select FSL_ENETC_MDIO select NXP_ENETC_PF_COMMON + select NXP_NETC_LIB select PHYLINK select DIMLIB help diff --git a/drivers/net/ethernet/freescale/enetc/Makefile b/drivers/net/ethernet/freescale/enetc/Makefile index 6fd27ee4fcd1..707a68e26971 100644 --- a/drivers/net/ethernet/freescale/enetc/Makefile +++ b/drivers/net/ethernet/freescale/enetc/Makefile @@ -6,6 +6,9 @@ fsl-enetc-core-y := enetc.o enetc_cbdr.o enetc_ethtool.o obj-$(CONFIG_NXP_ENETC_PF_COMMON) += nxp-enetc-pf-common.o nxp-enetc-pf-common-y := enetc_pf_common.o +obj-$(CONFIG_NXP_NETC_LIB) += nxp-netc-lib.o +nxp-netc-lib-y := ntmp.o + obj-$(CONFIG_FSL_ENETC) += fsl-enetc.o fsl-enetc-y := enetc_pf.o fsl-enetc-$(CONFIG_PCI_IOV) += enetc_msg.o diff --git a/drivers/net/ethernet/freescale/enetc/ntmp.c b/drivers/net/ethernet/freescale/enetc/ntmp.c new file mode 100644 index 000000000000..df10f2f310c1 --- /dev/null +++ b/drivers/net/ethernet/freescale/enetc/ntmp.c @@ -0,0 +1,458 @@ +// SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause) +/* + * NETC NTMP (NETC Table Management Protocol) 2.0 Library + * Copyright 2025 NXP + */ + +#include +#include +#include + +#include "ntmp_private.h" + +#define NETC_CBDR_TIMEOUT 1000 /* us */ +#define NETC_CBDR_MR_EN BIT(31) + +#define NTMP_BASE_ADDR_ALIGN 128 +#define NTMP_DATA_ADDR_ALIGN 32 + +/* Define NTMP Table ID */ +#define NTMP_MAFT_ID 1 +#define NTMP_RSST_ID 3 + +/* Generic Update Actions for most tables */ +#define NTMP_GEN_UA_CFGEU BIT(0) +#define NTMP_GEN_UA_STSEU BIT(1) + +#define NTMP_ENTRY_ID_SIZE 4 +#define RSST_ENTRY_NUM 64 +#define RSST_STSE_DATA_SIZE(n) ((n) * 8) +#define RSST_CFGE_DATA_SIZE(n) (n) + +int netc_setup_cbdr(struct device *dev, int cbd_num, + struct netc_cbdr_regs *regs, + struct netc_cbdr *cbdr) +{ + size_t size; + + size = cbd_num * sizeof(union netc_cbd) + NTMP_BASE_ADDR_ALIGN; + cbdr->addr_base = dma_alloc_coherent(dev, size, &cbdr->dma_base, + GFP_KERNEL); + if (!cbdr->addr_base) + return -ENOMEM; + + cbdr->dma_size = size; + cbdr->bd_num = cbd_num; + cbdr->regs = *regs; + + /* The base address of the Control BD Ring must be 128 bytes aligned */ + cbdr->dma_base_align = ALIGN(cbdr->dma_base, NTMP_BASE_ADDR_ALIGN); + cbdr->addr_base_align = PTR_ALIGN(cbdr->addr_base, + NTMP_BASE_ADDR_ALIGN); + + cbdr->next_to_clean = 0; + cbdr->next_to_use = 0; + spin_lock_init(&cbdr->ring_lock); + + /* Step 1: Configure the base address of the Control BD Ring */ + netc_write(cbdr->regs.bar0, lower_32_bits(cbdr->dma_base_align)); + netc_write(cbdr->regs.bar1, upper_32_bits(cbdr->dma_base_align)); + + /* Step 2: Configure the producer index register */ + netc_write(cbdr->regs.pir, cbdr->next_to_clean); + + /* Step 3: Configure the consumer index register */ + netc_write(cbdr->regs.cir, cbdr->next_to_use); + + /* Step4: Configure the number of BDs of the Control BD Ring */ + netc_write(cbdr->regs.lenr, cbdr->bd_num); + + /* Step 5: Enable the Control BD Ring */ + netc_write(cbdr->regs.mr, NETC_CBDR_MR_EN); + + return 0; +} +EXPORT_SYMBOL_GPL(netc_setup_cbdr); + +void netc_teardown_cbdr(struct device *dev, struct netc_cbdr *cbdr) +{ + /* Disable the Control BD Ring */ + netc_write(cbdr->regs.mr, 0); + dma_free_coherent(dev, cbdr->dma_size, cbdr->addr_base, + cbdr->dma_base); + memset(cbdr, 0, sizeof(*cbdr)); +} +EXPORT_SYMBOL_GPL(netc_teardown_cbdr); + +static int netc_get_free_cbd_num(struct netc_cbdr *cbdr) +{ + return (cbdr->next_to_clean - cbdr->next_to_use - 1 + + cbdr->bd_num) % cbdr->bd_num; +} + +static union netc_cbd *netc_get_cbd(struct netc_cbdr *cbdr, int index) +{ + return &((union netc_cbd *)(cbdr->addr_base_align))[index]; +} + +static void netc_clean_cbdr(struct netc_cbdr *cbdr) +{ + union netc_cbd *cbd; + int i; + + i = cbdr->next_to_clean; + while (netc_read(cbdr->regs.cir) != i) { + cbd = netc_get_cbd(cbdr, i); + memset(cbd, 0, sizeof(*cbd)); + i = (i + 1) % cbdr->bd_num; + } + + cbdr->next_to_clean = i; +} + +static struct netc_cbdr *netc_select_cbdr(struct netc_cbdrs *cbdrs) +{ + int i; + + for (i = 0; i < cbdrs->cbdr_num; i++) { + if (spin_is_locked(&cbdrs->ring[i].ring_lock)) + continue; + + return &cbdrs->ring[i]; + } + + return &cbdrs->ring[smp_processor_id() % cbdrs->cbdr_num]; +} + +static int netc_xmit_ntmp_cmd(struct netc_cbdrs *cbdrs, union netc_cbd *cbd) +{ + union netc_cbd *cur_cbd; + struct netc_cbdr *cbdr; + int i, err; + u16 status; + u32 val; + + if (cbdrs->cbdr_num == 1) + cbdr = &cbdrs->ring[0]; + else + cbdr = netc_select_cbdr(cbdrs); + + spin_lock_bh(&cbdr->ring_lock); + + if (unlikely(!netc_get_free_cbd_num(cbdr))) + netc_clean_cbdr(cbdr); + + i = cbdr->next_to_use; + cur_cbd = netc_get_cbd(cbdr, i); + *cur_cbd = *cbd; + + /* Update producer index of both software and hardware */ + i = (i + 1) % cbdr->bd_num; + cbdr->next_to_use = i; + dma_wmb(); + netc_write(cbdr->regs.pir, i); + + err = read_poll_timeout_atomic(netc_read, val, val == i, + 10, NETC_CBDR_TIMEOUT, true, + cbdr->regs.cir); + if (unlikely(err)) + goto cbdr_unlock; + + dma_rmb(); + /* Get the writeback command BD, because the caller may need + * to check some other fields of the response header. + */ + *cbd = *cur_cbd; + + /* Check the writeback error status */ + status = le16_to_cpu(cbd->resp_hdr.error_rr) & NTMP_RESP_ERROR; + if (unlikely(status)) { + err = -EIO; + dev_err(cbdrs->dma_dev, "Command BD error: 0x%04x\n", status); + } + + netc_clean_cbdr(cbdr); + dma_wmb(); + +cbdr_unlock: + spin_unlock_bh(&cbdr->ring_lock); + + return err; +} + +static int ntmp_alloc_data_mem(struct ntmp_dma_buf *data, void **buf_align) +{ + void *buf; + + buf = dma_alloc_coherent(data->dev, data->size + NTMP_DATA_ADDR_ALIGN, + &data->dma, GFP_ATOMIC); + if (!buf) + return -ENOMEM; + + data->buf = buf; + *buf_align = PTR_ALIGN(buf, NTMP_DATA_ADDR_ALIGN); + + return 0; +} + +static void ntmp_free_data_mem(struct ntmp_dma_buf *data) +{ + dma_free_coherent(data->dev, data->size + NTMP_DATA_ADDR_ALIGN, + data->buf, data->dma); +} + +static void ntmp_fill_request_headr(union netc_cbd *cbd, dma_addr_t dma, + int len, int table_id, int cmd, + int access_method) +{ + dma_addr_t dma_align; + + memset(cbd, 0, sizeof(*cbd)); + dma_align = ALIGN(dma, NTMP_DATA_ADDR_ALIGN); + cbd->req_hdr.addr = cpu_to_le64(dma_align); + cbd->req_hdr.len = cpu_to_le32(len); + cbd->req_hdr.cmd = cmd; + cbd->req_hdr.access_method = FIELD_PREP(NTMP_ACCESS_METHOD, + access_method); + cbd->req_hdr.table_id = table_id; + cbd->req_hdr.ver_cci_rr = FIELD_PREP(NTMP_HDR_VERSION, + NTMP_HDR_VER2); + /* For NTMP version 2.0 or later version */ + cbd->req_hdr.npf = cpu_to_le32(NTMP_NPF); +} + +static void ntmp_fill_crd(struct common_req_data *crd, + u8 tblv, u8 qa, u16 ua) +{ + crd->update_act = cpu_to_le16(ua); + crd->tblv_qact = NTMP_TBLV_QACT(tblv, qa); +} + +static void ntmp_fill_crd_eid(struct ntmp_req_by_eid *rbe, u8 tblv, + u8 qa, u16 ua, u32 entry_id) +{ + ntmp_fill_crd(&rbe->crd, tblv, qa, ua); + rbe->entry_id = cpu_to_le32(entry_id); +} + +static int ntmp_delete_entry_by_id(struct netc_cbdrs *cbdrs, int tbl_id, + u8 tbl_ver, u32 entry_id, u32 req_len, + u32 resp_len) +{ + struct ntmp_dma_buf data = {.dev = cbdrs->dma_dev}; + struct ntmp_req_by_eid *req; + union netc_cbd cbd; + u32 len; + int err; + + if (entry_id == NTMP_NULL_ENTRY_ID) + return 0; + + /* If the req_len is 0, indicates the requested length is the + * standard length. + */ + if (!req_len) + req_len = sizeof(*req); + + data.size = req_len >= resp_len ? req_len : resp_len; + err = ntmp_alloc_data_mem(&data, (void **)&req); + if (err) + return err; + + ntmp_fill_crd_eid(req, tbl_ver, 0, 0, entry_id); + len = NTMP_LEN(req_len, resp_len); + ntmp_fill_request_headr(&cbd, data.dma, len, tbl_id, + NTMP_CMD_DELETE, NTMP_AM_ENTRY_ID); + + err = netc_xmit_ntmp_cmd(cbdrs, &cbd); + if (err) + dev_err(cbdrs->dma_dev, "Delete table (id: %d) entry failed: %d", + tbl_id, err); + + ntmp_free_data_mem(&data); + + return err; +} + +static int ntmp_query_entry_by_id(struct netc_cbdrs *cbdrs, int tbl_id, + u32 len, struct ntmp_req_by_eid *req, + dma_addr_t dma, bool compare_eid) +{ + struct device *dev = cbdrs->dma_dev; + struct common_resp_query *resp; + int cmd = NTMP_CMD_QUERY; + union netc_cbd cbd; + u32 entry_id; + int err; + + entry_id = le32_to_cpu(req->entry_id); + if (le16_to_cpu(req->crd.update_act)) + cmd = NTMP_CMD_QU; + + /* Request header */ + ntmp_fill_request_headr(&cbd, dma, len, tbl_id, + cmd, NTMP_AM_ENTRY_ID); + + err = netc_xmit_ntmp_cmd(cbdrs, &cbd); + if (err) { + dev_err(dev, "Query table (id: %d) entry failed: %d\n", + tbl_id, err); + return err; + } + + /* For a few tables, the first field of its response data is not + * entry_id, so directly return success. + */ + if (!compare_eid) + return 0; + + resp = (struct common_resp_query *)req; + if (unlikely(le32_to_cpu(resp->entry_id) != entry_id)) { + dev_err(dev, "Table (id: %d) query EID:0x%0x, response EID:0x%x\n", + tbl_id, entry_id, le32_to_cpu(resp->entry_id)); + return -EIO; + } + + return 0; +} + +int ntmp_maft_add_entry(struct netc_cbdrs *cbdrs, u32 entry_id, + struct maft_entry_data *maft) +{ + struct ntmp_dma_buf data = {.dev = cbdrs->dma_dev}; + struct maft_req_add *req; + union netc_cbd cbd; + int err; + + data.size = sizeof(*req); + err = ntmp_alloc_data_mem(&data, (void **)&req); + if (err) + return err; + + /* Set mac address filter table request data buffer */ + ntmp_fill_crd_eid(&req->rbe, cbdrs->tbl.maft_ver, 0, 0, entry_id); + req->keye = maft->keye; + req->cfge = maft->cfge; + + ntmp_fill_request_headr(&cbd, data.dma, NTMP_LEN(data.size, 0), + NTMP_MAFT_ID, NTMP_CMD_ADD, + NTMP_AM_ENTRY_ID); + err = netc_xmit_ntmp_cmd(cbdrs, &cbd); + if (err) + dev_err(cbdrs->dma_dev, "Add MAFT entry failed (%d)", err); + + ntmp_free_data_mem(&data); + + return err; +} +EXPORT_SYMBOL_GPL(ntmp_maft_add_entry); + +int ntmp_maft_query_entry(struct netc_cbdrs *cbdrs, u32 entry_id, + struct maft_entry_data *maft) +{ + struct ntmp_dma_buf data = {.dev = cbdrs->dma_dev}; + struct maft_resp_query *resp; + struct ntmp_req_by_eid *req; + u32 req_len = sizeof(*req); + int err; + + if (entry_id == NTMP_NULL_ENTRY_ID) + return -EINVAL; + + data.size = sizeof(*resp); + err = ntmp_alloc_data_mem(&data, (void **)&req); + if (err) + return err; + + ntmp_fill_crd_eid(req, cbdrs->tbl.maft_ver, 0, 0, entry_id); + err = ntmp_query_entry_by_id(cbdrs, NTMP_MAFT_ID, + NTMP_LEN(req_len, data.size), + req, data.dma, true); + if (err) + goto end; + + resp = (struct maft_resp_query *)req; + maft->keye = resp->keye; + maft->cfge = resp->cfge; + +end: + ntmp_free_data_mem(&data); + + return err; +} +EXPORT_SYMBOL_GPL(ntmp_maft_query_entry); + +int ntmp_maft_delete_entry(struct netc_cbdrs *cbdrs, u32 entry_id) +{ + return ntmp_delete_entry_by_id(cbdrs, NTMP_MAFT_ID, + cbdrs->tbl.maft_ver, + entry_id, 0, 0); +} +EXPORT_SYMBOL_GPL(ntmp_maft_delete_entry); + +int ntmp_rsst_query_or_update_entry(struct netc_cbdrs *cbdrs, u32 *table, + int count, bool query) +{ + struct ntmp_dma_buf data = {.dev = cbdrs->dma_dev}; + struct rsst_req_update *requ; + struct ntmp_req_by_eid *req; + union netc_cbd cbd; + int err, i; + u32 len; + + if (count != RSST_ENTRY_NUM) + /* HW only takes in a full 64 entry table */ + return -EINVAL; + + if (query) + data.size = NTMP_ENTRY_ID_SIZE + RSST_STSE_DATA_SIZE(count) + + RSST_CFGE_DATA_SIZE(count); + else + data.size = struct_size(requ, groups, count); + + err = ntmp_alloc_data_mem(&data, (void **)&req); + if (err) + return err; + + /* Set the request data buffer */ + if (query) { + ntmp_fill_crd_eid(req, cbdrs->tbl.rsst_ver, 0, 0, 0); + len = NTMP_LEN(sizeof(*req), data.size); + ntmp_fill_request_headr(&cbd, data.dma, len, NTMP_RSST_ID, + NTMP_CMD_QUERY, NTMP_AM_ENTRY_ID); + } else { + requ = (struct rsst_req_update *)req; + ntmp_fill_crd_eid(&requ->rbe, cbdrs->tbl.rsst_ver, 0, + NTMP_GEN_UA_CFGEU | NTMP_GEN_UA_STSEU, 0); + for (i = 0; i < count; i++) + requ->groups[i] = (u8)(table[i]); + + len = NTMP_LEN(data.size, 0); + ntmp_fill_request_headr(&cbd, data.dma, len, NTMP_RSST_ID, + NTMP_CMD_UPDATE, NTMP_AM_ENTRY_ID); + } + + err = netc_xmit_ntmp_cmd(cbdrs, &cbd); + if (err) { + dev_err(cbdrs->dma_dev, "%s RSS table entry failed (%d)", + query ? "Query" : "Update", err); + goto end; + } + + if (query) { + u8 *group = (u8 *)req; + + group += NTMP_ENTRY_ID_SIZE + RSST_STSE_DATA_SIZE(count); + for (i = 0; i < count; i++) + table[i] = group[i]; + } + +end: + ntmp_free_data_mem(&data); + + return err; +} +EXPORT_SYMBOL_GPL(ntmp_rsst_query_or_update_entry); + +MODULE_DESCRIPTION("NXP NETC Library"); +MODULE_LICENSE("Dual BSD/GPL"); diff --git a/drivers/net/ethernet/freescale/enetc/ntmp_private.h b/drivers/net/ethernet/freescale/enetc/ntmp_private.h new file mode 100644 index 000000000000..6f2ffbae27d6 --- /dev/null +++ b/drivers/net/ethernet/freescale/enetc/ntmp_private.h @@ -0,0 +1,67 @@ +/* SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause) */ +/* + * NTMP table request and response data buffer formats + * Copyright 2025 NXP + */ + +#ifndef __NTMP_PRIVATE_H +#define __NTMP_PRIVATE_H + +#include + +struct ntmp_dma_buf { + struct device *dev; + size_t size; + void *buf; + dma_addr_t dma; +}; + +#pragma pack(1) + +struct common_req_data { + __le16 update_act; + u8 dbg_opt; + u8 tblv_qact; +#define NTMP_QUERY_ACT GENMASK(3, 0) +#define NTMP_TBL_VER GENMASK(7, 0) +#define NTMP_TBLV_QACT(v, a) (FIELD_PREP(NTMP_TBL_VER, (v)) | \ + ((a) & NTMP_QUERY_ACT)) +}; + +struct common_resp_query { + __le32 entry_id; +}; + +struct common_resp_nq { + __le32 status; +}; + +/* Generic structure for request data by entry ID */ +struct ntmp_req_by_eid { + struct common_req_data crd; + __le32 entry_id; +}; + +/* MAC Address Filter Table Request Data Buffer Format of Add action */ +struct maft_req_add { + struct ntmp_req_by_eid rbe; + struct maft_keye_data keye; + struct maft_cfge_data cfge; +}; + +/* MAC Address Filter Table Response Data Buffer Format of Query action */ +struct maft_resp_query { + __le32 entry_id; + struct maft_keye_data keye; + struct maft_cfge_data cfge; +}; + +/* RSS Table Request Data Buffer Format of Update action */ +struct rsst_req_update { + struct ntmp_req_by_eid rbe; + u8 groups[]; +}; + +#pragma pack() + +#endif diff --git a/include/linux/fsl/ntmp.h b/include/linux/fsl/ntmp.h new file mode 100644 index 000000000000..7259a9277550 --- /dev/null +++ b/include/linux/fsl/ntmp.h @@ -0,0 +1,178 @@ +/* SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause) */ +/* Copyright 2025 NXP */ +#ifndef __NETC_NTMP_H +#define __NETC_NTMP_H + +#include +#include + +#define NTMP_NULL_ENTRY_ID 0xffffffffU +#define NETC_CBDR_BD_NUM 256 + +#pragma pack(1) + +union netc_cbd { + struct { + __le64 addr; + __le32 len; +#define NTMP_RESP_LEN GENMASK(19, 0) +#define NTMP_REQ_LEN GENMASK(31, 20) +#define NTMP_LEN(req, resp) (FIELD_PREP(NTMP_REQ_LEN, (req)) | \ + ((resp) & NTMP_RESP_LEN)) + u8 cmd; +#define NTMP_CMD_DELETE BIT(0) +#define NTMP_CMD_UPDATE BIT(1) +#define NTMP_CMD_QUERY BIT(2) +#define NTMP_CMD_ADD BIT(3) +#define NTMP_CMD_QD (NTMP_CMD_QUERY | NTMP_CMD_DELETE) +#define NTMP_CMD_QU (NTMP_CMD_QUERY | NTMP_CMD_UPDATE) +#define NTMP_CMD_AU (NTMP_CMD_ADD | NTMP_CMD_UPDATE) +#define NTMP_CMD_AQ (NTMP_CMD_ADD | NTMP_CMD_QUERY) +#define NTMP_CMD_AQU (NTMP_CMD_AQ | NTMP_CMD_UPDATE) + u8 access_method; +#define NTMP_ACCESS_METHOD GENMASK(7, 4) +#define NTMP_AM_ENTRY_ID 0 +#define NTMP_AM_EXACT_KEY 1 +#define NTMP_AM_SEARCH 2 +#define NTMP_AM_TERNARY_KEY 3 + u8 table_id; + u8 ver_cci_rr; +#define NTMP_HDR_VERSION GENMASK(5, 0) +#define NTMP_HDR_VER2 2 +#define NTMP_CCI BIT(6) +#define NTMP_RR BIT(7) + __le32 resv[3]; + __le32 npf; +#define NTMP_NPF BIT(15) + } req_hdr; /* NTMP Request Message Header Format */ + + struct { + __le32 resv0[3]; + __le16 num_matched; + __le16 error_rr; +#define NTMP_RESP_ERROR GENMASK(11, 0) +#define NTMP_RESP_RR BIT(15) + __le32 resv1[4]; + } resp_hdr; /* NTMP Response Message Header Format */ +}; + +struct maft_keye_data { + u8 mac_addr[ETH_ALEN]; + __le16 resv; +}; + +struct maft_cfge_data { + __le16 si_bitmap; + __le16 resv; +}; + +#pragma pack() + +struct netc_cbdr_regs { + void __iomem *pir; + void __iomem *cir; + void __iomem *mr; + + void __iomem *bar0; + void __iomem *bar1; + void __iomem *lenr; +}; + +struct netc_tbl_vers { + u8 maft_ver; + u8 rsst_ver; +}; + +struct netc_cbdr { + struct netc_cbdr_regs regs; + + int bd_num; + int next_to_use; + int next_to_clean; + + int dma_size; + void *addr_base; + void *addr_base_align; + dma_addr_t dma_base; + dma_addr_t dma_base_align; + + spinlock_t ring_lock; /* Avoid race condition */ +}; + +struct netc_cbdrs { + int cbdr_num; /* number of control BD ring */ + int cbdr_size; /* number of BDs per control BD ring */ + struct device *dma_dev; + struct netc_cbdr *ring; + struct netc_tbl_vers tbl; +}; + +enum netc_dev_type { + NETC_DEV_ENETC, + NETC_DEV_SWITCH +}; + +struct ntmp_priv { + enum netc_dev_type dev_type; + struct netc_cbdrs cbdrs; +}; + +struct maft_entry_data { + struct maft_keye_data keye; + struct maft_cfge_data cfge; +}; + +#if IS_ENABLED(CONFIG_NXP_NETC_LIB) +int netc_setup_cbdr(struct device *dev, int cbd_num, + struct netc_cbdr_regs *regs, + struct netc_cbdr *cbdr); +void netc_teardown_cbdr(struct device *dev, struct netc_cbdr *cbdr); + +/* NTMP APIs */ +int ntmp_maft_add_entry(struct netc_cbdrs *cbdrs, u32 entry_id, + struct maft_entry_data *maft); +int ntmp_maft_query_entry(struct netc_cbdrs *cbdrs, u32 entry_id, + struct maft_entry_data *maft); +int ntmp_maft_delete_entry(struct netc_cbdrs *cbdrs, u32 entry_id); +int ntmp_rsst_query_or_update_entry(struct netc_cbdrs *cbdrs, + u32 *table, int count, bool query); +#else +static inline int netc_setup_cbdr(struct device *dev, int cbd_num, + struct netc_cbdr_regs *regs, + struct netc_cbdr *cbdr) +{ + return 0; +} + +static inline void netc_teardown_cbdr(struct device *dev, + struct netc_cbdr *cbdr) +{ +} + +static inline int ntmp_maft_add_entry(struct netc_cbdrs *cbdrs, u32 entry_id, + struct maft_entry_data *maft) +{ + return 0; +} + +static inline int ntmp_maft_query_entry(struct netc_cbdrs *cbdrs, u32 entry_id, + struct maft_entry_data *maft) +{ + return 0; +} + +static inline int ntmp_maft_delete_entry(struct netc_cbdrs *cbdrs, u32 entry_id) +{ + return 0; +} + +static inline int ntmp_rsst_query_or_update_entry(struct netc_cbdrs *cbdrs, + u32 *table, int count, + bool query) +{ + return 0; +} + +#endif + +#endif From patchwork Tue Mar 4 07:21:50 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Wei Fang X-Patchwork-Id: 14000122 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 4CBF1C021B8 for ; Tue, 4 Mar 2025 07:44:29 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:MIME-Version: Content-Transfer-Encoding:Content-Type:References:In-Reply-To:Message-Id:Date :Subject:Cc:To:From:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=pVu1LEIcqch9GsCvEkaQD5P/yYCQ+BiFa0HGY+97HpY=; b=fhHj1jHFH3JKxrHFPAWmpbzV5V 9IM3TiKR4kg/+6wvSKa7jr6CnVPtB8Uvl2PI2Ak7MaSYKftOOtpOyJaO4KKmP4m2/mpKSfAzwd8hQ n4Rs2Ka60m2Wz+6JEQfbuwpI/uX1wXrnnJQuVelg6MRGlJPlbiY76c0XtvWlqVCV4k9FIL0rdcg8L no4j5xPi+tEEWmg9p/yZwdhIBKDlHRc/SXfIg/24t00BHG1EBzEH1Q3GHq9g4BB4w3zDPlTa+AUKq gPkCVSmNgA2bdx4FSTDHYmln/bXEliy9mpYijzLsQLk24MdoE5rOTCY8+8+NDeu0Mxjb34L+SBrLb lx/Fv1/w==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tpMww-00000003UEW-15hY; Tue, 04 Mar 2025 07:44:22 +0000 Received: from mail-vi1eur02on2060d.outbound.protection.outlook.com ([2a01:111:f403:2607::60d] helo=EUR02-VI1-obe.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tpMsI-00000003SxO-1aZl for linux-arm-kernel@lists.infradead.org; Tue, 04 Mar 2025 07:39:35 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=GZapaxUUvF4ld8fvGOPCoeLtYX1ZwDaeFy4iqAN76WqAFUTOnZOSHHa0PBkjN4lnKMgtUv0Pyv5rILOl2MtnDLIOaxqYiI7J2RUkrl9FUvhqzpxgIwf4/mCgVv6vXeStOaZrJPixroKqrZPUr0uy+2iUDMuALzkmgia0Uaaq40SmwEehBewhLPEorpmq0j5ugGUro6lSXnEdi5ZHhJCUkxCdv4hdnwz61IrL/4TETljG4679sZBb6MC/QW84FETbTf+WeZ4SWZIrp5anGjsQH1RGWU0WDCPrpKE4awC9OTNprlX7Dku9wp02WmlUHT6+xQ1FL/vaIlyzwzVV1OLFfQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=pVu1LEIcqch9GsCvEkaQD5P/yYCQ+BiFa0HGY+97HpY=; b=Jy8+ta0pDvHiVNDVRoOQGFhtfXIqDWM4IRtnwCAWizo10PE5jlQpeKfISN9b+158Lsmn1/ktaZ96S1I6+TtKkU/dpUFTxTx0zsHI0KkgQznfVwasierTTLrX9idsYAIA8R9Oz9QIOu91Ko8Puk4KCihClEwLZVTQIIlaAljFlC/VWFGA2oiQIcm5zTm6fb0DZB13WYMUI+8HPJQLNhvweZv4tRlOTb+Z2yVUzVDoFV9Ew49pVyNGXfy1luCy0hDbDisWwJlez3g3BZAJeTqa+F81LvEFTZkXJLcgRD7T+WbSDvLVEN9OwCdJO5OBPx0FC0AH30+NneRaScvpmPdkag== 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=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=pVu1LEIcqch9GsCvEkaQD5P/yYCQ+BiFa0HGY+97HpY=; b=JviP0lY0jojWRR2Mj3UYKVenOyhlPNRyOvDDqn8W29GHMJh8AxnJK0jCH8Jy6giv+QxjPem/dEqAyU9W2v3aGIyP33p4baZE1eOzaHBmLz1am+Lol75cd09b70Wx5r9jnEZKofovcjvTOZYUXfbPFNS+BohpLdcuBl8OIUhUR+VIAGpaI5DjGAInc05edYhvRytkNetPGNtKYshONd9vNdqA7ZmUteaczq3B1Volf8LoHzdITM4dvU3esSdheiTBlZYt8fLHAMoE78hXVaBIWhFtuKdtvs/QdHTuGPOLOciJqOrDv6NwUjTajRI0U06LNzW3CLPyNTPJvOImsn4hXg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from PAXPR04MB8510.eurprd04.prod.outlook.com (2603:10a6:102:211::7) by VI2PR04MB11171.eurprd04.prod.outlook.com (2603:10a6:800:29a::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8422.11; Tue, 4 Mar 2025 07:39:27 +0000 Received: from PAXPR04MB8510.eurprd04.prod.outlook.com ([fe80::a7c2:e2fa:8e04:40db]) by PAXPR04MB8510.eurprd04.prod.outlook.com ([fe80::a7c2:e2fa:8e04:40db%5]) with mapi id 15.20.8466.020; Tue, 4 Mar 2025 07:39:27 +0000 From: Wei Fang To: claudiu.manoil@nxp.com, vladimir.oltean@nxp.com, xiaoning.wang@nxp.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com Cc: christophe.leroy@csgroup.eu, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, imx@lists.linux.dev, linuxppc-dev@lists.ozlabs.org, linux-arm-kernel@lists.infradead.org Subject: [PATCH v3 net-next 02/13] net: enetc: add command BD ring support for i.MX95 ENETC Date: Tue, 4 Mar 2025 15:21:50 +0800 Message-Id: <20250304072201.1332603-3-wei.fang@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250304072201.1332603-1-wei.fang@nxp.com> References: <20250304072201.1332603-1-wei.fang@nxp.com> X-ClientProxiedBy: SG3P274CA0007.SGPP274.PROD.OUTLOOK.COM (2603:1096:4:be::19) To PAXPR04MB8510.eurprd04.prod.outlook.com (2603:10a6:102:211::7) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PAXPR04MB8510:EE_|VI2PR04MB11171:EE_ X-MS-Office365-Filtering-Correlation-Id: 05efb85e-1129-4f78-1a92-08dd5aefb141 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|52116014|366016|1800799024|376014|38350700014; X-Microsoft-Antispam-Message-Info: HZPvM2MyJhKl+0Tqh3sLS9qvks32gbVK1H0Y8D1U0QV4jIGxGiBc99qWd5P0UaMyyXDH6ixHVgcntPcknIm87GZfz2H4F1HLu901AmqszVRIeFfoRGrSZ9r5OLxTNc7RU3VfWuSPixVXgNYW8qgGuIRvb13bcVo3Q2tsTmWJVxisKStXGGDLtzZIGO4rKrEI5ippA08Ghg/cii3kBu1BvjBVGQro8h2XJ/S7le4dVjaKYV1dqG750YxpoCsI6Ayr8iERiBRt9ykn/qRrBkRsosPaCZk0TB975j2NL2vr9S5WlXP3lv6ywYn0gMDcqbpiaQjmqBxVttcS5s2+tvfuI3gIVYsElwLCZrjGmCHiBOPHMUkTgHoVgxR2rMbyLnWWfX0cHtSG2X0YXzHIkmpIbBapV51y5sGv/zndA3+4BJWVwYXqZ4+9KdhsRWNCNpIj7bwe23d2cVtnPfmLzMsJhvC+177/6LjnVbPGQYh0EeXFv4bXcwLBunFXYVvGKqggjcKisJZN6BK9wA/A27YByYeZ0eyoc+H98mbA4SylhYfKIt94fJgZ88dVCOjZVuQuRDIcJTp/7MY7cTMuyGwEXGFEnqTe4VtSNyCiEIugiwj7/zZ2kY6BPa9PdI/ZSBFsriv584GDyCM85F3T1D7zDpHiK0sFmO9TkJtp8TJgOxbueFQMiM7PKXTrsYZobi7cw2pry1CHH4QOAWz6ftH4DfHt5a/hNfNuTDoULQIEdd/kzZIXYKueiPr/DX8jPbAk3ClUCt+CijrlRCCoyv1Z3OtyEuVS+dvP5L0vCi7n8iiigJZ6iSIv+/QBPCfhFPEF5xUyD+Xmvr2nunxLoRlkNMm8Zhe0xctaF8XJs6Tmc6qjrHAhZOFl0buJhR5Q59rBqR9rtG+Qevi2EvEOBc26J6eKnhnP9O6pCeVglNkh628XVAhHH/7/WdQzpVi6G2ttsdjvN29ipYGTDk9qzRTdUqH7fGS1I3JAVcCWGF04iAZVq/M5BhX5GukWOztLxcs1+JIPdXObMJL0MfXbtAMMXwp646AH6HOG3KmsutjYjFAWeMgqKl+Z14GMmsZMJBxX+njHr/9VWLM0FcaIdc8lRg3hA+sXtxKvsHI0z8WbYHlqJ2hHS8RFQWCR0qTEu1Llb51nEoAp9TF3qqzkwHBftRs9MpPR9J81vmKMedMYPUE2PPomVl4RtwsR1kdE7SQXk12vbvK37TD4FSnJk2jSwDdEIvnF3UUfPJ4ErsG4TEi1OFalwwHBr79mnuTBIcUHIGyuB/qOIC/IG4JtHdLaLM6p4/ST1N51AT1EUGs/AeZJ2w+mtbrDm3oO4cgHsLTSxAYfgDOqm+L4vWNqRQcrM0WjGiMXcz9vgOyh2Bd/DFfYsoQTIgGB8X0E49CdDJgiXURsjhq/YPQR9S4CPebJK/QWK0RAK3cjed0f2PHlBdupwrt1Bv1OG9xg4dXG4E88 X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB8510.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(7416014)(52116014)(366016)(1800799024)(376014)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: hie64xLXfhDq0GzMcob9MYlrndiXMLX681nI72amIeCwZUOSCTU/UyCgZy4ZD4Rn+0KQsACQ9MtPpibOlQ6by80T4LHEjBO+VrzybP41ArlX9FPBBbbGhXZ4fkkXuxqKuh5ffNp704YeeW/Q+cWBThDUBppamPZkjSh7bdKuMf2mkM1Vw8DttCANnJ76WLmJvhpqEZsyqxPnabWOfs21kKJj2FgJnHO+1yIXELnt6OdJveItwvaJ3eQf6SF8xMoP+Mkr55BXtStkx8In60fhVydywv/jWLW/camvJoMgQxxjuKj8+RluNZU+bJn6UUnMJhaF6ovMFNSp8KjdI+VYV4aM6bFjtdKliS0FXBegQL1csgyFlXFHjd5DgEq//r7ki4iaDcvJCMNKPF35Y39/mK8APEf4W7LuzEi1xTJq7DYFZFoljjBhG3Ei7KCa4sTHKCe+R67ZN/ZsUjcn+EbrEx46vMhf4Csf8PXj5bDto5q9jl8+DbZ1M2CW+uDndF662cIo5VUf8YSpeSKWozt2Cf89lV5mMpcjRpd5DjJygleqxqyz0OtX64L6AaThq2Wzq9DKiDU7klDOeQ6IX9lSa2RQcbK4fRZKsDjNmqAvJEhzHd50FokS040PwvcBzyj0kFBYp7XOmxwB9GAeqBNqhPWf/5cn/mSypP7+ezHPTHlK5kAFTNhgvlhyRar36OuaiH/wT1xCi+LtvqCJ3pmj8uFJvXRrWT/1tIF+wTGoj4C75XGeHmi+ddpGo4SxewHjsBL5C5nOoHscFCmGJZELcwYmAIDU7uAxJeNUQHA9V7XYKAEB6wGssMastU9JxQt/ow62mN1hH4qBbo74rA976vPvGSCQ6RyOcqCC9v0s8QP1ZmFkox8Jftsf0akdu75MN9cchjUpg1/v44KJYiMqN8OIn5P8DP1Ma72gLrYc9WawojOWAIlkDFb+TmYfU2jE6TUo7/wtmUDT+uDcfVrBmpW3IISIz4KGua47dTZ58y5YGLm4KjboPvEIe8BdMnpy6g8OO7JgWI/rS5htW2wnboNF6TQXu+tqfII2gzopdoHlOy6iRV7QnqXvJF9v38191RTokQSKRH5ZM788sWxUyoBp8On0QLPoOKul7oLmLFwiOgoRzpbFR86VxjT6XwDc/u5UxaMsla/EW46ScLTEF7elvYrYqYhu05jWTlcZeJPAM6tDAvIYwwKCzEu7/SQCsbB4J1DOZCHhlqgc/ay5mT5+ZH3D9YjGfHK1jDy6yVYW1f87g9xSH76voL9BH4awNyB66S+ArEBUt1f2viyp4i6DI0+wdVWMfJLcRPDp49Ru2/a9LW2Y95xbZ9/JH4HXagHPncTJ1nlQrmPhDKAO7W/rxQvLIQtfCfjK1N1EMmq8qfXyrF9WChF588CtEas5c8oj0lo+K3RDhgymHjVULsSZTBOXcKlSQa9wjhTQjuiMj3MdiSyfgj76S+lzXZ4WSXDV5Dl6yJU2c4ZOXBHxdXnMx+SLwzHC7LF+kCmS6vqs8d7dbb5mO6hnKsf1SOnKCl9c9Zj8D3me5xlj2IVVQV9He8u0AIT7Sl3wG7gYYfhRTwH8Lrxx/g6unbW36PVS X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 05efb85e-1129-4f78-1a92-08dd5aefb141 X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB8510.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Mar 2025 07:39:27.7088 (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: 1Hz9oA5vLgz4Usu6yQwCn3lE55vrsRwRBTTqVDI7Wqfm2k04oYYdjmmGCJDWUfkN8tBElODFEvB/e1srZ/kvCg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI2PR04MB11171 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250303_233934_425450_F162CA0C X-CRM114-Status: GOOD ( 23.17 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org The command BD ring is used to configure functionality where the underlying resources may be shared between different entities or being too large to configure using direct registers (such as lookup tables). Because the command BD and table formats of i.MX95 and LS1028A are very different, the software processing logic is also different. In order to ensure driver compatibility, struct enetc_si_ops is introduced. This structure defines some hooks shared by VSI and PSI. Different hardware driver will register different hooks, For example, setup_cbdr() is used to initialize the command BD ring, and teardown_cbdr() is used to free the command BD ring. Signed-off-by: Wei Fang --- drivers/net/ethernet/freescale/enetc/enetc.h | 27 +++++++-- .../net/ethernet/freescale/enetc/enetc4_pf.c | 47 +++++++++++++++- .../net/ethernet/freescale/enetc/enetc_cbdr.c | 55 +++++++++++++++++-- .../net/ethernet/freescale/enetc/enetc_pf.c | 13 +++-- .../net/ethernet/freescale/enetc/enetc_vf.c | 13 +++-- 5 files changed, 136 insertions(+), 19 deletions(-) diff --git a/drivers/net/ethernet/freescale/enetc/enetc.h b/drivers/net/ethernet/freescale/enetc/enetc.h index 4ad4eb5c5a74..4ff0957e69be 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc.h +++ b/drivers/net/ethernet/freescale/enetc/enetc.h @@ -8,6 +8,7 @@ #include #include #include +#include #include #include #include @@ -266,6 +267,19 @@ struct enetc_platform_info { const struct enetc_drvdata *data; }; +struct enetc_si; + +/* + * This structure defines the some common hooks for ENETC PSI and VSI. + * In addition, since VSI only uses the struct enetc_si as its private + * driver data, so this structure also define some hooks specifically + * for VSI. For VSI-specific hooks, the format is ‘vf_*()’. + */ +struct enetc_si_ops { + int (*setup_cbdr)(struct enetc_si *si); + void (*teardown_cbdr)(struct enetc_si *si); +}; + /* PCI IEP device data */ struct enetc_si { struct pci_dev *pdev; @@ -274,7 +288,10 @@ struct enetc_si { struct net_device *ndev; /* back ref. */ - struct enetc_cbdr cbd_ring; + union { + struct enetc_cbdr cbd_ring; /* Only ENETC 1.0 */ + struct ntmp_priv ntmp; /* ENETC 4.1 and later */ + }; int num_rx_rings; /* how many rings are available in the SI */ int num_tx_rings; @@ -284,6 +301,7 @@ struct enetc_si { u16 revision; int hw_features; const struct enetc_drvdata *drvdata; + const struct enetc_si_ops *ops; }; #define ENETC_SI_ALIGN 32 @@ -490,9 +508,10 @@ void enetc_mm_link_state_update(struct enetc_ndev_priv *priv, bool link); void enetc_mm_commit_preemptible_tcs(struct enetc_ndev_priv *priv); /* control buffer descriptor ring (CBDR) */ -int enetc_setup_cbdr(struct device *dev, struct enetc_hw *hw, int bd_count, - struct enetc_cbdr *cbdr); -void enetc_teardown_cbdr(struct enetc_cbdr *cbdr); +int enetc_setup_cbdr(struct enetc_si *si); +void enetc_teardown_cbdr(struct enetc_si *si); +int enetc4_setup_cbdr(struct enetc_si *si); +void enetc4_teardown_cbdr(struct enetc_si *si); int enetc_set_mac_flt_entry(struct enetc_si *si, int index, char *mac_addr, int si_map); int enetc_clear_mac_flt_entry(struct enetc_si *si, int index); diff --git a/drivers/net/ethernet/freescale/enetc/enetc4_pf.c b/drivers/net/ethernet/freescale/enetc/enetc4_pf.c index 73ac8c6afb3a..63001379f0a0 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc4_pf.c +++ b/drivers/net/ethernet/freescale/enetc/enetc4_pf.c @@ -260,6 +260,23 @@ static void enetc4_configure_port(struct enetc_pf *pf) enetc4_enable_trx(pf); } +static int enetc4_init_ntmp_priv(struct enetc_si *si) +{ + struct ntmp_priv *ntmp = &si->ntmp; + + ntmp->dev_type = NETC_DEV_ENETC; + + /* For ENETC 4.1, all table versions are 0 */ + memset(&ntmp->cbdrs.tbl, 0, sizeof(ntmp->cbdrs.tbl)); + + return si->ops->setup_cbdr(si); +} + +static void enetc4_free_ntmp_priv(struct enetc_si *si) +{ + si->ops->teardown_cbdr(si); +} + static int enetc4_pf_init(struct enetc_pf *pf) { struct device *dev = &pf->si->pdev->dev; @@ -272,11 +289,22 @@ static int enetc4_pf_init(struct enetc_pf *pf) return err; } + err = enetc4_init_ntmp_priv(pf->si); + if (err) { + dev_err(dev, "Failed to init CBDR\n"); + return err; + } + enetc4_configure_port(pf); return 0; } +static void enetc4_pf_free(struct enetc_pf *pf) +{ + enetc4_free_ntmp_priv(pf->si); +} + static const struct net_device_ops enetc4_ndev_ops = { .ndo_open = enetc_open, .ndo_stop = enetc_close, @@ -688,6 +716,11 @@ static void enetc4_pf_netdev_destroy(struct enetc_si *si) free_netdev(ndev); } +static const struct enetc_si_ops enetc4_psi_ops = { + .setup_cbdr = enetc4_setup_cbdr, + .teardown_cbdr = enetc4_teardown_cbdr, +}; + static int enetc4_pf_probe(struct pci_dev *pdev, const struct pci_device_id *ent) { @@ -712,6 +745,7 @@ static int enetc4_pf_probe(struct pci_dev *pdev, "Couldn't map PF only space\n"); si->revision = enetc_get_ip_revision(&si->hw); + si->ops = &enetc4_psi_ops; err = enetc_get_driver_data(si); if (err) return dev_err_probe(dev, err, @@ -728,14 +762,25 @@ static int enetc4_pf_probe(struct pci_dev *pdev, enetc_get_si_caps(si); - return enetc4_pf_netdev_create(si); + err = enetc4_pf_netdev_create(si); + if (err) + goto err_netdev_create; + + return 0; + +err_netdev_create: + enetc4_pf_free(pf); + + return err; } static void enetc4_pf_remove(struct pci_dev *pdev) { struct enetc_si *si = pci_get_drvdata(pdev); + struct enetc_pf *pf = enetc_si_priv(si); enetc4_pf_netdev_destroy(si); + enetc4_pf_free(pf); } static const struct pci_device_id enetc4_pf_id_table[] = { diff --git a/drivers/net/ethernet/freescale/enetc/enetc_cbdr.c b/drivers/net/ethernet/freescale/enetc/enetc_cbdr.c index 20bfdf7fb4b4..4e5125331d7b 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc_cbdr.c +++ b/drivers/net/ethernet/freescale/enetc/enetc_cbdr.c @@ -3,10 +3,12 @@ #include "enetc.h" -int enetc_setup_cbdr(struct device *dev, struct enetc_hw *hw, int bd_count, - struct enetc_cbdr *cbdr) +int enetc_setup_cbdr(struct enetc_si *si) { - int size = bd_count * sizeof(struct enetc_cbd); + int size = ENETC_CBDR_DEFAULT_SIZE * sizeof(struct enetc_cbd); + struct enetc_cbdr *cbdr = &si->cbd_ring; + struct device *dev = &si->pdev->dev; + struct enetc_hw *hw = &si->hw; cbdr->bd_base = dma_alloc_coherent(dev, size, &cbdr->bd_dma_base, GFP_KERNEL); @@ -23,7 +25,7 @@ int enetc_setup_cbdr(struct device *dev, struct enetc_hw *hw, int bd_count, cbdr->next_to_clean = 0; cbdr->next_to_use = 0; cbdr->dma_dev = dev; - cbdr->bd_count = bd_count; + cbdr->bd_count = ENETC_CBDR_DEFAULT_SIZE; cbdr->pir = hw->reg + ENETC_SICBDRPIR; cbdr->cir = hw->reg + ENETC_SICBDRCIR; @@ -46,13 +48,45 @@ int enetc_setup_cbdr(struct device *dev, struct enetc_hw *hw, int bd_count, } EXPORT_SYMBOL_GPL(enetc_setup_cbdr); -void enetc_teardown_cbdr(struct enetc_cbdr *cbdr) +int enetc4_setup_cbdr(struct enetc_si *si) { - int size = cbdr->bd_count * sizeof(struct enetc_cbd); + struct netc_cbdrs *cbdrs = &si->ntmp.cbdrs; + struct device *dev = &si->pdev->dev; + struct enetc_hw *hw = &si->hw; + struct netc_cbdr_regs regs; + + cbdrs->cbdr_num = 1; + cbdrs->cbdr_size = NETC_CBDR_BD_NUM; + cbdrs->dma_dev = dev; + cbdrs->ring = devm_kcalloc(dev, cbdrs->cbdr_num, + sizeof(struct netc_cbdr), GFP_KERNEL); + if (!cbdrs->ring) + return -ENOMEM; + + /* set CBDR cache attributes */ + enetc_wr(hw, ENETC_SICAR2, + ENETC_SICAR_RD_COHERENT | ENETC_SICAR_WR_COHERENT); + + regs.pir = hw->reg + ENETC_SICBDRPIR; + regs.cir = hw->reg + ENETC_SICBDRCIR; + regs.mr = hw->reg + ENETC_SICBDRMR; + regs.bar0 = hw->reg + ENETC_SICBDRBAR0; + regs.bar1 = hw->reg + ENETC_SICBDRBAR1; + regs.lenr = hw->reg + ENETC_SICBDRLENR; + + return netc_setup_cbdr(dev, cbdrs->cbdr_size, ®s, cbdrs->ring); +} +EXPORT_SYMBOL_GPL(enetc4_setup_cbdr); + +void enetc_teardown_cbdr(struct enetc_si *si) +{ + struct enetc_cbdr *cbdr = &si->cbd_ring; + int size; /* disable ring */ enetc_wr_reg(cbdr->mr, 0); + size = cbdr->bd_count * sizeof(struct enetc_cbd); dma_free_coherent(cbdr->dma_dev, size, cbdr->bd_base, cbdr->bd_dma_base); cbdr->bd_base = NULL; @@ -60,6 +94,15 @@ void enetc_teardown_cbdr(struct enetc_cbdr *cbdr) } EXPORT_SYMBOL_GPL(enetc_teardown_cbdr); +void enetc4_teardown_cbdr(struct enetc_si *si) +{ + struct netc_cbdrs *cbdrs = &si->ntmp.cbdrs; + + netc_teardown_cbdr(cbdrs->dma_dev, cbdrs->ring); + cbdrs->dma_dev = NULL; +} +EXPORT_SYMBOL_GPL(enetc4_teardown_cbdr); + static void enetc_clean_cbdr(struct enetc_cbdr *ring) { struct enetc_cbd *dest_cbd; diff --git a/drivers/net/ethernet/freescale/enetc/enetc_pf.c b/drivers/net/ethernet/freescale/enetc/enetc_pf.c index 203862ec1114..a214749a4af6 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc_pf.c +++ b/drivers/net/ethernet/freescale/enetc/enetc_pf.c @@ -939,6 +939,11 @@ static int enetc_pf_register_with_ierb(struct pci_dev *pdev) return enetc_ierb_register_pf(ierb_pdev, pdev); } +static const struct enetc_si_ops enetc_psi_ops = { + .setup_cbdr = enetc_setup_cbdr, + .teardown_cbdr = enetc_teardown_cbdr, +}; + static struct enetc_si *enetc_psi_create(struct pci_dev *pdev) { struct enetc_si *si; @@ -957,6 +962,7 @@ static struct enetc_si *enetc_psi_create(struct pci_dev *pdev) goto out_pci_remove; } + si->ops = &enetc_psi_ops; si->revision = enetc_get_ip_revision(&si->hw); err = enetc_get_driver_data(si); if (err) { @@ -964,8 +970,7 @@ static struct enetc_si *enetc_psi_create(struct pci_dev *pdev) goto out_pci_remove; } - err = enetc_setup_cbdr(&pdev->dev, &si->hw, ENETC_CBDR_DEFAULT_SIZE, - &si->cbd_ring); + err = si->ops->setup_cbdr(si); if (err) goto out_pci_remove; @@ -984,7 +989,7 @@ static struct enetc_si *enetc_psi_create(struct pci_dev *pdev) return si; out_teardown_cbdr: - enetc_teardown_cbdr(&si->cbd_ring); + si->ops->teardown_cbdr(si); out_pci_remove: enetc_pci_remove(pdev); out: @@ -995,7 +1000,7 @@ static void enetc_psi_destroy(struct pci_dev *pdev) { struct enetc_si *si = pci_get_drvdata(pdev); - enetc_teardown_cbdr(&si->cbd_ring); + si->ops->teardown_cbdr(si); enetc_pci_remove(pdev); } diff --git a/drivers/net/ethernet/freescale/enetc/enetc_vf.c b/drivers/net/ethernet/freescale/enetc/enetc_vf.c index 3768752b6008..d7d9a720069b 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc_vf.c +++ b/drivers/net/ethernet/freescale/enetc/enetc_vf.c @@ -162,6 +162,11 @@ static void enetc_vf_netdev_setup(struct enetc_si *si, struct net_device *ndev, enetc_load_primary_mac_addr(&si->hw, ndev); } +static const struct enetc_si_ops enetc_vsi_ops = { + .setup_cbdr = enetc_setup_cbdr, + .teardown_cbdr = enetc_teardown_cbdr, +}; + static int enetc_vf_probe(struct pci_dev *pdev, const struct pci_device_id *ent) { @@ -176,6 +181,7 @@ static int enetc_vf_probe(struct pci_dev *pdev, si = pci_get_drvdata(pdev); si->revision = ENETC_REV_1_0; + si->ops = &enetc_vsi_ops; err = enetc_get_driver_data(si); if (err) { dev_err_probe(&pdev->dev, err, @@ -198,8 +204,7 @@ static int enetc_vf_probe(struct pci_dev *pdev, enetc_init_si_rings_params(priv); - err = enetc_setup_cbdr(priv->dev, &si->hw, ENETC_CBDR_DEFAULT_SIZE, - &si->cbd_ring); + err = si->ops->setup_cbdr(si); if (err) goto err_setup_cbdr; @@ -235,7 +240,7 @@ static int enetc_vf_probe(struct pci_dev *pdev, err_alloc_msix: enetc_free_si_resources(priv); err_alloc_si_res: - enetc_teardown_cbdr(&si->cbd_ring); + si->ops->teardown_cbdr(si); err_setup_cbdr: si->ndev = NULL; free_netdev(ndev); @@ -256,7 +261,7 @@ static void enetc_vf_remove(struct pci_dev *pdev) enetc_free_msix(priv); enetc_free_si_resources(priv); - enetc_teardown_cbdr(&si->cbd_ring); + si->ops->teardown_cbdr(si); free_netdev(si->ndev); From patchwork Tue Mar 4 07:21:51 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Wei Fang X-Patchwork-Id: 14000123 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id A58CBC021B8 for ; Tue, 4 Mar 2025 07:46:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:MIME-Version:Content-Type: Content-Transfer-Encoding:References:In-Reply-To:Message-Id:Date:Subject:Cc: To:From:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=b6NCk0/fRUssINj2yqGY7VahHSG9G3UMOJV47aDiwfI=; b=vXjqpmEu9IS+HoxRMttJVGkNbr bu5TGv5uVMpNOxoXnXiqsAf1AqgRXTHb4jLHcxspDWpGUCXbb0BzTvSR8g60NBlvE7X+RpXuk5uln htYfdU5Jhb8YYSAfekuKNpkU6ud7NlV+jzxKQQQ894vHMrpzvaTtSNbE+1P0mxvvRWXRIN59+JPov 4WzW2iuPXAEoNZveDfi8vBckziVJ3irkcrVYuIU203iqCEGkr4FhY48OQ5WjF+EEK+UuOm/92f+Qw bc8wA+H0MjBMxVZqZmIeSio+EGIG2CR1+/7Bc46rJlYNNV3mh/wzGp+UGZH4NCL78oGap32lpEVXa G0BSdCJw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tpMyU-00000003UZ6-3mvR; Tue, 04 Mar 2025 07:45:58 +0000 Received: from mail-vi1eur02on2060d.outbound.protection.outlook.com ([2a01:111:f403:2607::60d] helo=EUR02-VI1-obe.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tpMsJ-00000003SxO-3l4l for linux-arm-kernel@lists.infradead.org; Tue, 04 Mar 2025 07:39:37 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=uZNa4r3NNjpdR8lZb4xOaoVDgxDNFDoSe879iC970Pv6W1AgswL8p7aOGV6K+z5qH/KXgKLFn9aLQFNF6cMaxWutRif19o+cT18JMVJnpH+yhMmdYv9uinFhEAXC/tkgZwmKivG+YSnjLibZsWdkfSAm3LBBIIFT7t/QvxmwaI4bctj/eld1Q//7upLv0KTu2ds3YSSpDvBGQdE/KH/20/AeE36PqFFUa+Mp6X6e+QNS6q7Dn1hJibF7U9mu+ghXNi3egcdL5zKWxs/uKHa3z2opvjzX9rTzxhOQFUZNrqzT6GCwfQzTqz3qbLojnbkcqrxjS3KWHyZakocNZC+HPw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=b6NCk0/fRUssINj2yqGY7VahHSG9G3UMOJV47aDiwfI=; b=GKjrv6iwPK1qW9LxlRq2qve6UdmRHxRA2aEA8fTlLS+BEylaDBW51f4yuKLSicQfIO2wrHm6w2/f6JzTjldpz0AxchM9zVN4P/TmdHxatrj6nSetL2NL2VQ6vB7X5RK7m7fmCG+wLXA2Ah5lErEh9VQdJiupTj2JOWye2d6Dknzk5uICDqGe+U7KmPTba+vGsu44qkprTEmBVNXdptVV3stTJg/Jx8oCFR0G0VctWmw0uh7sOglO7BD9UouWI40qKo05kxYRMoNOGtlkS46p1uWCFySpOBC84BUJvaGQ0JrMlOAwPOLPxbJfRpnmT1UsFg6N38eQsyzvhrnnl0wubg== 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=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=b6NCk0/fRUssINj2yqGY7VahHSG9G3UMOJV47aDiwfI=; b=CreVcpA0xyLUfjJfGJGa2DIUS0/3gROX2AJeZ2z6x6v2zlcYfBEMub8qoMTGbcJfZ0LsPLaccBUNCE3zPH+R/32y86nUZkMRXhTL04pRBtqGM3ZUEWn41Z54dlwLr8xt1ErIdRTPwqXyrwDoUuCq+5Yp6eCznT/crq/Xa8RQHQ5YgZsRQdSqMQqlKmTIfTzP5Ijct/F7ETfsMcmVdtnNX6z2g73/qn6bwSi29yLuCTW4KUThbTJpVeHI8+AkHJgE/wqIaqOrzeXxbGcoRj9keqj7P6bOlOe+wDlHbnbJ6Pflztf2LYJUtM+4fys6QeFaZnlrIGe5Fq7wemuOsET0vg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from PAXPR04MB8510.eurprd04.prod.outlook.com (2603:10a6:102:211::7) by VI2PR04MB11171.eurprd04.prod.outlook.com (2603:10a6:800:29a::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8422.11; Tue, 4 Mar 2025 07:39:32 +0000 Received: from PAXPR04MB8510.eurprd04.prod.outlook.com ([fe80::a7c2:e2fa:8e04:40db]) by PAXPR04MB8510.eurprd04.prod.outlook.com ([fe80::a7c2:e2fa:8e04:40db%5]) with mapi id 15.20.8466.020; Tue, 4 Mar 2025 07:39:32 +0000 From: Wei Fang To: claudiu.manoil@nxp.com, vladimir.oltean@nxp.com, xiaoning.wang@nxp.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com Cc: christophe.leroy@csgroup.eu, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, imx@lists.linux.dev, linuxppc-dev@lists.ozlabs.org, linux-arm-kernel@lists.infradead.org Subject: [PATCH v3 net-next 03/13] net: enetc: move generic MAC filterng interfaces to enetc-core Date: Tue, 4 Mar 2025 15:21:51 +0800 Message-Id: <20250304072201.1332603-4-wei.fang@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250304072201.1332603-1-wei.fang@nxp.com> References: <20250304072201.1332603-1-wei.fang@nxp.com> X-ClientProxiedBy: SG3P274CA0007.SGPP274.PROD.OUTLOOK.COM (2603:1096:4:be::19) To PAXPR04MB8510.eurprd04.prod.outlook.com (2603:10a6:102:211::7) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PAXPR04MB8510:EE_|VI2PR04MB11171:EE_ X-MS-Office365-Filtering-Correlation-Id: 6fcaf431-6c70-43a4-84ea-08dd5aefb3dc X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|52116014|366016|1800799024|376014|38350700014; X-Microsoft-Antispam-Message-Info: J1DtNYtIROQHIwbm0XfXxyP2Sa1P0zzkyUxcOP8cU8mj9kW8rgF9n1ssBf91GHHulxl8w2/GUcj4sqIIGK2Q5EgSIf+W5ICRDd7oAirXR74qkTClvnKdbJGHGo02V4SbWalcOhbQpsawxWh1PKXOgreoaROGYfo3lHxTzglY5I8SCsZDe0XdHNp8Nd6vzI7Y6zwQl8EyFU5cJbjn77tkTFVPLS6b8Muyo/6cdYLaaB2vuPhvo4xqQq3gVur7YMTFDzBzGdFwDdHcjBElaKVZhHBgRWLS+TFZe1ydCTl7e20c4KNwIIIFm5DKrVr2nJMC8SIzDHyPx6nQ0S8HOa+pDYD52az5np57MgRY9JzodoYenvJGtCnGoidMS6TwwGnXiTufWgseUiuoizh77xjNGoHf6HIGf7qq9K4Kj83tVUdhbbUoXCayb8tKTrGsztvY1WM3dDc5psK6wVUX7HjfPo7POiuGw9We+pIRPfyczj954TfHDWn9uHgOGc4PCwlUyK7/NuIvyiDAS9otDiSEDCTcl8nBc0UGSWM87ZphUsGRNCEn5ErSOLVguGUx+drbQ4wPcFISiwVTAUejBTOYbtTQ+pC6jXvCylzn0DmJFKMsAcRwwxidzCMjk/ajvHOv835FPvnDvjhAbqRu0GsvvKegbSAV9Kr3XPRkxKFCmaqQIxZA6uWAtqIkb3duB9I57f/dbE93EG3iICauvQHtdqUEx3Qfx5ctDIKw1zvYiV+ip9Kr/c2mBiGGdpjhvNJEc0EVU+6MLwdR2a5P/63ZHM6iLUywo3yWRH5BO6HWV5I3HdH9KBXLdOUrznXKaZ8IS7DO4ufG1d8a3VbxikesyxCuUliZIVXSamkbIdxqRPUbmKWFZKk2dOe35FZlNEqO2TVVuX2suULCEaDouGdo26Z6Twdlx6O6eC8100tPJ8nct503bNgMvBdJiPcz/dNU9kc9A9LRwiq1HaxbON8GvybxEwQjf3eAGXW+zMIJBK0L9GRXQ2lP4Lf35o95ZBubQnNQ94yxudmKpEs9V93I83FOD0xEULElyJv9Q2dQ5B1nDv8+2JmQGL0CBYJdmN1aeG8cY6UzEeb+fPZujGbGHRjAB363nCk93oWY1AMrlFRx10G058VOcYk0zJd2P1YL9azSpC1+Q3rrQ8GIf2RyfSIUMwZkZi6tB423L2jsY5uMPzEhGWYVUvJarGIBSeDMre35NIWdN7Y0WjOwNK6wbP457rdHiMJu/WfJ+b+jdTF9A06F6tscJtcnwhhhiAw7Cv1Th3s48TzQvSWowN9PD+FhSDHwoauFijX+LMnvu6UZeYSx1PEna56PoAmb/zziLVRQO1XEqNCuEMRCo/GV0UA90PAKxqlU0RFV9qrhDpMb6cQW1GAQmg/3WThxKRMWLL4ZcMJXfcDoKoSd46kEYnHf2/y+Fg87yxIsn6QbuBLznPPSFEk8nBhCRSqCbMw8 X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB8510.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(7416014)(52116014)(366016)(1800799024)(376014)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: k50rusoD+4B7tZJQybOApDeWewDwQJxtkicMmoITAfxswq/B7RO/0TNDavKR6Z1AMctclav8Ag5LifYGJsGrSZ0BYfnD9u8fy+uXClBahbat7iHw4ZFwDeU6apdaJ2WF+9NxcrX0Q9EeYiDpI9yctr5vI1Aub44qyF+tfU7L68UhUOW1Gu9ppZgKJsm/aJUuE2UNiU4Z3Ksk3SoaR6rl6w4wGOQia1JdI+ZM3V87u6qmVQU7MRZpxazXErIJ+8VC1F+UEUiMqxiXSu6ZhEaYYlTvl1IvFz/i+wsH45dPz9bADxfY06lHDkEe+jGxEiN83vv9WgQIcbpbn+Cd7WF5qRNxxKQj5HAn5dyskmT8lJ5G8Uo2zZoLNhHcjoJNd9AwCv/d6QRMFq/tiMXDrkXhLpHR1sccCQuZqbTRWTCaDF/M5wDiRfKaj2aGL3k5aRMNh+asm4jwIRXiAzAN4mrS5Vht9OCfTrvLHs5vGkPkdVuIl7gjPNVYz+N8fCQ15EGryqacsk23snTWk/tVNh4WY/yigCocHLD9x20YEXwqJmpxu1e8BvhMQ/cJJWLzIQcoeBZP9bD1jXS5pi10s89tYXy6vu3aTq0Hry3Hq14ARNopAUzQNIdCQIuYK8n+AvO47pw+6n5ZdXFqF59JVdHJrM5n63l+3jYjN8t0RE73RKehoM6DGaaD35qhuPK6ScPBQVqwuihOnpwhQ8Hwe6+JArB1eAvSKsOXkM7XH1E45tiLRfY4TRJtCW1McoQnrUINQPT4KZljplB2tWfRKaP/W0aCNVuCfl3RJLlkerbiHBtvJdHkb7CWiRXzWLSPrQwqT1QVBbmtTPLQaQ3edLWfLCGdU+vPIpH7FuE7+ytSBUCbRoWEFx2HylmjFI9FAJn4S1fMGZm+SvZTA4GWkXS25D2As7YiPBBcUeIBEGLm8qaaFF1GVVHjhR8w1WBpDrN0qncbMGrkjnWmUpCnDgIGM7HeYB2uSFknnl1JJBe3CczzfyJ9anysZq/PSmVYCwMHS6fCQUG9ePved0Rc6NAJdKoDVilm7LDdV/1Qki9232YswdzZqeWcMfbJmfWIGsSZMld5PPvaXeJlqjyzgdxJUkw2ggssio4z6lGfBpussgZwPNQyCp8BU+YcTASuTX7No/h6AM/hYhQzr03+GieUPkqxE4iQNA5G+rLNIOJ5+7KQRw0rP0FlAWON4H+Lyq0AFiS2JlfZeUU6LsdUAinumxuV07N5NnSpJC2PSf5dTxreDVobLhg5G2DSCsR12ZXfoEVjKSEJ9bC/z7S2ZfUDNdbroXpn98Orgf6bQPRfKK10Ud7d4FKzvmay7A1GmTupSmQnE/1IAPII9Y2GwzFalTTIR5tg4bVzY2noG1CgFU2ZZEqP50QD/IaV/5Gs01GLvVAunKHLGxtG1n3TJjSKzxZckOCeuO2ZwndkIq5t6ZsT+OS1zNwMfYWGS2IZ/o5AXSj4BaW2jLhBKrQBRa9cbewgR9+eWvLoTkFeEIT5VtxRjxDGNkZe9dwsz5zdbmyF2jNHTL9N51lnWTK+JBQN0/Yd39SRGxJFKZGvCPd7vtS6HrZb3cURZmEwdQ1ESjDr X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6fcaf431-6c70-43a4-84ea-08dd5aefb3dc X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB8510.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Mar 2025 07:39:32.1099 (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: f3i0CRyLZreLdY43VpNJdR/v9/XTvTDV2m4qnbwXb+ahnVOFjVN7jTPKGS5hX2d2akYzhmveGp8rXpFlm/Qh5Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI2PR04MB11171 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250303_233936_102879_C9AAAD92 X-CRM114-Status: GOOD ( 20.23 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Although only ENETC PF can access the MAC address filter table, the table entries can specify MAC address filtering for one or more SIs based on SI_BITMAP, which means that the table also supports MAC address filtering for VFs. Currently, only the ENETC v1 PF driver supports MAC address filtering. In order to add the MAC address filtering support for the ENETC v4 PF driver and VF driver in the future, the relevant generic interfaces are moved to the enetc-core driver. At the same time, the struct enetc_mac_filter is moved from enetc_pf to enetc_si, because enetc_si is a structure shared by PF and VFs. This lays the basis for i.MX95 ENETC PF and VFs to support MAC address filtering. Signed-off-by: Wei Fang --- drivers/net/ethernet/freescale/enetc/enetc.c | 36 ++++++++++++++ drivers/net/ethernet/freescale/enetc/enetc.h | 17 +++++++ .../net/ethernet/freescale/enetc/enetc_pf.c | 49 +++---------------- .../net/ethernet/freescale/enetc/enetc_pf.h | 14 ------ 4 files changed, 60 insertions(+), 56 deletions(-) diff --git a/drivers/net/ethernet/freescale/enetc/enetc.c b/drivers/net/ethernet/freescale/enetc/enetc.c index 2106861463e4..3832d2cd91ba 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc.c +++ b/drivers/net/ethernet/freescale/enetc/enetc.c @@ -36,6 +36,42 @@ static void enetc_change_preemptible_tcs(struct enetc_ndev_priv *priv, enetc_mm_commit_preemptible_tcs(priv); } +static int enetc_mac_addr_hash_idx(const u8 *addr) +{ + u64 fold = __swab64(ether_addr_to_u64(addr)) >> 16; + u64 mask = 0; + int res = 0; + int i; + + for (i = 0; i < 8; i++) + mask |= BIT_ULL(i * 6); + + for (i = 0; i < 6; i++) + res |= (hweight64(fold & (mask << i)) & 0x1) << i; + + return res; +} + +void enetc_add_mac_addr_ht_filter(struct enetc_mac_filter *filter, + const unsigned char *addr) +{ + int idx = enetc_mac_addr_hash_idx(addr); + + /* add hash table entry */ + __set_bit(idx, filter->mac_hash_table); + filter->mac_addr_cnt++; +} +EXPORT_SYMBOL_GPL(enetc_add_mac_addr_ht_filter); + +void enetc_reset_mac_addr_filter(struct enetc_mac_filter *filter) +{ + filter->mac_addr_cnt = 0; + + bitmap_zero(filter->mac_hash_table, + ENETC_MADDR_HASH_TBL_SZ); +} +EXPORT_SYMBOL_GPL(enetc_reset_mac_addr_filter); + static int enetc_num_stack_tx_queues(struct enetc_ndev_priv *priv) { int num_tx_rings = priv->num_tx_rings; diff --git a/drivers/net/ethernet/freescale/enetc/enetc.h b/drivers/net/ethernet/freescale/enetc/enetc.h index 4ff0957e69be..9380d3e8ca01 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc.h +++ b/drivers/net/ethernet/freescale/enetc/enetc.h @@ -23,6 +23,18 @@ #define ENETC_CBD_DATA_MEM_ALIGN 64 +#define ENETC_MADDR_HASH_TBL_SZ 64 + +enum enetc_mac_addr_type {UC, MC, MADDR_TYPE}; + +struct enetc_mac_filter { + union { + char mac_addr[ETH_ALEN]; + DECLARE_BITMAP(mac_hash_table, ENETC_MADDR_HASH_TBL_SZ); + }; + int mac_addr_cnt; +}; + struct enetc_tx_swbd { union { struct sk_buff *skb; @@ -302,6 +314,8 @@ struct enetc_si { int hw_features; const struct enetc_drvdata *drvdata; const struct enetc_si_ops *ops; + + struct enetc_mac_filter mac_filter[MADDR_TYPE]; }; #define ENETC_SI_ALIGN 32 @@ -484,6 +498,9 @@ int enetc_alloc_si_resources(struct enetc_ndev_priv *priv); void enetc_free_si_resources(struct enetc_ndev_priv *priv); int enetc_configure_si(struct enetc_ndev_priv *priv); int enetc_get_driver_data(struct enetc_si *si); +void enetc_add_mac_addr_ht_filter(struct enetc_mac_filter *filter, + const unsigned char *addr); +void enetc_reset_mac_addr_filter(struct enetc_mac_filter *filter); int enetc_open(struct net_device *ndev); int enetc_close(struct net_device *ndev); diff --git a/drivers/net/ethernet/freescale/enetc/enetc_pf.c b/drivers/net/ethernet/freescale/enetc/enetc_pf.c index a214749a4af6..cc3e52bd3096 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc_pf.c +++ b/drivers/net/ethernet/freescale/enetc/enetc_pf.c @@ -72,30 +72,6 @@ static void enetc_set_isol_vlan(struct enetc_hw *hw, int si, u16 vlan, u8 qos) enetc_port_wr(hw, ENETC_PSIVLANR(si), val); } -static int enetc_mac_addr_hash_idx(const u8 *addr) -{ - u64 fold = __swab64(ether_addr_to_u64(addr)) >> 16; - u64 mask = 0; - int res = 0; - int i; - - for (i = 0; i < 8; i++) - mask |= BIT_ULL(i * 6); - - for (i = 0; i < 6; i++) - res |= (hweight64(fold & (mask << i)) & 0x1) << i; - - return res; -} - -static void enetc_reset_mac_addr_filter(struct enetc_mac_filter *filter) -{ - filter->mac_addr_cnt = 0; - - bitmap_zero(filter->mac_hash_table, - ENETC_MADDR_HASH_TBL_SZ); -} - static void enetc_add_mac_addr_em_filter(struct enetc_mac_filter *filter, const unsigned char *addr) { @@ -104,16 +80,6 @@ static void enetc_add_mac_addr_em_filter(struct enetc_mac_filter *filter, filter->mac_addr_cnt++; } -static void enetc_add_mac_addr_ht_filter(struct enetc_mac_filter *filter, - const unsigned char *addr) -{ - int idx = enetc_mac_addr_hash_idx(addr); - - /* add hash table entry */ - __set_bit(idx, filter->mac_hash_table); - filter->mac_addr_cnt++; -} - static void enetc_clear_mac_ht_flt(struct enetc_si *si, int si_idx, int type) { bool err = si->errata & ENETC_ERR_UCMCSWP; @@ -145,10 +111,9 @@ static void enetc_set_mac_ht_flt(struct enetc_si *si, int si_idx, int type, } } -static void enetc_sync_mac_filters(struct enetc_pf *pf) +static void enetc_sync_mac_filters(struct enetc_si *si) { - struct enetc_mac_filter *f = pf->mac_filter; - struct enetc_si *si = pf->si; + struct enetc_mac_filter *f = si->mac_filter; int i, pos; pos = EMETC_MAC_ADDR_FILT_RES; @@ -192,10 +157,10 @@ static void enetc_sync_mac_filters(struct enetc_pf *pf) static void enetc_pf_set_rx_mode(struct net_device *ndev) { struct enetc_ndev_priv *priv = netdev_priv(ndev); - struct enetc_pf *pf = enetc_si_priv(priv->si); - struct enetc_hw *hw = &priv->si->hw; bool uprom = false, mprom = false; struct enetc_mac_filter *filter; + struct enetc_si *si = priv->si; + struct enetc_hw *hw = &si->hw; struct netdev_hw_addr *ha; u32 psipmr = 0; bool em; @@ -214,7 +179,7 @@ static void enetc_pf_set_rx_mode(struct net_device *ndev) /* first 2 filter entries belong to PF */ if (!uprom) { /* Update unicast filters */ - filter = &pf->mac_filter[UC]; + filter = &si->mac_filter[UC]; enetc_reset_mac_addr_filter(filter); em = (netdev_uc_count(ndev) == 1); @@ -230,7 +195,7 @@ static void enetc_pf_set_rx_mode(struct net_device *ndev) if (!mprom) { /* Update multicast filters */ - filter = &pf->mac_filter[MC]; + filter = &si->mac_filter[MC]; enetc_reset_mac_addr_filter(filter); netdev_for_each_mc_addr(ha, ndev) { @@ -243,7 +208,7 @@ static void enetc_pf_set_rx_mode(struct net_device *ndev) if (!uprom || !mprom) /* update PF entries */ - enetc_sync_mac_filters(pf); + enetc_sync_mac_filters(si); psipmr |= enetc_port_rd(hw, ENETC_PSIPMR) & ~(ENETC_PSIPMR_SET_UP(0) | ENETC_PSIPMR_SET_MP(0)); diff --git a/drivers/net/ethernet/freescale/enetc/enetc_pf.h b/drivers/net/ethernet/freescale/enetc/enetc_pf.h index a26a12863855..2b9d0f625f01 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc_pf.h +++ b/drivers/net/ethernet/freescale/enetc/enetc_pf.h @@ -6,18 +6,6 @@ #define ENETC_PF_NUM_RINGS 8 -enum enetc_mac_addr_type {UC, MC, MADDR_TYPE}; -#define ENETC_MAX_NUM_MAC_FLT ((ENETC_MAX_NUM_VFS + 1) * MADDR_TYPE) - -#define ENETC_MADDR_HASH_TBL_SZ 64 -struct enetc_mac_filter { - union { - char mac_addr[ETH_ALEN]; - DECLARE_BITMAP(mac_hash_table, ENETC_MADDR_HASH_TBL_SZ); - }; - int mac_addr_cnt; -}; - #define ENETC_VLAN_HT_SIZE 64 enum enetc_vf_flags { @@ -52,8 +40,6 @@ struct enetc_pf { int total_vfs; /* max number of VFs, set for PF at probe */ struct enetc_vf_state *vf_state; - struct enetc_mac_filter mac_filter[ENETC_MAX_NUM_MAC_FLT]; - struct enetc_msg_swbd rxmsg[ENETC_MAX_NUM_VFS]; struct work_struct msg_task; char msg_int_name[ENETC_INT_NAME_MAX]; From patchwork Tue Mar 4 07:21:52 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Wei Fang X-Patchwork-Id: 14000124 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 5F356C021B8 for ; Tue, 4 Mar 2025 07:47:43 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:MIME-Version:Content-Type: Content-Transfer-Encoding:References:In-Reply-To:Message-Id:Date:Subject:Cc: To:From:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=GnRVcgcQq/gSAk9o7Gk119IitRT2tfuErtnK0cB1tq0=; b=F6qKPIPHM7Cftfhy+1PNcF8nFp wRhCjUBXlkzJeOH4yP+8k83x6137zskru/ULF9bgmzV1xImvJavNXllfg6DtI2Gdqs7VFZh2sJDSO F8WDuYStymrlhXZJh60HE2hSUQA95W64uB5X10WrsiDw/DtyxUDVaq5k/k7S5E7ixY3iSDdUuiIbE zNZHeMv9YzJSfIznNRXqx/niqX7kPhJN/6Rz+xP+PCt+RZfanyLos2p8uzDgBPwjUG+Y74lGnkO/B mSMUOC3SFs+R1htoyBLQjv9eHfCnq36QqoFZEbc81Ycd/kMKG0Z6VubdJ0oX2d3bWxpfSjC7m6/2A ohcVWk7A==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tpN03-00000003VHL-2T9n; Tue, 04 Mar 2025 07:47:35 +0000 Received: from mail-am6eur05on20608.outbound.protection.outlook.com ([2a01:111:f403:2612::608] helo=EUR05-AM6-obe.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tpMsP-00000003T1N-1Rzz for linux-arm-kernel@lists.infradead.org; Tue, 04 Mar 2025 07:39:43 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=rNXboEIgzj1fNMdPGbw24ixNrr6QvPlwGuPtf+xafA1dbtuFx4mRhe9E/eHRXJ2RFSK2vhKHF0mqEmQCTqp2WUHqjjzX7dBDu996Cnx0RQs5lfbyS4c3bnTRA/hVwLPLYg+sDDMB1RrNJAYBURhDRBtYOJdeyrZ/+/aprvSbzAqxh5jztTT2qNYPzYlINtaXx71C1wFle9X5SjVpC/j3R3z+RRHmbFlVC7w2sWU7Ud2TQ98CD1kwAWOj4MOnVJLVWYmBTQ2J7LPf64ZiqdgD8Z7eQZnMO7bEdGEwvATvuZDlvkcUxsN3lNcqz9Dk9q7zB9H6MHXGCgwr2YVvuVeAig== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=GnRVcgcQq/gSAk9o7Gk119IitRT2tfuErtnK0cB1tq0=; b=GwncPPwpMUoutIGw9PlIkNKIKhnETz5LugNYyUg0+vdjHGKOZJzi+ndNFU1IWlF0gvQqsczoRmrCBXtZQWj+eWiTw1Jq6t6Di/+7EfUTm9E/8H+Qft32YdZH2YxZVx8ZAqKA9FMoyjL5mIXRIoNFLQWNBqm6X1bUQJlk+5X8AUIAmaw67TqQEBHrzAMHYMM1PWF/Co8JEq/LWrl0hAT7n6oaxflV1bwlNuripMJOT86J+vAQkIg1dS6OSO+8Sh+ZFe1Obz9nl5qN4/2GexN/s6N2WbbN4vQtz9bIH8W9JdK0c/O9YFz4rbmXknXMHzCxo94Ko0EdgIiXQnhhQ5V6Mw== 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=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=GnRVcgcQq/gSAk9o7Gk119IitRT2tfuErtnK0cB1tq0=; b=F5vvZrfy3FjgVdPY1n/1sOrkunKoouW124jVU9xlh/IhUikVmIvTx5MxB5OTMDDoaS2VsfVVrxpNvbyxFc5MkLGpAq6jXna+2GzKQB4V25RSCeGa8mxAmDcPBEr1wDOFJsG9dSQXP5/N3J9v3hNM9wqLIb3UV1EfFcY/DJfk6HhhH+20XSh/PkhgyTb3hOrx4ODco+3WNzkvv00779ateXtr9JFCzj10T0TtEeb32h4qybi4C/HHWpN5sX9xHpFfhgwbNEIT99NEFa6S3Ykng5lUiEoZOFkI4xESpw1P9+mGf7FSzU+kCbKCsKNHiDzV3wnInxE4lmnVv5nZ1GT9qw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from PAXPR04MB8510.eurprd04.prod.outlook.com (2603:10a6:102:211::7) by VI2PR04MB11171.eurprd04.prod.outlook.com (2603:10a6:800:29a::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8422.11; Tue, 4 Mar 2025 07:39:36 +0000 Received: from PAXPR04MB8510.eurprd04.prod.outlook.com ([fe80::a7c2:e2fa:8e04:40db]) by PAXPR04MB8510.eurprd04.prod.outlook.com ([fe80::a7c2:e2fa:8e04:40db%5]) with mapi id 15.20.8466.020; Tue, 4 Mar 2025 07:39:36 +0000 From: Wei Fang To: claudiu.manoil@nxp.com, vladimir.oltean@nxp.com, xiaoning.wang@nxp.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com Cc: christophe.leroy@csgroup.eu, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, imx@lists.linux.dev, linuxppc-dev@lists.ozlabs.org, linux-arm-kernel@lists.infradead.org Subject: [PATCH v3 net-next 04/13] net: enetc: add MAC filter for i.MX95 ENETC PF Date: Tue, 4 Mar 2025 15:21:52 +0800 Message-Id: <20250304072201.1332603-5-wei.fang@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250304072201.1332603-1-wei.fang@nxp.com> References: <20250304072201.1332603-1-wei.fang@nxp.com> X-ClientProxiedBy: SG3P274CA0007.SGPP274.PROD.OUTLOOK.COM (2603:1096:4:be::19) To PAXPR04MB8510.eurprd04.prod.outlook.com (2603:10a6:102:211::7) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PAXPR04MB8510:EE_|VI2PR04MB11171:EE_ X-MS-Office365-Filtering-Correlation-Id: 67069f88-b81a-4b5e-02b0-08dd5aefb683 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|52116014|366016|1800799024|376014|38350700014; X-Microsoft-Antispam-Message-Info: HRBIIU1T3oHrG1htA+CPTETixfT7zZpaqZdIcJJwm/Q8bgTgYMTjVySi07FDgp7Zs/h0APgxGI8syOEbamZpcdzrZ2lRI0rS4dyeg6xoAxXEaDQHAK1MfbyHVgSQYU1ZywFcmFZSN8HxB0P/cdVx7r2x7zYB4X9gwDLJpWul8XGNfvgl0pVlgVGAXBbDWpVnXf4g/mQTTb+SM+++VV4hdGCNGJO3UNQ5VLxmlPP4P6s5Cy5x4FTUNp3wLpa72actgS0Wsi/L1mKKRAHS8nmyMjcVf8tJekOI656YwExev8o7SQsr5dJZueieAp++90o6I53N57ZmxvccAODYuVgx7wHE06yjg7SOUsAQuQpJpIqwD12vutNtbjVz238t3HgdJryimHYzh/DgmKkVKCDRbqlP1mJKdalFQOTTxNtMqt1lgQMoIGTLvjHNXrxcaS2XVCtY3TUj54hGL0hQWBX8eZ7Nt6P4sfjQbTzKDegiOmVt7JLugaheBr0MkiSJq6STbT8+ltyDM9A0zTRYxMOlwSEsDyBsUbYhRmyxAqfzvWD8WB7ENnbz+7za1cjMYpXsdpbpFKBXhvgbDiViEU+af4HIl+97QsPosE7tz6nurHo1Wxqrb22Eo5d85tUHJP/Hev2XC+fRtLJoTL0jeF0miiI82HoYbEq2iCeQ2PNYO5rSCSBOxShM9fbdR5lmO7zMctnXzWOJA0lhwByO5V23kxn2zx9FjOkKDdfm/9cc6tcY6NvEXu0OIUoa0YAzn5rsEtKew0Mu0WKKzu5FbkAU9RFzlkOMrMl8HBurOg6da/jkp7OpFqWzs7o/4kch8Dn+SY42WqYV9ucKKMtDdlUDam80gFYs4uT+1qbWC7PVy2+F3WojJzB20zJ+nyLs7A+1AJqurvporHgPEWmNbOoL2xNX3XIoOb6DLfPKJqFy+zrpa3Pl5txKUBC5EDFS/Fn0TMI9IbUU21PQ4Fd72lVj6kOFArl8vmr9cxgBDL3lld+3by0uR9giGCAFpRTVP/ptG9PG8eo9gn5Ja02qGrwEYf0h242ntPtHjADVKQ5Dy2aUFTIeNSmiB4x/x7GK7A2Qr1ZPpWL2LcSwCMZ6iqth83seEe2hDkGAqhJHglNfuF7ZA27CV9TkfIei+qavkU8XjlA0+WtRQGH58hb0BrdMl21gacrTRt992RFY/TjSSbTckkPQ+N8fiPY7aQaOwvpXIiRXyq08RmSLZMgz5I/m/Dhpy3cdLB33vwB1Qow7AOmsjjlcbmZgKewbHGpq/wZ2rcj0I4WItEsRiFZlJWRxGkyiNu9YMxdQF9zCRdYgVLb5HZ0GhBtgCS2VwmfXsKxIzwBMmlwSnajiGg2mo8Epkv/PUcU4I/tUZXJ1t7lbMaYxZdmrNAUFcneist/rgkfL9qgLtt7DczRKBV7ftqienztFwKO8AJReOQZS/w8T3Is= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB8510.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(7416014)(52116014)(366016)(1800799024)(376014)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: lCsDcZ9R790pGYoFK1Qjsu+MgyYbMIlWSd8XzItkC2/MEgQf8zb8IbDSkDVs08zgOoDpaRGJTMPKjBCKNsgdL1Op2nLXjWVm6qpp3qDG3j2wWyq/9c33bz+fP2sVMUkDEiHfZgAYITXJWBFImuVHxs0ogDP7QbMCex2jwVXWZyeGbiByNvvIXLbrW8inOYlqv64cixkoFzwj+d+0XTn/pI7BGePF+tCBi+O6sTMJew4aEWU51teEVPu6o28/9hUmRy1ShkiSmwEOm5+Rx5brNfZkWtzdmav06utWWh8auQEE0bJ2El6VpNAqHrCyp1xr2B82rSvEjAFaoAU8Fk20gyF4YtFOud0Xsv5jSuZRk//iTTlES1W8KnRE7Kf6OYz17CUHt8hOcVnNVEU8nLusBWDrFEJrCTSJJJjYJ+19It5CG/B6vO15BSxwAMZQfjIAyJm0qfkTOobJJ/paLAB/Jd6sVYTtrDI6VeNt4eE+cPpapUQR6NRx3SMfK/SW4sXkb9Nux/z4ho4IYjO6L19iOCjP/QiwRd8wEUey6/TQecGS/edAGbfIgv2Kt4yrFPMDrqtf0mOL1hzscIc8jbjX3QLpj6pQEpJxwIv69BFir0XRSUMhl6l6yMfMl9h8SWK/3j4Mwq4QYAzCTOnRxsGZ4LFPaw2AKEcUw7Jw8bNbb3cGgMBAUE8W+Ol70lGNKio/SVPXskTSqATCDYnNQCI6S46o6i4tWGAx2fb3xjW+VxQawMl7wIiG60ZyeoUDsQy+RNxJDzTV82vqXSfZ0U55ipja/1qogO87eogl+a+LlBW4DKuv52YdE1boQ9NAmqh5ueurbStjRAGlQ7sFcAE4nUL9Xiy0t7IQpvvQ/LuU5w8dKyWRRTiuAq05KZfxaySxh42h0nbqmtav2E/3E8Asi2x73IuA4v5YtsZRtsIbnwPnzBfSbNYdi+APMQLJqPh1Xmr6Y95lBwPXWsjuT0L/8h/Y3tWFJe70ZvNKrVdWE3ZEtrPgZkhRyDVYMEPJqC/e1Os+qAzHFlee6ZVCXoJumgKfQE3B6yaycKK79RkVzvisYaxmvAP2XbNnCGVIv0iIXl30AvuSXIDarTI889U2gRW0gzI39lwbgH420NKRAjpiFXbwvX3HDi4hrC7Q+QG4KWbcGGpCQAV8bL3FfPVA0flaPfhCBc643/KxPV+RfENJt3HZproD6kAVGFu1Sl3mLnOHqz8fzuZx8DbU02GYl0a5cBImJkReL84iOoUV2wWIVMWHh1Cf7zcfad5oo1EZZUxvKIK7wPK8AHJCwRjCY8Q/t/DoAIQ6HTboONVAh6RlJAIqNzos0WR66CBGtPM0tvM8WU8089x/ybt/mJ2sFnh+OX4XKZ/9zTCD/NVvTFZl3H6kLgieQAnKXR5iQazJ7e2WVima3NdJ/UXzOPyTrQfjtVmLeitWQvpMTDXMFQIA8pkv3z1M1OVjzs/2ASoUASJmMdwQmlhwE1SGm73l1E1dCKFP/yxbXgOcX1UG/87jp4xdIF4IcqjlWtk3AixWu9jE7kP8QGCU2StzIW0CCbTSwk7CGxn47FjRbTYNdfhlxpzNJODe7HKkwsnEirnW X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 67069f88-b81a-4b5e-02b0-08dd5aefb683 X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB8510.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Mar 2025 07:39:36.5332 (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: zbRQEWDCz3zD4GtnFgtd62axkYVqcA/16GUlllLf6P/JJCLcHd/mGZCt0eYjRpPxWGTw6oBOcs8eFXz3on6g6g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI2PR04MB11171 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250303_233941_546690_11E667CA X-CRM114-Status: GOOD ( 23.30 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org The i.MX95 ENETC supports both MAC hash filter and MAC exact filter. MAC hash filter is implenented through a 64-bits hash table to match against the hashed addresses, PF and VFs each have two MAC hash tables, one is for unicast and the other one is for multicast. But MAC exact filter is shared between SIs (PF and VFs), each table entry contains a MAC address that may be unicast or multicast and the entry also contains an SI bitmap field that indicates for which SIs the entry is valid. For i.MX95 ENETC, MAC exact filter only has 4 entries. According to the observation of the system default network configuration, the MAC filter will be configured with multiple multicast addresses, so MAC exact filter does not have enough entries to implement multicast filtering. Therefore, the current MAC exact filter is only used for unicast filtering. If the number of unicast addresses exceeds 4, then MAC hash filter is used. Note that both MAC hash filter and MAC exact filter can only be accessed by PF, VFs can notify PF to set its corresponding MAC filter through the mailbox mechanism of ENETC. But currently MAC filter is only added for i.MX95 ENETC PF. The MAC filter support of ENETC VFs will be supported in subsequent patches. Signed-off-by: Wei Fang --- drivers/net/ethernet/freescale/enetc/enetc.h | 2 + .../net/ethernet/freescale/enetc/enetc4_hw.h | 8 + .../net/ethernet/freescale/enetc/enetc4_pf.c | 418 +++++++++++++++++- .../net/ethernet/freescale/enetc/enetc_hw.h | 6 + .../net/ethernet/freescale/enetc/enetc_pf.h | 11 + 5 files changed, 444 insertions(+), 1 deletion(-) diff --git a/drivers/net/ethernet/freescale/enetc/enetc.h b/drivers/net/ethernet/freescale/enetc/enetc.h index 9380d3e8ca01..4dba91408e3d 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc.h +++ b/drivers/net/ethernet/freescale/enetc/enetc.h @@ -316,6 +316,8 @@ struct enetc_si { const struct enetc_si_ops *ops; struct enetc_mac_filter mac_filter[MADDR_TYPE]; + struct workqueue_struct *workqueue; + struct work_struct rx_mode_task; }; #define ENETC_SI_ALIGN 32 diff --git a/drivers/net/ethernet/freescale/enetc/enetc4_hw.h b/drivers/net/ethernet/freescale/enetc/enetc4_hw.h index 695cb07c74bc..826359004850 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc4_hw.h +++ b/drivers/net/ethernet/freescale/enetc/enetc4_hw.h @@ -99,6 +99,14 @@ #define ENETC4_PSICFGR2(a) ((a) * 0x80 + 0x2018) #define PSICFGR2_NUM_MSIX GENMASK(5, 0) +/* Port station interface a unicast MAC hash filter register 0/1 */ +#define ENETC4_PSIUMHFR0(a) ((a) * 0x80 + 0x2050) +#define ENETC4_PSIUMHFR1(a) ((a) * 0x80 + 0x2054) + +/* Port station interface a multicast MAC hash filter register 0/1 */ +#define ENETC4_PSIMMHFR0(a) ((a) * 0x80 + 0x2058) +#define ENETC4_PSIMMHFR1(a) ((a) * 0x80 + 0x205c) + #define ENETC4_PMCAPR 0x4004 #define PMCAPR_HD BIT(8) #define PMCAPR_FP GENMASK(10, 9) diff --git a/drivers/net/ethernet/freescale/enetc/enetc4_pf.c b/drivers/net/ethernet/freescale/enetc/enetc4_pf.c index 63001379f0a0..305781ccefd0 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc4_pf.c +++ b/drivers/net/ethernet/freescale/enetc/enetc4_pf.c @@ -11,6 +11,15 @@ #define ENETC_SI_MAX_RING_NUM 8 +#define ENETC_MAC_FILTER_TYPE_UC BIT(0) +#define ENETC_MAC_FILTER_TYPE_MC BIT(1) +#define ENETC_MAC_FILTER_TYPE_ALL (ENETC_MAC_FILTER_TYPE_UC | \ + ENETC_MAC_FILTER_TYPE_MC) + +struct enetc_mac_addr { + u8 addr[ETH_ALEN]; +}; + static void enetc4_get_port_caps(struct enetc_pf *pf) { struct enetc_hw *hw = &pf->si->hw; @@ -26,6 +35,9 @@ static void enetc4_get_port_caps(struct enetc_pf *pf) val = enetc_port_rd(hw, ENETC4_PMCAPR); pf->caps.half_duplex = (val & PMCAPR_HD) ? 1 : 0; + + val = enetc_port_rd(hw, ENETC4_PSIMAFCAPR); + pf->caps.mac_filter_num = val & PSIMAFCAPR_NUM_MAC_AFTE; } static void enetc4_pf_set_si_primary_mac(struct enetc_hw *hw, int si, @@ -56,6 +68,337 @@ static void enetc4_pf_get_si_primary_mac(struct enetc_hw *hw, int si, put_unaligned_le16(lower, addr + 4); } +static void enetc4_pf_set_si_mac_promisc(struct enetc_hw *hw, int si, + int type, bool en) +{ + u32 val = enetc_port_rd(hw, ENETC4_PSIPMMR); + + if (type == UC) { + if (en) + val |= PSIPMMR_SI_MAC_UP(si); + else + val &= ~PSIPMMR_SI_MAC_UP(si); + } else { /* Multicast promiscuous mode. */ + if (en) + val |= PSIPMMR_SI_MAC_MP(si); + else + val &= ~PSIPMMR_SI_MAC_MP(si); + } + + enetc_port_wr(hw, ENETC4_PSIPMMR, val); +} + +static void enetc4_pf_set_si_mac_hash_filter(struct enetc_hw *hw, int si, + int type, u64 hash) +{ + if (type == UC) { + enetc_port_wr(hw, ENETC4_PSIUMHFR0(si), lower_32_bits(hash)); + enetc_port_wr(hw, ENETC4_PSIUMHFR1(si), upper_32_bits(hash)); + } else { /* MC */ + enetc_port_wr(hw, ENETC4_PSIMMHFR0(si), lower_32_bits(hash)); + enetc_port_wr(hw, ENETC4_PSIMMHFR1(si), upper_32_bits(hash)); + } +} + +static void enetc4_pf_destroy_mac_list(struct enetc_pf *pf) +{ + struct enetc_mac_list_entry *entry; + struct hlist_node *tmp; + + mutex_lock(&pf->mac_list_lock); + + hlist_for_each_entry_safe(entry, tmp, &pf->mac_list, node) { + hlist_del(&entry->node); + kfree(entry); + } + + pf->num_mfe = 0; + + mutex_unlock(&pf->mac_list_lock); +} + +static bool enetc_mac_filter_type_check(int type, const u8 *addr) +{ + if (type == ENETC_MAC_FILTER_TYPE_UC) + return !is_multicast_ether_addr(addr); + else if (type == ENETC_MAC_FILTER_TYPE_MC) + return is_multicast_ether_addr(addr); + else + return true; +} + +static struct enetc_mac_list_entry * +enetc_mac_list_lookup_entry(struct enetc_pf *pf, const unsigned char *addr) +{ + struct enetc_mac_list_entry *entry; + + hlist_for_each_entry(entry, &pf->mac_list, node) + if (ether_addr_equal(entry->mac, addr)) + return entry; + + return NULL; +} + +static void enetc_mac_list_add_entry(struct enetc_pf *pf, + struct enetc_mac_list_entry *entry) +{ + hlist_add_head(&entry->node, &pf->mac_list); +} + +static void enetc_mac_list_del_entry(struct enetc_mac_list_entry *entry) +{ + hlist_del(&entry->node); + kfree(entry); +} + +static void enetc_mac_list_del_matched_entries(struct enetc_pf *pf, u16 si_bit, + struct enetc_mac_addr *mac, + int mac_cnt) +{ + struct enetc_mac_list_entry *entry; + int i; + + for (i = 0; i < mac_cnt; i++) { + entry = enetc_mac_list_lookup_entry(pf, mac[i].addr); + if (entry) { + entry->si_bitmap &= ~si_bit; + if (!entry->si_bitmap) { + enetc_mac_list_del_entry(entry); + pf->num_mfe--; + } + } + } +} + +static bool enetc_mac_list_is_available(struct enetc_pf *pf, + struct enetc_mac_addr *mac, + int mac_cnt) +{ + int max_num_mfe = pf->caps.mac_filter_num; + struct enetc_mac_list_entry *entry; + int cur_num_mfe = pf->num_mfe; + int i, new_mac_cnt = 0; + + if (mac_cnt > max_num_mfe) + return false; + + /* Check MAC filter table whether has enough available entries */ + hlist_for_each_entry(entry, &pf->mac_list, node) { + for (i = 0; i < mac_cnt; i++) { + if (ether_addr_equal(entry->mac, mac[i].addr)) + break; + } + + if (i == mac_cnt) + new_mac_cnt++; + + if ((cur_num_mfe + new_mac_cnt) > max_num_mfe) + return false; + } + + return true; +} + +static int enetc4_pf_add_si_mac_exact_filter(struct enetc_pf *pf, int si_id, + struct enetc_mac_addr *mac, + int mac_cnt) +{ + struct enetc_mac_list_entry *entry; + struct maft_entry_data data = {0}; + struct enetc_si *si = pf->si; + u16 si_bit = BIT(si_id); + int i, num_mfe, err = 0; + + mutex_lock(&pf->mac_list_lock); + + if (!enetc_mac_list_is_available(pf, mac, mac_cnt)) { + err = -ENOSPC; + goto mac_list_unlock; + } + + num_mfe = pf->num_mfe; + /* Update mac_list */ + for (i = 0; i < mac_cnt; i++) { + entry = enetc_mac_list_lookup_entry(pf, mac[i].addr); + if (!entry) { + entry = kzalloc(sizeof(*entry), GFP_KERNEL); + if (unlikely(!entry)) { + /* Restore MAC list to the state before the update + * if an error occurs. + */ + enetc_mac_list_del_matched_entries(pf, si_bit, + mac, i + 1); + err = -ENOMEM; + goto mac_list_unlock; + } + + ether_addr_copy(entry->mac, mac[i].addr); + entry->si_bitmap = si_bit; + enetc_mac_list_add_entry(pf, entry); + pf->num_mfe++; + } else { + entry->si_bitmap |= si_bit; + } + } + + /* Clear MAC filter table */ + for (i = 0; i < num_mfe; i++) + ntmp_maft_delete_entry(&si->ntmp.cbdrs, i); + + i = 0; + hlist_for_each_entry(entry, &pf->mac_list, node) { + data.cfge.si_bitmap = cpu_to_le16(entry->si_bitmap); + ether_addr_copy(data.keye.mac_addr, entry->mac); + ntmp_maft_add_entry(&si->ntmp.cbdrs, i++, &data); + } + +mac_list_unlock: + mutex_unlock(&pf->mac_list_lock); + + return err; +} + +static void enetc4_pf_flush_si_mac_exact_filter(struct enetc_pf *pf, int si_id, + int mac_type) +{ + struct enetc_mac_list_entry *entry; + struct maft_entry_data data = {0}; + struct enetc_si *si = pf->si; + u16 si_bit = BIT(si_id); + struct hlist_node *tmp; + int i, num_mfe; + + mutex_lock(&pf->mac_list_lock); + + num_mfe = pf->num_mfe; + hlist_for_each_entry_safe(entry, tmp, &pf->mac_list, node) { + if (enetc_mac_filter_type_check(mac_type, entry->mac) && + entry->si_bitmap & si_bit) { + entry->si_bitmap ^= si_bit; + if (!entry->si_bitmap) { + enetc_mac_list_del_entry(entry); + pf->num_mfe--; + } + } + } + + for (i = 0; i < num_mfe; i++) + ntmp_maft_delete_entry(&si->ntmp.cbdrs, i); + + i = 0; + hlist_for_each_entry(entry, &pf->mac_list, node) { + data.cfge.si_bitmap = cpu_to_le16(entry->si_bitmap); + ether_addr_copy(data.keye.mac_addr, entry->mac); + ntmp_maft_add_entry(&si->ntmp.cbdrs, i++, &data); + } + + mutex_unlock(&pf->mac_list_lock); +} + +static int enetc4_pf_set_mac_exact_filter(struct enetc_pf *pf, int type) +{ + int max_num_mfe = pf->caps.mac_filter_num; + struct net_device *ndev = pf->si->ndev; + struct enetc_mac_addr *mac_tbl; + struct netdev_hw_addr *ha; + u8 si_mac[ETH_ALEN]; + int mac_cnt = 0; + int err; + + mac_tbl = kcalloc(max_num_mfe, sizeof(*mac_tbl), GFP_KERNEL); + if (!mac_tbl) + return -ENOMEM; + + enetc_get_primary_mac_addr(&pf->si->hw, si_mac); + + netif_addr_lock_bh(ndev); + if (type & ENETC_MAC_FILTER_TYPE_UC) { + netdev_for_each_uc_addr(ha, ndev) { + if (!is_valid_ether_addr(ha->addr) || + ether_addr_equal(ha->addr, si_mac)) + continue; + + if (mac_cnt >= max_num_mfe) + goto err_nospace_out; + + ether_addr_copy(mac_tbl[mac_cnt++].addr, ha->addr); + } + } + + if (type & ENETC_MAC_FILTER_TYPE_MC) { + netdev_for_each_mc_addr(ha, ndev) { + if (!is_multicast_ether_addr(ha->addr)) + continue; + + if (mac_cnt >= max_num_mfe) + goto err_nospace_out; + + ether_addr_copy(mac_tbl[mac_cnt++].addr, ha->addr); + } + } + netif_addr_unlock_bh(ndev); + + err = enetc4_pf_add_si_mac_exact_filter(pf, 0, mac_tbl, mac_cnt); + kfree(mac_tbl); + + return err; + +err_nospace_out: + netif_addr_unlock_bh(ndev); + kfree(mac_tbl); + + return -ENOSPC; +} + +static void enetc4_pf_set_mac_hash_filter(struct enetc_pf *pf, int type) +{ + struct net_device *ndev = pf->si->ndev; + struct enetc_mac_filter *mac_filter; + struct enetc_hw *hw = &pf->si->hw; + struct enetc_si *si = pf->si; + struct netdev_hw_addr *ha; + + netif_addr_lock_bh(ndev); + if (type & ENETC_MAC_FILTER_TYPE_UC) { + mac_filter = &si->mac_filter[UC]; + enetc_reset_mac_addr_filter(mac_filter); + netdev_for_each_uc_addr(ha, ndev) + enetc_add_mac_addr_ht_filter(mac_filter, ha->addr); + + enetc4_pf_set_si_mac_hash_filter(hw, 0, UC, + *mac_filter->mac_hash_table); + } + + if (type & ENETC_MAC_FILTER_TYPE_MC) { + mac_filter = &si->mac_filter[MC]; + enetc_reset_mac_addr_filter(mac_filter); + netdev_for_each_mc_addr(ha, ndev) + enetc_add_mac_addr_ht_filter(mac_filter, ha->addr); + + enetc4_pf_set_si_mac_hash_filter(hw, 0, MC, + *mac_filter->mac_hash_table); + } + netif_addr_unlock_bh(ndev); +} + +static void enetc4_pf_set_mac_filter(struct enetc_pf *pf, int type) +{ + /* Currently, the MAC address filter table only has 4 entries, and the + * table is shared by PF and VFs. In the default network configuration, + * the MAC filter will be configured with multiple multicast addresses, + * so it is only suitable for unicast filtering. If the number of unicast + * addresses exceeds the table capacity, the MAC hash filter will be used. + */ + if (type & ENETC_MAC_FILTER_TYPE_UC) { + if (enetc4_pf_set_mac_exact_filter(pf, ENETC_MAC_FILTER_TYPE_UC)) + /* Fall back to the MAC hash filter */ + enetc4_pf_set_mac_hash_filter(pf, ENETC_MAC_FILTER_TYPE_UC); + } + + if (type & ENETC_MAC_FILTER_TYPE_MC) + enetc4_pf_set_mac_hash_filter(pf, ENETC_MAC_FILTER_TYPE_MC); +} + static const struct enetc_pf_ops enetc4_pf_ops = { .set_si_primary_mac = enetc4_pf_set_si_primary_mac, .get_si_primary_mac = enetc4_pf_get_si_primary_mac, @@ -71,9 +414,18 @@ static int enetc4_pf_struct_init(struct enetc_si *si) enetc4_get_port_caps(pf); + INIT_HLIST_HEAD(&pf->mac_list); + mutex_init(&pf->mac_list_lock); + return 0; } +static void enetc4_pf_struct_free(struct enetc_pf *pf) +{ + enetc4_pf_destroy_mac_list(pf); + mutex_destroy(&pf->mac_list_lock); +} + static u32 enetc4_psicfgr0_val_construct(bool is_vf, u32 num_tx_bdr, u32 num_rx_bdr) { u32 val; @@ -305,12 +657,53 @@ static void enetc4_pf_free(struct enetc_pf *pf) enetc4_free_ntmp_priv(pf->si); } +static void enetc4_pf_do_set_rx_mode(struct work_struct *work) +{ + struct enetc_si *si = container_of(work, struct enetc_si, rx_mode_task); + struct enetc_pf *pf = enetc_si_priv(si); + struct net_device *ndev = si->ndev; + struct enetc_hw *hw = &si->hw; + bool uc_promisc = false; + bool mc_promisc = false; + int type = 0; + + if (ndev->flags & IFF_PROMISC) { + uc_promisc = true; + mc_promisc = true; + } else if (ndev->flags & IFF_ALLMULTI) { + mc_promisc = true; + type = ENETC_MAC_FILTER_TYPE_UC; + } else { + type = ENETC_MAC_FILTER_TYPE_ALL; + } + + enetc4_pf_set_si_mac_promisc(hw, 0, UC, uc_promisc); + enetc4_pf_set_si_mac_promisc(hw, 0, MC, mc_promisc); + + /* Clear Old MAC filter */ + enetc4_pf_flush_si_mac_exact_filter(pf, 0, ENETC_MAC_FILTER_TYPE_ALL); + enetc4_pf_set_si_mac_hash_filter(hw, 0, UC, 0); + enetc4_pf_set_si_mac_hash_filter(hw, 0, MC, 0); + + /* Set new MAC filter */ + enetc4_pf_set_mac_filter(pf, type); +} + +static void enetc4_pf_set_rx_mode(struct net_device *ndev) +{ + struct enetc_ndev_priv *priv = netdev_priv(ndev); + struct enetc_si *si = priv->si; + + queue_work(si->workqueue, &si->rx_mode_task); +} + static const struct net_device_ops enetc4_ndev_ops = { .ndo_open = enetc_open, .ndo_stop = enetc_close, .ndo_start_xmit = enetc_xmit, .ndo_get_stats = enetc_get_stats, .ndo_set_mac_address = enetc_pf_set_mac_addr, + .ndo_set_rx_mode = enetc4_pf_set_rx_mode, }; static struct phylink_pcs * @@ -721,6 +1114,19 @@ static const struct enetc_si_ops enetc4_psi_ops = { .teardown_cbdr = enetc4_teardown_cbdr, }; +static int enetc4_pf_wq_task_init(struct enetc_si *si) +{ + char wq_name[24]; + + INIT_WORK(&si->rx_mode_task, enetc4_pf_do_set_rx_mode); + snprintf(wq_name, sizeof(wq_name), "enetc-%s", pci_name(si->pdev)); + si->workqueue = create_singlethread_workqueue(wq_name); + if (!si->workqueue) + return -ENOMEM; + + return 0; +} + static int enetc4_pf_probe(struct pci_dev *pdev, const struct pci_device_id *ent) { @@ -756,9 +1162,13 @@ static int enetc4_pf_probe(struct pci_dev *pdev, return err; pf = enetc_si_priv(si); + err = enetc4_pf_wq_task_init(si); + if (err) + goto err_wq_task_init; + err = enetc4_pf_init(pf); if (err) - return err; + goto err_pf_init; enetc_get_si_caps(si); @@ -770,6 +1180,10 @@ static int enetc4_pf_probe(struct pci_dev *pdev, err_netdev_create: enetc4_pf_free(pf); +err_pf_init: + destroy_workqueue(si->workqueue); +err_wq_task_init: + enetc4_pf_struct_free(pf); return err; } @@ -781,6 +1195,8 @@ static void enetc4_pf_remove(struct pci_dev *pdev) enetc4_pf_netdev_destroy(si); enetc4_pf_free(pf); + destroy_workqueue(si->workqueue); + enetc4_pf_struct_free(pf); } static const struct pci_device_id enetc4_pf_id_table[] = { diff --git a/drivers/net/ethernet/freescale/enetc/enetc_hw.h b/drivers/net/ethernet/freescale/enetc/enetc_hw.h index 4098f01479bc..2e676212d230 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc_hw.h +++ b/drivers/net/ethernet/freescale/enetc/enetc_hw.h @@ -712,6 +712,12 @@ static inline void enetc_load_primary_mac_addr(struct enetc_hw *hw, eth_hw_addr_set(ndev, addr); } +static inline void enetc_get_primary_mac_addr(struct enetc_hw *hw, u8 *addr) +{ + *(u32 *)addr = __raw_readl(hw->reg + ENETC_SIPMAR0); + *(u16 *)(addr + 4) = __raw_readw(hw->reg + ENETC_SIPMAR1); +} + #define ENETC_SI_INT_IDX 0 /* base index for Rx/Tx interrupts */ #define ENETC_BDR_INT_BASE_IDX 1 diff --git a/drivers/net/ethernet/freescale/enetc/enetc_pf.h b/drivers/net/ethernet/freescale/enetc/enetc_pf.h index 2b9d0f625f01..3b0cb0d8bf48 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc_pf.h +++ b/drivers/net/ethernet/freescale/enetc/enetc_pf.h @@ -22,6 +22,13 @@ struct enetc_port_caps { int num_msix; int num_rx_bdr; int num_tx_bdr; + int mac_filter_num; +}; + +struct enetc_mac_list_entry { + u8 mac[ETH_ALEN]; + u16 si_bitmap; + struct hlist_node node; }; struct enetc_pf; @@ -57,6 +64,10 @@ struct enetc_pf { struct enetc_port_caps caps; const struct enetc_pf_ops *ops; + + struct hlist_head mac_list; /* MAC address filter table */ + struct mutex mac_list_lock; /* mac_list lock */ + int num_mfe; /* number of mac address filter table entries */ }; #define phylink_to_enetc_pf(config) \ From patchwork Tue Mar 4 07:21:53 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Wei Fang X-Patchwork-Id: 14000125 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 394B6C021B8 for ; Tue, 4 Mar 2025 07:49:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:MIME-Version:Content-Type: Content-Transfer-Encoding:References:In-Reply-To:Message-Id:Date:Subject:Cc: To:From:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=EL6332cKC7WViwONLr9k54vnj9FzBS+8p3izjBPSkO4=; b=JY8s3sVsQHkd/V1VbO/IkmNef6 6CP85a0dbHJAPhAAY29FXkfmP4cR5X6mh+UmNwX64elc2SuI97iKGf/2xeA96HOTrQYEvnt6Wj/b5 4kzhm3O7vxA/8OWzc+gDReGYJhxAbg5PvUCBIxqZBvjrZiDYgWG10nyU0IBHU/zuao+YU1GKr9aeG U5/6h4WmN5w4p/Rf3bNfiQNz/0uZG6p0UztQgno1qxMpTZdJ+w3RxIEnMYNIjwwr+Hxxevcqop42d sMDRNt12utvdGCgfqItwZnUjwghZo5DL+P/dkQ8dqV5HSdvKPwvDEujemvj+egDe8i2TnXbxXYnbQ EzAnpQig==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tpN1b-00000003VjD-16vZ; Tue, 04 Mar 2025 07:49:11 +0000 Received: from mail-am6eur05on20608.outbound.protection.outlook.com ([2a01:111:f403:2612::608] helo=EUR05-AM6-obe.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tpMsR-00000003T1N-1uXV for linux-arm-kernel@lists.infradead.org; Tue, 04 Mar 2025 07:39:44 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=iWb4GS/Dip0UEXBNDm8K8uQNq9ue6dSjBqfwLYfJwdpDyrznrrxOsGQyGv3ia/jg2tTOBMxo9S89wSfer1HcOL/NvLoVdLIrlECAnZVR50zfe1sC9foRBgPe9oFoCLE72bxlx4qFicQVSWr3pReeuHlLYkKQNQPqYmWuN1uCdi+3Fl5z4qR98dgN9oz7JmMp28j25smPpDDIs01YhXaPra2mS8IFgzhSxLzDZK5W2bzZMnhs+CONbMwL7jF/AiISKB4oM2zP7OX3nkskE+ukccKQOT+ltG3w9HyiFC2FejkE+qhSAp09DzampiA9I/ypLQHdl7wiLlh6MER7eaif6g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=EL6332cKC7WViwONLr9k54vnj9FzBS+8p3izjBPSkO4=; b=O6iJP8b2m1gURLhgYZw6/ZPxE1BpMsiGIgXSQrkZ0XZy4lljbbkon6IxBglbZOdsuyGJdATvnRVeDwnYkxhnZu/2iawLw4umauJA7GeoowcfmDiezwfU5hW0rUVX7zFFS3fCFiPLFtYGhSdLaeLZ9iQ1rkdYQN0wU24WrD9FVIn1S1qxooU5YQXBYw1gsusAeObDC/lNTQjEQTzcErc0UT86GB1QiwSpBaR+et3GAVZhuTK9mieTCBDgfC1HMcxPVsZJilIyknqZMzMaMR/Ck8YXTaNR8ur53R6Jrc5Fb7SoEwoN5gESKswQS4kvIliK2F0L1S11a1WhtdEkpHMXAg== 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=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=EL6332cKC7WViwONLr9k54vnj9FzBS+8p3izjBPSkO4=; b=LDcBJFavGyrbkHOFmJgIeNm3X361TMDM5psPnz3m/qem4kz/SBr4ecouGWsBVMAbHyn3b2oxg3P0rNLWHESe8h6Oe+SH7CKZFppOnbKIRkeVT87qSsDU+Emw2f2J0S6bIGupXLgzhrcF3rY4kxbY6D4nEZagJU5g0SbHHhX7CAlLPLO68eFJb+gTzBH3/bpiRnt+Au7jzBbQNKxiyAz9HnG+yq2m3dR+XihiCN8RCCX0RJk0+6YRlKrb25m2GUbOg1trtVYJR1Et0iXfuUpWGX1MZcpwDmimlkk3rFx77M+x5sSykuQmcyc9Z4MvkMu4H/qVvlXGM6gQ8KncJxiunA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from PAXPR04MB8510.eurprd04.prod.outlook.com (2603:10a6:102:211::7) by VI2PR04MB11171.eurprd04.prod.outlook.com (2603:10a6:800:29a::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8422.11; Tue, 4 Mar 2025 07:39:41 +0000 Received: from PAXPR04MB8510.eurprd04.prod.outlook.com ([fe80::a7c2:e2fa:8e04:40db]) by PAXPR04MB8510.eurprd04.prod.outlook.com ([fe80::a7c2:e2fa:8e04:40db%5]) with mapi id 15.20.8466.020; Tue, 4 Mar 2025 07:39:40 +0000 From: Wei Fang To: claudiu.manoil@nxp.com, vladimir.oltean@nxp.com, xiaoning.wang@nxp.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com Cc: christophe.leroy@csgroup.eu, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, imx@lists.linux.dev, linuxppc-dev@lists.ozlabs.org, linux-arm-kernel@lists.infradead.org Subject: [PATCH v3 net-next 05/13] net: enetc: add debugfs interface to dump MAC filter Date: Tue, 4 Mar 2025 15:21:53 +0800 Message-Id: <20250304072201.1332603-6-wei.fang@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250304072201.1332603-1-wei.fang@nxp.com> References: <20250304072201.1332603-1-wei.fang@nxp.com> X-ClientProxiedBy: SG3P274CA0007.SGPP274.PROD.OUTLOOK.COM (2603:1096:4:be::19) To PAXPR04MB8510.eurprd04.prod.outlook.com (2603:10a6:102:211::7) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PAXPR04MB8510:EE_|VI2PR04MB11171:EE_ X-MS-Office365-Filtering-Correlation-Id: 57d4a040-3108-46f5-5702-08dd5aefb926 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|52116014|366016|1800799024|376014|38350700014; X-Microsoft-Antispam-Message-Info: pO53ym7lqEb2pbxVRFgsdx5LGsx9ZaQj4ihF6CWEr2E0l46GIQ7YRmpNeHViSMQ4gvp/HFpKV4o8s1dGanFEg9i1SVjmbSWKMALI68VLrp2jXQ2y+wMvYHCHB3QzffcKAQJI2bPBu3VR32nErhaM/7SY8LJnq5qYTpAD2Tn9yBGJDN59J49IhuEuYB9h6hGiW/xaBoSSHzaLRJXxO3O2W+tTf9sADayaVb2JIQ0mABjAtC1jAdM3lp/lXR9khHq19gs8Kl/uOpJ6pdM2qtjWD8DoiqGRGPizuTh6MYBsy2Oi4KHGr0ox559Kmz/kqPdy8XYtAX3vnL1UuZsQWaluIH4G1VjbCpUWSR3uCD0+7bFwUCysOw53jKyX8q33n+tEOG0/d/Z4tK164xqH5fm0ILkvdEyYqtbp0xfZi4/kRcO0iVRa0PBYQdFxA3Fvt8+xOHzjX1YU0EzHwDChFs219RRtqE1EC1r/5Kp8qIKLegf82jtKYTgLnsWDD1XfLzzM/uDm+EIKgXZX//Gp7KJdEdShuf8TvmMhyX5MZHpA5HOpcGspI698grc9qrlazVgcJzmYPnd7ao9mmIdpdtm3yySPuoahFqF0t+v+kE1c2Pj06C0+F4IrSRb+gr77oo16r6yPNaE6O5uhERAd5ZVBRHDRLKR8ekuWFGHC8doBJCWVROAljIZLo+EZOTqCkqK0/rERJbmqn+8CR/m114iyHTt2vHOyeSUM8Bmrr0jMqu6SYHMRimRILJS0ZkfZNdwMzKAIyIA3DWol+qmoffOWSInGMnQGBDmc5QdY+F6xryC+LJQIyMAK7ejgH84XRpKRgn3pB+REeSaUs3fDm9vF9sH4fjrdHuHQ+Snl4OTMUcLQV3uxeAnj8XWb2naCs4mJOe8Lkol2BwCrMBCxb7RTnydYXvM3fMCAAl+ozXd6Ro15J1i+RiOttjJkG0NIioVhTH8n7nagi1B8alQXYJ2Atbf3q7EcX15+ilodoxpwT2N6uuLoNcEE1sxc2R7TZWnW3A6E0vGvlf5Spbr6ua3aYQFW8oPSe4gIFyX7jkxX64ODFipDqHcdxU+Xv909mH4BKIDGT57NHIu4n1sN1ofqY77r3bLCSgHLeDeltpn/5TtHndom66zW6/njmk7DeUDJ3NGABrVkJWZex4oh4v1D6YAl7oGdXLwTvOktcyz3iTOYqxdxjQo6mz6K9QaCacOsWZV64Noj36/rj1G7uOqBM89D19UrXuj+J6/lnmnrqhiFnPiRKhXWe/wkn++UBO4CWKDW5Abp5TsV69Tlhw9jgPWE56lSAbyT6kQBpQsAaluk5fuGAK1TUgu7v3wNm6uZBiByfHikpP+7zh7/xADCiR3btJj2mL6x5mAGbhh9LKB27Cir7DCfwblNdrd5yoiFxbJgHdBjOFrpwlaxzRuaJzKAoL326ghe33VOngOj/MYdaaas5QAlXFOEqyVdeUnE X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB8510.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(7416014)(52116014)(366016)(1800799024)(376014)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: CBhq3Djjrvh1ODkPjpwgnp7OGaLuZ/i96WI6YHVBZIW2ALWJpuKC/Ku96DWThVhQ0rf8U/fuJ3UnfAeflvYUUfQ3VRi1JxFeg666uvXJE9PZ9lQ2Af/WufD0V7Z8RH5J+bMxEqe9gEOLh6xa2khND+unpVE5XquaYjOGyOQEaL5LHa0mVI2WwWFj2/hqt19rQ7IDBDf4+lqDejimVPK3aMx9wNiAUAtPx2QzpepUtyIJ5kJM/Tlk9JC7Vr8Xmfi1jRbKW2Y23rnuJ8cmNAtxm+tTjMiRxHKnPXyqMicBjvmYerbas3Tz31MJ6Ufwk08qqZv7k1+qgBLr14awm1ycsy0bS4uAsr5yGE7BnmFkj1kYFtUYn/4Hk31obTCFQme/93EzTRSA+OIosPGudzgKuhcHewy5IbhRtVuuQAgGVoKX9YtHYgkpkUKX9+v6vEcdMxr9xQsV5HOvNifEMCXde7zfBIPmf8G9UeVnazdDJqBct1OVFCzy7hWDzMDaJFHEzH6wapiUkhzT487F+pBpWuIpZyHKmExU+8ZTn+Oh+mKgdegHKr/lafPtlgZ0qwMJ2h3SUn+cPzmoRcw2+mixzWIAJSOXDJZegbxSvJHmmnZagoKrsfPLiWno3X/HFygltQmbEfmJ2EiSGBg1fDNH9p7Hf4eKPcStsyr80VR2HbgLHeZmXxst7FyHvgndSMpvL/X75LMifAwzumqG95w0NIIwOJMuO34izJ4RDtqRtzNk7k87pRS8oNRZiP3DzWgBAlSV1kdb3Y94sSNWp72N0Lld15Vyp8kgdgh3LbJLBGNeeDCLHgmX+TeWkdwxb5aXC9X2+BTofGs/39nlfo21n2CuJtPLiQ6XueeuATs6w922QftVchRiDVueQtCNkLFg1YWp7T1etfh0FjDy+vl1dT8Q9pQg8wh/tIaSC8Zlj8vxsHmjpXLKGjjuotEFVR/mvqBGbOam6jSzWHqenvu0CxjceD2t0kkPD3AgbkOtbV2MH9i8zdmPv14S/Zcp4yPuB7BsZ0mFJYUYd0JrZQHym6MVN79mAV0bhJRALzQMC0wiFjqA9s0AxaTrBM3BdZP4XOLSrp7WbASoBP2hx4keruo9tOXNH4G/CRBESVIl6sPHKogKKvqrWbSKXsFMLF8NptO7xRd6F/BeFfs8/uptU/E3YwcRrGZDEZQX5A6k7cy9kc3ceMVKjfD8M/yR3373SsUSRagUo8/4MdyK6PiIP5Raa+CHX9ZL1yzbptZ8THEkSnz23pWlRDz2KY3k/LjrehoaMDjfv+ngOmPMgiO7HQXoXzaep+Yd6gZ2kRPzs5X0weh2WpYJoFnlgFKXlcXbZQXUCNJRm+7HSgc9weOfO+WdS02HECQLVt1HP5PVh2mI0ujQuUC683kxClQVmwfw8rL0hNOFeDZbVywK4rhNSWlkQWDqIzYVaaIuz7ux+zpKMxeeSi4zJH2xhllRx9JxoNNHEoOFlVslQIp+rDjuim1SU2/EPgjRpk/e6OK/fsWdIKRsBzTn8gI6tJ4mfxDGt7yIcjjbjN5gtadKRwbsAp/SfiwxB6ep5betXBvz3uRQOftvurkIeJ3bIvPSKcbs X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 57d4a040-3108-46f5-5702-08dd5aefb926 X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB8510.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Mar 2025 07:39:40.8670 (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: 0p45MhLZ6dK8V8X6FtXnP5NPVGhm8bi4mQFQSZaa4tyQhFo9Id4mAmzu2kVMOgMYOVSifKtNaltZ+7OGdDS5Vg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI2PR04MB11171 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250303_233943_506559_35F72C5C X-CRM114-Status: GOOD ( 22.78 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org ENETC's MAC filter consists of hash MAC filter and exact MAC filter. Hash MAC filter is a 64-entry hash table consisting of two 32-bit registers. Exact MAC filter is implemented by configuring MAC address filter table through command BD ring. The table is stored in ENETC's internal memory and needs to be read through command BD ring. In order to facilitate debugging, added a debugfs interface to get the relevant information about MAC filter. Signed-off-by: Wei Fang --- drivers/net/ethernet/freescale/enetc/Makefile | 1 + drivers/net/ethernet/freescale/enetc/enetc.h | 1 + .../ethernet/freescale/enetc/enetc4_debugfs.c | 93 +++++++++++++++++++ .../ethernet/freescale/enetc/enetc4_debugfs.h | 20 ++++ .../net/ethernet/freescale/enetc/enetc4_pf.c | 4 + 5 files changed, 119 insertions(+) create mode 100644 drivers/net/ethernet/freescale/enetc/enetc4_debugfs.c create mode 100644 drivers/net/ethernet/freescale/enetc/enetc4_debugfs.h diff --git a/drivers/net/ethernet/freescale/enetc/Makefile b/drivers/net/ethernet/freescale/enetc/Makefile index 707a68e26971..f1c5ad45fd76 100644 --- a/drivers/net/ethernet/freescale/enetc/Makefile +++ b/drivers/net/ethernet/freescale/enetc/Makefile @@ -16,6 +16,7 @@ fsl-enetc-$(CONFIG_FSL_ENETC_QOS) += enetc_qos.o obj-$(CONFIG_NXP_ENETC4) += nxp-enetc4.o nxp-enetc4-y := enetc4_pf.o +nxp-enetc4-$(CONFIG_DEBUG_FS) += enetc4_debugfs.o obj-$(CONFIG_FSL_ENETC_VF) += fsl-enetc-vf.o fsl-enetc-vf-y := enetc_vf.o diff --git a/drivers/net/ethernet/freescale/enetc/enetc.h b/drivers/net/ethernet/freescale/enetc/enetc.h index 4dba91408e3d..ca1bc85c0ac9 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc.h +++ b/drivers/net/ethernet/freescale/enetc/enetc.h @@ -318,6 +318,7 @@ struct enetc_si { struct enetc_mac_filter mac_filter[MADDR_TYPE]; struct workqueue_struct *workqueue; struct work_struct rx_mode_task; + struct dentry *debugfs_root; }; #define ENETC_SI_ALIGN 32 diff --git a/drivers/net/ethernet/freescale/enetc/enetc4_debugfs.c b/drivers/net/ethernet/freescale/enetc/enetc4_debugfs.c new file mode 100644 index 000000000000..3a660c80344a --- /dev/null +++ b/drivers/net/ethernet/freescale/enetc/enetc4_debugfs.c @@ -0,0 +1,93 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* Copyright 2025 NXP */ + +#include +#include +#include + +#include "enetc_pf.h" +#include "enetc4_debugfs.h" + +#define is_en(x) (x) ? "Enabled" : "Disabled" + +static void enetc_show_si_mac_hash_filter(struct seq_file *s, int i) +{ + struct enetc_si *si = s->private; + struct enetc_hw *hw = &si->hw; + u32 hash_h, hash_l; + + hash_l = enetc_port_rd(hw, ENETC4_PSIUMHFR0(i)); + hash_h = enetc_port_rd(hw, ENETC4_PSIUMHFR1(i)); + seq_printf(s, "SI %d unicast MAC hash filter: 0x%08x%08x\n", + i, hash_h, hash_l); + + hash_l = enetc_port_rd(hw, ENETC4_PSIMMHFR0(i)); + hash_h = enetc_port_rd(hw, ENETC4_PSIMMHFR1(i)); + seq_printf(s, "SI %d multicast MAC hash filter: 0x%08x%08x\n", + i, hash_h, hash_l); +} + +static int enetc_mac_filter_show(struct seq_file *s, void *data) +{ + struct maft_entry_data maft_data; + struct enetc_si *si = s->private; + struct enetc_hw *hw = &si->hw; + struct maft_keye_data *keye; + struct enetc_pf *pf; + int i, err, num_si; + u32 val; + + pf = enetc_si_priv(si); + num_si = pf->caps.num_vsi + 1; + + val = enetc_port_rd(hw, ENETC4_PSIPMMR); + for (i = 0; i < num_si; i++) { + seq_printf(s, "SI %d Unicast Promiscuous mode: %s\n", + i, is_en(PSIPMMR_SI_MAC_UP(i) & val)); + seq_printf(s, "SI %d Multicast Promiscuous mode: %s\n", + i, is_en(PSIPMMR_SI_MAC_MP(i) & val)); + } + + /* MAC hash filter table */ + for (i = 0; i < num_si; i++) + enetc_show_si_mac_hash_filter(s, i); + + if (!pf->num_mfe) + return 0; + + /* MAC address filter table */ + seq_puts(s, "Show MAC address filter table\n"); + for (i = 0; i < pf->num_mfe; i++) { + memset(&maft_data, 0, sizeof(maft_data)); + err = ntmp_maft_query_entry(&si->ntmp.cbdrs, i, &maft_data); + if (err) + return err; + + keye = &maft_data.keye; + seq_printf(s, "Entry %d, MAC: %pM, SI bitmap: 0x%04x\n", i, + keye->mac_addr, le16_to_cpu(maft_data.cfge.si_bitmap)); + } + + return 0; +} +DEFINE_SHOW_ATTRIBUTE(enetc_mac_filter); + +void enetc_create_debugfs(struct enetc_si *si) +{ + struct net_device *ndev = si->ndev; + struct dentry *root; + + root = debugfs_create_dir(netdev_name(ndev), NULL); + if (IS_ERR(root)) + return; + + si->debugfs_root = root; + + debugfs_create_file("mac_filter", 0444, root, si, &enetc_mac_filter_fops); +} + +void enetc_remove_debugfs(struct enetc_si *si) +{ + debugfs_remove_recursive(si->debugfs_root); + si->debugfs_root = NULL; +} diff --git a/drivers/net/ethernet/freescale/enetc/enetc4_debugfs.h b/drivers/net/ethernet/freescale/enetc/enetc4_debugfs.h new file mode 100644 index 000000000000..96caca35f79d --- /dev/null +++ b/drivers/net/ethernet/freescale/enetc/enetc4_debugfs.h @@ -0,0 +1,20 @@ +/* SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause) */ +/* Copyright 2025 NXP */ + +#ifndef __ENETC4_DEBUGFS_H +#define __ENETC4_DEBUGFS_H + +#if IS_ENABLED(CONFIG_DEBUG_FS) +void enetc_create_debugfs(struct enetc_si *si); +void enetc_remove_debugfs(struct enetc_si *si); +#else +static inline void enetc_create_debugfs(struct enetc_si *si) +{ +} + +static inline void enetc_remove_debugfs(struct enetc_si *si) +{ +} +#endif + +#endif diff --git a/drivers/net/ethernet/freescale/enetc/enetc4_pf.c b/drivers/net/ethernet/freescale/enetc/enetc4_pf.c index 305781ccefd0..c696eb4f0488 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc4_pf.c +++ b/drivers/net/ethernet/freescale/enetc/enetc4_pf.c @@ -8,6 +8,7 @@ #include #include "enetc_pf_common.h" +#include "enetc4_debugfs.h" #define ENETC_SI_MAX_RING_NUM 8 @@ -1176,6 +1177,8 @@ static int enetc4_pf_probe(struct pci_dev *pdev, if (err) goto err_netdev_create; + enetc_create_debugfs(si); + return 0; err_netdev_create: @@ -1193,6 +1196,7 @@ static void enetc4_pf_remove(struct pci_dev *pdev) struct enetc_si *si = pci_get_drvdata(pdev); struct enetc_pf *pf = enetc_si_priv(si); + enetc_remove_debugfs(si); enetc4_pf_netdev_destroy(si); enetc4_pf_free(pf); destroy_workqueue(si->workqueue); From patchwork Tue Mar 4 07:21:54 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Wei Fang X-Patchwork-Id: 14000126 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id A2A9AC021B8 for ; Tue, 4 Mar 2025 07:50:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:MIME-Version:Content-Type: Content-Transfer-Encoding:References:In-Reply-To:Message-Id:Date:Subject:Cc: To:From:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=PnemyJ7KWf35aRNaj0RkOMuzMFubZpbJcQIDrPEgHl0=; b=ZYbVQwqevWXgb+bAL94QQ/h7Ki CoN+l4bMsFiAp4BaQGUTgCobAStGB/1F4+GIpaB8aAPl2YCxMkC7WdlMr3uEGYcAn+bnPd38yC//N jPsayYUZazYVLpSw1LZtEHV8Lgp4oiPiLAa8M9WwBCd5hA2RMPJgCgoVIThoLtzAYFrxA0lJf08tB 02oZziIU54qiPapE7BGZy2Si18px0pgIl2nnSsPWvRVj0oz+Zu5rbKdxdRLarICZGNt+dAkf5FtMm 3VbvuROqsantfBfXF1tYE3/H5IufxuXmfXSJLIKpDF4oa1ilNIxyuOtZtRtwTpZG/DnFxC6SAJLfa D8/DVixQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tpN3A-00000003WNg-2cO9; Tue, 04 Mar 2025 07:50:48 +0000 Received: from mail-db5eur02on20629.outbound.protection.outlook.com ([2a01:111:f403:2608::629] helo=EUR02-DB5-obe.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tpMsY-00000003T5q-3NI2 for linux-arm-kernel@lists.infradead.org; Tue, 04 Mar 2025 07:39:52 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=H72EYRPEunH0Ff8n/IWKkEHpXqW5TvCNVC5DBlpBsw/n93oIoDZcF82Kn45/lyeo7OCAKp1br7pjKKF0LGE+5wu+ddi1Kmjn2IU/EnziY0aFI85ZGEDLJGkG49mUjVV7kANzS4KHsfqovcUvaX8er/B1vTFdKs3juzJhrNP6Dy9R07g+pQ2/e1leKK4gqQ20NqJAontUHS3hBCrE9xW8o+6/gbb8BWNnVbrG6Q5hAPSo9f4x79l81DmcPpu/EwXti/1S/2mz+M9sJlBvMCg8A03Z5fWMgkjaqqbLlGNRnsbkyMvxqkdjsWUZ0omIKTqOzao2Jt3BhBjyS2AMZl56kA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=PnemyJ7KWf35aRNaj0RkOMuzMFubZpbJcQIDrPEgHl0=; b=Mm7uFYlRaDENOmr9UfUL6u6L3jrV6ahsxanWa7XSrs5SIokQhe3u5BHBL3Ak+myMqz4W1jPQCodfeq53BGCASmWxfh1j+/8ysD+XNnZ8E176rUJHJJlLBe9nG6WJgZioQ5olr8luJN90Howkpzp04ZuB9KdhlFn8/1s1h3csukeomd2mQebXzASIcJ5O2mPDT3ynVpFjmHeUbY9+Rilo92ASs27CPYPrZPNR9oEvbSloDV95r5jXUBdDnS7VVcgtdqvZXyKqM4s27X+tIfxm37PuHStYPPOuL+2p4UKeo4BeSqG8QvDoub8pQwvZ2vH+o6y8JVPYbboGeaxcnJVqpA== 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=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=PnemyJ7KWf35aRNaj0RkOMuzMFubZpbJcQIDrPEgHl0=; b=nEKoaJPuxXNsKctg5iVbVvzBLUUl6Yf7XNmKS28TmY+X9JAtqfuZTl7wMN5Qh7i7pEFKbwwM9Vg01SCm8jE/cjXOc8IjdYwLZ425cZQsMYcvaEa18ptnicSGaZ1SWIdwFQOklRJfswVY/SHuF3BYPNqg59kTm/6zuDQ+vVMSrNvUmCKMfRSV4nsM/3R7KbMf1z7o4/jawFvFsiJXpMcRHBIGmESVePNee9+TjY/U8fL9/qJtJqCava2xafXdViwsStN9HtynchSqFbhoSYLattgqM6rBUD1fGgD6Y3xtRGOsz+94Jg2HNZPD7YA/nCU5OVK9wqxB4Q6cEKTPVWGoKg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from PAXPR04MB8510.eurprd04.prod.outlook.com (2603:10a6:102:211::7) by VI2PR04MB11171.eurprd04.prod.outlook.com (2603:10a6:800:29a::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8422.11; Tue, 4 Mar 2025 07:39:45 +0000 Received: from PAXPR04MB8510.eurprd04.prod.outlook.com ([fe80::a7c2:e2fa:8e04:40db]) by PAXPR04MB8510.eurprd04.prod.outlook.com ([fe80::a7c2:e2fa:8e04:40db%5]) with mapi id 15.20.8466.020; Tue, 4 Mar 2025 07:39:45 +0000 From: Wei Fang To: claudiu.manoil@nxp.com, vladimir.oltean@nxp.com, xiaoning.wang@nxp.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com Cc: christophe.leroy@csgroup.eu, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, imx@lists.linux.dev, linuxppc-dev@lists.ozlabs.org, linux-arm-kernel@lists.infradead.org Subject: [PATCH v3 net-next 06/13] net: enetc: add RSS support for i.MX95 ENETC PF Date: Tue, 4 Mar 2025 15:21:54 +0800 Message-Id: <20250304072201.1332603-7-wei.fang@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250304072201.1332603-1-wei.fang@nxp.com> References: <20250304072201.1332603-1-wei.fang@nxp.com> X-ClientProxiedBy: SG3P274CA0007.SGPP274.PROD.OUTLOOK.COM (2603:1096:4:be::19) To PAXPR04MB8510.eurprd04.prod.outlook.com (2603:10a6:102:211::7) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PAXPR04MB8510:EE_|VI2PR04MB11171:EE_ X-MS-Office365-Filtering-Correlation-Id: 95eb27b5-c7b9-49a7-b06c-08dd5aefbbc5 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|52116014|366016|1800799024|376014|38350700014; X-Microsoft-Antispam-Message-Info: gO8m32JRqzvKKLBg5GAHgBQMS82XPHoM4t07ZUYMgsseRnOm7yx/QwisPR6ydQgvaUVgKW0iIaHc8zHYfJ29mrsZ96Zmew3wn7zowBeEksPaCu4J+yqG695XGNIf+JDDz+CYjPBDjyannl2L7nooHS0OVrXkrsKBlJjPjTXPxJSq3yG+tBvzkqX35TOj4FEL3jpcxpx+MpkrOAzTmBGKuQk831ukXKJHQwTHTF8iDS+H/D5GqpSFNtVfXABAJ3/ZJ3w/nrQ8b7ru0IccDICjiKLOUdoln14kafRkyHpq138jcKri7MrlLXZWA/0UJOoGqzBvOOIXLdfGCGM/AUzdwS3EDYo9S8VXuNqjgEXGIQVNkh47Bc1PdIEmlnIEkC4mfdwgvw7xyLexhmds2Py8gDvHJ9vjTKEve+hY3um54eJM6AoG7kq7BKQ547pIFwRR3AGGZjKfs5ZL5uMWITBcbk2KS9QboJ+CgSTvU4EKkv/uPXd2b5Bwsd8iySVehldhR+TcxuOL7nVSZ/0/lUajNIvDEYPOsyH/sSZ4MnzugXTvwZFJUtDl4k8gjcPheZgUmazRoNfU4mtjnXkfcAKcWrjnyywsHRCeTBIoEg5YVAFwNt3N6GLYNPC1EW1n684rRuYjdRRBQxwO/anFaBUBDJhCFdTjum2x3jrkSunHGMfrqnI1mKSR8aO+D1IRqrO1LO1Rk8W76s1jhrD9mLJTsTa9RFJ2Eh1nLY+seZf7d7/Wr6M1/0hXIyLLSyU/iyRIH+bbX/vFCqYnDIUJMKiPm8iZ/WhhFCCzJiBNpNG8UYCD5zF19u+UHAJ6bqPJoEEzvebyvGy2nGLfQrSU31J9JyVJc9OVGy/NPRVhVmmQjI27CuMUdgxvp/3p7NacM/e+lQUn2OCJ09S3Lsm2Dk3l/g8xU2abX3b2BRwRAg3GWEMMsjfQBUftW8dqFZ5fmjhBvkHypvIxjE+3s8Uj8jfUEwOabBDRW55dpDayGCq4w8H+5FxtPqGML2Y96ffoIZ1FlhED66yVOVbuEHpC6Qg7ye4+6loIHBuQ6BfX/TlF/FKw4O/NEGyGq8StmCoFf5jqW0GmkKXHtngnZotgpkhJCCeqRebsuwV6OsT6QiliwTsq+maB+KYXK/88b7wvYi4tepdfECukEjIDL/2ZTj0rbyeJQ3iEMtQ7xv4W5YzTom2+3gM2OsdxkIvUwxRwkEmitOiSbwijB1za6OsAuZ8nS7yJTIpuuE5Qq+LI9L4ki+0DHDmb9i24zK2T69rkeLbOcpIdh8VBnb7z0up7uP6moBqFJlJDYIUU9uSma8lllVx5wmKB+a2KSU8GdotqhxkOYLuvNys2ZMDBiFWDC+azkmK/oAYk6KYZtnIxMGScoNFuxPMtcg6uDFx14kBBTT6d5tp56ciadI85nfbF4TEp8fR5i5+8ZXWFUDFPVFBrQE2r9tT/Dv4UxUqlPjrn3mFv X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB8510.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(7416014)(52116014)(366016)(1800799024)(376014)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: qtdb1l+mYAqUHeSfnATcEqW7qZLze6vfyn1Rg0LGojaGu7KbGnu4rogGtKhFOC624BzjChvq05ry4vbQY8fbj/TwVlhKGYV6PWuQmKJjRx3XjCvx5Gy+SNBASa1O+zbDXx48KFV+PSNSQbfJy3AvrQZcVSxC6a/64V0zlSXhFcqIUHQrUgvO34byqgN69xW15JEFzy77aOLDRy4LSU1Sff8ZTqENeh5I09VhyxYtKv5MuSTjh3NfPv/KWopN7xOyGszavpzOO+Xtq7CHFQC/K4kc9NUY2OQLbB2/Akf3r1ybqyS1C0zxxnlyLYDTu5cZRemXFi3Io5/Wqv7vjZlUvav+r0dXh/rBsljS3qM4VqSnehTB0nSydTIIS4Uz/butoUqNL1QwaxuNPPtiutYTqDHyY5SdR0vHc9xf4EQnK8oO87HNgwRi1QoyJ+7KifiuV6ITsU9n8ssumVCTdOh/c39iZeRtjolOBu7xdwt2yR8BoA+mUsDsKfM3J/IOpEPgyc8kB4ZdLanNkynjVHEvvngr7R6xAseU382omPb6FOWP7jbckZ7T/i0eJSs84SzfCFQRQ/aj+xDrQt5Z3bULd/Bf8i8I2hbNHWWG3td+RuLuXYCAnbQEVvYOQ6c9rEANf3WawDYoHfdf9kPGwFmnqzUI4TkgJoWa6B+OvP7J241Gq7hoVHfF6K674Egg69rtI5NLFzU08IPef7Rwumv5mYyPFpXwPkkIx8P5vxzoyvbZcsQRr496ToKU81EKncmgdfn56fQiCsYHViL6mTJKq18zpZbxJuNDM498EwclnYxmnDy37ANcRNKOBCbmVa0j8D5gplPgqPwJakrx57UPGy/gRenevWVD2DkQryQ8aGG5P/Q0O/5yHVbVTD6l4Glx08SRtPy9lcPbI6r+Fee3a57w7MPuS/VRV2q8wxIyVJ9T5uil9WHdT+Y2718LSbz1mU0ErifuZOPZylgP9hYJZQgxQekbRQp35kyJaKr276OTP+4mRL84OhCwCFQlqtj9GGOdANPsuGkHRYSg5f6PIhe22AiUIKcYHst34OcDimk+o1/fM8Y+6sCCXD/T+8wfI6GwMCETXAGNHEAi1dnY1IXWkhia/b6l4WfsiqXgRDz9xIygpjIbLeE9IwU9jUmBYoggjx/tGFecaa3v5RYEL8v7faWP3knQXh0qmHr8tQ3dV620EMHHylK9L7OfJ55q1/Pphy7v53LDLkhDxgcrYYWTNCaJBI6Mkx2QHqgGz3cuGpcm1hKgnKRXHugfpWkIiI8FoLaEmia6q/fXunwIuY90bf/a/CBZQ0SYaHZQACcYIasQFXOQ2Jn3ElGHHYlp1OVoWt3Weu4/kxaC9nHNSLsd+TdJ/yCTo1s2qBHn4e74Rz6jEdUr5Bh8KR96E2k5T7lA/7fFuSsYwE2gzwDaahXvzlX8cNEuxfvrn+QWVmMhf4+iDnsF6JueS2XWL9DFO9kIsHALwuH1Itc3clkoy5fPLsy7F8qy+K5oPZZL2kGEkJsBGUxr38cUVzdX6FBkQPs87Pf7hKR8uJIT5LmQWHwIFSjV2jVFVCmmYinXQdi53ujH0TqvBR8em9cRobX/ X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 95eb27b5-c7b9-49a7-b06c-08dd5aefbbc5 X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB8510.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Mar 2025 07:39:45.3826 (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: puJhJRoSq6BYU8OXeSKzGCW27XLeDTHERQE32aeXxpvDyz5UTJbOQFvuCGuYUmdWwoBrqpLJEjuFq2k1yGt9bQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI2PR04MB11171 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250303_233951_005209_E483E4DF X-CRM114-Status: GOOD ( 19.55 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Add Receive side scaling (RSS) support for i.MX95 ENETC PF to improve the network performance and balance the CPU loading. The main changes are as follows. 1. Since i.MX95 ENETC (v4) use NTMP 2.0 to manage the RSS table, which is different from LS1028A ENETC (v1). In order to reuse some functions related to the RSS table, so add .get_rss_table() and .set_rss_table() hooks to enetc_si_ops. 2. Since the offset of the RSS key registers of i.MX95 ENETC is also different from that of LS1028A, so add enetc_get_rss_key_base() to get the base offset for the different chips, so that enetc_set_rss_key() and enetc_get_rss_key() can be reused for this trivial. Signed-off-by: Wei Fang --- drivers/net/ethernet/freescale/enetc/enetc.c | 7 +- drivers/net/ethernet/freescale/enetc/enetc.h | 6 +- .../net/ethernet/freescale/enetc/enetc4_pf.c | 22 +++--- .../net/ethernet/freescale/enetc/enetc_cbdr.c | 14 ++++ .../ethernet/freescale/enetc/enetc_ethtool.c | 69 +++++++++++++++---- .../net/ethernet/freescale/enetc/enetc_pf.c | 4 +- .../freescale/enetc/enetc_pf_common.c | 6 +- .../net/ethernet/freescale/enetc/enetc_vf.c | 2 + 8 files changed, 95 insertions(+), 35 deletions(-) diff --git a/drivers/net/ethernet/freescale/enetc/enetc.c b/drivers/net/ethernet/freescale/enetc/enetc.c index 3832d2cd91ba..5b5e65ac8fab 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc.c +++ b/drivers/net/ethernet/freescale/enetc/enetc.c @@ -2405,7 +2405,7 @@ static int enetc_setup_default_rss_table(struct enetc_si *si, int num_groups) for (i = 0; i < si->num_rss; i++) rss_table[i] = i % num_groups; - enetc_set_rss_table(si, rss_table, si->num_rss); + si->ops->set_rss_table(si, rss_table, si->num_rss); kfree(rss_table); @@ -2436,10 +2436,7 @@ int enetc_configure_si(struct enetc_ndev_priv *priv) if (si->hw_features & ENETC_SI_F_LSO) enetc_set_lso_flags_mask(hw); - /* TODO: RSS support for i.MX95 will be supported later, and the - * is_enetc_rev1() condition will be removed - */ - if (si->num_rss && is_enetc_rev1(si)) { + if (si->num_rss) { err = enetc_setup_default_rss_table(si, priv->num_rx_rings); if (err) return err; diff --git a/drivers/net/ethernet/freescale/enetc/enetc.h b/drivers/net/ethernet/freescale/enetc/enetc.h index ca1bc85c0ac9..ecf79338cd79 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc.h +++ b/drivers/net/ethernet/freescale/enetc/enetc.h @@ -290,6 +290,8 @@ struct enetc_si; struct enetc_si_ops { int (*setup_cbdr)(struct enetc_si *si); void (*teardown_cbdr)(struct enetc_si *si); + int (*get_rss_table)(struct enetc_si *si, u32 *table, int count); + int (*set_rss_table)(struct enetc_si *si, const u32 *table, int count); }; /* PCI IEP device data */ @@ -537,10 +539,12 @@ int enetc_set_mac_flt_entry(struct enetc_si *si, int index, int enetc_clear_mac_flt_entry(struct enetc_si *si, int index); int enetc_set_fs_entry(struct enetc_si *si, struct enetc_cmd_rfse *rfse, int index); -void enetc_set_rss_key(struct enetc_hw *hw, const u8 *bytes); +void enetc_set_rss_key(struct enetc_si *si, const u8 *bytes); int enetc_get_rss_table(struct enetc_si *si, u32 *table, int count); int enetc_set_rss_table(struct enetc_si *si, const u32 *table, int count); int enetc_send_cmd(struct enetc_si *si, struct enetc_cbd *cbd); +int enetc4_get_rss_table(struct enetc_si *si, u32 *table, int count); +int enetc4_set_rss_table(struct enetc_si *si, const u32 *table, int count); static inline void *enetc_cbd_alloc_data_mem(struct enetc_si *si, struct enetc_cbd *cbd, diff --git a/drivers/net/ethernet/freescale/enetc/enetc4_pf.c b/drivers/net/ethernet/freescale/enetc/enetc4_pf.c index c696eb4f0488..adaf28fdf0aa 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc4_pf.c +++ b/drivers/net/ethernet/freescale/enetc/enetc4_pf.c @@ -579,22 +579,13 @@ static void enetc4_set_trx_frame_size(struct enetc_pf *pf) enetc4_pf_reset_tc_msdu(&si->hw); } -static void enetc4_set_rss_key(struct enetc_hw *hw, const u8 *bytes) -{ - int i; - - for (i = 0; i < ENETC_RSSHASH_KEY_SIZE / 4; i++) - enetc_port_wr(hw, ENETC4_PRSSKR(i), ((u32 *)bytes)[i]); -} - static void enetc4_set_default_rss_key(struct enetc_pf *pf) { u8 hash_key[ENETC_RSSHASH_KEY_SIZE] = {0}; - struct enetc_hw *hw = &pf->si->hw; /* set up hash key */ get_random_bytes(hash_key, ENETC_RSSHASH_KEY_SIZE); - enetc4_set_rss_key(hw, hash_key); + enetc_set_rss_key(pf->si, hash_key); } static void enetc4_enable_trx(struct enetc_pf *pf) @@ -698,6 +689,14 @@ static void enetc4_pf_set_rx_mode(struct net_device *ndev) queue_work(si->workqueue, &si->rx_mode_task); } +static int enetc4_pf_set_features(struct net_device *ndev, + netdev_features_t features) +{ + enetc_set_features(ndev, features); + + return 0; +} + static const struct net_device_ops enetc4_ndev_ops = { .ndo_open = enetc_open, .ndo_stop = enetc_close, @@ -705,6 +704,7 @@ static const struct net_device_ops enetc4_ndev_ops = { .ndo_get_stats = enetc_get_stats, .ndo_set_mac_address = enetc_pf_set_mac_addr, .ndo_set_rx_mode = enetc4_pf_set_rx_mode, + .ndo_set_features = enetc4_pf_set_features, }; static struct phylink_pcs * @@ -1113,6 +1113,8 @@ static void enetc4_pf_netdev_destroy(struct enetc_si *si) static const struct enetc_si_ops enetc4_psi_ops = { .setup_cbdr = enetc4_setup_cbdr, .teardown_cbdr = enetc4_teardown_cbdr, + .get_rss_table = enetc4_get_rss_table, + .set_rss_table = enetc4_set_rss_table, }; static int enetc4_pf_wq_task_init(struct enetc_si *si) diff --git a/drivers/net/ethernet/freescale/enetc/enetc_cbdr.c b/drivers/net/ethernet/freescale/enetc/enetc_cbdr.c index 4e5125331d7b..1a74b93f1fd3 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc_cbdr.c +++ b/drivers/net/ethernet/freescale/enetc/enetc_cbdr.c @@ -299,3 +299,17 @@ int enetc_set_rss_table(struct enetc_si *si, const u32 *table, int count) return enetc_cmd_rss_table(si, (u32 *)table, count, false); } EXPORT_SYMBOL_GPL(enetc_set_rss_table); + +int enetc4_get_rss_table(struct enetc_si *si, u32 *table, int count) +{ + return ntmp_rsst_query_or_update_entry(&si->ntmp.cbdrs, + table, count, true); +} +EXPORT_SYMBOL_GPL(enetc4_get_rss_table); + +int enetc4_set_rss_table(struct enetc_si *si, const u32 *table, int count) +{ + return ntmp_rsst_query_or_update_entry(&si->ntmp.cbdrs, + (u32 *)table, count, false); +} +EXPORT_SYMBOL_GPL(enetc4_set_rss_table); diff --git a/drivers/net/ethernet/freescale/enetc/enetc_ethtool.c b/drivers/net/ethernet/freescale/enetc/enetc_ethtool.c index ece3ae28ba82..bc65135925b8 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc_ethtool.c +++ b/drivers/net/ethernet/freescale/enetc/enetc_ethtool.c @@ -625,6 +625,24 @@ static int enetc_get_rxnfc(struct net_device *ndev, struct ethtool_rxnfc *rxnfc, return 0; } +static int enetc4_get_rxnfc(struct net_device *ndev, struct ethtool_rxnfc *rxnfc, + u32 *rule_locs) +{ + struct enetc_ndev_priv *priv = netdev_priv(ndev); + + switch (rxnfc->cmd) { + case ETHTOOL_GRXRINGS: + rxnfc->data = priv->num_rx_rings; + break; + case ETHTOOL_GRXFH: + return enetc_get_rsshash(rxnfc); + default: + return -EOPNOTSUPP; + } + + return 0; +} + static int enetc_set_rxnfc(struct net_device *ndev, struct ethtool_rxnfc *rxnfc) { struct enetc_ndev_priv *priv = netdev_priv(ndev); @@ -677,36 +695,53 @@ static u32 enetc_get_rxfh_indir_size(struct net_device *ndev) return priv->si->num_rss; } +static int enetc_get_rss_key_base(struct enetc_si *si) +{ + if (is_enetc_rev1(si)) + return ENETC_PRSSK(0); + + return ENETC4_PRSSKR(0); +} + +static void enetc_get_rss_key(struct enetc_si *si, const u8 *key) +{ + int base = enetc_get_rss_key_base(si); + struct enetc_hw *hw = &si->hw; + int i; + + for (i = 0; i < ENETC_RSSHASH_KEY_SIZE / 4; i++) + ((u32 *)key)[i] = enetc_port_rd(hw, base + i * 4); +} + static int enetc_get_rxfh(struct net_device *ndev, struct ethtool_rxfh_param *rxfh) { struct enetc_ndev_priv *priv = netdev_priv(ndev); - struct enetc_hw *hw = &priv->si->hw; - int err = 0, i; + struct enetc_si *si = priv->si; + int err = 0; /* return hash function */ rxfh->hfunc = ETH_RSS_HASH_TOP; /* return hash key */ - if (rxfh->key && hw->port) - for (i = 0; i < ENETC_RSSHASH_KEY_SIZE / 4; i++) - ((u32 *)rxfh->key)[i] = enetc_port_rd(hw, - ENETC_PRSSK(i)); + if (rxfh->key && enetc_si_is_pf(si)) + enetc_get_rss_key(si, rxfh->key); /* return RSS table */ if (rxfh->indir) - err = enetc_get_rss_table(priv->si, rxfh->indir, - priv->si->num_rss); + err = si->ops->get_rss_table(si, rxfh->indir, si->num_rss); return err; } -void enetc_set_rss_key(struct enetc_hw *hw, const u8 *bytes) +void enetc_set_rss_key(struct enetc_si *si, const u8 *bytes) { + int base = enetc_get_rss_key_base(si); + struct enetc_hw *hw = &si->hw; int i; for (i = 0; i < ENETC_RSSHASH_KEY_SIZE / 4; i++) - enetc_port_wr(hw, ENETC_PRSSK(i), ((u32 *)bytes)[i]); + enetc_port_wr(hw, base + i * 4, ((u32 *)bytes)[i]); } EXPORT_SYMBOL_GPL(enetc_set_rss_key); @@ -715,17 +750,16 @@ static int enetc_set_rxfh(struct net_device *ndev, struct netlink_ext_ack *extack) { struct enetc_ndev_priv *priv = netdev_priv(ndev); - struct enetc_hw *hw = &priv->si->hw; + struct enetc_si *si = priv->si; int err = 0; /* set hash key, if PF */ - if (rxfh->key && hw->port) - enetc_set_rss_key(hw, rxfh->key); + if (rxfh->key && enetc_si_is_pf(si)) + enetc_set_rss_key(si, rxfh->key); /* set RSS table */ if (rxfh->indir) - err = enetc_set_rss_table(priv->si, rxfh->indir, - priv->si->num_rss); + err = si->ops->set_rss_table(si, rxfh->indir, si->num_rss); return err; } @@ -1240,6 +1274,11 @@ const struct ethtool_ops enetc4_pf_ethtool_ops = { .set_wol = enetc_set_wol, .get_pauseparam = enetc_get_pauseparam, .set_pauseparam = enetc_set_pauseparam, + .get_rxnfc = enetc4_get_rxnfc, + .get_rxfh_key_size = enetc_get_rxfh_key_size, + .get_rxfh_indir_size = enetc_get_rxfh_indir_size, + .get_rxfh = enetc_get_rxfh, + .set_rxfh = enetc_set_rxfh, }; void enetc_set_ethtool_ops(struct net_device *ndev) diff --git a/drivers/net/ethernet/freescale/enetc/enetc_pf.c b/drivers/net/ethernet/freescale/enetc/enetc_pf.c index cc3e52bd3096..38ec7657b9aa 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc_pf.c +++ b/drivers/net/ethernet/freescale/enetc/enetc_pf.c @@ -523,7 +523,7 @@ static void enetc_configure_port(struct enetc_pf *pf) /* set up hash key */ get_random_bytes(hash_key, ENETC_RSSHASH_KEY_SIZE); - enetc_set_rss_key(hw, hash_key); + enetc_set_rss_key(pf->si, hash_key); /* split up RFS entries */ enetc_port_assign_rfs_entries(pf->si); @@ -907,6 +907,8 @@ static int enetc_pf_register_with_ierb(struct pci_dev *pdev) static const struct enetc_si_ops enetc_psi_ops = { .setup_cbdr = enetc_setup_cbdr, .teardown_cbdr = enetc_teardown_cbdr, + .get_rss_table = enetc_get_rss_table, + .set_rss_table = enetc_set_rss_table, }; static struct enetc_si *enetc_psi_create(struct pci_dev *pdev) diff --git a/drivers/net/ethernet/freescale/enetc/enetc_pf_common.c b/drivers/net/ethernet/freescale/enetc/enetc_pf_common.c index 3fd9b0727875..c346e0e3ad37 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc_pf_common.c +++ b/drivers/net/ethernet/freescale/enetc/enetc_pf_common.c @@ -128,15 +128,15 @@ void enetc_pf_netdev_setup(struct enetc_si *si, struct net_device *ndev, if (si->hw_features & ENETC_SI_F_LSO) priv->active_offloads |= ENETC_F_LSO; + if (si->num_rss) + ndev->hw_features |= NETIF_F_RXHASH; + /* TODO: currently, i.MX95 ENETC driver does not support advanced features */ if (!is_enetc_rev1(si)) { ndev->hw_features &= ~(NETIF_F_HW_VLAN_CTAG_FILTER | NETIF_F_LOOPBACK); goto end; } - if (si->num_rss) - ndev->hw_features |= NETIF_F_RXHASH; - ndev->xdp_features = NETDEV_XDP_ACT_BASIC | NETDEV_XDP_ACT_REDIRECT | NETDEV_XDP_ACT_NDO_XMIT | NETDEV_XDP_ACT_RX_SG | NETDEV_XDP_ACT_NDO_XMIT_SG; diff --git a/drivers/net/ethernet/freescale/enetc/enetc_vf.c b/drivers/net/ethernet/freescale/enetc/enetc_vf.c index d7d9a720069b..072e5b40a199 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc_vf.c +++ b/drivers/net/ethernet/freescale/enetc/enetc_vf.c @@ -165,6 +165,8 @@ static void enetc_vf_netdev_setup(struct enetc_si *si, struct net_device *ndev, static const struct enetc_si_ops enetc_vsi_ops = { .setup_cbdr = enetc_setup_cbdr, .teardown_cbdr = enetc_teardown_cbdr, + .get_rss_table = enetc_get_rss_table, + .set_rss_table = enetc_set_rss_table, }; static int enetc_vf_probe(struct pci_dev *pdev, From patchwork Tue Mar 4 07:21:55 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Wei Fang X-Patchwork-Id: 14000129 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id E8D57C021B8 for ; Tue, 4 Mar 2025 07:52:31 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:MIME-Version:Content-Type: Content-Transfer-Encoding:References:In-Reply-To:Message-Id:Date:Subject:Cc: To:From:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=HoxKe9nMDtDGc8hjS8LOCJjBUHVr26Bvwn0zgatxHP0=; b=mIMC61d5hHYSucku7HyTh8UHyh 88KhCfkZVZxgRVQsfu96ot8fq4t7xQATPnMIOV2PL5m9CnmP//r0BCm50OrrAywxJEJV/LSxd1xFp 8bvMw4pJkBP/eYp0aQN0T/QF28t3enSmm1OTiSzyVKEtRiTWUkaWXkiQ/Xr+K6Izjisdr6Q3woy/j 3aodcNf4uRS2UZseO/T1qpGPQmxbtYQ4l/HC8ngFPRgDVqH3cjufbvZ6vhniH4CsUv3nX4nxxVRdv 94o+Z3t21GTeWx7loF3NVbLbmHL6tU/9fjbIzlT58Tv+Raxo39pwaHLoZh5fKVdQrHsgImUuHdmms sCkzzlDg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tpN4i-00000003Wb5-1jjp; Tue, 04 Mar 2025 07:52:24 +0000 Received: from mail-db5eur02on20629.outbound.protection.outlook.com ([2a01:111:f403:2608::629] helo=EUR02-DB5-obe.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tpMsa-00000003T5q-27eB for linux-arm-kernel@lists.infradead.org; Tue, 04 Mar 2025 07:39:53 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=NV1Qd9/RtgyLSR7BqxGaQEyxVnL6EYMSWSWAVMyh7S4QbhAQInsDuhRz4dyROs3BQIXyjYos7C7y9zArET+uqq2fQiA9oG/WkUIBd9cy4LSMOjDA6Ni6sSy3dEnTQMLOCtva89cnyf47C18ujEiRbppsNDIB6Uu5a7trByd+P8u3f8pZmi99y6IBiWP0+PshyIjRaQWu9f9tdGtAte7y/me769hAsOydtehrSIGNV5TEPhb8d73iTOYCcg5koJYkdiLmBNP2YQIyetLgHGLd63DTECutApz63KW1uVadhMJH8ZYKzVHc6ic2qiGEarnD55T1JfmK3/EfJgxlwsEqhw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=HoxKe9nMDtDGc8hjS8LOCJjBUHVr26Bvwn0zgatxHP0=; b=oLz2Z4kSinyg+Avcq9Hk0YoRh2JTpNB3b0Hcz0GPXTv5A26IJOT2Y+oJYtTc2vkoPl+tqk0V681tloIVoT280rtkqaG87LAsAhbnKppp763aTO081VC46wC/Gb5sWIpDBNaZNGFTQuABFijoQGdeMVknPAN3zdymW2smBml6dYlWpgCDuspYTU9Udxriia1pjUi9rMvDpXKrVNzScuzm7zqgsrq/45NDZ9TZgEqsaMYtr2uwKkYqKXVVrCE461L643ycK6lU2862V3o+r+fUh6dBFcJ9BSrvkq8sR9GQxKSUix4HOyvALQ0I7S8qQloqxljYgo5GGjqWj68kr8dQrA== 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=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=HoxKe9nMDtDGc8hjS8LOCJjBUHVr26Bvwn0zgatxHP0=; b=BonNWS0FJcjF0TnFRPXpbn/gP0E2lW+YznB4ybMgJEJ3npuuGZvR8C2x5p9/u3fZYzM1OoG+73iaoUZLdhpp9Eh7EN7jpX7ppSmM1u+piFLG5zrfNeo/qi/qcy+KtP2D6Aj0HNXHyR76TZn6XxqLZNl1qsnA3RGLaBJomyZMUahhqhxs0jZ6Gb5sFDyue8xMuMaKu9TF0AObM6pNvj2Lf/6HTT1WILDdcCdCjzQAlDz8WNFfpvmUgTsU/T1Dc/ZwCKgXZriOkP0lyw78z/OC3+I6ax7SPKIMn/EB2f5XAmI0YtorcUKEWmfFpQViMs1tfljEPjApAEcE0njakkDXtw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from PAXPR04MB8510.eurprd04.prod.outlook.com (2603:10a6:102:211::7) by VI2PR04MB11171.eurprd04.prod.outlook.com (2603:10a6:800:29a::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8422.11; Tue, 4 Mar 2025 07:39:50 +0000 Received: from PAXPR04MB8510.eurprd04.prod.outlook.com ([fe80::a7c2:e2fa:8e04:40db]) by PAXPR04MB8510.eurprd04.prod.outlook.com ([fe80::a7c2:e2fa:8e04:40db%5]) with mapi id 15.20.8466.020; Tue, 4 Mar 2025 07:39:49 +0000 From: Wei Fang To: claudiu.manoil@nxp.com, vladimir.oltean@nxp.com, xiaoning.wang@nxp.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com Cc: christophe.leroy@csgroup.eu, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, imx@lists.linux.dev, linuxppc-dev@lists.ozlabs.org, linux-arm-kernel@lists.infradead.org Subject: [PATCH v3 net-next 07/13] net: enetc: check if the RSS hfunc is toeplitz Date: Tue, 4 Mar 2025 15:21:55 +0800 Message-Id: <20250304072201.1332603-8-wei.fang@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250304072201.1332603-1-wei.fang@nxp.com> References: <20250304072201.1332603-1-wei.fang@nxp.com> X-ClientProxiedBy: SG3P274CA0007.SGPP274.PROD.OUTLOOK.COM (2603:1096:4:be::19) To PAXPR04MB8510.eurprd04.prod.outlook.com (2603:10a6:102:211::7) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PAXPR04MB8510:EE_|VI2PR04MB11171:EE_ X-MS-Office365-Filtering-Correlation-Id: 2fdfa83e-d852-4981-c695-08dd5aefbe64 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|52116014|366016|1800799024|376014|38350700014; X-Microsoft-Antispam-Message-Info: ZQ91RvvU94tuifTlV0vc3U4rYYih25Bs3K0XneaxJNqQhkD4e0/6aJeXUEE4Ffp2goxslPUwB2wYhYwuhe3gY7FaTUBBxgj2n6UQHlXg4Uu/23nTpmob+rFIpkgXeYNn6JhAEsUzmEydBN6OLi9ig8n2hyrguEbgWqc/TJp3YVrEOSnneLg8YNJDB8FZK0peVKOKRQKU4DRirqSftykvnmBgZ51lHVok3/CDDUH7GMxgzKzsTcn6KNr8GD+GC4pijuPug3NMVb2rsbfup6eOPPHfmfV1sZ1EU/RNkl5UlVG7Ph15FnVIC3iU/BfiH/nEaiAeO2hlbCYmYeSu9Dlk27SOtHgArI+6WMGOapOwthEEswS0RWjsLWB81ApoGnjpMZaRU3QeIot4oVedtLMvvXp5wiWxcQNSzBdjqLFFWogPx/UFOUV0wMYB+sgAGM54dCr9pTNKB4xB5yx44jtOAlF2TZiGe1G9vtlI6VXquRd3eMh+0VWmDv7gwOa5fL4uh3wyrF1UT2MBL4qhXN0LSsNGVSTo4rjbPUd3AYdZcp/L1LNtlmfCnPFU/ahQoi2qAyUNN6VH27NthUVGijWQ1MISMwA/3QbCAfFMkOHkTzDolbhHMwzGkeGklrbBkMmW4vaRZEK+vqyeFF+TroXdf+h5FTFAjIjb45G91Zz93DJJDiqq8NbX6IdWt90FA/KOcSiLKmrd36YVmJwVV1ZA4veTxCdnGiMSTIcAOOF6V0BtIBIrnQHEe0QUejlIJP+oETT/38qtCtsL/AZ0n4w+pm0obZUz37tNq+cGfK+fxw/Q4qVPpL5X8wx3acGYXKWXtx7k9UJGO1FDn2vJBYNN+wook3rFx4tBoL5iUMoBoB/bEZWjd5mhFFeSC7wT8O0vIFFBmB91zs+/H80d1BJSJdRH4RLI534/jBiLQrtUXJ1yWTxItzE2hRIKlztOGCtq7itCKKl0pYxGjXpSNzsrzshYdDW5O+/2xT8rjZCD50aDyMjS9RufDwg9x34+r/FGFhEucJH0XXe78Bf/6bhHtVo3m9l10V2MokD1Ilmwcd0nHc0gIexN3NU9453mZZO42GDyM+OXes0oXufNh8xIlwCAYCbUIVbnRX2WFeY2h0lIBw/YAJ5xtRSzoHLvqte4PCRyoBujckmr3FzRa2JaB226hSqSF/Mtr7BEC5byoaCTs9kXlghH0/J9+d1fwleL4T+rre9bcmbSsV1Wi7TZGO43WxucqZnCeizsJdr9bc4drZTp9Mn1Xf4nwmSKppdYRd+9UEDrSJJAP2H64279VRIZ2Wvsdf+okYn+J5bmK5rSFF1/UVpFzGmbJshADwQgYDieuXH0oWt+IJIUR/eity+Yz7PlXxfq6M74CwmypRJKLmczczKeThKuoBQywJI5iqRZj+9FimTDgEGRNDrRY27dfOYgA01w4vRaw216q4eXDbhPnji6WY3dxdZNKRWR X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB8510.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(7416014)(52116014)(366016)(1800799024)(376014)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: oSGg8auUIPzy6JzquCtu0JDunZuWu3be50R1tanyFxnfrTIe7WADaQHSqifWWQqhMM+8zj84Eg1DJcCC6CDVeSnfqqZP5gBxfEw1bumhyVs41sNOoU8ichROZ+Z9W3yC9h+ImO2CXJ78T2luxzd2wFLVD3tKNhWmBo+EPqo8oaYnyGK3R6Tp9wj2G5deERPExEIT7FbaSDSpQSPT+irpRK1DUVTRj1S7DN8rv3/rWrpZA/Ch00YcgReCUBNGZzbjRUNn4+0ogUj91LuoxYQucTt3ZE2HPrGi2iEOxZnE4xMscf2GZ0V1IfxznSbIcbjlh4pTXNFJT3WAOt4es4/nTnks8AWIJmPK6+L5RVXEiARlRWQ0QdOgIQ59tlUCQwwae7NZe6JLiAcOCW3ekr0Sgun1nswzaH1R797XWIl735nvk6gl/xzMb5myCP9UEU++BUldpQldhwRc+XwD74rERu7NiilxHvm+mx7E4ZZQlyF+hzuUYP9Ic75gUg/dIIsza0LCV654X/v8KwrHUt6w4RNbcSNP8R61Tu4r9RQe+eszwm5V+yaNyll3WwowT9m5jbTxWv9dgpKO//5EfyMcUMgmP+LS/TkCqKxZUqAamrdhohVq+I1OSewm7jAJ0Poe1iAr1M+YsMuvNyB6TMYyWdAPHyYE/EbCq+z5dFWe6yYXthyyHszwvOnsoGq/DhYvFDQIcGTE+f4R/xmWgIKhqQlW7Nk37QXKHJ8sJ8sW0/4hTHcnx7zpEOgaChx9Hq1jXIwErUEjxJsTQDuuraMqaG4BLVbLvqNMT3gkZ1+wjOIDoUjwrPR+0/MMan9Lz/msbvgjJe07HttVCAaZfXJ+RGNrcwS4yIqKDTV84qlpMLiOC664c8e0oU893wJ4MY+694QyYvGjFgjlvLRbgMjW5z6xWw2Xmtxt7pLnRm2s4msnyJ0mhkUuQBfT/rc54RiXQNuEBtmxwieyDxtiOrqfSZGisTqrF++me/cwioFf0DSYFCSmoE4/EHZzBToK680Bq7fp9Ot+sb+Hca92l02JgJB6PEz8WH1+EqPP1edX1OwTqNijHixY2i34yooNsmb+kAoH/WF9fUJadkUANacaUClJ6NgNJvgJyp1LA1waNmU+5cFPvleC49+f55GhQSOJhae02u15G9Cc4PtBx08Ag+UP72LHO4A0eCUk5C4ca9WrU4QIoE18eKXzmyKVBBIQGNJDdVN3H4U94Lx98bKGTawE0b3mpfvrt4mhAcicc79gZn4+cbNCLseqdxgtWzWBBiyzb9IJo0CT4D5uq4S87byaQEvixhp586K5RePG8JtHsEk0kRYwuRF2Pd18v6skU527pjATaPtC+ASzDVB8QJmm1CH3nIQTU12jzQDzsUOjcVZ67uo6Z3RLWWyp8AjiLtBZ/yyHyRaR0OiRADD8C+SeIRGXFUlww1hCkI+P1v7o5ATre++8SpwyzfWLFLKUOwMgPxFZ6dTl4CJNyQIYUGmeOPwOBecKwRBwJRLKTqYx8HPqiSX8+whsUg5ZUduJfNQqPEwo7j6gNsa4uhDwWzmnnrgclGdLJPo+60mHZjnaR02P+jGVhrwhpbrB3uKL X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2fdfa83e-d852-4981-c695-08dd5aefbe64 X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB8510.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Mar 2025 07:39:49.7972 (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: jpV608gzoEIedHQv/S+SmXjqK9FUsUk80yMqMeLfj1Wy13MdYeZriTESCgZ7R8IL4lHyTwLxAERdHIDpZeR+3Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI2PR04MB11171 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250303_233952_543925_9E191E88 X-CRM114-Status: GOOD ( 11.08 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Both ENETC v1 and ENETC v4 only support the toeplitz algorithm for RSS, so add a check for RSS hfunc. Signed-off-by: Wei Fang --- drivers/net/ethernet/freescale/enetc/enetc_ethtool.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/drivers/net/ethernet/freescale/enetc/enetc_ethtool.c b/drivers/net/ethernet/freescale/enetc/enetc_ethtool.c index bc65135925b8..6a47e2bd1d4f 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc_ethtool.c +++ b/drivers/net/ethernet/freescale/enetc/enetc_ethtool.c @@ -753,6 +753,13 @@ static int enetc_set_rxfh(struct net_device *ndev, struct enetc_si *si = priv->si; int err = 0; + if (rxfh->hfunc != ETH_RSS_HASH_NO_CHANGE && + rxfh->hfunc != ETH_RSS_HASH_TOP) { + netdev_err(ndev, "Only toeplitz hash function is supported\n"); + + return -EOPNOTSUPP; + } + /* set hash key, if PF */ if (rxfh->key && enetc_si_is_pf(si)) enetc_set_rss_key(si, rxfh->key); From patchwork Tue Mar 4 07:21:56 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Wei Fang X-Patchwork-Id: 14000130 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id EC2CFC021B8 for ; Tue, 4 Mar 2025 07:54:07 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:MIME-Version:Content-Type: Content-Transfer-Encoding:References:In-Reply-To:Message-Id:Date:Subject:Cc: To:From:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=ks9GIO6GtrzYt1TbMCQbs5B1G2hnYgLQq4klaXlrlTM=; b=EGEcccaz8vfGQT9zMOF7KIj3+l KUnUfBt4bL8F/1/nMgKY+fThQFVd5MBHtL6goEpnzL3H2G1G73qlQ/QfOKxDuLC2uuAoPbTP/Jb3T RNX5R4M3hO9yAloqo2+9EUpUG1pknf/0OZiXbAtOadVJEqhItSK8nCKN6bndEHoxyfHunWp5G8yqx LMoAvoibuiJMwvn3QXhtHcdM4Xmc8dusd1FWh5WNlL5OVP8Xh6iZzWaOabMT3AsdOIOn65GURUrkH FUQJEiQ6s6c8R5YVrnw8/KEnzFEHmHr9bR6hYkw5vsfeytCNFn3iYujkiQNc7ohu3MwJ8DL7uMOe0 QhieIHYA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tpN6H-00000003Wps-0HHO; Tue, 04 Mar 2025 07:54:01 +0000 Received: from mail-vi1eur05on2061b.outbound.protection.outlook.com ([2a01:111:f403:2613::61b] helo=EUR05-VI1-obe.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tpMsh-00000003T9a-1KVN for linux-arm-kernel@lists.infradead.org; Tue, 04 Mar 2025 07:40:00 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=U6dum6iFasew4DBqBjLQuy9IAyp039nCBKXBXswZKKKpeaC66nqfFuApwRAxmWTd0htZGZqIjZ2hEUMoSylGvmsTA1qmnVmpre4wkggV9MYJC/+nni2pyd/bWqZmddWguNadxoEvXFU6XWc8v/rT+NpFCkq1Q4u052RFrNA9NXaVmB5ddZNDlMEgtzlkI2XIfCbBrUPLqhEI1IjrCjZ5xyKGuG4+DjK1m5d0HkVqfLkv3Wn5zn//LLbaI00B7bIiiS4Ib0bgn7SflE+9QXX1uCziy12TlHfuPNsYQJCh+qPW7RLzNcNps58MpmHW6NjjyN/9JZwZob3ep1I8NW3/cg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=ks9GIO6GtrzYt1TbMCQbs5B1G2hnYgLQq4klaXlrlTM=; b=U8D6Xz/Qai8zFPd6l6gv6uQvS52dBtrhEbMnvnR4/EVuvptuOo686II8+Klcilrq2JqiZR1mTn9Tm5EcXSoOP6oqKXxvUZI7+VNzQ5AMJ14EYBpP123wMqfRNe8G/ommLlwuh36jXctoWIkykQrnI73b4nqtMWem4LgMDx6shZnG281s7wCCwX1nOmm9jOT74YHkGFyDsESFF4iYr6o2+8keZOnNrvue7ngMnSYXM1rtsPQbyDoKaD3phQYkAyF+IYTmCpod0oamq1fENZ1ciPvneEzgpGDnPhFFFbv/d7JFcAQ9cyOAmlf5G4Y3ZoeliWAFxQJZkFt08PCVQbd4cw== 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=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ks9GIO6GtrzYt1TbMCQbs5B1G2hnYgLQq4klaXlrlTM=; b=AwOoox5QQSXK3WVcAVgQ5o19ObNzPUcR1+gFLNeW2Y60p1ielNH+4izC2/wkHrtHbSq1evi5jpOQrnYiZvAQ0fxq3VryBIN9mqTID9nQW9ejmWxrhYnKuaqcDhn6zASYH80XrVcRHxLvpwVRWY7LL9foeI9M3hlaPVnIq64Rge1Ndkep7slMyhKmZr+Ok34j0T1694x7LCCL5cI9ikd/R5xnjqZl6Ad7qo2ila0dtzQRAzE9oqMa9ePfrtCO5zyjbgrdU25RFeKUKBvVkWCyFJY8O8v+HvMz1c4ZmupQGI4OyHSDdICzq7jfzI8sz0aQ8iydHvI7jfOzW39kvr2PRw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from PAXPR04MB8510.eurprd04.prod.outlook.com (2603:10a6:102:211::7) by VI2PR04MB11171.eurprd04.prod.outlook.com (2603:10a6:800:29a::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8422.11; Tue, 4 Mar 2025 07:39:54 +0000 Received: from PAXPR04MB8510.eurprd04.prod.outlook.com ([fe80::a7c2:e2fa:8e04:40db]) by PAXPR04MB8510.eurprd04.prod.outlook.com ([fe80::a7c2:e2fa:8e04:40db%5]) with mapi id 15.20.8466.020; Tue, 4 Mar 2025 07:39:54 +0000 From: Wei Fang To: claudiu.manoil@nxp.com, vladimir.oltean@nxp.com, xiaoning.wang@nxp.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com Cc: christophe.leroy@csgroup.eu, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, imx@lists.linux.dev, linuxppc-dev@lists.ozlabs.org, linux-arm-kernel@lists.infradead.org Subject: [PATCH v3 net-next 08/13] net: enetc: enable RSS feature by default Date: Tue, 4 Mar 2025 15:21:56 +0800 Message-Id: <20250304072201.1332603-9-wei.fang@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250304072201.1332603-1-wei.fang@nxp.com> References: <20250304072201.1332603-1-wei.fang@nxp.com> X-ClientProxiedBy: SG3P274CA0007.SGPP274.PROD.OUTLOOK.COM (2603:1096:4:be::19) To PAXPR04MB8510.eurprd04.prod.outlook.com (2603:10a6:102:211::7) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PAXPR04MB8510:EE_|VI2PR04MB11171:EE_ X-MS-Office365-Filtering-Correlation-Id: cc1f3cf9-327d-4b73-8ae5-08dd5aefc110 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|52116014|366016|1800799024|376014|38350700014; X-Microsoft-Antispam-Message-Info: 7Hh+/GKkH+RmBD8yXI+EiSBan243w1to5VwuGa6VqfwM8CDLoIiovbRC6lxa3WennC1HjCihtGuSO2nf2fhx4e/ofRevSDnCuBhQFjmADIiDhV2GKQ2PhyppA7E+8tIG/axSk5jQ+9UkpAB4KLOPBVEwhADPZHtnLh/vmvDXBaawZ4Kkl0V8DmZJDDMGhSCESSm+cGntuSp1XByit0fEsIQsXF8oqlY+XO2DVr8DXsO1V182Aofi09LYWCkBmzrgMN/Ewl4+W5WV3A57uosvoAUbqH6oJJv+9+laigXFBryMPkHidya1rvOhmH77GBnT5nm4rF7OawvBbIdZEZNYjvcHVRTvG0ZaLoYg7eEdLrdICrCoTsJIgMHZfL05/y4EjC653NVYVHEw58ZxJi1zgZfrtV7jqKZhNpQ0EBDKYts6hsy91Hxiy+ugKGEH9kwSjXEMmfdz7XWeE9z2HrYrl/4anJKlZ5TOhD8hV/je8kBJwjf51uB8UL924g2LE6Pd4VlT5V7Hqr3TeqiTw/5Rwd2wAFIs/G9dITW9mjZKpknxOpTSqrTO5EXjR6VmIMV2OzDA1dh2bMLTXJdZz3rG5enYT7p85f0OVm0h7XIgX8yPk8aVlqU70SKrKWgWcs6TJ2A+fH3cm/DUo7C/Ygrz8QO4MNSpUocWsllkhdsMam9u9wjiptETx0CbRJ1bCTwvRgo/ibwTpQ+hMTXhQSQesmjFQeK/LtNzXfcwEa3gFLjan2/ud5HY4CKdzlbZCI3ItdLRf4Q32yGjFQ7NFELFQN0Hkk9bgQjkSW+v41JhnXr6HIy3jC6QDKmiUgQJWHStXM/rZYeMyawV8kM3qJLBR3lpAhCPtuOtyy6MsX3zYuXns4w0VfPl6uaHhTcDatJm9FurvHZEyfrFJFzojQwQTDqnZlH0i9dabqlK4sIYiIbXZThsoItpt9KIDOV6zkvoMPYmLhT3nj+V9MjpM3kyScTTLE1BYf7FJ0TcQjdd3rXiJAHuwuC4fUh37FLQfoPgF+IZyiz2q3F+eA/mCDHuRrpgykWrtait3hXEtgn2XVJEuse17jcYqh+Tcy0GfC4FhlH8Rf3u5j5OdlbN2b3zAooLGuEP3Z6BgPpC8Fcs0JswEMwkd+WdIcLZye8GEppyIu6feis/OpVdERXmY3n2x+4lzTZPKdQ64vk1mH9tqhZzVQEGBfMex4M15JvcnkKBGbeCKIrCvkDcT13AGhhreumxjZkb2z8nVyilzHL9HjKvmN3f2HGToO59akfJlTLOkNmL71aNBJN8zheJazLhFfL6nSWDmzi13HhhpEEKkFY5HTkCX8MCa7uVmW0X3nXML8uzsLqtWQg8aCSdT9AyGzzkOoPy8swZBq2VI5FQKEI7q1e/WEnSBczmkLyW1c008jcZGtQ4OyukLMT8e5Oja5b1oqQK6Y5jDUesxoJfwioxTmMuAM2zJkF+RypcYkNN X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB8510.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(7416014)(52116014)(366016)(1800799024)(376014)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 6hc2SmJ1cr1oFwKow7BIDfPn+zZh2WASOoeLwzL5fF+EiO5ko9GCSyBquBwx+hBePWoz1O31BlOv9tFWu7ERUnJTqSiec2Q9b4ABDoJ1qJzt1TUnjywLeQoMIszU3SpVVZT1wfKMpiEYoFPHwOkR95wSuOfY1uUUkuHV7d1UiS7sjqlX788Zlfm2DeAtdse/ARP/Fil7Ug8ZtHr4z92KiouZZhQfUx9yZGagu/W5IEYF3f0lAeq69+6qDWzLjRZSlS7MKUzlIka5rx4uaiU7BzArgXJQ7cCB1BCJ6qNJrp27xMVdm/GtZom/pKtfwSKpZ7GUJWf19YJR32V+WcCYjv5lV2ELosuSrZLjAvSKLrRt/e+7vr9dMie5G1aOjzRpK0qqDKpYq6KoYfkmJ94BfDhn7r+HXQl0I632dhu5dL28U7De7mSMdqP92RMf2CZLL+7SGMuANVrk+3qLY3J38U9lT9REWi/2KmRRvtqG5TM0osZirruZrgPGe4hHT08cLD1A/iTFYpReLObm/liHtzvYfiV77Fs13Ymbn0EYFq+puY2akajy6Op/bF7Ph2EPBmL0+lZQ6yd3V66DYoQTQ2i9xKYIY8Blacr0HQz327vqTf1LSxNXc3/Zmw0NRHiOqLQzZKgSVMOu5gwr/ls+SMfwDamf6EjqlDPVx5+h/nPpbhtNonAAC9DwfQAd0syY3dT194ti00skZI91Hc19ON+cjLgnKmQD9NGH7xzpL7yO9USxd2vV6EkvfDU/G9AtrhNFE2BkpO7wArua9Igp79CAsXB4BP+Zbp8PwLlPq4N0J5chDqKb36EZEb8Hnpngfd81nZUNDMGe5hPLWqRBpgIssjG2YYxY7Rl0Fogv7I8dg5on/8apuF2nZeIxDy8MeZE5AWKZLjnaAWjPA3bmCVsIGb2Sa/wCSLRI4XIIMuyxK9Lg9bCbOpAScNIBWmNUj2WgSHGwV7LKQvkkCQuzc9fVfyACn0FksLLvMAJV9fI29a4+bvllJAdT4IZb8HpECKoJzufSRe3IwuhqeQpCCX46i/OvV9BN/ZlVcO1uUEiV/HKXJpi6W1XS97FETP3el/6Kr7r91rZflAeijBaHZ8ga1ZpX4OTdhj6y+WEi5sXu7mT24lr7l5G91kfTUgkU9QXcQZ8JlheD2ynXXNzPzz5r+n2cUhCVEfLYI6veqgOBnrhtl/aYpM9XrPNFBDaLW5C9Uau+HQTdqTHRT4xyI9/gkOVem7J/U1BJykzI0CUWXXAK3KbEBfHlyeCnAVlB2cgNEEAxCS3SlrAECYFIOEz9kmgLcMjiTej2eL3qs1aiOl5bFOMxTM/32/I4/qhDc6+TtXU2HDk/cf8TT6sCrv8F0fJGCPj6uWlp+OYtQ5GjN+3M3UUDFUKECsi2wNvpfk7yweJDsnMWvZZu2GBx4ApJUaPKYl4pXDdxq2twe6p8+3s/XNkjVzkRxtc2AfvtW0KtTKoGcsQqn5vX1q3Os3IVHIh9QeBvQVik7Y6NrempVOUbKZd5M9qw1CK2H8UuQ+c3VD/UEZpf/niCSXNwY7LPcH+OYn6xA+ihLcBdy0uF/ojpJkxNo+kKqF3Gpt8w X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: cc1f3cf9-327d-4b73-8ae5-08dd5aefc110 X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB8510.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Mar 2025 07:39:54.1120 (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: dXBrvaudCj7Ob7meEq2EvbWP90FxuLuCTcxY33lwUtjJDziUH4KCBBum9YNeNMKIic717MTi+eP+HlnMOOsaLw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI2PR04MB11171 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250303_233959_354347_00076A16 X-CRM114-Status: GOOD ( 15.04 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Receive side scaling (RSS) is a network driver technology that enables the efficient distribution of network receive processing across multiple CPUs in multiprocessor systems. Therefore, it is better to enable RSS by default so that the CPU load can be balanced and network performance can be improved when then network is enabled. Signed-off-by: Wei Fang --- drivers/net/ethernet/freescale/enetc/enetc.c | 35 ++++++++++--------- .../freescale/enetc/enetc_pf_common.c | 4 ++- .../net/ethernet/freescale/enetc/enetc_vf.c | 4 ++- 3 files changed, 25 insertions(+), 18 deletions(-) diff --git a/drivers/net/ethernet/freescale/enetc/enetc.c b/drivers/net/ethernet/freescale/enetc/enetc.c index 5b5e65ac8fab..8583ac9f7b9e 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc.c +++ b/drivers/net/ethernet/freescale/enetc/enetc.c @@ -2420,6 +2420,22 @@ static void enetc_set_lso_flags_mask(struct enetc_hw *hw) enetc_wr(hw, ENETC4_SILSOSFMR1, 0); } +static int enetc_set_rss(struct net_device *ndev, int en) +{ + struct enetc_ndev_priv *priv = netdev_priv(ndev); + struct enetc_hw *hw = &priv->si->hw; + u32 reg; + + enetc_wr(hw, ENETC_SIRBGCR, priv->num_rx_rings); + + reg = enetc_rd(hw, ENETC_SIMR); + reg &= ~ENETC_SIMR_RSSE; + reg |= (en) ? ENETC_SIMR_RSSE : 0; + enetc_wr(hw, ENETC_SIMR, reg); + + return 0; +} + int enetc_configure_si(struct enetc_ndev_priv *priv) { struct enetc_si *si = priv->si; @@ -2440,6 +2456,9 @@ int enetc_configure_si(struct enetc_ndev_priv *priv) err = enetc_setup_default_rss_table(si, priv->num_rx_rings); if (err) return err; + + if (priv->ndev->features & NETIF_F_RXHASH) + enetc_set_rss(priv->ndev, true); } return 0; @@ -3232,22 +3251,6 @@ struct net_device_stats *enetc_get_stats(struct net_device *ndev) } EXPORT_SYMBOL_GPL(enetc_get_stats); -static int enetc_set_rss(struct net_device *ndev, int en) -{ - struct enetc_ndev_priv *priv = netdev_priv(ndev); - struct enetc_hw *hw = &priv->si->hw; - u32 reg; - - enetc_wr(hw, ENETC_SIRBGCR, priv->num_rx_rings); - - reg = enetc_rd(hw, ENETC_SIMR); - reg &= ~ENETC_SIMR_RSSE; - reg |= (en) ? ENETC_SIMR_RSSE : 0; - enetc_wr(hw, ENETC_SIMR, reg); - - return 0; -} - static void enetc_enable_rxvlan(struct net_device *ndev, bool en) { struct enetc_ndev_priv *priv = netdev_priv(ndev); diff --git a/drivers/net/ethernet/freescale/enetc/enetc_pf_common.c b/drivers/net/ethernet/freescale/enetc/enetc_pf_common.c index c346e0e3ad37..a737a7f8c79e 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc_pf_common.c +++ b/drivers/net/ethernet/freescale/enetc/enetc_pf_common.c @@ -128,8 +128,10 @@ void enetc_pf_netdev_setup(struct enetc_si *si, struct net_device *ndev, if (si->hw_features & ENETC_SI_F_LSO) priv->active_offloads |= ENETC_F_LSO; - if (si->num_rss) + if (si->num_rss) { ndev->hw_features |= NETIF_F_RXHASH; + ndev->features |= NETIF_F_RXHASH; + } /* TODO: currently, i.MX95 ENETC driver does not support advanced features */ if (!is_enetc_rev1(si)) { diff --git a/drivers/net/ethernet/freescale/enetc/enetc_vf.c b/drivers/net/ethernet/freescale/enetc/enetc_vf.c index 072e5b40a199..3372a9a779a6 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc_vf.c +++ b/drivers/net/ethernet/freescale/enetc/enetc_vf.c @@ -155,8 +155,10 @@ static void enetc_vf_netdev_setup(struct enetc_si *si, struct net_device *ndev, ndev->vlan_features = NETIF_F_SG | NETIF_F_HW_CSUM | NETIF_F_TSO | NETIF_F_TSO6; - if (si->num_rss) + if (si->num_rss) { ndev->hw_features |= NETIF_F_RXHASH; + ndev->features |= NETIF_F_RXHASH; + } /* pick up primary MAC address from SI */ enetc_load_primary_mac_addr(&si->hw, ndev); From patchwork Tue Mar 4 07:21:57 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Wei Fang X-Patchwork-Id: 14000131 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 64A73C021B8 for ; Tue, 4 Mar 2025 07:55:45 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:MIME-Version:Content-Type: Content-Transfer-Encoding:References:In-Reply-To:Message-Id:Date:Subject:Cc: To:From:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=IoAEFaGOVtPg+42dHNtf6ExOXNXqF28UcBGave95y3I=; b=EdPYSQSlI2LkYLyMaoJCvQZ2zA SS3LGD+th63rMHWHg8bttI3OpFDmfHrz7e1BXmlzWvNA+F/vSizIEgTneKMQluFq+faeLutZEaYKs axNhMSJ4zpbKxViXDx71Ozbf2mDg2R9Kah3FU2clxwB5DxIaWwxVz3vmF1aENWe71LbLz0z26mPVz JfIR3NVw2NNFbM1YeUHsdhQd0w7ep2abI3tBjmTVLzRbHZR4vCwsmmqVt31NpTzynyWEHaZlr2c6W DVfvlvvOm4SA1xFP74KRwdxFEDiQqAS2TUB2RABlR7BTGVV2QpXn7ErirhnCUf9pjV6Uy+wD7VLqV ak0S3zQA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tpN7o-00000003X7I-32un; Tue, 04 Mar 2025 07:55:36 +0000 Received: from mail-vi1eur05on2061b.outbound.protection.outlook.com ([2a01:111:f403:2613::61b] helo=EUR05-VI1-obe.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tpMsi-00000003T9a-38fz for linux-arm-kernel@lists.infradead.org; Tue, 04 Mar 2025 07:40:01 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Tvde4BYl/9rWb4tzxPmVRgd9VPDNPn9HKTuThKy+C1+CzlLCXwyfhCPd49JUV/zPH9CUk6YOK+8DDmjgcUPr31sLFWn6xNzfR1XespEmpAFSN4yvWCLTtX8ErCx1GibfFKdRffbmD7MrcXh7K4JnlqdJPuGLBg2++P2xvOjb8H8v31aBlZE0F0tpKg6ESHwPOhLKdlaGZQ1ZFAcgMtILwir7YOFt0CLvSzhM7Qo2DAYYPx19t30u/44SS6KxnSH7llw+gwpk7Ocf87I/DTSdvt3SiTYcyNuyqQzXYpJGchIeXNMAsX4ynxjPptnedIUsNdJDSXE0p2sTQenzUAfiig== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=IoAEFaGOVtPg+42dHNtf6ExOXNXqF28UcBGave95y3I=; b=jgnnFnkf7Pvbkmy7Q9z1DnhB1UylZRhKVSw02exEI4cLsvTJNFScoJLys92DuE2udM+XUBvTmOBR+Ew+t6Uc0KBUkBXfh7a9zx1esMkILAOOkOOc8N1QZ+jP7GXBJN7wIRh+xde3p31ex6yGG7F896Io8bt7LZWUMZiQowgRq9DqKNZLMMy5N2rz2+ykRzy4sVGuePxi8zHWH6/6ohFH9UPCZPtjMv/+IxyZp6NDQ0LIRRQzD4cgIozwaDOPOJBjX/88JpPpNKkHR/+RhSM+VjopeiSzT9zTNs8SAhRAmVsZhQMSySPbkTcNbnBXE5UCmwZmkMrSzJWA5CsfEAOubQ== 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=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=IoAEFaGOVtPg+42dHNtf6ExOXNXqF28UcBGave95y3I=; b=fUigqO22of6qApTbYrN0Fe9wcVh8/te6Ctgd3oVdwPAdmlJ7zYyLfpR+CkmdvRJ++nRZN9tt2uPu5V/z74CeMLfmLdrAdvZxXgAlDA1RgnOgqBACFeOspWhojSuOe+pofiqXGqGrAzh7N9JccjGzQqmoNAtOEHzLVCNaKocz6Ak+QSJ/QAX+A07KWnYlxyCyz9mER9XFMLHdlUGVgH1vd9e9kTbrbUWHnfYJJZpAyJKf8Z0+qcAHi9BuMrqO3Rz1NSGSL89yF9HEcDmSEHfoIIRtprToBK3zOvyme7PwQn6mt1YVdAu1Cd1MLYqxUs5sgMsVSQya1jCadtLux5PrjQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from PAXPR04MB8510.eurprd04.prod.outlook.com (2603:10a6:102:211::7) by VI2PR04MB11171.eurprd04.prod.outlook.com (2603:10a6:800:29a::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8422.11; Tue, 4 Mar 2025 07:39:58 +0000 Received: from PAXPR04MB8510.eurprd04.prod.outlook.com ([fe80::a7c2:e2fa:8e04:40db]) by PAXPR04MB8510.eurprd04.prod.outlook.com ([fe80::a7c2:e2fa:8e04:40db%5]) with mapi id 15.20.8466.020; Tue, 4 Mar 2025 07:39:58 +0000 From: Wei Fang To: claudiu.manoil@nxp.com, vladimir.oltean@nxp.com, xiaoning.wang@nxp.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com Cc: christophe.leroy@csgroup.eu, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, imx@lists.linux.dev, linuxppc-dev@lists.ozlabs.org, linux-arm-kernel@lists.infradead.org Subject: [PATCH v3 net-next 09/13] net: enetc: move generic VLAN filter interfaces to enetc-core Date: Tue, 4 Mar 2025 15:21:57 +0800 Message-Id: <20250304072201.1332603-10-wei.fang@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250304072201.1332603-1-wei.fang@nxp.com> References: <20250304072201.1332603-1-wei.fang@nxp.com> X-ClientProxiedBy: SG3P274CA0007.SGPP274.PROD.OUTLOOK.COM (2603:1096:4:be::19) To PAXPR04MB8510.eurprd04.prod.outlook.com (2603:10a6:102:211::7) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PAXPR04MB8510:EE_|VI2PR04MB11171:EE_ X-MS-Office365-Filtering-Correlation-Id: fb643ce9-2989-477e-6b64-08dd5aefc3e5 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|52116014|366016|1800799024|376014|38350700014; X-Microsoft-Antispam-Message-Info: MzhBpe2QCVcc9ER91i8s2mo7a3IEgRYfCvBDrU/xUnq668+HIz3+B4iS0JsEAEj2iNbSlLl+t5QIWS8orkNZK6G328eB/s9+qnegl/BA+kfUNhSKjUwxJcdQsFFtgBNUdvZYNwGl52+5b+d6ou5oOOehTwANvKHgAD87kbEreJZozYq1JFIp5DyIpJvG8e9lIxiV51g8SVa2EVYdLWtOPJqLACrYGcceBBEJRtovMc4ihXxM5ouflHeVZiTIDUnd1y7pM6FG+c/aKv1MPpQk8b5Npd25EwWGXsXQOPBvGN4RA82abgFnuLdwFWZG2JmayLRJ617T0ZYdYco1p75pdDarC1XSU4cHjsC4OgnIEFR/kX4jkgREGSx7F5zZdOQKY7oytyYHyZfoeMdY9W6Nr0ejExpehGcRuoKJRN1YME6xYZtErjOb+hR2fxzyEo32s4OxOf0kEBL72LEb0a0uSxxurj/21WIMFAiKvEUsEqHJoiXPfkTyv0epvrY7K41BB1J6aPyPGPxTEzI/xAxpvRlx+0jdjERQQeRYWhQn0fInJhqjooS7Zx10+nMMQAx0QZZvGFQ8PS6hg0K+ID6oUZRjoeRkdF6ndoaQLc6oFNp6ZtlyAA3dLzPUdPfuIyX6aH3pSt+NimcBAlsgukhYj5DHzy+NmBX5tlZZc777Pg1GHkEk19rEAC9qYieZMwOpRv1FCoYrlCbTgvLWHE2o/+FzBMrKF6YO4Q/WznMDemElihMxuQ4+q1gWAJqJpZvvdR3xbZfPvlBBmuGSBLxTcUltPrnXdggNe3gRsB3BgR92fJBkbM6HNtgXC+ab0MasIezh23lpYUwwKUeVmNhP/IQq8MmGrni6XHxlRXii4oPk8hmdI3HfXH32+6/hd/8tr3Rlg8A5i08bVTPv6f5Gwf4guG592EtxjuFKNFcu7BYiIUu4A7Jd/xwIl/oaeVVCOO0PJn/P2gxq9hTKU25OG4Px0HdiZpf37F26eVVmkwilpHlhxXKt58SspplzA1MOipbKJTpGxAiCc8lMSbt0eWrB+vl9zLwo/Dzq91IBvpW/PwH69VwUq1hvVIuFFJnKzPY/Rm/Jk1CDJ+obX7GzdRmLgWqQxhGVzaJMntVjLQG+15KJ0HIk4HzkgmPPyfBqpwUtMed0VBj689jNG3Apdt0z1u/JncZ1Ti7+4szRixZx9EeVU4ra+TNArEm/dObgcpF7VUfy0883LxnD9lz7Nc59WquQmXf0WRFp5WG3gszOT/GXEOpX/hZbSHw5Z5dh+iS7qwcq8HW1jw9+ob2DNnEc5FjWvAw2AvAKeb4rhhk5HMFxaVJHcbAUmVp1w3SBOa4oLrppIXK9IDLK9VfSWWK/bkAP6ZH7zcSIf0oMjNLAzc2adkK0MQ+BizBh6HytSv8gNZb+4q+5pKwEybeueLLOol2fKoPwCrHDxfOWfL8W0asLe9dB7IPHcc2reRRl X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB8510.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(7416014)(52116014)(366016)(1800799024)(376014)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 2ax4SEMbvMN3NkOMYYJvlpWb6RSYQ5J+Vt7xpCd5H8UsqOuopjevlhqUlDYEOVtCVyczH+dhnOcvac5nz6DNt4bD7PG/OCo4+wVkATvkLfP9Z09t351usA3z0Be1YEhWjQmBK+3hiUVtuwIxiNmaapylxU/Lb4ERnvJ8RKCrG4YbGokDVp/amgYGbAtY0vJ5o7EmHr0M8ZQzhedub5XZxqGY5azLDQjSj+/xYn0LuOWh6X9jxAFgaoqVO/1UdMpzPBM7xsH8QspCFvdzOKIJq+EGbO1b2NpT3Qfnqty6uzQE200oMOBM+LIuCYZ5ldK5YhkUu1lGL1yaUBnhFfq8bkKBSwPj3CsW88IddbW+wPQJjmyUSBdkQ2w2FJNNSMQKoS8wZPhjL/VIt3mLSvaMkI/AlefAMF1NZE5eDOYxM+MovWiPJsYMubzTL3uiozyBAudzf76NCGOuSvISTyOBV7a4yG+/WGquMKfT5qo27z8iSY9SEVboz0Geij0kg67hU1CsyR/Tt7V8r+OCojVzQwIMXwjF5mLGmqwL+lRg1B4Ds3JtwoLuqxPcTmNvPS3oe1m6rbf4VLujOZp0oH38H2qn3N725j+mylSS+15EOBJMFRZBG5sJuZO5bi5VfFuAI/jc6LdFTnsVmdpxLPLDki7k3HbI6xMxXM64j43Blzc3b95tpZVpBjnFAEpa8IkCLQA19I8+HxpFRYhlQe7CG8zTcCVlr3LBJKQtljzVqP/MXs82A8c0MzlWcSX1XoIayNqvq13j1jOmvnnw9x5A7F0G7qgASdqgKgFUY8RNt5lsntzItT41SKLaQc1TEk4RGPVeQmNFZ970BtEyHh0axSD8CZT7ePcCbOcX/fV3kP/lKCne89BHeEYW9tggjBnZY93OZ0fUBHuu/ylOyRN0UwuIqLK3mJzARaMvz25acupHb6sFaTUdvbB1Rixj2zZToxkTVcMLkACKbDSaK0rhkobiqJHYyD8Gc5QUBClQL67HHCVUXzoZ87r/meeWEK0n7/eob013MEhbDsVtwwFYNx/zxB5nmtCZpGfu08iBYAc6X7dlD4MiSYYXjLjF0oHMmLyNibxWI1VZVd5WSI1UNM5pgJ3GRc/yTJnIzXBCRg2SLMW8PVX3jJ7yJ/Z0MNE2G7nmhbb6V8tI6VsUH5lg7ArUwOayfoehHU7vwul6uklsA6tJI3LS3K7Wz7zSou6Nq5VzuWPgtS0NR7zboXyHdZq+ViSbVY9PvV1UcFOSb93ZLSZWF03olMQMxNy6sYe8nrpij6hANV3lAhBGmRnGpS9fOj4pZPnnoKEEpUNd6gcBa+tlzArOeYPCiJTMugahe5tBa74eR8sQm5+Z0EyDrInu/Hlmsq+hZeUp87KR6YsUafH1Sz/qJhnpujMCsNCExQ3J2wY5rB/GTreXl/s3RPsPMFH6pZfScPZZn+5weDt7fyY5JAag39dp5pD7TIsCayCz9TTObR1RYdQhca9ArVosf6KxbGVYJP/dZC6kaAuuzMgs6QS0RkHU2Xx0xAZXp6MZZcMjboXakrHPr3Khm+TK+bjtb/XaS8gGo4wPfjdiT29NNZ0OBPjI0Fpv2XL8 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: fb643ce9-2989-477e-6b64-08dd5aefc3e5 X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB8510.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Mar 2025 07:39:58.8567 (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: 5m8xX/jmmZ5OrdVl0Bc2V2amCvx/mwsbEHZ9E/wxJSWN5vkcZ8q4ypHLEUGGwmY3zIrqeVy4f0QGo7m4c9jrpg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI2PR04MB11171 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250303_234000_792289_942978E4 X-CRM114-Status: GOOD ( 20.40 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org For ENETC, each SI has a corresponding VLAN hash table. That is to say, both PF and VFs can support VLAN filter. However, currently only ENETC v1 PF driver supports VLAN filter. In order to make i.MX95 ENETC (v4) PF and VF drivers also support VLAN filter, some related macros are moved from enetc_pf.h to enetc.h, and the related structure variables are moved from enetc_pf to enetc_si. Besides, enetc_vid_hash_idx() as a generic function is moved to enetc.c. Extract enetc_refresh_vlan_ht_filter() from enetc_sync_vlan_ht_filter() so that it can be shared by PF and VF drivers. This will make it easier to add VLAN filter support for i.MX95 ENETC later. Signed-off-by: Wei Fang --- drivers/net/ethernet/freescale/enetc/enetc.c | 25 ++++++++++ drivers/net/ethernet/freescale/enetc/enetc.h | 6 +++ .../net/ethernet/freescale/enetc/enetc_pf.c | 46 +++++-------------- .../net/ethernet/freescale/enetc/enetc_pf.h | 4 -- 4 files changed, 42 insertions(+), 39 deletions(-) diff --git a/drivers/net/ethernet/freescale/enetc/enetc.c b/drivers/net/ethernet/freescale/enetc/enetc.c index 8583ac9f7b9e..248dbc874eec 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc.c +++ b/drivers/net/ethernet/freescale/enetc/enetc.c @@ -72,6 +72,31 @@ void enetc_reset_mac_addr_filter(struct enetc_mac_filter *filter) } EXPORT_SYMBOL_GPL(enetc_reset_mac_addr_filter); +int enetc_vid_hash_idx(unsigned int vid) +{ + int res = 0; + int i; + + for (i = 0; i < 6; i++) + res |= (hweight8(vid & (BIT(i) | BIT(i + 6))) & 0x1) << i; + + return res; +} +EXPORT_SYMBOL_GPL(enetc_vid_hash_idx); + +void enetc_refresh_vlan_ht_filter(struct enetc_si *si) +{ + int i; + + bitmap_zero(si->vlan_ht_filter, ENETC_VLAN_HT_SIZE); + for_each_set_bit(i, si->active_vlans, VLAN_N_VID) { + int hidx = enetc_vid_hash_idx(i); + + __set_bit(hidx, si->vlan_ht_filter); + } +} +EXPORT_SYMBOL_GPL(enetc_refresh_vlan_ht_filter); + static int enetc_num_stack_tx_queues(struct enetc_ndev_priv *priv) { int num_tx_rings = priv->num_tx_rings; diff --git a/drivers/net/ethernet/freescale/enetc/enetc.h b/drivers/net/ethernet/freescale/enetc/enetc.h index ecf79338cd79..c60741dfe358 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc.h +++ b/drivers/net/ethernet/freescale/enetc/enetc.h @@ -24,6 +24,7 @@ #define ENETC_CBD_DATA_MEM_ALIGN 64 #define ENETC_MADDR_HASH_TBL_SZ 64 +#define ENETC_VLAN_HT_SIZE 64 enum enetc_mac_addr_type {UC, MC, MADDR_TYPE}; @@ -321,6 +322,9 @@ struct enetc_si { struct workqueue_struct *workqueue; struct work_struct rx_mode_task; struct dentry *debugfs_root; + + DECLARE_BITMAP(vlan_ht_filter, ENETC_VLAN_HT_SIZE); + DECLARE_BITMAP(active_vlans, VLAN_N_VID); }; #define ENETC_SI_ALIGN 32 @@ -506,6 +510,8 @@ int enetc_get_driver_data(struct enetc_si *si); void enetc_add_mac_addr_ht_filter(struct enetc_mac_filter *filter, const unsigned char *addr); void enetc_reset_mac_addr_filter(struct enetc_mac_filter *filter); +int enetc_vid_hash_idx(unsigned int vid); +void enetc_refresh_vlan_ht_filter(struct enetc_si *si); int enetc_open(struct net_device *ndev); int enetc_close(struct net_device *ndev); diff --git a/drivers/net/ethernet/freescale/enetc/enetc_pf.c b/drivers/net/ethernet/freescale/enetc/enetc_pf.c index 38ec7657b9aa..f9b179ed6d8b 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc_pf.c +++ b/drivers/net/ethernet/freescale/enetc/enetc_pf.c @@ -222,45 +222,18 @@ static void enetc_set_vlan_ht_filter(struct enetc_hw *hw, int si_idx, enetc_port_wr(hw, ENETC_PSIVHFR1(si_idx), upper_32_bits(hash)); } -static int enetc_vid_hash_idx(unsigned int vid) -{ - int res = 0; - int i; - - for (i = 0; i < 6; i++) - res |= (hweight8(vid & (BIT(i) | BIT(i + 6))) & 0x1) << i; - - return res; -} - -static void enetc_sync_vlan_ht_filter(struct enetc_pf *pf, bool rehash) -{ - int i; - - if (rehash) { - bitmap_zero(pf->vlan_ht_filter, ENETC_VLAN_HT_SIZE); - - for_each_set_bit(i, pf->active_vlans, VLAN_N_VID) { - int hidx = enetc_vid_hash_idx(i); - - __set_bit(hidx, pf->vlan_ht_filter); - } - } - - enetc_set_vlan_ht_filter(&pf->si->hw, 0, *pf->vlan_ht_filter); -} - static int enetc_vlan_rx_add_vid(struct net_device *ndev, __be16 prot, u16 vid) { struct enetc_ndev_priv *priv = netdev_priv(ndev); - struct enetc_pf *pf = enetc_si_priv(priv->si); + struct enetc_si *si = priv->si; + struct enetc_hw *hw = &si->hw; int idx; - __set_bit(vid, pf->active_vlans); + __set_bit(vid, si->active_vlans); idx = enetc_vid_hash_idx(vid); - if (!__test_and_set_bit(idx, pf->vlan_ht_filter)) - enetc_sync_vlan_ht_filter(pf, false); + if (!__test_and_set_bit(idx, si->vlan_ht_filter)) + enetc_set_vlan_ht_filter(hw, 0, *si->vlan_ht_filter); return 0; } @@ -268,10 +241,13 @@ static int enetc_vlan_rx_add_vid(struct net_device *ndev, __be16 prot, u16 vid) static int enetc_vlan_rx_del_vid(struct net_device *ndev, __be16 prot, u16 vid) { struct enetc_ndev_priv *priv = netdev_priv(ndev); - struct enetc_pf *pf = enetc_si_priv(priv->si); + struct enetc_si *si = priv->si; + struct enetc_hw *hw = &si->hw; - __clear_bit(vid, pf->active_vlans); - enetc_sync_vlan_ht_filter(pf, true); + if (__test_and_clear_bit(vid, si->active_vlans)) { + enetc_refresh_vlan_ht_filter(si); + enetc_set_vlan_ht_filter(hw, 0, *si->vlan_ht_filter); + } return 0; } diff --git a/drivers/net/ethernet/freescale/enetc/enetc_pf.h b/drivers/net/ethernet/freescale/enetc/enetc_pf.h index 3b0cb0d8bf48..90137fbb8f48 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc_pf.h +++ b/drivers/net/ethernet/freescale/enetc/enetc_pf.h @@ -6,8 +6,6 @@ #define ENETC_PF_NUM_RINGS 8 -#define ENETC_VLAN_HT_SIZE 64 - enum enetc_vf_flags { ENETC_VF_FLAG_PF_SET_MAC = BIT(0), }; @@ -52,8 +50,6 @@ struct enetc_pf { char msg_int_name[ENETC_INT_NAME_MAX]; char vlan_promisc_simap; /* bitmap of SIs in VLAN promisc mode */ - DECLARE_BITMAP(vlan_ht_filter, ENETC_VLAN_HT_SIZE); - DECLARE_BITMAP(active_vlans, VLAN_N_VID); struct mii_bus *mdio; /* saved for cleanup */ struct mii_bus *imdio; From patchwork Tue Mar 4 07:21:58 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Wei Fang X-Patchwork-Id: 14000139 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 9B483C021B8 for ; Tue, 4 Mar 2025 07:57:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:MIME-Version:Content-Type: Content-Transfer-Encoding:References:In-Reply-To:Message-Id:Date:Subject:Cc: To:From:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=Q6BwyvdGeY1viuvmpLBYTiydw5CWKTPeeW879gCKFYg=; b=EvBPHo7Z3r1kR8UebXHxGR804P O1Q9zjrCFCrPJDvdHH+9CaVMDjmdjV6z1Rl7AmOCTPfyWBZrL1dQ+/5D4iRRVA7Pbf5qmnwuFiRfN Yy0YMsAJoLVWNXnY59oaA74B6W79NPpRdhbgbUzZkj/oZYGZL5teWWWtrf0OfEtaTCbaXiwrH5Om+ E41pGKSu7fLQqGe8+UX3Gvh3Ujb0fz2Ktw8ln0Y+crEo57pYyNFWpeiDj+kF0F2aWX8BbGPranW9J CF6hfTZl/5bseDgHZfMitZZAe6SUlifrqqbwBFWfbXO+sBp/UNqx3G+Vk4v0ZsALXxHpaA9fAT3ji CzdlCiyA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tpN9M-00000003XJ9-1rdy; Tue, 04 Mar 2025 07:57:12 +0000 Received: from mail-am6eur05on2060e.outbound.protection.outlook.com ([2a01:111:f403:2612::60e] helo=EUR05-AM6-obe.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tpMsq-00000003TDn-4B2A for linux-arm-kernel@lists.infradead.org; Tue, 04 Mar 2025 07:40:10 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=CjVfzjWEmDDqOUhhTgB9PWJUAezJo8q4v3f6ch/d34Jlk633IXV5UjOyx5/j4WntBELZlpcrQB5NeKd0WJhGUGWoZOyvagBLQBzBEQH9bqTu4qhBCLr9jQ2nMRA0Aj1PIf7e22GTv7PqSmNaN5gMwv0E/dhnJs3wZazaHP1XpNApnfx++SOjZufASoEp4SaAftMaJc9otv++jEvh9fJ+8v84buphtaIZCFRPBxJoPHcFEOzDCNBJWLTPN4C7OmuFMsdC2op2egEymigV2ZyRDQxHIPLn0Q91gv3LnM4gV7HF+HMoIeGTkYxgLlibannKD2vDDE3czlWgYrT0RkHPHQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=Q6BwyvdGeY1viuvmpLBYTiydw5CWKTPeeW879gCKFYg=; b=sAzE0SLEK27iQ3oHxeHUuZ9a1py3S1GBuPRw5KOODVZiJCLhRvOm5T3ztwSa/lF+TP8tTleK4oO1Lm3WAf2DZRtTto1WIdK4fH6M/GR30dgZYH8Ka3KoPDK6yClowKhbtkBdjNlFcAjmqyPxI/n4N8clZ9Fje7HPtkYb0cL3E94Z+FRxsVGZsurEBU440db42XfL7lza6+zJ1wsjEF9JdeqzfLo+nP2Jtqi87U02ItYi8VHlHDVIwV12l7dL9j7PeWXb+lvNM6wL1PQ4KrtGenMd7hGcvrS4O64XIN6SKNGkMRIZkC/3lj0uskUgIw/AxuDVeFR7ukv9E0ytpTfWMw== 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=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Q6BwyvdGeY1viuvmpLBYTiydw5CWKTPeeW879gCKFYg=; b=mg/cw0OmZcjPMfGYHap4WBVZcq0c8Qg1M+/j6R4Q/ktEG1PliipiEJw1tkqPMIZfr/WBXF96mM9KKzqWAEu6mKMyMYo/YWVrpATn51godSd9V2Aa+CFo6ko29h668ev59sFJH3pUGPPhOvd+XQKiOT0kFC1ZH0/4qdu4kphGiSz6vLYRS3toywtEfze3+7+rStF+Eve7r6VkqsJoXGpcCJmLqCPYzGqz8gnEtkTw0/sfPNH3RHN06UsjyAPbJodrJ+I+34MGb91ziiADPrbO2c+Avhj+fA0IEz9jErp27LX5l2pBXuthutsFv/aTfGYQf0MbThw6wtG8TXOSvEcE0A== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from PAXPR04MB8510.eurprd04.prod.outlook.com (2603:10a6:102:211::7) by VI2PR04MB11171.eurprd04.prod.outlook.com (2603:10a6:800:29a::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8422.11; Tue, 4 Mar 2025 07:40:03 +0000 Received: from PAXPR04MB8510.eurprd04.prod.outlook.com ([fe80::a7c2:e2fa:8e04:40db]) by PAXPR04MB8510.eurprd04.prod.outlook.com ([fe80::a7c2:e2fa:8e04:40db%5]) with mapi id 15.20.8466.020; Tue, 4 Mar 2025 07:40:03 +0000 From: Wei Fang To: claudiu.manoil@nxp.com, vladimir.oltean@nxp.com, xiaoning.wang@nxp.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com Cc: christophe.leroy@csgroup.eu, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, imx@lists.linux.dev, linuxppc-dev@lists.ozlabs.org, linux-arm-kernel@lists.infradead.org Subject: [PATCH v3 net-next 10/13] net: enetc: move generic VLAN hash filter functions to enetc_pf_common.c Date: Tue, 4 Mar 2025 15:21:58 +0800 Message-Id: <20250304072201.1332603-11-wei.fang@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250304072201.1332603-1-wei.fang@nxp.com> References: <20250304072201.1332603-1-wei.fang@nxp.com> X-ClientProxiedBy: SG3P274CA0007.SGPP274.PROD.OUTLOOK.COM (2603:1096:4:be::19) To PAXPR04MB8510.eurprd04.prod.outlook.com (2603:10a6:102:211::7) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PAXPR04MB8510:EE_|VI2PR04MB11171:EE_ X-MS-Office365-Filtering-Correlation-Id: 6479b051-9f52-4433-0452-08dd5aefc69f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|52116014|366016|1800799024|376014|38350700014; X-Microsoft-Antispam-Message-Info: iiHZtlW0LUvQYUmgZK7ojApBVdAAmj2Xs1iBjySeysD2YahEyzyrRSz8TDxDZ91OemYmel/e2al0FsETQXcbmFEpctArmfuzyEcC0oO0fVXEkPiJTsWDuRTMw0zzn2IlyybiL0m/9H+nH+rxaiHUrk316vaCgAmvYftKECXeAFqZrAA6aRDaw5nPr70KdQyuUFgCnS4JePzk0EkaXs4BxQQCgKbU5UI7G1yNToG10OViB+VI1k0shF8Yqn9cH0ZY19AGbt1pZ6cVkKBktq6Bw4HCTYat24bTwCebAKQ7UwcWU6jPiAKqxsJtQMTlaRDE1IjY4kriruErzfCu2mcjZ1IzHRS7+Rl8tvspla79kozBmV5tTfwaIXQJ2W4JeQ5+O2Qe3b9QZw8vTxJYJ8J5ePSZOE/VXdRkT5i7VYgEK28Ky7FN+TTrcwCRdyo7jzabkozvWPuPkCLuazrMjv2/VFkoq4rMkOTL7Ou0jbBX6lLHOzXnvu8i25lr9YRCIm50veGVJrMBnQC8hluQ2sl7k+kP7GuH7Ocs56PO2gU7gpOvCLPl9BS6AcfGbXLrGTXLSoOAQfzhtleqSqPIQlWoxwSMHvoPy/cCdHBzIuZQUJjrW1w1IMf17t7NpCMb7U4J7KwGadqMX9Qb4iMAGr9zrtNiz1wdTtD1Ql1VrjmOrLHucxQtgcwikrecrbuhdfcR4huFLUMYzxXPmwpFDuIcl1MMdN1wagTOV6PZfhiOYbMepAkNqX1DVKoN7ZJNWO0aVbO8ZWic5+KeN9/EH+pcqeXM0ntrI8NppVWyummtcTbDY43h9vUc04DB2ug69FykqMj6Irj2NptYoyHeS6eJBnXfhJ2WGMOGE41ZmPK0KRx4JqY6r91wBV0CVphCgb1yl6r2ayRG3tWvMbvpNnxdE2ixCCux/T/d9ImYEuZcP02mMdiwHCyMsV0Gsx+weTovg2FL6ijp13XcE7EZ88kecvRUBTaEe9rTX5Ro9hF8DvTA9qjhsrxlGzwTpR2ixfkotbBfMyW0nejkdmhYrtdUri/0xvXXJUYMMM5W6ru71+jCZVXz9GA8Y1cnFwX9L9Z58Hqp/lkR9adsqF6Cb7ebQI12D34C5cTSkQYm1nLL3DLzwpSwXoDzO4CzNo0GNEdFUIEtguQPhJ2eBfzfD70jiqLAwBd3XXECVXvJXzMM79TXt2vzzwXE7sQiiQq6EaK9yRCBHmAnooiUuJEu+Uw97cw0F2jwRmvFfoqNv8DW3/YC6lFuVxXxPG63OidYP0AX8Y2j3/OynhU3Iu+HPk8rdWRb2t7nZ5/kiQX/jaoSBHuya3/8As7ODLWxDp7/+bfM23ReIRxD4kIv61b9if6LAE0TEE296tQRzK0wN5CpfxbOrNNhQ2pQDxQnSwe94oMFJ0atfGTAprtCj/2M18Iqi2eA+S0f3s28Day3DLITUsr/6uUN1ZF8zx/fNEogwv14 X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB8510.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(7416014)(52116014)(366016)(1800799024)(376014)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: sVzsij6XlDr3AbSIBFAg9PaS80LmsZX3LPV/hCOL2Ha3om2XpMB8HooHoMvgRKkA7vc2AnK/ECfcdshtDhxs0MPYX6Znv9seuH5eF//uhUqOSjkFRd9MzU4XH4uz0LbMt3V468gpXAnfVWYPFmCdE6tWhqEMtvTpDWFmB6qhJDGDW+iKtqbpqrMatmsOC9NF2OTJnvaGCyPuPemwd9ScaKpxgLP6BEpZQJMTouCdBini08pfJd8oVpxZhhKeSvrNZU4JCzsu66ejG6FIr5xuFYUVFo8ZRpvNVLR7E75QHjiyMn2VySZxaWnF6iUF6dbyHvrXOh+EKs8FjfFKG7iMPKqdZPYddUobrfzDhXsmEfjCnMVWr8oOnPNXfwxgzn797BJk+q+VAvqENEzr8VLSv30+k9ys6zzaGpGG6p2AioxCDJWsji0gzkydac4ERkiqcThiR0/dyG4Vht5cix/DczvLSw87ltr80xKx2x6jbboiJxLx62+V/Z0/YL7LDQXohWimeIYtvF1c1Fm4FrA50qm4XLCJFW7ZAcx9mv0VYJWaUuQELfywGAr9ncTZfoQS6lv97muWiy7gj6xJuR1Zp5+aJEAAX8yami6IGZnX/t2rag2kfud3nsqxENk4KU1iRoQkYWEzjtHpH1WQdO0P9t/Bhf2ayXaFmEahst7nOMj86u45SbgO4BFKQA4FX3D4K3nDUmuY/62jGdl1tgcmmulfG+rttprfuTNh22+8w9FV7t1NgR5a/2+iqlsQJJ3aTlBLEyXUjjaeS41YLtc3qfpII7cNJWBRZPcLnjoOdqbH1ZEiJRv0O+SbCX+5AKkzsFJSB1idyVF88/vTynJPcGVrIJdNZlDQa0nC9h89RDiyNLNc1ezPMqhBvRn1BCMaMeljz3d1O0kXUmqB41R3kffvzr1ff1hXOVDy027TZ98I76JRIu8j9auQGq9JW0ovzF5OY56BZH3bLEXHYcJu8n5DpDwjZt0Afpw44uArF283gCyO0f29uAEfKmfF+1N3vs9hI4efVCHY/GDzPvdFXDU42HO85xjSw14i5ofiQumw06Y5pbD35kDzJ7ZMJk1ZveLQ02mkRsaUy/3dMum+2UXgkpECwXU6KdSiq/Mb+X67KloiaxNaqeUqGdXyQW4tJOce9HmiUsHVcyuWVYrl2QsYtxp/KYV7+qRQ1igXrwPQSQjIFjFrFKB+caJWqwAlGiHFE63izJMeb7kRy4avcKeXNaWuPWH0q+6tcBS4OvYnddIp6RTlGibWMPBrB+/JA0FN7WMfttviEpHaov9lE2x3v1m77ssg7VFpSWRasRkp5qj8aqmMtM6aA6/I2EEsibH/JgVkLBagsD5kUTmqzOun3REyI/j7wSGP7WmGAHOBqz1EwNtf93BSpivFGN/eJOoMvVQRWhiAkjta/dQfFWK+TtCZnxGZ4qnSNEu6hlxN0B5Il3vpt7yN+6HjK1i4BE0ME7b0xQbL5Y01rMgzjdv7BG/x0JvdRTua/1+QAd6iVX17qMF+2vEuuyQSf9TJVpbVUGJ57lrE3WdK6cLnlc6SQqrTal0q+VltW+gQABzebVExjtbSnStQfJ0pfdIr X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6479b051-9f52-4433-0452-08dd5aefc69f X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB8510.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Mar 2025 07:40:03.4913 (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: zoq9P8/2LyBwidflyJuJknv16afN8E1D38goYTOfVNi8tGr0ouwgts+HnUmfdkElW1OKhV5CIlRv6uYnsyXZyQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI2PR04MB11171 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250303_234009_036678_67BFCF60 X-CRM114-Status: GOOD ( 17.14 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Since the VLAN hash filter of ENETC v1 and v4 is the basically same, the only difference is the offset of the VLAN hash filter registers. So, the .set_si_vlan_hash_filter() hook is added to struct enetc_pf_ops to set the registers of the corresponding platform. In addition, the common VLAN hash filter functions enetc_vlan_rx_add_vid() and enetc_vlan_rx_del_vid() are moved to enetc_pf_common.c. Signed-off-by: Wei Fang --- .../net/ethernet/freescale/enetc/enetc_pf.c | 34 ++----------------- .../net/ethernet/freescale/enetc/enetc_pf.h | 1 + .../freescale/enetc/enetc_pf_common.c | 34 +++++++++++++++++++ .../freescale/enetc/enetc_pf_common.h | 2 ++ 4 files changed, 39 insertions(+), 32 deletions(-) diff --git a/drivers/net/ethernet/freescale/enetc/enetc_pf.c b/drivers/net/ethernet/freescale/enetc/enetc_pf.c index f9b179ed6d8b..d3ca9e33893f 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc_pf.c +++ b/drivers/net/ethernet/freescale/enetc/enetc_pf.c @@ -215,43 +215,12 @@ static void enetc_pf_set_rx_mode(struct net_device *ndev) enetc_port_wr(hw, ENETC_PSIPMR, psipmr); } -static void enetc_set_vlan_ht_filter(struct enetc_hw *hw, int si_idx, - unsigned long hash) +static void enetc_set_vlan_ht_filter(struct enetc_hw *hw, int si_idx, u64 hash) { enetc_port_wr(hw, ENETC_PSIVHFR0(si_idx), lower_32_bits(hash)); enetc_port_wr(hw, ENETC_PSIVHFR1(si_idx), upper_32_bits(hash)); } -static int enetc_vlan_rx_add_vid(struct net_device *ndev, __be16 prot, u16 vid) -{ - struct enetc_ndev_priv *priv = netdev_priv(ndev); - struct enetc_si *si = priv->si; - struct enetc_hw *hw = &si->hw; - int idx; - - __set_bit(vid, si->active_vlans); - - idx = enetc_vid_hash_idx(vid); - if (!__test_and_set_bit(idx, si->vlan_ht_filter)) - enetc_set_vlan_ht_filter(hw, 0, *si->vlan_ht_filter); - - return 0; -} - -static int enetc_vlan_rx_del_vid(struct net_device *ndev, __be16 prot, u16 vid) -{ - struct enetc_ndev_priv *priv = netdev_priv(ndev); - struct enetc_si *si = priv->si; - struct enetc_hw *hw = &si->hw; - - if (__test_and_clear_bit(vid, si->active_vlans)) { - enetc_refresh_vlan_ht_filter(si); - enetc_set_vlan_ht_filter(hw, 0, *si->vlan_ht_filter); - } - - return 0; -} - static void enetc_set_loopback(struct net_device *ndev, bool en) { struct enetc_ndev_priv *priv = netdev_priv(ndev); @@ -953,6 +922,7 @@ static const struct enetc_pf_ops enetc_pf_ops = { .create_pcs = enetc_pf_create_pcs, .destroy_pcs = enetc_pf_destroy_pcs, .enable_psfp = enetc_psfp_enable, + .set_si_vlan_hash_filter = enetc_set_vlan_ht_filter, }; static int enetc_pf_probe(struct pci_dev *pdev, diff --git a/drivers/net/ethernet/freescale/enetc/enetc_pf.h b/drivers/net/ethernet/freescale/enetc/enetc_pf.h index 90137fbb8f48..704c4ee42f61 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc_pf.h +++ b/drivers/net/ethernet/freescale/enetc/enetc_pf.h @@ -37,6 +37,7 @@ struct enetc_pf_ops { struct phylink_pcs *(*create_pcs)(struct enetc_pf *pf, struct mii_bus *bus); void (*destroy_pcs)(struct phylink_pcs *pcs); int (*enable_psfp)(struct enetc_ndev_priv *priv); + void (*set_si_vlan_hash_filter)(struct enetc_hw *hw, int si, u64 hash); }; struct enetc_pf { diff --git a/drivers/net/ethernet/freescale/enetc/enetc_pf_common.c b/drivers/net/ethernet/freescale/enetc/enetc_pf_common.c index a737a7f8c79e..9f812c1af7a3 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc_pf_common.c +++ b/drivers/net/ethernet/freescale/enetc/enetc_pf_common.c @@ -343,5 +343,39 @@ void enetc_phylink_destroy(struct enetc_ndev_priv *priv) } EXPORT_SYMBOL_GPL(enetc_phylink_destroy); +int enetc_vlan_rx_add_vid(struct net_device *ndev, __be16 prot, u16 vid) +{ + struct enetc_ndev_priv *priv = netdev_priv(ndev); + struct enetc_pf *pf = enetc_si_priv(priv->si); + struct enetc_si *si = priv->si; + struct enetc_hw *hw = &si->hw; + int idx; + + __set_bit(vid, si->active_vlans); + + idx = enetc_vid_hash_idx(vid); + if (!__test_and_set_bit(idx, si->vlan_ht_filter)) + pf->ops->set_si_vlan_hash_filter(hw, 0, *si->vlan_ht_filter); + + return 0; +} +EXPORT_SYMBOL_GPL(enetc_vlan_rx_add_vid); + +int enetc_vlan_rx_del_vid(struct net_device *ndev, __be16 prot, u16 vid) +{ + struct enetc_ndev_priv *priv = netdev_priv(ndev); + struct enetc_pf *pf = enetc_si_priv(priv->si); + struct enetc_si *si = priv->si; + struct enetc_hw *hw = &si->hw; + + if (__test_and_clear_bit(vid, si->active_vlans)) { + enetc_refresh_vlan_ht_filter(si); + pf->ops->set_si_vlan_hash_filter(hw, 0, *si->vlan_ht_filter); + } + + return 0; +} +EXPORT_SYMBOL_GPL(enetc_vlan_rx_del_vid); + MODULE_DESCRIPTION("NXP ENETC PF common functionality driver"); MODULE_LICENSE("Dual BSD/GPL"); diff --git a/drivers/net/ethernet/freescale/enetc/enetc_pf_common.h b/drivers/net/ethernet/freescale/enetc/enetc_pf_common.h index 48f55ee743ad..253310859ca1 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc_pf_common.h +++ b/drivers/net/ethernet/freescale/enetc/enetc_pf_common.h @@ -12,6 +12,8 @@ void enetc_mdiobus_destroy(struct enetc_pf *pf); int enetc_phylink_create(struct enetc_ndev_priv *priv, struct device_node *node, const struct phylink_mac_ops *ops); void enetc_phylink_destroy(struct enetc_ndev_priv *priv); +int enetc_vlan_rx_add_vid(struct net_device *ndev, __be16 prot, u16 vid); +int enetc_vlan_rx_del_vid(struct net_device *ndev, __be16 prot, u16 vid); static inline u16 enetc_get_ip_revision(struct enetc_hw *hw) { From patchwork Tue Mar 4 07:21:59 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Wei Fang X-Patchwork-Id: 14000140 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 91B1CC021B8 for ; Tue, 4 Mar 2025 07:58:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:MIME-Version:Content-Type: Content-Transfer-Encoding:References:In-Reply-To:Message-Id:Date:Subject:Cc: To:From:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=TG/uE1RncJyCkIAfdm176LtHy2r89umHjThLOCOpG0E=; b=C365xlVI13BNMCfb71rLlAh+kg GAlh/Eh5MmjOcHqbenTCbN9covvbztfK+7sDcHZoT8m1oSzlbp72n463dcLybCv/XWLVhYllwOz5d sEc2fTPzNl1vuG65LEwrGCGS7pTglfcSXyYSVk5f2Uejc1+X0rmhza3QjQrms105+cH0A4GyZECEt 3eGZzEr1aZ/HNlAYETMfxg+DklXMSUaaa0HLqccrKnBKNQ41OVJkaMmhhQVlAKjnZK9AYzy9MafCh /ZNXXiAkFrNWFoC0Px5dRlD0brh1rtLsHjRjhuz+n0zPTmhaBqXiMSxJweW/W+pw9gSKF52cu9Tez 7Tx2n40A==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tpNAu-00000003XY2-0JNg; Tue, 04 Mar 2025 07:58:48 +0000 Received: from mail-am6eur05on2060e.outbound.protection.outlook.com ([2a01:111:f403:2612::60e] helo=EUR05-AM6-obe.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tpMss-00000003TDn-2OAn for linux-arm-kernel@lists.infradead.org; Tue, 04 Mar 2025 07:40:11 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=JJnOObAUEmEkQLR4vI9tbbklMtcS87i2ie4p7r0BRANpUCuvF2nHXkM/9E6P4ZyGVEZNFLAQDh8NtMgUr6QD2RmzR3Wz8gEgp+DGLK1XjyoB6moSxXcBj51uzeIqBbAfHD1654Ob9E3Dwu5e8NsmkZ/g+fZNBuPYRIHAoilQo+nQC+b7ISVBzXae0cFje/WDxyverX68AIu1FW6Co0sl0e44I2hibuCfYfKHLHadOpP6HjRhn4ftc5oOisXu7cT3TO/RTBPVNJJuCXJvR35MZ0YzCkGFGeFLQvpBrt7g3xPofXHaHn+B7X1M9l2zvnI9G9e9yJOh1wdSWrYTF6XpVg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=TG/uE1RncJyCkIAfdm176LtHy2r89umHjThLOCOpG0E=; b=vv5YtseCxGsF0EwiP8a78xZTb4dBmNolR/IdEw0sYfvbrDzlFHrmYoIXqikAEUhf9+HyrJ1zBwzpFD1s6fo1bILHSexA+38LApiCzMzzBe+IFKX3PqUeGtL0lwnu3+ME/6kivAGpyq8HLb6Ye1/Z0i3dW1kAn8GlOOypTaqC/tcvzChduLSK6saiCkeCtejVqP64YQ14IJtGhZlgiZLn8Vcd7bx39w2lhBDFB21x2ijpFnQ4Ovc2kMRadYFx+Q6wfNU+MT3dszlGWCm+OusUIfTO79F0QZ8fsgtZveowTrrmTOS4dlrDptTZ97JBi4+BxluBkzL7IGKRub+SLJ179A== 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=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=TG/uE1RncJyCkIAfdm176LtHy2r89umHjThLOCOpG0E=; b=QZkE87m9Co3b40DYutqm3z8nSIP4w1sHpY0A92pQj+wh+7f+B687BHjIaXK0UWHV4Tonb+7J6/LeOGZwsdKPtFITaT+Ebt+K2Go7baCFi2/MXyzf+ygYXYGwkTKkDqJhOEdRYY/P9tnZKcAXffRGTRfQanm+8KiOO2WmAE4TJzDg6ZH1IIqht3fSQa+uFZtOSeoHaJOGm8GL7+m05yV4VbF78QKaxvHV9O9jauXqb3xYUab7k6iWU0p+B50uN1ZKLfji4ghNXzcFhEaQeAbaFXz2rFSncImc611vQNnCjYSMfduljvZh7/81trc7XprMGmb8ybLmsOEB/lh0wHAH8w== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from PAXPR04MB8510.eurprd04.prod.outlook.com (2603:10a6:102:211::7) by VI2PR04MB11171.eurprd04.prod.outlook.com (2603:10a6:800:29a::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8422.11; Tue, 4 Mar 2025 07:40:08 +0000 Received: from PAXPR04MB8510.eurprd04.prod.outlook.com ([fe80::a7c2:e2fa:8e04:40db]) by PAXPR04MB8510.eurprd04.prod.outlook.com ([fe80::a7c2:e2fa:8e04:40db%5]) with mapi id 15.20.8466.020; Tue, 4 Mar 2025 07:40:08 +0000 From: Wei Fang To: claudiu.manoil@nxp.com, vladimir.oltean@nxp.com, xiaoning.wang@nxp.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com Cc: christophe.leroy@csgroup.eu, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, imx@lists.linux.dev, linuxppc-dev@lists.ozlabs.org, linux-arm-kernel@lists.infradead.org Subject: [PATCH v3 net-next 11/13] net: enetc: add VLAN filtering support for i.MX95 ENETC PF Date: Tue, 4 Mar 2025 15:21:59 +0800 Message-Id: <20250304072201.1332603-12-wei.fang@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250304072201.1332603-1-wei.fang@nxp.com> References: <20250304072201.1332603-1-wei.fang@nxp.com> X-ClientProxiedBy: SG3P274CA0007.SGPP274.PROD.OUTLOOK.COM (2603:1096:4:be::19) To PAXPR04MB8510.eurprd04.prod.outlook.com (2603:10a6:102:211::7) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PAXPR04MB8510:EE_|VI2PR04MB11171:EE_ X-MS-Office365-Filtering-Correlation-Id: e92011c9-f6dd-4a92-623d-08dd5aefc944 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|52116014|366016|1800799024|376014|38350700014; X-Microsoft-Antispam-Message-Info: wVkfoLRkb/JRCZOsfeLs0jdsWg2FeQStfwU4HAmqvljStnrAo1IDoKM8BMtEyBXOn2bYGllAr6hskxru8vr4TJwajeag5G1vr+SVWC+3g+NnFI8hNC2Pp1BuZkIBxyUTx8OT89YrNlDUZPDixzgU7Xuj/paV/QuKjMT0vzhVO1c3ui1ZCpfPB+eG2sCwMzF3JEsN0l3OQKcptvwGSZ/48Hn5pvmnu5YSoj6HeKF6bWvgK2ghHJYZv/sXVcZrDU0BJh70aEsSuKRk4exjQO1SBKhL/aOyrQxlC/jpt5ZJjr5yOJRGBZAqpQf/olCoz3ZIFMSPpaQv+F7aIN0CfVtleJsxGSUy2+MwKc7T+gRp6YHDQQOB2Ej8aQjfxRCxdU0z/hzpgj9FdpZEE5zafiL9ENXteXuTI3/9ejA5LBC1ZDLy+hWc72oo7LXw+OOz0epkAUk+9qSXIxrFmRgLU/BfZJlAhA2YJwdHVwd15mugPHfYuNsDpacJp5RzA2471HN7NjBZVG3G6ooBVMn4w48guUtS7hqlYo8VsbWx/ufq+XvAGa6EduVQoV1NaxKXi4vBDpiLb8rqQdmz+ctijsKB8tCRAMU3RmFPwfyPAVNqvs8FhR66oov32eY8Ya0S6+z4Z+a9yKV8KstuGMdb7vTyV1tkx56QUtMbYQAGsSLJ8i09wTAC+R/BMZFlwFh8XORzYtNs5LNHodVnLO+JwHGVo4jwzmpArDJugR5naQDisBtjAeMQ5qxU0BWZQt/FnQiI+ohBIUTJ0rhMjliWs3v9z7+UfStEaKagBoiziequdlQi4Ge3xXyWs+q77gJVyDss5U4YmoZ+ULI6LHjZkKW+R/uJkqrcOC+duXufQLM9mlo9VywzK3sFji1EiK0Gvycd79nM9bs07qfbZF2azl748qiWIi9I5vlq2J+iHjfPMOJLcowi660e7g5a5045fqNkMA9vkPPsnM6lpKRgsUQab+Q7oNgyfZgaN9DF5ZvRieUPEWN+aCu8jXq5LrYDQ3Z3NaUxRI+h7XaayALDIOicUxPuFUMHUx+BaIRIPKsOOphhlWkKad4TBaX6wyzBaVv2pbSQwlnf8OjQc9t1qaxA3HZZMorUlxpckfn2aXu7LOAE3o1pzNrH+xLlPV4S8Lw5iec6GrrQCGCGpvJNtDYbimBJ5eW3OkiVOUqaaGXe0PN7O6Gp7aOCAIF6A0yDmbcs79rZiEkM7806Poi5xCG19lrCQWodyeGBmzk1UNU+XmdqC0oSpda3j+048KvNxoQU7mcxygDCW7hv5NLkRnEfvln27rf0D+jKS5KPyKDMmm0ArFhb+1PSeeZ+6jff/zNf0kn9GuUmVFJOIoeyFELxYP3yHhbByPW3CD3Z8RGhcl7TuaKPzZWKbdXgdj3ghBDz2qzhosZgztrlWxhI8pG0THN5gxwXjpx9CIsiEXyd5gD4CDx2JZK1+tqVl7ayw7VP X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB8510.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(7416014)(52116014)(366016)(1800799024)(376014)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: eS35H0GfR+9JdI4hSsYBqRBlmLi1eZl1cksb49KtzIqCYMTWHr85fhB+LBpy7+AwTgV2q0ww9AeMzin2JnA4gJ5Ga0JccVIAboepXTKFFzqUpL5EFLhrULm1PwJE0zudYxgHsQcUx6/prgUBore78Rw+ihlG2hW0YWJ4nS2qPgYA4/yM/7wXVwIKxPQYY+iGemDEAhmRCt2crGQhKG21LutVMDklxXnKoJD34MH0qo20xpQNRW/unDu2H0tguY06UJRMqO0GPRMBC4WLaHQdd4WVFOxIp4UO4oNgKY8lBekgpQyGuLZeWc/EsOJE+y6Hkv9UevzYrEk/paubYTZDpmEgaT2CLkIta9Wr0Fux74QMcl7bASzB6EKmbR4jypnR5Z1ZMCPq7yhbzm6vSX0Zq3dhGZUUuKvSlz582zOKtdyCPAQTMOZzEmkm9Bca+U9laOcq5dzHm5Pf42+wxoolKqhFx3jNnif23ihm6n48IG+3Ef5/lg8ocCwmbKFTm+Xdtpb6Yjdonsytbncwhj3FOV0RjFyibdolxpZXY7g8vp6eJDH3CIC/v7HaD1e1jDw0blRxcw7ljJbxRn/4I9oUTuAv9fQ6EAifxAqIkIOOwoubyJpPk9mW4LUzgVhWR5FNEkqi2QHwOIZ1T0G2oJSFCnVXHyWWhoUDVaIMFtKSWXuEYbvf3BUsvkeyT82ZCYKW5gkLc3j9x3ujuCDh2kJ8GroTmbqS7zJTqfD5KYRXKQGQ2UPyEQbCsv91k+CQy4tq2laBg8P3X7i52ehov/M9rIPxIO4MlSqJSHwCwoqMbY1o+PfNel+AkbOp3GGqjvAyKgfpuUhi2+p0vlJC37fVXPjkv0kQfAYtfTa7KfeMy5l15rHTjkU8hl2o9i2X20BMOKgQmArIuXUTcWLqp4dgn0JDSQbC4AHiu2P4j9PQVIdHJf3BkiB294y8WY1Qra1Bw1LX1oZo+JwDt2UB++0SfqJMCcHGj9wBmV6FkwDv62SS5gxrxkHv2UExr9YXrOI9/PFaGbfMmOjJ1T6ajN7CxIbppLLTgUVI+yq+ndMtYjBZbjC2yiX/gOi2wLSvEjleI6jojsz1T0TRmbhmKiG3d2oR5v9pNVzCUiPVohksOvlDkhEik9bz40h+of7j8hWI7rd9WtWoR0prVUfsgExrt5XsQDD6f3rZ6UkgV+kW86bA1z4IgffLFImNban+BLtq6U2cwKH5BtHyftowAkG/DtY5kIkv73Kcr5/iXyFUiB9upQwxwsQNeDaaeaoRt++AOyuwcIe7NOYlLcsx5XxeoE+Pm8tp7+yRXlooU0NcxBHzxWT4HPQc7o0v7TsnvqcQQIIDChLYG5ED/nIlxPgtHgMcvaQDRJfhjgUdFQwsR7/k7Ll2El4IrVRbPN7y3/Lkvpunzp2+Ksve2QQz46jYx3UkEH6ReExHKYTr64uyKne1bau12+w4f7b04PUXHE3opGWVr6b1qe5mTeiNN8sovkuYt3TjsZcazR4oVuB9vC4mLLbMVhUdRkDWnkZfNIa1ZRNw0Cf+IDZdkzSQv2XzqGF3a6AEBqYb9GCSUHABUJB8fGWtFNzr0ioVs6Vg45S5 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: e92011c9-f6dd-4a92-623d-08dd5aefc944 X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB8510.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Mar 2025 07:40:07.9643 (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: DCj/imYcN/36AbAOimf6JiqIZoP/o9Icx+/xXD/sN7Hap7D2wDTn/rxdp35m+H5iSFqKWtwjzYikIHUYaaEhNQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI2PR04MB11171 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250303_234010_625905_B673DC02 X-CRM114-Status: GOOD ( 15.87 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Add VLAN hash filter support for i.MX95 ENETC PF. If VLAN filtering is disabled, then VLAN promiscuous mode will be enabled, which means that PF qualifies for reception of all VLAN tags. Signed-off-by: Wei Fang --- .../net/ethernet/freescale/enetc/enetc4_hw.h | 4 ++++ .../net/ethernet/freescale/enetc/enetc4_pf.c | 20 +++++++++++++++++++ .../freescale/enetc/enetc_pf_common.c | 2 +- 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/drivers/net/ethernet/freescale/enetc/enetc4_hw.h b/drivers/net/ethernet/freescale/enetc/enetc4_hw.h index 826359004850..aa25b445d301 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc4_hw.h +++ b/drivers/net/ethernet/freescale/enetc/enetc4_hw.h @@ -107,6 +107,10 @@ #define ENETC4_PSIMMHFR0(a) ((a) * 0x80 + 0x2058) #define ENETC4_PSIMMHFR1(a) ((a) * 0x80 + 0x205c) +/* Port station interface a VLAN hash filter register 0/1 */ +#define ENETC4_PSIVHFR0(a) ((a) * 0x80 + 0x2060) +#define ENETC4_PSIVHFR1(a) ((a) * 0x80 + 0x2064) + #define ENETC4_PMCAPR 0x4004 #define PMCAPR_HD BIT(8) #define PMCAPR_FP GENMASK(10, 9) diff --git a/drivers/net/ethernet/freescale/enetc/enetc4_pf.c b/drivers/net/ethernet/freescale/enetc/enetc4_pf.c index adaf28fdf0aa..e08d06e22898 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc4_pf.c +++ b/drivers/net/ethernet/freescale/enetc/enetc4_pf.c @@ -101,6 +101,13 @@ static void enetc4_pf_set_si_mac_hash_filter(struct enetc_hw *hw, int si, } } +static void enetc4_pf_set_si_vlan_hash_filter(struct enetc_hw *hw, + int si, u64 hash) +{ + enetc_port_wr(hw, ENETC4_PSIVHFR0(si), lower_32_bits(hash)); + enetc_port_wr(hw, ENETC4_PSIVHFR1(si), upper_32_bits(hash)); +} + static void enetc4_pf_destroy_mac_list(struct enetc_pf *pf) { struct enetc_mac_list_entry *entry; @@ -403,6 +410,7 @@ static void enetc4_pf_set_mac_filter(struct enetc_pf *pf, int type) static const struct enetc_pf_ops enetc4_pf_ops = { .set_si_primary_mac = enetc4_pf_set_si_primary_mac, .get_si_primary_mac = enetc4_pf_get_si_primary_mac, + .set_si_vlan_hash_filter = enetc4_pf_set_si_vlan_hash_filter, }; static int enetc4_pf_struct_init(struct enetc_si *si) @@ -692,6 +700,16 @@ static void enetc4_pf_set_rx_mode(struct net_device *ndev) static int enetc4_pf_set_features(struct net_device *ndev, netdev_features_t features) { + netdev_features_t changed = ndev->features ^ features; + struct enetc_ndev_priv *priv = netdev_priv(ndev); + struct enetc_hw *hw = &priv->si->hw; + + if (changed & NETIF_F_HW_VLAN_CTAG_FILTER) { + bool promisc_en = !(features & NETIF_F_HW_VLAN_CTAG_FILTER); + + enetc4_pf_set_si_vlan_promisc(hw, 0, promisc_en); + } + enetc_set_features(ndev, features); return 0; @@ -705,6 +723,8 @@ static const struct net_device_ops enetc4_ndev_ops = { .ndo_set_mac_address = enetc_pf_set_mac_addr, .ndo_set_rx_mode = enetc4_pf_set_rx_mode, .ndo_set_features = enetc4_pf_set_features, + .ndo_vlan_rx_add_vid = enetc_vlan_rx_add_vid, + .ndo_vlan_rx_kill_vid = enetc_vlan_rx_del_vid, }; static struct phylink_pcs * diff --git a/drivers/net/ethernet/freescale/enetc/enetc_pf_common.c b/drivers/net/ethernet/freescale/enetc/enetc_pf_common.c index 9f812c1af7a3..3f7ccc482301 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc_pf_common.c +++ b/drivers/net/ethernet/freescale/enetc/enetc_pf_common.c @@ -135,7 +135,7 @@ void enetc_pf_netdev_setup(struct enetc_si *si, struct net_device *ndev, /* TODO: currently, i.MX95 ENETC driver does not support advanced features */ if (!is_enetc_rev1(si)) { - ndev->hw_features &= ~(NETIF_F_HW_VLAN_CTAG_FILTER | NETIF_F_LOOPBACK); + ndev->hw_features &= ~NETIF_F_LOOPBACK; goto end; } From patchwork Tue Mar 4 07:22:00 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Wei Fang X-Patchwork-Id: 14000141 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id E24E9C282D3 for ; Tue, 4 Mar 2025 08:00:33 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:MIME-Version:Content-Type: Content-Transfer-Encoding:References:In-Reply-To:Message-Id:Date:Subject:Cc: To:From:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=VW/qrnEyG86Az3cCgIFF6sCfe/uWdPG3zLsqFfGGouk=; b=0AwzaMC0eSSs2pIhKBcdtPHWBd h1tNXOe82TiFtd2iu35b3D/bJrzJiDlDGpGCJjvEE0Xm/0nLUm5fpgLYlwFyKrgn8hkh7JFhik95f b8jqYzO5XiYE7E8QbLOLJkQeqjLyoPFgyt7g/6FPmVa8t8XZCmam9mJZpZp/cPiHoM9Zdeq0LJv6m Z09zFikFnGMhBmVdZl3ZG4ZehE7yjGTPnnCG333mgjazyGtHKAW+7CdXlTuStN+rOsJGiErg9JBXJ IXcnSMX7e61nxNNnnrBScjmZd1ukekKo9l9+Tm6973Yeph71nZMI1ypM5hP2/AZY9Pm1a2Xk+XKBK t9ZOLdzg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tpNCT-00000003Xtp-1Lme; Tue, 04 Mar 2025 08:00:25 +0000 Received: from mail-am0eur02on2060e.outbound.protection.outlook.com ([2a01:111:f403:2606::60e] helo=EUR02-AM0-obe.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tpMsy-00000003TH1-3YAk for linux-arm-kernel@lists.infradead.org; Tue, 04 Mar 2025 07:40:18 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ojfxNbcY0UivGvzepBj6Gq3WkS3nkIAWAkike7skvHME9rcUNguUqkYypJYrZed4Y/QG7gKWR7VYLgNYE07/CjdkYIQNrAwDqK+Z/31vPFbP893g5Djfvr4HchqAk9aZ6ziT2cLMdFc6cFnMroET5AnubdfD8an+BjiZzGWkh4dDeO4PtMd3hQvA2ID2JAmUQ+91IAkDe87+YYDNP65xR+Ngdl4kogAaHpLxFdRfQQ8L7tZESiWikARYxCzYLM0k/o8qmLjlowsF5uWUSLIAwSKNHa+aleiXgJ+9kD+dhwoyLee9RMenp8qJcEwzhc2iubqEREJIKCjeJ1l+phrOwA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=VW/qrnEyG86Az3cCgIFF6sCfe/uWdPG3zLsqFfGGouk=; b=YS+3f8sdV9x9pWGLQbeQMGXmjy4DmjcGbPJSvC2QbY/uZPzkhiEUkw+pKDFIDlfh/usMfaSXU6LHnfRVs1BOZhxcG1NCwDqMFuLX4k22uYLgdHQl6JDKWky0TXoNl8EiyzlJjdzxNIeriMPMgCVTAt8FAYWMgmUF4ega2atDr6bJGkU1+8DHtTMELUCgdBM/uzaKcXy2GYZDgUj+GxWwoCLOzi+iG/gA8eSpR2O3uaJz8lz8H+HRjfVVQZ3mQxISu1BHaauEDOkCcNHeE2zHdGa5F+lLcwKZogh6UY8ioiS2xVkO5ossZFVy7t6pW2bCPYe1TCkl07iiv88ikStv3A== 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=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=VW/qrnEyG86Az3cCgIFF6sCfe/uWdPG3zLsqFfGGouk=; b=E4rEdElrJQvktIsb1PVxcOPEjo8NECpZvXPuRZdt2wKbAyEfoUt7iNX59V/L4UFRtL/XCdkz651NN9+/tkIZQTObqQleHCxK8/WcMAqkUXHhE7BficWavVwpCiva93AW+fgV4VA85gudcA1wS0UFcN5b4se7KKLvmW2447ZQjfkZfehzns7R3bgIQDIpyXIsrUciyMZGzA4xvSfgQq1aSqr9/NXODY6vhKmmg4jU1k1QFYjzVYHn1B1v++rKqoVzMHG0i/RYjNarj7V/fJxiDYObAOL96MTRSqKxLvZmCmFp4Ig05xrdZvg6xOGIU7R/meWmuhNQDJkXHemdGHtIzQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from PAXPR04MB8510.eurprd04.prod.outlook.com (2603:10a6:102:211::7) by AS8PR04MB9191.eurprd04.prod.outlook.com (2603:10a6:20b:44e::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8511.16; Tue, 4 Mar 2025 07:40:12 +0000 Received: from PAXPR04MB8510.eurprd04.prod.outlook.com ([fe80::a7c2:e2fa:8e04:40db]) by PAXPR04MB8510.eurprd04.prod.outlook.com ([fe80::a7c2:e2fa:8e04:40db%5]) with mapi id 15.20.8466.020; Tue, 4 Mar 2025 07:40:12 +0000 From: Wei Fang To: claudiu.manoil@nxp.com, vladimir.oltean@nxp.com, xiaoning.wang@nxp.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com Cc: christophe.leroy@csgroup.eu, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, imx@lists.linux.dev, linuxppc-dev@lists.ozlabs.org, linux-arm-kernel@lists.infradead.org Subject: [PATCH v3 net-next 12/13] net: enetc: add loopback support for i.MX95 ENETC PF Date: Tue, 4 Mar 2025 15:22:00 +0800 Message-Id: <20250304072201.1332603-13-wei.fang@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250304072201.1332603-1-wei.fang@nxp.com> References: <20250304072201.1332603-1-wei.fang@nxp.com> X-ClientProxiedBy: SG3P274CA0007.SGPP274.PROD.OUTLOOK.COM (2603:1096:4:be::19) To PAXPR04MB8510.eurprd04.prod.outlook.com (2603:10a6:102:211::7) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PAXPR04MB8510:EE_|AS8PR04MB9191:EE_ X-MS-Office365-Filtering-Correlation-Id: 86132595-03b7-426a-2f95-08dd5aefcbe2 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|52116014|366016|1800799024|38350700014; X-Microsoft-Antispam-Message-Info: qQByjGvh60qG9J8MVQ6mpU2UhxLpN8/Gcekx2KZMA1G51HIenjdXi1yxQoTXI3poeDVvqcTmTuzgNdqVC9DItjEq6yVB0u3WhrvZ33Xxwc9aZ77Bjb/Nm1A8exh7aPL447kAnBfzq/R0s07+ynr7v8ON1re9DYUapGQibv2CxPfYRI1ZxteoOxxwghsVWQKURkLZIo2Q5uVJgs1zLyLNZEOvp1eA9D9XWuw7ivexK1EeEscc5J36/icVnOZ8Wg0dsdYk9JZ45/1fdmcjDQo/+a3lLs/9cJ1zgf5xDCbwejsh/nHPcqtWCsMjL5mvVsAZbImE0qJlw0SaUFG18Vp7VM2yngNeR0tm8RPzJg2KqqHFTKHDHfdh50PQHRG8yjZ+CGkpaeYxsdBf+Z4Oq/BW6XfwtDc4GLefvc5KtyxYoirBF0CctEq8fmyqJ3C4GS8dnxp8NVUn9nM5T/RbFjKQimiEWKN3JoH+vuaK1HgoLvo23Vj4crNpxIan9/iJl69BGrla1ODNaaFJubfD8EHCsUfY7Aj3iG4ngbgZ/TH5JsT7DrpTvvHWjQanbQgzahpZkg8JS7lVnmg7LTRh26wASVhabwEeIKQAxvaolpVkF9sRggZ7yqliQqQ5wpUPw+nulYgLltkeswN9ekGT1n66fJCKTenO8YlvbaBzipruLV7rgPfCkijgKiIWgyljMp8udcz/Ppe1aF6/TiJmYRk3HgoziOwcS8Y9r/9zKmArOTBPuc5vvE6jjdAJgg/9CTPiGrEHgiqILOD9hEmB2vNp1r/jEe/oNp1f5HlIOpbv9E7rEE1c/2mS7sVXUKVhk4aUxjjlXagtG5YCgLd50wB95HUfTB+LsiSPE69ZiPUrFNwsRyt0xg7ApWaMpRNVIip14Bxu6w9k+e/G6YZdn4gE71CYgwIXQjSuqR1VhuU8qk4MufJvKOEGCVwQ9kcnN6tuhoQmdLJ/g2Mgd2ggfdI/uIGV59SNIsiQffPgXllDATlzV6ryPg2J3WQoXMkHZoYbCZxmqxFihHvLIyl71VWLAOuttGEAxtsQFrpSDs2EjPi8N9yCNeMoKsi2c+U+XwoecvhlaDqm0KH08JA+2V5u9oaGekONt79udacjKfQDQaV8k1xIMwC4MSyaf2uAUtaPjawNmpqiDN6qK6rAxg4pAYUc6EDRb89gdfph2VG9WyjBe5ZKTexYfMp5OKC+Ulod6xSHGKr/7Ihwuh0euAlZftFYtdJLutPAnspd7gizq+0O8V4DydtEw3nt+GMCIAMO3MZ2lUy+EE51ZcB9rp9jDGydNrQNBMBG+PZcLUv09BjSTFKTeGnhQnluZ/WEHOwUPTYahpVC1dUkpBontv/N/G63p6qi7IZDfHNNKA08HAKRb5hX1cNdyxsBAo4MyYiPQQz+Fi/7h+4qV3DiE7a4CawE0RXVqY6EHpBQit5hBUOj/DNqEZDw0xUpJjn/gkzn X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB8510.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(7416014)(52116014)(366016)(1800799024)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 6dNuFzncxrFEbP/1kqFkao3phZjPqFxeJfOXmTEKRLdoGK2r/Qo6+ajPkJ/HZ3XcVou0nEi5mM6+QreO9shmoYW2zzeAbtkyhxcQfU8H69jV5FQvUbK5EaBveWpBZe6HIgaIZDSf1vtZEQWus9BRkT+lhngAKC2SXeIQ8qhdyVFDJCAOh0qvufImHASub/JtfDCDt37AJac/p6TN9f4ertXPXWz8SgRbtqzDBwdlPQvspmiFXuCAWYpCoV3FtwCMMpzWajVz0xBAuh84B7uEOsZE83i7qAy46JkNkdiG9tMEOcNrtOBiNuvNigGf/24WY33xMCAbQ6donbZ9Lo5h/i6v4DTRnAtJI0wIyC0Clg4vEiomIuYOf7iW4b8wAXx8vT4R5Ta187SdYzGFuE0VvhSuYswlosJmByaBWIMKh51ckBcaFQJMQvdvZQ5o9FRpMaUmD7WsogxCnfgM16l7SIP3tFBgk+IwH2pYbv6ZsBl8XEVyLMqoiWGKkQPnYR6B4sQFqCk/TBVb/Ei2x5BrkdKdpQrFPPs2u8OBNOqA6O8EDxF6LLeB0xIw2dJyHJHMT2ckoclAy7G9x/r3b2v3baxbyVHPhlRl54S6RM0SyBUxwmzYAoETV1RMa+XgICBqWXdAKhp6Lnsbu+zgq14YEuS1xYtspmKc6gi46y/ZMdJsuyLKbSnxCBg75GWuS1jsTCNQdXCaJ5+p3vSXtVTrZATSLd0FRXuA65Q7JuF/5AznoWqbLBVpENI0Zzli99R59kRxLJjdSZTOdqc2FY9gr83CjidkXDfKP7kWK9m3pc2yAA88E2ObmCgbDKmxK7rUs+8wYVm0RtBFY/1ch7YQhlUlumx6ZAkZnvQ3h0fakl9J6Vij0QmaknuZrClbjG0KVcVs81N0Ms/xtNu0C1WjoJPZJ1p/EUsax7WXf0EHD7FzJ5L+UDcaIUQaELhMgrv1Uk1NODwlwrKwv8JcKxSgt0o/8TricQsduV7UK/BUhheqHpStwH3tqigyBjKCc1nqng/2kl+PNd1x5lDR+IaiGBo/sDTG0aIn3nFJj6LoNwT+hKvzEiZE8tb1ijkVyy46uIhEa+vww1sr6W9L5ojNfd7bh1XrsFc/0bU7uPz8JMND0JX/dn6P5UAqMS2ouw5LNcQxW0sZJ5sMOf3mWI8EUpnAkEa9K39p3/0p5rL5z7JbARCV6X0AKE6L0Mj6liVJ2IhjolmresqOYipw3kdokicLLKKTaaPw+PwSXCcIuQyDsBT7rl3pYSTr8aJipKy33Vzuq98UtVyXV71qafrEqmmnVG+qwX1BbWetStarUw+Ryw8xaBCOCXksQL2SmRXCzktOUdN7/rVWWP0pdWmKrYaFBbhGftUzYblsZHja8KHvlXPoJY+uMNmCFzlTuArG3rZtHZwxHgdQx7PT8yDHhJGhG99QDlk/COQd6+PgI7Xczei9Rw5s33bKi+AJKNr3OvtlP4zsKDrw7SidqJ8V1caBF7motD001hKLWE5U1KP5EwcwSqPqTa+AjK8mS8slAxCIN8D21T/q35PgtxWXgajxBGLdMfi1mJ2tCTQcRxQpS69F4rfb3+epi8rTfCYJ X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 86132595-03b7-426a-2f95-08dd5aefcbe2 X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB8510.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Mar 2025 07:40:12.2762 (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: 4UNG46VXDt412QiZ/h+J7YtGyafVK7VfuuGtVoTtNiZeX2L9bj6qJq/vB2RQvMfGM77l64EMazxevFh4gjx+bQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR04MB9191 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250303_234016_892792_EE79C895 X-CRM114-Status: GOOD ( 14.96 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Add internal loopback support for i.MX95 ENETC PF, the default loopback mode is MAC level loopback, the MAC Tx data is looped back onto the Rx. The MAC interface runs at a fixed 1:8 ratio of NETC clock in MAC-level loopback mode, with no dependency on Tx clock. Signed-off-by: Wei Fang --- .../net/ethernet/freescale/enetc/enetc4_pf.c | 18 ++++++++++++++++++ .../ethernet/freescale/enetc/enetc_pf_common.c | 4 +--- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/drivers/net/ethernet/freescale/enetc/enetc4_pf.c b/drivers/net/ethernet/freescale/enetc/enetc4_pf.c index e08d06e22898..ea859792ccfa 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc4_pf.c +++ b/drivers/net/ethernet/freescale/enetc/enetc4_pf.c @@ -108,6 +108,21 @@ static void enetc4_pf_set_si_vlan_hash_filter(struct enetc_hw *hw, enetc_port_wr(hw, ENETC4_PSIVHFR1(si), upper_32_bits(hash)); } +static void enetc4_pf_set_loopback(struct net_device *ndev, bool en) +{ + struct enetc_ndev_priv *priv = netdev_priv(ndev); + struct enetc_si *si = priv->si; + u32 val; + + val = enetc_port_mac_rd(si, ENETC4_PM_CMD_CFG(0)); + val = u32_replace_bits(val, en ? 1 : 0, PM_CMD_CFG_LOOP_EN); + /* Default to select MAC level loopback mode if loopback is enabled. */ + val = u32_replace_bits(val, en ? LPBCK_MODE_MAC_LEVEL : 0, + PM_CMD_CFG_LPBK_MODE); + + enetc_port_mac_wr(si, ENETC4_PM_CMD_CFG(0), val); +} + static void enetc4_pf_destroy_mac_list(struct enetc_pf *pf) { struct enetc_mac_list_entry *entry; @@ -710,6 +725,9 @@ static int enetc4_pf_set_features(struct net_device *ndev, enetc4_pf_set_si_vlan_promisc(hw, 0, promisc_en); } + if (changed & NETIF_F_LOOPBACK) + enetc4_pf_set_loopback(ndev, !!(features & NETIF_F_LOOPBACK)); + enetc_set_features(ndev, features); return 0; diff --git a/drivers/net/ethernet/freescale/enetc/enetc_pf_common.c b/drivers/net/ethernet/freescale/enetc/enetc_pf_common.c index 3f7ccc482301..0a2b8769a175 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc_pf_common.c +++ b/drivers/net/ethernet/freescale/enetc/enetc_pf_common.c @@ -134,10 +134,8 @@ void enetc_pf_netdev_setup(struct enetc_si *si, struct net_device *ndev, } /* TODO: currently, i.MX95 ENETC driver does not support advanced features */ - if (!is_enetc_rev1(si)) { - ndev->hw_features &= ~NETIF_F_LOOPBACK; + if (!is_enetc_rev1(si)) goto end; - } ndev->xdp_features = NETDEV_XDP_ACT_BASIC | NETDEV_XDP_ACT_REDIRECT | NETDEV_XDP_ACT_NDO_XMIT | NETDEV_XDP_ACT_RX_SG | From patchwork Tue Mar 4 07:22:01 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Wei Fang X-Patchwork-Id: 14000148 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id D6D5CC282D6 for ; Tue, 4 Mar 2025 08:02:09 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:MIME-Version:Content-Type: Content-Transfer-Encoding:References:In-Reply-To:Message-Id:Date:Subject:Cc: To:From:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=RVom9LDIhX23btcpGNSVRM13wz0Urd0TO/BlD5e6M1c=; b=0QtZoJPukevrA7bytl3RteDm75 SX8cEWgKgmjmVnwsfwRRV1UFcrgwsEOndzmg/KePsiHVFWlL+YTU/HOJKVHZjkXerVlempLwsdXV0 SFPDuzc/NEc8lVViAXQXnBX9Py55oCfkVHvlemykMOYF3661q7yRQzkjs1qSY132npWXTAqVPINvX izLQNTjq9ew7sEYNcNlVQzm0+9uvwest7oTAE++yRFzFt4HzZtyZXqGf4EeHPo3i2Z6VzusV3jy6t +qjvYdT9zS8vdq2zXm6Epxi+w4TxCOJWzRkuNADTYbwpqwae8F20GHaiIaQ8HqpzgfJmkwd6LnS4C IQ49YRLQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tpNE1-00000003YKq-471Y; Tue, 04 Mar 2025 08:02:01 +0000 Received: from mail-db5eur02on20611.outbound.protection.outlook.com ([2a01:111:f403:2608::611] helo=EUR02-DB5-obe.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tpMt2-00000003TJB-3TPI for linux-arm-kernel@lists.infradead.org; Tue, 04 Mar 2025 07:40:21 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=lMBH9w3RU1Qmmyjj5EwIC5VuTdO0hqfYbK+OxH36gl65t+bIp+XCH9WwQLAhtkkFCBjIqcQTaJwS87IRu/LHlQEBVs6uhPzD01+JsjeSRnAiBaFlLMx46exaVCEaJ/VoSIQovMSN/4d/fylAmT7Z176AMp/GyZzNjxnOS0WBw8uwmKmidq7itrrpgFsweurKQDTSNRFLn2ZKLIMp8F2bZWbPc3BNkSWqdAD77RJPmE5laHJlNFX7rBGHqM3jpUTykco6zgRXnBi5d1LAN52qxn78czjp93K3f3wn9E/ydi1wmxuZCyGBKfGU1jNDsIzOUG+7UIkPCCnrPQ4hRiBb+g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=RVom9LDIhX23btcpGNSVRM13wz0Urd0TO/BlD5e6M1c=; b=AyvJhBgcsVoqa90awAIqzzf2IN+/7MjLcbSggsi4FTA49ie+2EnoQa2S1uWJHBfWK4VDgsLqXzh9H+mCaAeEPDiGYLlQAOIhFDjQb3bExiBfPzbHRdZ5cWceeto47Lh0F+kM8KQJi9dov06H/mMMdjd5UWUY3FhzZfTX1uwrcCvP4ZaiWMXWMCC3SwnWBNecCeyc8VCfGaMheJy/AP7zz8D3Ne8+xKIctCYNDxm7q7O2fMmTOGwiPmLAYNCYgNDQck6EMfTRFG87S4e6zUEgN9wM/D9eiRy4Y48cwYO4i/9txLFKxe6xZ66uOc85UUdXN38X3oIaz/WQAsxuHOem/Q== 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=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=RVom9LDIhX23btcpGNSVRM13wz0Urd0TO/BlD5e6M1c=; b=AbTNk+0G+y/syYwNT4EvNEcUyBFGDfjhwo6WOe5CMWzRDdFH80bxgFiZeXUQpZ2dD6A/L3hUi5jA/mz5/hobliNHsNxmDimqWqOLaELQtjRaVlkSoCXzviIrvE+4DijTrVOk+XsgoPDv1iJXWi5FYMB9oOEoYPj90W5w/EnZLK500v0OC6QpcLAKf9d49RQkKJbx+Vz6Nj6AzUcrBC/bxKhT1lad9ZaE8LxRVj4LCArRXfP15pEX8Pq11aQUCWnMmYnCSW+IYrEyxH/bhZ5xKDBVnP6+7ff5Z4rToi/gZxddnhhAygfiEQOlnqVXd1H6MwvhkAmvg9XefvW+WUhOnw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from PAXPR04MB8510.eurprd04.prod.outlook.com (2603:10a6:102:211::7) by AS8PR04MB9191.eurprd04.prod.outlook.com (2603:10a6:20b:44e::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8511.16; Tue, 4 Mar 2025 07:40:17 +0000 Received: from PAXPR04MB8510.eurprd04.prod.outlook.com ([fe80::a7c2:e2fa:8e04:40db]) by PAXPR04MB8510.eurprd04.prod.outlook.com ([fe80::a7c2:e2fa:8e04:40db%5]) with mapi id 15.20.8466.020; Tue, 4 Mar 2025 07:40:17 +0000 From: Wei Fang To: claudiu.manoil@nxp.com, vladimir.oltean@nxp.com, xiaoning.wang@nxp.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com Cc: christophe.leroy@csgroup.eu, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, imx@lists.linux.dev, linuxppc-dev@lists.ozlabs.org, linux-arm-kernel@lists.infradead.org Subject: [PATCH v3 net-next 13/13] MAINTAINERS: add new file ntmp.h to ENETC driver Date: Tue, 4 Mar 2025 15:22:01 +0800 Message-Id: <20250304072201.1332603-14-wei.fang@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250304072201.1332603-1-wei.fang@nxp.com> References: <20250304072201.1332603-1-wei.fang@nxp.com> X-ClientProxiedBy: SG3P274CA0007.SGPP274.PROD.OUTLOOK.COM (2603:1096:4:be::19) To PAXPR04MB8510.eurprd04.prod.outlook.com (2603:10a6:102:211::7) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PAXPR04MB8510:EE_|AS8PR04MB9191:EE_ X-MS-Office365-Filtering-Correlation-Id: 8029b367-4680-43f7-0729-08dd5aefceb6 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|52116014|366016|1800799024|38350700014; X-Microsoft-Antispam-Message-Info: /Kx2rTkLe8Ldk5ezz1ChDbaM7LMyBxpxSZ+HkHbugGS2zX0uGgehJ4f0UIPuCHpLsO1ARwW3mJrdvaUS6F6Ssasl7ir/QIEX9/EZ53SiQH7yLOAlTi1DwIEQev3o9EzzwlEIJEqoKA0gwmpsjPTnU29YiJJgeqH4eHQCppOHjpwyjqCp9aXnrKfraYXb43bgGE5dhmzmSSQ6wUsYFbt3WJ2+b1n84ewJFPwfnK4dB98jwe8rbS2tEvDiS44GjyCVIW14/WDbhqq6oFcAOI7MjsLCVog88/CYZKaLRk4DFRKicq+xCfxRnLrnIcU8veh8bcz8xgMGnQcCMh6lRGaPo14V8cQntP48TbbTgIpMpn48bf4GqWlrDKlOzSggZx+4xMcRnN0z3/r+GgakRATn9X8CWgYs+PYX+PdVdWQ3tYWdJkZRW1Ukj3wGqRBpUS+Ri3HomKEb+cqxr22/hmWcCrtRexcs3Ka+Tix1wA1tMIjw0kYYbXp8dfH3ZLCi1oAnd9DuTr6yr4UtJisKM4Vuv8iEEjf7h3bFKgkHzRzYSyk4K/PFXrXy3Syz5lNHux19IEp3c9+VUVJLXIHveqr1pee+jP3eMeuNmgrIn1cbBCoZez/1kzBnIwBc10nvdC64I39O2CVtS7RlZjN+yo4+4/umx032y8W6tEJXFRT99TwxTwmGJMmTnqdtV/nMYD4+4r2eH/eRbQVC3xjJWRO2MYLeKm1v5yDHLxjPFP4rTrsK5tUE7CHGiFY/zGYEzxvt0HM6cM0aqpmKAPd8rSqGtKRBMOwiKQ0UoRJlIjlMC9ISkJujDSJJlqvqcGDYC0+ZoSKxqM/QB7+5BX2hb8Z12V+ipBL6dttosBEs0NK8cnU/4udPJ6nqIMzQGppDpCt9gsfl6NID7DuGzAC0kiQ8PrHnU8GeuN5wTVyjgGLBkbDWc2QcSjNt1ra+gJPjmntOXqTLup7QqRTfHCSfSfQ/zOOFgDW1qIG4tT0bYSsZQzgidK8/lxS8NI6xqqyn9Spq6zXCnhHWQT1f5DQps5yidfhL8i+sIdxYST+dULvZ/FDUC047WiXe7yi8/t46hzVUwTdIpBRhPjRuTD2f1SkSmKlN4BorX22mfK55G8ID2KyBQsvgELh5CSYV71xshwqVp7TDCoEwYo+/e0PD48+4XIME3MCE9IirqyxdkbBbIo9QC19kDeewwn0tFgr5pU/z6IP3PSBq2Z0Vt/V9UTkFRAhGVAEVUdlnfjKK7cnnT9a3BGzv88I33IdVLOlZwncTDv07g4vdkDVgfHF4wtzioihQUbZHWGKg/9pLKBfCYWS/FUtldE1cgJ4/gCQ3j73TG93jkU7M3yPXujqyt0VxPAAgten+tvpyeJKNQMRIhQP9D4cdpJCvIGptDL0wiOowDy1qc/IcNpaNr71o88pAmarwM3dy+bMCwbEeLLo4NNzcpGUKBJj61CzKN+jgF+kQ X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB8510.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(7416014)(52116014)(366016)(1800799024)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: k5/OMcL6UVWtglTS7c9stgBUeeRTD6MHQhZB/Qk/51jPlvDNlzRMp49dlWhJKPbWkyT1ROWD2DZwAlE0EGcEJZF43d3QZuF3LE1UgRuNPtubEN2nxcQKHKtUGXpJuxp8H5cqZaQ1oipFw6mx9Fodf7vYnIfTCN0h8ab7Ef3pLnerEESWatmmS91UeGdV6Va+opzMds4tKq7QXtJr/iYJHkII3Ecf+hz2uKfRjDv8R8Lo9YEZyqKU7/3ECRpur3TyqSwKzaa217QR6WnpynYWbLbGilnqeVhxmj4iNmiYSk72+qBlJFRzrRwkmQ0tGJJxgmB9qSqYpKYe/Ncx/Zlg95ZfE2Mj5JkuWXXEWtq4ow9dpQMPhVlznaB/1dCfjFENgjupqrno7A1p4apYvWJ3EaB7dD/Kx/0BvPvagIWCBtdLDNbbilllVFO8tdw6Rk3kwsO4UX4OXIvXpUVTNit/MmrLGPxNdGOTrzUNLjqJ0stVmgtPDqvuT0V84DtwYegpTiECMi4txClXuf5mj1z4xody9o/VsLvWd9jAVo/bfTXz0xNEXH4a6aedOvD/Km474IuWljy2GFfnKLG1NXRBagcjeRdfnuZSruUztiEKrvG7HxO0ijn3MqiTthUu0fawJZNuwjbcKkX+GqWM0z5KadQEmtJaZIjKcTs8dm/GHHKQN8dPz/7PbnUs2y9ro4rk8p2V8dSsH5UCXu18KwuIuMmZ+xSb+lPiV33hw5ZESFcPk8XrTmAB71SZDIjEARt9M+iUD5wpPwqNfWcfvAqQ9Pe1m6YZ4DI/sdY+Dcv+sd8Od5vShWExJLbR0/CmU1aTgxe7I6R/HVnXERo+B9YC1HcYEffeeAnXX8WMqUizvlAWdUWVO6VwP7k9VIEb59p9NBZA3JjF6kynupa5rvn9QOqjOAmXWpGppcT+vv6dq4WqhMHJ05gppzQfUSbTzM8mi1qCmqpLTZN/KVynbnLz/kpJ1dCN99XAYf9HapfiG8GajQCRXtSgO9s8pUv/mk1Z7WSOvwe1zacfQm56H9tEZyRKk3Pfk62Wa/IiooEavSn3reCFLSAVYBHJjdxoZbf1kEi38CsV58Sy0p19lMol/ucEVczQqYQzWLaXboB40RK/Ylj4gPsaB1SK/zZU9tz6h3WpY4qxYAVX9/YmdBi8FhvHVEAPdnJ0gXIrwF9VK6nf9U4XAyKYG3/Z+uM8g2rK44XtjqunCBE9ISw+wErLvkjBVaGt+8S4fclk3jk5nAS2k6GnIFlTUb8pQ+3Phz5V/BbbG2DrDn75RDFM1LOZSsVbSTKKFVStaqzsk7/5dA4Xi0wzP4rCQssa22YAZVc/hhlhAeA+ZVn6wIVajRlf8kphnWY6PUxagANhwiwKycg2JxoS80ZMBVOMxYUNiwlbk50pGL+Kajrxl0IUWYUOThBpAml0JadjwRTV3c0nNCysyePMvBjNEDveV0CXpiui5feBgjdWSJkRLFhwJCY+RhenhOku33KZPXOiNgyexpkE9dD+n7yGDyNoNaa8lrZEIB2HMsNI0AguhhJf8aiKUZ1BVt/zYGd60wHWWAbArQTU28VBr2otP0vg5qA9OyX+ X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8029b367-4680-43f7-0729-08dd5aefceb6 X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB8510.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Mar 2025 07:40:17.6518 (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: lsrEinn3INbfoiLTNa4R0iy0vlIZ7lE5xEyLqk7sKb64RQEae4IAUZXa4nfvpI1le7TZ9KweTvcZT6Byb6avJg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR04MB9191 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250303_234020_870665_E013B8A2 X-CRM114-Status: GOOD ( 10.24 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Add new file ntmp.h. to ENETC driver. Signed-off-by: Wei Fang --- MAINTAINERS | 1 + 1 file changed, 1 insertion(+) diff --git a/MAINTAINERS b/MAINTAINERS index 7078199fcebf..e259b659eadb 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -9174,6 +9174,7 @@ F: Documentation/devicetree/bindings/net/nxp,netc-blk-ctrl.yaml F: drivers/net/ethernet/freescale/enetc/ F: include/linux/fsl/enetc_mdio.h F: include/linux/fsl/netc_global.h +F: include/linux/fsl/ntmp.h FREESCALE eTSEC ETHERNET DRIVER (GIANFAR) M: Claudiu Manoil