From nobody Fri Sep 25 19:15:32 2026 Received: from PA4PR04CU001.outbound.protection.outlook.com (mail-francecentralazon11013037.outbound.protection.outlook.com [40.107.162.37]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2035251E442; Wed, 9 Sep 2026 10:35:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.162.37 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788950139; cv=fail; b=kVRhSU37ukvpuD0q1tDwrGueBwzO/PFAye0kgoaNdiqRn925gmtMUQyGMFAQdpBHNLpTJIupr8WvQdnyBBsZA2BGRSQR1tAKm1A7AqOkDmvXf74HZIMavGuwPbJ/VcwmSgzRGAOyhT6xFaKXKOYSQAy4teqJeT5JwSuSF2h6cPI= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788950139; c=relaxed/simple; bh=N5BgDMKRw2YuQ1fnxq05TPfljIp4PBAU+zMxHNT7cyQ=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=Mcw0Q+gmaY/kqxQnsi8HsRCj+wDEnY8RDBdAcuWcR2wRuyeANW2z4WpWvGkgGej8XJSXOEKHd9IbmywyKta0XNvUJXBx4dkZmdze1VodupmyYI9xNpoVrSMhP2Fn3y5i4kutUNn0E1DwkDfjjljIumi6llwg5C7y3ciJTY2zgIw= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com; spf=pass smtp.mailfrom=oss.nxp.com; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b=odmhyYBq; arc=fail smtp.client-ip=40.107.162.37 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b="odmhyYBq" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=HmJivgnsStmhv7NVyDmA2VFNKGUkZcdkF10hSZfrFHJOeArQc8NphqtaD9Tt+A/Xj1kNRgU32zhfbDsmfpolM3xVkHgvxH6weeYGuMo6h/gXaxBD1rLAJmspCWamBErOSRMAQV3EFl1rEwYkYSDY9BmE26/N+BSjc6EOwPHeQprTZjf8kgMzE4pHmfreZ5KQFt4N2KYtjrufD/zcGWWb+R+OFDrpb/vTSmJsYRnaxwN/3C4nEfx0DOhARsP/tNrvhhZ0VaEdiS7vMwAvvHO5q9b0J2BFI4upf1hRp3i4+UILs0ZGV6ZPrrKYY5cn5JH2Hr4GeCCMaNJiVBkoPqet4w== 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=IznaU1RAU+YJOR/Hl4OABd+lUwJXAJBxmJqpQcPv6do=; b=uUYfGchjMKYUrRnhIMYMGhkURXVQJ+7r0QmK27qQnBLA7ky/TGrP/yKjcXUjbbg/Qwn4llO+2fnMgLyQINQeAMRMD4uIDbZebyu+QPyhxrRKrfE8KYuE483A9TPk1+P5Jb6osrnuNMwMLFnExB/EFFxdC5mtSY26RXNf90ctWxXPC39VuOomkEIsuSrNNGNAmhydpbcdnJ6nFOFBB7eelMLiSoKlVYuCcGb8KAgnMhWaM41kLbRw4tGqtwaZr0EofILNYHzLKHqWqZSn4/UCxpfih8410B/FLPRb1jlRlg5r0nfmKAsWeBk8dQ5pT3nVjrLXBO0u53DzMSSR3OHJBA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oss.nxp.com; dmarc=pass action=none header.from=oss.nxp.com; dkim=pass header.d=oss.nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=NXP1.onmicrosoft.com; s=selector1-NXP1-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=IznaU1RAU+YJOR/Hl4OABd+lUwJXAJBxmJqpQcPv6do=; b=odmhyYBqYKQKIWZoNWuyfH18C2T8zKVkokodpPixkBLIMi/c9N7/98wdixuT22ZQQSKUFgSSKfSvVBGdMVqrJ+g5iFrIgpRWZFT/DQxTI7TX/d/FCg5l9ra2c0+beqicUGkX7NVbtZffRacIXcvLdtZd8dHD4mZl3Ka97f2c4prmI19fjcbbCH38N0KrMLR1+98qtmD+DKMwgsEfCKWPnmbuovzZH0Ok3wZJGKZ2Z2qHyzB/3717FaysG0jfeEG9L2oCouB1ZoVxpGEZ2ukJtqbVbnm30EhzJ+qfwxlE9cmcq4eBJ7B4/J0IoIWt8THUsHtm4p4rGti8rzxyy6KtOQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from VE1PR04MB7216.eurprd04.prod.outlook.com (2603:10a6:800:1b0::22) by DB8PR04MB7066.eurprd04.prod.outlook.com (2603:10a6:10:12e::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.406.8; Wed, 9 Sep 2026 10:35:35 +0000 Received: from VE1PR04MB7216.eurprd04.prod.outlook.com ([fe80::a9a5:cf83:dbe8:1f74]) by VE1PR04MB7216.eurprd04.prod.outlook.com ([fe80::a9a5:cf83:dbe8:1f74%3]) with mapi id 15.21.0406.005; Wed, 9 Sep 2026 10:35:35 +0000 From: wei.fang@oss.nxp.com To: claudiu.manoil@nxp.com, vladimir.oltean@nxp.com, xiaoning.wang@nxp.com, andrew@lunn.ch, olteanv@gmail.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, linux@armlinux.org.uk Cc: wei.fang@nxp.com, imx@lists.linux.dev, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v4 net-next 01/15] net: enetc: add trusted VF support Date: Wed, 9 Sep 2026 18:07:19 +0800 Message-Id: <20260909100733.1139689-2-wei.fang@oss.nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260909100733.1139689-1-wei.fang@oss.nxp.com> References: <20260909100733.1139689-1-wei.fang@oss.nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SI2P153CA0022.APCP153.PROD.OUTLOOK.COM (2603:1096:4:190::8) To VE1PR04MB7216.eurprd04.prod.outlook.com (2603:10a6:800:1b0::22) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VE1PR04MB7216:EE_|DB8PR04MB7066:EE_ X-MS-Office365-Filtering-Correlation-Id: f4c2aee4-efaa-41b2-a81a-08df0e5e153b X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|19092799006|7416014|376014|1800799024|23010399003|366016|10067099003|11063799006|56012099006|6133799003|3023799007|22082099003|18002099003|921020; X-Microsoft-Antispam-Message-Info: GccjzN2csExM4b9zngf65vM9URbT/KxVsCfm1/IowLUvLB6PMQjvEKtnOQGyZe7g66hoZ4F2e0se+UTqvKXHW38WKFs7eYxl+QEWSQk/XAreTL4ggmvbefEv3b7mBrr9GLRXFoZ74d5GIpCM/lHWTVyNiEt0qXuHOlzy+sRX/2rNQ/MDda8ILPMYyGc4Vcf++JBJt8mk16m/+DLiebdRjOJeh6wOAc91xTNUnc6ObMh//fIbIBA+WmcEsmN6IH6F1lIV2OF6O/m+XhfFB+zNRQcowyyaq1SGGCwQzy+FEPMuMTDizLOwbPQIdyiCplYIJXimS1q+EHx0IUOu4SyescK2YhPjXHSQ6gDo5P3Of0QMec+fpZ9bdCTwNeT47n/DcjyB9cQBPatNijhSWtA/hM7/Grcdz7LqP/IcDGpFazS8Jk4kz27lPN3l31Uoq9weYuo4MAuBYwfj6DylPWAvkBjQwHg82euE3XpZjJ6RLxYCt5I8REfc4iUJxSd7+QJ4RInLJPikD2JwyRYFhvuC2NK+WVbfsKjjsQ34DmkyuG718oTRyGfElp6KynuNrhPXu7cp5hm6by/kWKpxIaFrHzSVaxZ4+fW3pRwy+kjHVfroQGU09ilXj/SgFfaMu2s2PMeaOve0cuwz2oHAOr/jV4xv65EVzoZ+Blb26tNiKLQcGfDuCIr9qyc8wl/IXLQnydDIO27VrBFFhxMuQEUFxw== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VE1PR04MB7216.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(19092799006)(7416014)(376014)(1800799024)(23010399003)(366016)(10067099003)(11063799006)(56012099006)(6133799003)(3023799007)(22082099003)(18002099003)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?A4s7Z6TmL7kq1AaiszjCouIHzixfyvIbemBY8Qh3UWm5+bgMG+zCHLn4vpRS?= =?us-ascii?Q?d6N09awd+Q2Uy6/ipnc6jDP32sM/wiJvqJQkB9dQzlsb/Uvaesz50xa0mlHf?= =?us-ascii?Q?7Q7Go1EW+/COsJrSiaSFUqUjt77ds58KIO70+W5gOOO3dVGQObYqOaLDqsQM?= =?us-ascii?Q?DONxK5SOYs8JGfuCEFQcoFCkGlqHBSR+VPd9dshy3Rrjz5vDXLSYHEwUmVrn?= =?us-ascii?Q?1gAwNa+sYSLoDOlLz1n/D66wfG/5/FvT3DnM2Wr7p/txRbg5vpH0e4KF8yfU?= =?us-ascii?Q?LIKGNlfc0jFTjJ/66tLijGB0cCHBK5hU/vhNLsohLfRISc2VRcA0Zkq+q2c/?= =?us-ascii?Q?Aj/K6wamMIdHawHwlQ3+xe5UcK/eHcVrVSM3k+KEvQaM03F3whi3nz8zW/3x?= =?us-ascii?Q?/OLUgUCZy9KMYe+H0kpD0XRHbMYeA1wxkLSGZwohCiP++Da7dTR4dJfU7jex?= =?us-ascii?Q?NlEpN0GMc9zLFGqN1x/6PgWMAqzIgYArnBSCGa9hLqlHj98KnRq4mIoEEz39?= =?us-ascii?Q?2Xchwrq/HKUL7U6J+/8/GvYk9bHEFQTGqITfUsIbO3cODkHLlivh0oEJUrLu?= =?us-ascii?Q?7OvCzkwHGPJU+ijWPQAWQuUEbAiS3N38Iy4NCRSbKxHdKw0oVdGHNdrHryMC?= =?us-ascii?Q?gWYe4+mMdV5H2IIKIa6lp0Os52SwdrUSSh5xMk1JMb+10CR/PtUTI7SoRW4d?= =?us-ascii?Q?h3uw7EzHYFfgyLdqpvJd7RH5CgaInlPeYC6t974rV4I2CuBXhZrcSFP5ZUQy?= =?us-ascii?Q?7Co5TtlnLzELGLrIsAju9sbhuf0hwM5HhKCTP9AhU0Z71purGWLuA8wmioHS?= =?us-ascii?Q?UugHJLt/tqFp8WGoFKNwFFPp1LhPZ4WKVtiq+B2JoaIABl85lsmNrU4oGxJy?= =?us-ascii?Q?5Y3nSp6jnDvlrr6GHtFTnMk6yAP2irnPFCMqpODOUqoSeXinw+qRGBU27YdE?= =?us-ascii?Q?404IWbzE1B2LMyX6UMCSe2vyUPjxRZq4X/KVh+qjfAFZg/qL/S0JrZ1/StyG?= =?us-ascii?Q?yPuSlLeQ94riEm+bVtxeHfsYhoBghHNE/x0kdYbvGNlN4i0YF4gVLcjSQDn1?= =?us-ascii?Q?zCFUwSaJLw6NM/sXKa0d44RLWhJOGqjxpZctJ8uulKlAYyZ3l0GoUwEviCj+?= =?us-ascii?Q?9oeUZwMgmcY9s2+SZ8VSar9E22HS0MRvQGTdrzgcmkyOdYdLIn7M4u0v0yfJ?= =?us-ascii?Q?LX3q3Fg/uvogdgGEC6AvS2ZLilSZ030l4F1uin8JQCceSaupanSfl4/pl8UR?= =?us-ascii?Q?vV90UgfXL3w0r4+5F8rmaUMmwaXrJI2oSJEaEhB9g3+1NH2YuP7vssbIrbmO?= =?us-ascii?Q?EG3WlwIZ1hSJkDsgcMm7H1GfWeKgW7i16zpVZSFVY0A2mWbLmTJarCWBmDSn?= =?us-ascii?Q?YrYmmKLSg2MG5RWp4amqI1A9wCGPmBh7kTcb8sXh56M5Ikm+AQpDwkHIf/B9?= =?us-ascii?Q?wRVki4S773CTqYT9fP13DJtu0U8a2K7nRbQiiIubHC1Gnd6BQhGRBDKsB+FH?= =?us-ascii?Q?zrG6kM717MAs24uVIWR5aSw+U/lySL7EOz0rsWCssffs1tHtIE31mVBOB8V4?= =?us-ascii?Q?bRe/0Cxz+AfRq/D75deLDbfWtTbEXSjqzzz1/wVO5J4P1X6n7LPOUK0wf+pJ?= =?us-ascii?Q?SoF4tzNWTRGByIvcrgTiC3LFvpRiaKGx7yD0yTlLnfyD/1a2gBmIwr966h/x?= =?us-ascii?Q?iPichq7SuJF3EPgDvcR7QU+KBNKCsUwM8q2LhR5u11egkOoNT7vxhheZ6GT/?= =?us-ascii?Q?9zMJ4mFgOQLouO0MHLFMBHKpf5ZK/IqUo6S+zTQO607VPonlSL94?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: f4c2aee4-efaa-41b2-a81a-08df0e5e153b X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB7216.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Sep 2026 10:35:35.7022 (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: SYSFJzHZ8uX4lKKpNlbJF05m7kbkB5pCG5a5/h5T4Ke8NRXAbYUaVrlHVlHJKdgqC0DSIy8Fu43twxIAWCi1Kj6JwnzLSy3uC5GWubiK0NMiAilAYAboxkWBDcagMp65 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB8PR04MB7066 Content-Type: text/plain; charset="utf-8" From: Claudiu Manoil Some mailbox messages require a higher privilege level to be executed on behalf of the requesting VF. Introduce a trusted VF flag (ENETC_VF_FLAG_TRUSTED) and wire up the ndo_set_vf_trust callback via enetc_pf_set_vf_trust(), which is shared between the enetc and enetc4 PF drivers. Trust is a PF/host-side policy bound to the VF index, decoupled from whether SR-IOV is enabled. It may be set on a slot before SR-IOV is enabled so a trusted VF can apply configuration right at init time, and it is intentionally preserved across an SR-IOV disable/enable cycle. The bounds check uses pf->total_vfs, the hardware maximum and the size of pf->vf_state[], so pre-configuring an uninstantiated slot is in-bounds. If a slot may be reassigned to another guest, the admin clears trust with "ip link set vf trust off". The first message gated on trust is the VF primary MAC address change. An untrusted VF that attempts to set its own MAC address will receive a ENETC_MSG_CLASS_ID_PERMISSION_DENY response and the hardware will not be programmed. This prevents a malicious VM from setting the VF address to the MAC address of other VFs or the PF and eavesdropping on the traffic of other SIs, and it stops a malicious VM from arbitrarily changing the VF MAC address to achieve MAC address spoofing and bypass security policies. This does not regress VF bring-up. The PF programs a valid primary MAC into every VF slot at probe, and the VF loads it from its own SIPMAR0/1 registers. Signed-off-by: Claudiu Manoil Signed-off-by: Wei Fang --- .../net/ethernet/freescale/enetc/enetc4_pf.c | 7 +++- .../net/ethernet/freescale/enetc/enetc_msg.c | 38 ++++++++++++++----- .../net/ethernet/freescale/enetc/enetc_pf.c | 1 + .../net/ethernet/freescale/enetc/enetc_pf.h | 1 + .../freescale/enetc/enetc_pf_common.c | 23 +++++++++++ .../freescale/enetc/enetc_pf_common.h | 1 + 6 files changed, 61 insertions(+), 10 deletions(-) diff --git a/drivers/net/ethernet/freescale/enetc/enetc4_pf.c b/drivers/net= /ethernet/freescale/enetc/enetc4_pf.c index 9bb1004548ab..935a6a03b14f 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc4_pf.c +++ b/drivers/net/ethernet/freescale/enetc/enetc4_pf.c @@ -225,11 +225,15 @@ static const struct enetc_pf_ops enetc4_pf_ops =3D { static int enetc4_pf_struct_init(struct enetc_si *si) { struct enetc_pf *pf =3D enetc_si_priv(si); + int err; =20 pf->si =3D si; - pf->total_vfs =3D pci_sriov_get_totalvfs(si->pdev); pf->ops =3D &enetc4_pf_ops; =20 + err =3D enetc_init_sriov_resources(pf); + if (err) + return err; + enetc4_get_port_caps(pf); enetc4_get_psi_hw_features(si); =20 @@ -574,6 +578,7 @@ static const struct net_device_ops enetc4_ndev_ops =3D { .ndo_eth_ioctl =3D enetc_ioctl, .ndo_hwtstamp_get =3D enetc_hwtstamp_get, .ndo_hwtstamp_set =3D enetc_hwtstamp_set, + .ndo_set_vf_trust =3D enetc_pf_set_vf_trust, }; =20 static struct phylink_pcs * diff --git a/drivers/net/ethernet/freescale/enetc/enetc_msg.c b/drivers/net= /ethernet/freescale/enetc/enetc_msg.c index edc1277bb586..78114ab3e482 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc_msg.c +++ b/drivers/net/ethernet/freescale/enetc/enetc_msg.c @@ -7,6 +7,8 @@ ENETC_MSG_CLASS_ID_CMD_SUCCESS) #define ENETC_PF_MSG_NOTSUPP FIELD_PREP(ENETC_PF_MSG_CLASS_ID, \ ENETC_MSG_CLASS_ID_CMD_NOT_SUPPORT) +#define ENETC_PF_MSG_PERM_DENY FIELD_PREP(ENETC_PF_MSG_CLASS_ID, \ + ENETC_MSG_CLASS_ID_PERMISSION_DENY) =20 static void enetc_msg_disable_mr_int(struct enetc_pf *pf) { @@ -61,31 +63,49 @@ static u16 enetc_msg_set_vf_primary_mac_addr(struct ene= tc_pf *pf, int vf_id, struct enetc_vf_state *vf_state =3D &pf->vf_state[vf_id]; struct enetc_msg_mac_exact_filter *msg =3D vf_msg; struct device *dev =3D &pf->si->pdev->dev; + u16 pf_msg =3D ENETC_PF_MSG_SUCCESS; char *addr =3D msg->mac[0].addr; =20 + mutex_lock(&vf_state->lock); + + /* Untrusted VFs cannot set their MAC addresses by the mailbox + * messages. + */ + if (!(vf_state->flags & ENETC_VF_FLAG_TRUSTED)) { + pf_msg =3D ENETC_PF_MSG_PERM_DENY; + goto vf_state_unlock; + } + if (!is_valid_ether_addr(addr)) { dev_err_ratelimited(dev, "VF%d attempted to set invalid MAC\n", vf_id); - return (FIELD_PREP(ENETC_PF_MSG_CLASS_ID, - ENETC_MSG_CLASS_ID_MAC_FILTER) | - FIELD_PREP(ENETC_PF_MSG_CLASS_CODE, - ENETC_MF_CLASS_CODE_INVALID_MAC)); + pf_msg =3D FIELD_PREP(ENETC_PF_MSG_CLASS_ID, + ENETC_MSG_CLASS_ID_MAC_FILTER) | + FIELD_PREP(ENETC_PF_MSG_CLASS_CODE, + ENETC_MF_CLASS_CODE_INVALID_MAC); + goto vf_state_unlock; } =20 - mutex_lock(&vf_state->lock); + /* PF has higher privileges. If PF has already modified the MAC + * address for VF through .ndo_set_vf_mac() interface, VF is not + * allowed to set its MAC address via mailbox messages, even if + * it is trusted. + */ if (vf_state->flags & ENETC_VF_FLAG_PF_SET_MAC) { - mutex_unlock(&vf_state->lock); dev_err_ratelimited(dev, "VF%d attempted to override PF set MAC\n", vf_id); - return FIELD_PREP(ENETC_PF_MSG_CLASS_ID, - ENETC_MSG_CLASS_ID_CMD_NOT_PERMITTED); + pf_msg =3D FIELD_PREP(ENETC_PF_MSG_CLASS_ID, + ENETC_MSG_CLASS_ID_CMD_NOT_PERMITTED); + goto vf_state_unlock; } =20 enetc_set_si_hw_addr(pf, vf_id + 1, addr); + +vf_state_unlock: mutex_unlock(&vf_state->lock); =20 - return ENETC_PF_MSG_SUCCESS; + return pf_msg; } =20 static u16 enetc_msg_handle_mac_filter(struct enetc_pf *pf, int vf_id, diff --git a/drivers/net/ethernet/freescale/enetc/enetc_pf.c b/drivers/net/= ethernet/freescale/enetc/enetc_pf.c index 55c07c528f22..a7bf4bfc25b7 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc_pf.c +++ b/drivers/net/ethernet/freescale/enetc/enetc_pf.c @@ -488,6 +488,7 @@ static const struct net_device_ops enetc_ndev_ops =3D { .ndo_set_rx_mode =3D enetc_pf_set_rx_mode, .ndo_vlan_rx_add_vid =3D enetc_vlan_rx_add_vid, .ndo_vlan_rx_kill_vid =3D enetc_vlan_rx_del_vid, + .ndo_set_vf_trust =3D enetc_pf_set_vf_trust, .ndo_set_vf_mac =3D enetc_pf_set_vf_mac, .ndo_set_vf_vlan =3D enetc_pf_set_vf_vlan, .ndo_set_vf_spoofchk =3D enetc_pf_set_vf_spoofchk, diff --git a/drivers/net/ethernet/freescale/enetc/enetc_pf.h b/drivers/net/= ethernet/freescale/enetc/enetc_pf.h index 56d23a8a11a0..6789f92d005e 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc_pf.h +++ b/drivers/net/ethernet/freescale/enetc/enetc_pf.h @@ -9,6 +9,7 @@ =20 enum enetc_vf_flags { ENETC_VF_FLAG_PF_SET_MAC =3D BIT(0), + ENETC_VF_FLAG_TRUSTED =3D BIT(1), }; =20 struct enetc_vf_state { diff --git a/drivers/net/ethernet/freescale/enetc/enetc_pf_common.c b/drive= rs/net/ethernet/freescale/enetc/enetc_pf_common.c index d32a195a04c9..519fc90d2647 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc_pf_common.c +++ b/drivers/net/ethernet/freescale/enetc/enetc_pf_common.c @@ -586,5 +586,28 @@ int enetc_init_sriov_resources(struct enetc_pf *pf) } EXPORT_SYMBOL_GPL(enetc_init_sriov_resources); =20 +int enetc_pf_set_vf_trust(struct net_device *ndev, int vf, bool setting) +{ + struct enetc_ndev_priv *priv =3D netdev_priv(ndev); + struct enetc_pf *pf =3D enetc_si_priv(priv->si); + struct enetc_vf_state *vf_state; + + if (vf >=3D pf->total_vfs) + return -EINVAL; + + vf_state =3D &pf->vf_state[vf]; + mutex_lock(&vf_state->lock); + + if (setting) + vf_state->flags |=3D ENETC_VF_FLAG_TRUSTED; + else + vf_state->flags &=3D ~ENETC_VF_FLAG_TRUSTED; + + mutex_unlock(&vf_state->lock); + + return 0; +} +EXPORT_SYMBOL_GPL(enetc_pf_set_vf_trust); + 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/drive= rs/net/ethernet/freescale/enetc/enetc_pf_common.h index 8243ce0de57f..96a4dc63da57 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc_pf_common.h +++ b/drivers/net/ethernet/freescale/enetc/enetc_pf_common.h @@ -22,6 +22,7 @@ void enetc_set_si_mc_promisc(struct enetc_si *si, int si_= id, bool promisc); void enetc_set_si_uc_hash_filter(struct enetc_si *si, int si_id, u64 hash); void enetc_set_si_mc_hash_filter(struct enetc_si *si, int si_id, u64 hash); void enetc_set_si_vlan_promisc(struct enetc_si *si, int si_id, bool promis= c); +int enetc_pf_set_vf_trust(struct net_device *ndev, int vf, bool setting); =20 static inline u16 enetc_get_ip_revision(struct enetc_hw *hw) { --=20 2.34.1 From nobody Fri Sep 25 19:15:32 2026 Received: from PA4PR04CU001.outbound.protection.outlook.com (mail-francecentralazon11013054.outbound.protection.outlook.com [40.107.162.54]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6D770523789; Wed, 9 Sep 2026 10:35:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.162.54 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788950146; cv=fail; b=WrTsSRwbYmwJSlDXfxUoJV7mnpJtdq45mVlQGAc/hTM5VxwOtAWl5VIJxkSv1ND8/6susWHQacmqJfGkICK5Hcp/l1S2cqch9suUy4/I3w6Sn8mBb2yktuoh9cia4SEGcg6BsA0zZCAJ4ZRxEPbLsfgbTbEWXTyFd8bWR9lu8HE= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788950146; c=relaxed/simple; bh=0lnAR2Hxu30uyZpOFNs3+BkVV8qbrHCcfd8tNkfXpVw=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=qtuNtB5ipl3kIeghBR9zFd/aq+BBls4pp75vc44NFbgB8dZaLfc6tLj+V9A726uXwbNFjx02VjufRHj8b/BAlgfJJvMNF5cwICFlEqQpafmAH81QzfeIT0kG6cpTz0Hvq3TDqgdkJ2SjGGk6MUjWJVNPkpNDk86g91bDepnDsdI= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com; spf=pass smtp.mailfrom=oss.nxp.com; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b=DVBGfBnm; arc=fail smtp.client-ip=40.107.162.54 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b="DVBGfBnm" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=uPc+T6QyigG+lXi+sknEfK/G2grbVMud9cekdjROSJIzjKmK42ldpIVSmXvquhE8ijByHyXvHmQMO69NFSI2K1j1lCG4H4iv9VPUVtJCbWyTIVLuA9UFaXTjb4poBN4bl1UzAaTJX7eN097eFH9uXTxtWTJtB7gWDZW/pVQdJXVN47p4S2vrcCZGUGGMeS+k4ejVNSVtaeYXoiy5p/KcEoKknBeMkWzLxS0s9ALLdSq3sGJFoMzJ75WBzzod9qv1uNT/1Es0Ei4v5lNdLvA6AYs9HcNmGqL4f4BOPVFixKhR3OgDbZW3fW/8Xl+JzmVkTc7CpVN+jEmSKKQjoobxHQ== 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=oeO2fTXAMthf+Koe8T0L16jzuT6ZeDedLwHoyavXr4M=; b=J3iObWGPMm8gZIo0GDsu0an+keKh1NNvLUgZCsXzzkfFaQ9Fr4LPDLsZl+0rfhdERDfTq1eSwHOO4k1B5cA7KpQOnv4wZae8WY1XaohQVgstAmd2URpr0nzdZaVoqiMPiXcvFke6PbFnXYEQ1RoA2K5RQSCuxHCsM1d7uhTsC/gX3/rOeeRP+I2iYcO1+dnXYMMxHQOSwl7VuKO9oKNZ8I/gkTny+l6iQYS5r0FatihfIS37o9LqzXUPrA37JGkc+XgwFrUnDCbissvCBEpE+5d797RPtC4CBWbHxQ+bE7Znh8DO4EenciU/2n8+MVQdFnD38PnHG9oqzSZ+4HbQBA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oss.nxp.com; dmarc=pass action=none header.from=oss.nxp.com; dkim=pass header.d=oss.nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=NXP1.onmicrosoft.com; s=selector1-NXP1-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=oeO2fTXAMthf+Koe8T0L16jzuT6ZeDedLwHoyavXr4M=; b=DVBGfBnmRQiO5DJwa/HgdfvPiRTJ4h55rnejcPP6s64Vhzc9LGBd2hL1DTN3LeJ/4SnTLYnsrMxpBjlQ8GxcfcNqWvk1ZUeafU7UWCEUcpl6ysNLG20KWSjoovKVHePMriHjyGl9iRXeYvP+btL3PZIwv7WIeU95RPPDpLiJKJ/fD2CtY6SQxI6GcRNGISNBo1hxjW64nIA1P8PddOqFEmLO8l6hwlnRjqEKpAKadmglw6VNQMLXLl0uFplTgCrTUz5pMxGI2v7GrYFhFjFf7Ez1U8a/s6CsW/Hwaaj0204+lxBSqZQUexLnlG9Ood+qA98PvlgKn3znmC3UDv3w5g== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from VE1PR04MB7216.eurprd04.prod.outlook.com (2603:10a6:800:1b0::22) by DB8PR04MB7066.eurprd04.prod.outlook.com (2603:10a6:10:12e::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.406.8; Wed, 9 Sep 2026 10:35:41 +0000 Received: from VE1PR04MB7216.eurprd04.prod.outlook.com ([fe80::a9a5:cf83:dbe8:1f74]) by VE1PR04MB7216.eurprd04.prod.outlook.com ([fe80::a9a5:cf83:dbe8:1f74%3]) with mapi id 15.21.0406.005; Wed, 9 Sep 2026 10:35:41 +0000 From: wei.fang@oss.nxp.com To: claudiu.manoil@nxp.com, vladimir.oltean@nxp.com, xiaoning.wang@nxp.com, andrew@lunn.ch, olteanv@gmail.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, linux@armlinux.org.uk Cc: wei.fang@nxp.com, imx@lists.linux.dev, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v4 net-next 02/15] net: enetc: move msg_task and msg_int_name to struct enetc_si Date: Wed, 9 Sep 2026 18:07:20 +0800 Message-Id: <20260909100733.1139689-3-wei.fang@oss.nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260909100733.1139689-1-wei.fang@oss.nxp.com> References: <20260909100733.1139689-1-wei.fang@oss.nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SI2PR02CA0011.apcprd02.prod.outlook.com (2603:1096:4:194::20) To VE1PR04MB7216.eurprd04.prod.outlook.com (2603:10a6:800:1b0::22) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VE1PR04MB7216:EE_|DB8PR04MB7066:EE_ X-MS-Office365-Filtering-Correlation-Id: b7e52c9e-b0ec-4571-5bd4-08df0e5e18dd X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|19092799006|7416014|376014|1800799024|23010399003|366016|10067099003|11063799006|56012099006|22082099003|18002099003|921020; X-Microsoft-Antispam-Message-Info: FK9SU4QrYJcVE9mzbcAgRV/sq6c6t19X98vXli+6O7mSVbg/jOy9Md4EkvTKh6memsFS+QBOITMZfjR9SFm4oKWYHovrOAWX6RXdfeVYz0w44VVhJUHRWbkm1TVgNo7VB5gs7RT2HFvwGr99t4076sU2+k++p97FPUkedEivTTr6DVOZlBeh0A+YVFiDCjMAPcSpHEOIj0tuKch7Oi6ROZo1ZTx9nw0qeXL2dvzuL8YCoY42EABQxS2FIg/AzTdXGp9heuEaXC3PgX4giuGgwcF4zlWQnOA6+lmXZitKkg5pY3eJa+xZMUfUe+1eGFWGugBe/CvDWDxHinny7OaT9UE1VfceehDAmAIB+oJJXp3XnDapFV9GpQv8EiTEuJdNitgLqxuOpInJNizHBXNtb5l//SEFTGJijbco0safXHFITCPuqjcGQfhzXNqyj77IJBdg1lu12e3kXh/p/xOT/3XOFPDvga/UrcZlBcbdN8EW6qf5E9jkXfvE40fWEkG10pk84QKb2ea67+vpcqV+Fp1edVZQEmUwQBoE9F5nymNW9PTRvzMMLP85ZQPttQUI9v8anUxv8fL1XoZ5l67ikbrhjoAykgcpKBcDG9uofdldC+iJS80cSHiaGEJ49+fywUFpoB7bdSR2VwknKpngYL/WcHvHEvkckLQQv5ExGAe2CIXeWag3WROKqQ8U/OXhOFIE2CIxJv03hvIE4EGLtw== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VE1PR04MB7216.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(19092799006)(7416014)(376014)(1800799024)(23010399003)(366016)(10067099003)(11063799006)(56012099006)(22082099003)(18002099003)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?/PSlFL79RINi9JPrx1sfGfqhd92B96H0m2yEIlR7W+a15l7sG35FO+9ziT/n?= =?us-ascii?Q?QGJjUEL9Hj51yz40lp84+5YsnDeVa7YXl3u5/crGlkRHWrodJupmXB1MXlRU?= =?us-ascii?Q?v/GEkFN80sJm7a+/0mMNYceTJZV7gcgLlFlIcCpeyIDbW0LOV1wfC4BQeA3C?= =?us-ascii?Q?i7cY5AA90W8GLQAx1VnoFofsfx69XXtnpK9+PXP5aOYUeFhoUA/a/2zMJq1n?= =?us-ascii?Q?bjgPy3VttUEKyvpdJzwTXbN5UVtkWot/U9F2QPjGus8uz5aeGu3F/No7jEq+?= =?us-ascii?Q?b61s8TkiCKx5BrRjDRUyHnEdZaT9H6Qvmim9/6zeabV3LwcJLktcxeC/f8tO?= =?us-ascii?Q?DwSy3WSlS7TgMjTncuxLH3IT6DZzC2zm3xPp4logDcF0teN5/EySgbPcvmQq?= =?us-ascii?Q?cABoHLdK3Fbw35+OMJw1XjHfQQhMiNDFqtjY9Pgj8+cN5RRlX3dA9gIrDDu7?= =?us-ascii?Q?qGS4Sr6UI9qHkVZGNyE4cYSr9JfbIYH3lznCu4WYLaHGpafmeFdHtzQIlJMM?= =?us-ascii?Q?HBdPwKC4WXj75YbE54B7IJrvGElS9h+miB0/5JGQS5pqD67cRi4JzrTTDgvG?= =?us-ascii?Q?YOwLANkiXGIesrOnHtUOo+lfRhL0rhC26yHkz+r64eMRXOL6xfaEoo65T+72?= =?us-ascii?Q?C3C2WDAkBQCPYLu/JNodzY2V0KDQFEx4U6wjGLcTVHXIOISXs0/jXIB7anZk?= =?us-ascii?Q?ZVXUzZSWZqNK6YLs1ST6sU0WAc45uyzTwmPE45jPRezA9/G8jv0EDwqFHC/m?= =?us-ascii?Q?tgD4v7qBB7ZCCMSqzDEvSD95QPOaVSXbTej3kXPOimJWv5hrvjGzvRGWPY7c?= =?us-ascii?Q?yUwuT/p+DqiivpjAQvmN8UZW4LCS2kDSD4QrkJAso4pC4QIKPaULxUI2t9P+?= =?us-ascii?Q?uVjzXIf2QcTYpwH+QaDEpUITwN0bL3GDjyJllv180K3R1CP7k4XVpEp5UN4L?= =?us-ascii?Q?OfR49DT2VOh5a513p1YHkiwcxtwIrMzXAKYbSiMHxfNaZ3q1mrGlfXWcjQww?= =?us-ascii?Q?VN5nQVrNRW8SmtaVt0hbWcTcV48Sa0dQXPXjbrMnxxSYmb03YPCuzSdDK0ct?= =?us-ascii?Q?UXnXwHIG9eRLtl1tkvRh4Pnfn4/K0yKyndoCXz57gmHxeaDfmVsN2ygF/M0R?= =?us-ascii?Q?uLkJkTmjInfEgGxlTxMIXV+V2qr62WH4bA3Xd8Mfov1syTqX7Bztqp4bgZaA?= =?us-ascii?Q?ELjjgaN2sphPGcuzds9uh7MrJG4IGz25RsJx5Hc+DrhduMV5T9a3+c+7c5fr?= =?us-ascii?Q?qvAwxxt7i3AB6QvlGfFPnRZ+NIoqkgSws6tc/5NDJrJDdA8Kfd/O7PZmmx71?= =?us-ascii?Q?qRXDYZCjL+uXivlBfeF2Qr4u6gKEvsFSyuc5lBYJeUONSMwDTrXJwKwdnFgt?= =?us-ascii?Q?cgp313APxwLjgSs1ijNEISjAtpj7bvTMsQi5NN64EpXoIt0zhW2OmvLoUqPe?= =?us-ascii?Q?VB342IWb3w0M9fz2zzCAswe3On1WFytY1sthMVuq61L/srZXMwGNHE4AqXxU?= =?us-ascii?Q?D137kYXWtljq0uLU0IOHzFsqknXXaIiXE3sKtEsV0rEA3jhq+c/v4jLWQdOD?= =?us-ascii?Q?gyo+2pGvMJFwmw9lPCCCPCGmwHFcnfLDmtZBWlLmIobsTq54wqrRss5AuPnF?= =?us-ascii?Q?22MF0eBEBI9Kk+DGMnIfv1Roy2ZRtL23lepdGPvWHKb58ERYOGHiiuv3bvKo?= =?us-ascii?Q?y0faT4YCZMT46KvrbCz5SqP0hr+4FNlmuDDoe7zT479EVe6x7BoEHf6zxCd9?= =?us-ascii?Q?RGfEpqDS14MaTvRkDVrm5/jFwgjJfS93CAGy6LVEcYFWQGrk6Z/N?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: b7e52c9e-b0ec-4571-5bd4-08df0e5e18dd X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB7216.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Sep 2026 10:35:41.7898 (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: PuYe5xqkURM5IWuw8S4xXpy+fCScpXkS+Aac50K/ou1k/Fh5qE6hOBD4nqD7W3RmP8zcCvbovxmBKfKidpnYA/V8PXWpJV1/foGnmQWmmvUHErm8HM2wvXTDfvo6NfII X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB8PR04MB7066 Content-Type: text/plain; charset="utf-8" From: Wei Fang The ENETC PF currently uses msg_task and msg_int_name in struct enetc_pf to handle VSI-to-PSI mailbox messages via a workqueue and a dedicated interrupt. PSI-to-VSI message support will be added to the VF driver, which will require the same mechanism: a message interrupt and a workqueue handler. Since struct enetc_si is the common structure shared between PF and VF, move msg_task and msg_int_name from struct enetc_pf to struct enetc_si to allow both drivers to use them without duplication. Also relocate the ENETC_INT_NAME_MAX macro definition ahead of struct enetc_si so it can be used for the msg_int_name array declaration. Signed-off-by: Wei Fang --- drivers/net/ethernet/freescale/enetc/enetc.h | 4 +++- .../net/ethernet/freescale/enetc/enetc_msg.c | 19 ++++++++++--------- .../net/ethernet/freescale/enetc/enetc_pf.h | 3 --- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/drivers/net/ethernet/freescale/enetc/enetc.h b/drivers/net/eth= ernet/freescale/enetc/enetc.h index d1e9d9130057..bc713a7c3aa1 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc.h +++ b/drivers/net/ethernet/freescale/enetc/enetc.h @@ -25,6 +25,7 @@ #define ENETC_CBD_DATA_MEM_ALIGN 64 =20 #define ENETC_MADDR_HASH_TBL_SZ 64 +#define ENETC_INT_NAME_MAX (IFNAMSIZ + 8) =20 enum enetc_mac_addr_type {UC, MC, MADDR_TYPE}; =20 @@ -333,6 +334,8 @@ struct enetc_si { =20 struct dentry *debugfs_root; struct enetc_msg_swbd msg; /* Only valid for VSI */ + struct work_struct msg_task; + char msg_int_name[ENETC_INT_NAME_MAX]; }; =20 #define ENETC_SI_ALIGN 32 @@ -374,7 +377,6 @@ static inline bool enetc_is_pseudo_mac(struct enetc_si = *si) } =20 #define ENETC_MAX_NUM_TXQS 8 -#define ENETC_INT_NAME_MAX (IFNAMSIZ + 8) =20 struct enetc_int_vector { void __iomem *rbier; diff --git a/drivers/net/ethernet/freescale/enetc/enetc_msg.c b/drivers/net= /ethernet/freescale/enetc/enetc_msg.c index 78114ab3e482..a89a5a418a23 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc_msg.c +++ b/drivers/net/ethernet/freescale/enetc/enetc_msg.c @@ -37,7 +37,7 @@ static irqreturn_t enetc_msg_psi_msix(int irq, void *data) struct enetc_pf *pf =3D enetc_si_priv(si); =20 enetc_msg_disable_mr_int(pf); - schedule_work(&pf->msg_task); + schedule_work(&si->msg_task); =20 return IRQ_HANDLED; } @@ -223,12 +223,13 @@ static void enetc_msg_handle_rxmsg(struct enetc_pf *p= f, int vf_id, =20 static void enetc_msg_task(struct work_struct *work) { - struct enetc_pf *pf =3D container_of(work, struct enetc_pf, msg_task); - u32 mr_mask =3D ENETC_PSIMR_MASK(pf->num_vfs); - struct enetc_hw *hw =3D &pf->si->hw; - u32 mr_status; + struct enetc_si *si =3D container_of(work, struct enetc_si, msg_task); + struct enetc_pf *pf =3D enetc_si_priv(si); + struct enetc_hw *hw =3D &si->hw; + u32 mr_status, mr_mask; int i; =20 + mr_mask =3D ENETC_PSIMR_MASK(pf->num_vfs); mr_status =3D (enetc_rd(hw, ENETC_PSIMSGRR) & mr_mask) | (enetc_rd(hw, ENETC_PSIIDR) & mr_mask); if (!mr_status) @@ -311,13 +312,13 @@ static int enetc_msg_psi_init(struct enetc_pf *pf) } =20 /* initialize PSI mailbox */ - INIT_WORK(&pf->msg_task, enetc_msg_task); + INIT_WORK(&si->msg_task, enetc_msg_task); =20 /* register message passing interrupt handler */ - snprintf(pf->msg_int_name, sizeof(pf->msg_int_name), "%s-vfmsg", + snprintf(si->msg_int_name, sizeof(si->msg_int_name), "%s-vfmsg", si->ndev->name); vector =3D pci_irq_vector(si->pdev, ENETC_SI_INT_IDX); - err =3D request_irq(vector, enetc_msg_psi_msix, 0, pf->msg_int_name, si); + err =3D request_irq(vector, enetc_msg_psi_msix, 0, si->msg_int_name, si); if (err) { dev_err(&si->pdev->dev, "PSI messaging: request_irq() failed!\n"); @@ -350,7 +351,7 @@ static void enetc_msg_psi_free(struct enetc_pf *pf) /* de-register message passing interrupt handler */ free_irq(pci_irq_vector(si->pdev, ENETC_SI_INT_IDX), si); =20 - cancel_work_sync(&pf->msg_task); + cancel_work_sync(&si->msg_task); =20 /* MR interrupts may be re-enabled by workqueue */ enetc_msg_disable_mr_int(pf); diff --git a/drivers/net/ethernet/freescale/enetc/enetc_pf.h b/drivers/net/= ethernet/freescale/enetc/enetc_pf.h index 6789f92d005e..142c911f1dfc 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc_pf.h +++ b/drivers/net/ethernet/freescale/enetc/enetc_pf.h @@ -40,10 +40,7 @@ struct enetc_pf { struct enetc_vf_state *vf_state; =20 struct enetc_mac_filter mac_filter[MADDR_TYPE]; - struct enetc_msg_swbd *rxmsg; - struct work_struct msg_task; - char msg_int_name[ENETC_INT_NAME_MAX]; =20 DECLARE_BITMAP(vlan_ht_filter, ENETC_VLAN_HT_SIZE); DECLARE_BITMAP(active_vlans, VLAN_N_VID); --=20 2.34.1 From nobody Fri Sep 25 19:15:32 2026 Received: from OSPPR02CU001.outbound.protection.outlook.com (mail-norwayeastazon11013043.outbound.protection.outlook.com [40.107.159.43]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5335352379A; Wed, 9 Sep 2026 10:35:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.159.43 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788950153; cv=fail; b=X3UpexpfkDejj0jVf0BBwQe3OYKZrSFA3izShBmvPaeyLT5cX65EGuKEGMEWHKIpfNSgOntL6zeW/eYR4GDg8n/x+3aqomde3b+cYFMp2W6eLbW4+k+notTYdRn8mk7SpMxwQebsvyl0LE3jx5dXTFFDFhWqY8wC/LoXLUepuI4= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788950153; c=relaxed/simple; bh=+fEOmrNUPkrrSBqiJ9IGX6fes7Uz1Z3fC4S7qmpJ3MQ=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=jo6RJ8lnlhXvNlee/V5ao18zwgdWDuZUI0860h8ErU/wW+cl5XksRmECarQP5E1XGHiYoWicpyVwiCR9X7EdJdqMK3e6yN/yh04tsS8HALVb/hQnwFj+aiq/sDpHwE7ZnHbofntVmHT/e+1dAfuXUs5Uo4Pfjm5Jhw0CzMyLhLo= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com; spf=pass smtp.mailfrom=oss.nxp.com; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b=pK7vG7km; arc=fail smtp.client-ip=40.107.159.43 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b="pK7vG7km" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=jFEtW8pwOPnZ2fp7LMwPxnzyQY6LydydMQtQ2id1T4dNXh5OXkWi3HphKW6Eq8XEDBwooTCBXhMPUX0GJueCdDa+NicNB52rI4m263+xXE0GsPZUpBwP3CPyx3CmJ28esFQovx65q1uhvvQYx02tVfv0qCB5Z/ZIBbmNkGr5K+v2szg5SdDk8YAqTF70HaRhtM5W2hdlt64zHRqDJ+UPr9HIHzhoFJ+IZ6hvLRDYiol0yIrJHh0RCt814Fr/cGgPfl9X9v71JB7E/l2esd1OuNxizwWnIFWK//lRlP5O+m83z2xH0QehELuFeBdlnTSb+u8VrVpy39V4Y+ESo8kYpQ== 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=UUMxo/s0k4JdiYglX1+fI+gjsj3+xRdnH8M4temcRxs=; b=rKLIllmwGqeam01eQiyjLPL13AxL/+ZHCiI4cakkFtMPDONk1AKZoIxuqgahosPhG0nV59uLqULIPdNEbP0jzFJ+vXjGX2aGRdyRIaecXGtDXU7E5pnMmE+AH1nTN3OVRPF9nXV/iGJ2naBMBbV2O7txvUDPWkwrCzcGsrYp1OiWKJb5/KK6mREISgCHMmyzM+68JiE4ZreI0oYTgBYKCiF+1HRL/dt7JUch12+RYJzxPucW+Z+6Yzbn0fz1nqPdtGSHDTjWcjw1bwJ/IMcyi/nJXOSQ9sbbbTRom6ICE2gUIFTMZ5IhpDqIpcdSrr720Qmhwo0kqZ1NiriSOLUnSQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oss.nxp.com; dmarc=pass action=none header.from=oss.nxp.com; dkim=pass header.d=oss.nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=NXP1.onmicrosoft.com; s=selector1-NXP1-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=UUMxo/s0k4JdiYglX1+fI+gjsj3+xRdnH8M4temcRxs=; b=pK7vG7km9foJ0qAKmC1JM8Ox6xQOVe9kFMYy/LdlSOdRbTSP6QpNgnUuJP0SAUINQac+yNbqQS5qWMALyPCaN5nJeP0Bd8yY2GzdhZXmTCcb8oOnRphXHykn7pfStjuaIElFRIdyqUt0deEcx411tMeP47+2xQQkjo3gbYZ+7Ylyp5tRPvGLzCz9I8lBetiHcR6ATKNvWhO/H5BewfUR6TjwVELRxC3A1E+3pgSq1eI0a8SQ0tL0dRwwEm/A3POp5Rq5oA6Q1jiVmxPTSv2jPeQ2DGvO88CSGdbK1ozvsScnbYOieWcx5N1or8Bl4Nwvj3zIsDrWam2wFA5UmDxoPg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from VE1PR04MB7216.eurprd04.prod.outlook.com (2603:10a6:800:1b0::22) by DB8PR04MB7066.eurprd04.prod.outlook.com (2603:10a6:10:12e::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.406.8; Wed, 9 Sep 2026 10:35:47 +0000 Received: from VE1PR04MB7216.eurprd04.prod.outlook.com ([fe80::a9a5:cf83:dbe8:1f74]) by VE1PR04MB7216.eurprd04.prod.outlook.com ([fe80::a9a5:cf83:dbe8:1f74%3]) with mapi id 15.21.0406.005; Wed, 9 Sep 2026 10:35:47 +0000 From: wei.fang@oss.nxp.com To: claudiu.manoil@nxp.com, vladimir.oltean@nxp.com, xiaoning.wang@nxp.com, andrew@lunn.ch, olteanv@gmail.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, linux@armlinux.org.uk Cc: wei.fang@nxp.com, imx@lists.linux.dev, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v4 net-next 03/15] net: enetc: add link status message support to PF driver Date: Wed, 9 Sep 2026 18:07:21 +0800 Message-Id: <20260909100733.1139689-4-wei.fang@oss.nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260909100733.1139689-1-wei.fang@oss.nxp.com> References: <20260909100733.1139689-1-wei.fang@oss.nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SI2PR02CA0046.apcprd02.prod.outlook.com (2603:1096:4:196::15) To VE1PR04MB7216.eurprd04.prod.outlook.com (2603:10a6:800:1b0::22) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VE1PR04MB7216:EE_|DB8PR04MB7066:EE_ X-MS-Office365-Filtering-Correlation-Id: 941bbb94-a51e-4990-eddb-08df0e5e1c1a X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|19092799006|7416014|376014|1800799024|23010399003|366016|10067099003|11063799006|56012099006|6133799003|21046099003|3023799007|22082099003|18002099003|921020; X-Microsoft-Antispam-Message-Info: cNfp4g1ljQ47bleteLsHWtl495ZpDbFUA14G6QzBqaGY6cEWZcDHpNCQe3MW+JY7U/euFP3w5Xsi95pfdbgY68c2I4cJiC5GSw5uAbBdhTmzAm6VQimMmMORRGWqxtTbenpJonGphPO33TievIofCjIMNGVnTiyc0dhrdvrvJas3ef5nKL6bl6B/lz9+TaAV4x4JGlgwkGomklBfTrmznnqiTBXeeMtgAEwA78Of3jJZEQ4fnE/XFpaybmijcIrpBc8wSWkbqprJpbQsE2Rd6QGe4057AK2Bz7rOh/2R5kXaEgTc033Tg6WhKGSCzYS0vs/YrptEIdd6NWoLDtskU/HOSJjJBcyqRMpkyR73zqGxbxSaBtEUMKdFKMZ8B7sWMCF2Q2lSOTS2Tir86XiVQRhIE5TH1qUuGOlKAmlpX2XMGIL2deX8H9qh+8xoIVZ3olFgHrPNMnkX9MQByoyB+yK1zNpvvd6AC0+/mK/K3DO2FmSZFOqI5mi2L3a2GFIfnSGtXYST3I4RgVBpigA9W6AqzsyJQMqiKuqlzbmEXliQYggRi82s7yuVRQSGbv3dmRiERjgGrK7DEPm0D0pX6oJfMOqoOS9u8cR0ylhojJGx5kDUvFaRlJ0+0+AnhF8MOXcA3kC70MLgD0L2gMngxJVh1poLkJUInRYivPMCg77DyXflGv120RyMBv8ginq0Ux0TDMXZx818bhqFh6Zm/g== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VE1PR04MB7216.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(19092799006)(7416014)(376014)(1800799024)(23010399003)(366016)(10067099003)(11063799006)(56012099006)(6133799003)(21046099003)(3023799007)(22082099003)(18002099003)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?VnLfHSrT4nCTYPX2cX5+sKbE0tnJwv87DZvVgXgW5CwiaMjK/fUqFp/UlXm+?= =?us-ascii?Q?37QCqb/XMK04OGJmNdbK5/lsQzGnah9ZwzeoD8FX5E64Mwoa7mG3EIPkzG6E?= =?us-ascii?Q?24ndtYcLd0JDNZQw8Rae4a2hdCRZsGD/woNALGw+tEKk5L0xbzbjraR9Cpzo?= =?us-ascii?Q?vqQjke50cRGzInndAsfg7SrA3Hkuln9oFpWA1S2IO2RhihpoKBIjn1FIoWnk?= =?us-ascii?Q?gOb7bjdI5YdsQUds9Z8djMxcREJJ0oGrDMShk6nA7GDXF7VJvI3DgUgDtbkG?= =?us-ascii?Q?d+KRylRgzn6Z12gCW9VosMsNJgzcEIIiYFx4DCWXCyrv1yxTPmshXRZEGGL7?= =?us-ascii?Q?yejuuuDTalZ8FlUYrpBoxGSqnALR69oR9+Urt9FhFpKBF+/CTCOsaLnAhZKC?= =?us-ascii?Q?hPWvS2aytstRNacz6wRkHXfuSO3z607q2p+h+00iJsRr8WGyIsBEd8n9JaxE?= =?us-ascii?Q?NKw+O7ykf/JqcsYymQOxLz3FyzAbBewpvJ9RDuNum6zd0WNML7v7ju+InxfQ?= =?us-ascii?Q?iJ/EOYPAHpzrPesWscgpJKuC8bnZmDYLT+uEHwD5VsHONCqNUcoBU9/Axn41?= =?us-ascii?Q?sW3PeaqMsHw1CukMET2vq+EE8NBWBAhiirWnesTrE7tiVCLOfiZlLKofSMCO?= =?us-ascii?Q?RfKLnoPETZkdhSRRVkOE7yyRb97MGElTJI+ERKj3BTyd1g4lGy+y5Q8VkZ1g?= =?us-ascii?Q?kT7/OHG7uYC1A64CfyANy/z7UooCVNAf/9sGyy9+YwXaPATUv1g92QD1CQR5?= =?us-ascii?Q?198nbUV9SBqXCa64we7J+pJN3nXvZstbMyCC4Db552BLZOjeBG8/DhpW0S5+?= =?us-ascii?Q?Z7aiOLRrL9r7XoayvkF75rEoml1ApH8Rpj/D92AjqnErXLcCbhArZxEBGv2a?= =?us-ascii?Q?Jwqk3BKAkAOw/Dg4Rc7cTSVBJLiyiiX7+PWSfT5safovXLyJn/N0XxBIWhD4?= =?us-ascii?Q?iyrHsnu6T8Y1yqkehJw4pdmoVFBt1rNc9yAot/cyzhd3praAJQdlNTPHLd4d?= =?us-ascii?Q?uPIbewX+OkaYNaHzozJFG4hnzVbB6SIFopB/ZJapPrXYPGVLx6tIztUZxOZI?= =?us-ascii?Q?Pq+DrDimWYItVZ+tzqpNJs2ovt2rw09ZAAdUWxhDJrOwnKMohEDA2UXd8/kJ?= =?us-ascii?Q?caCN9xNaEwXbpZ7bm5IE2DL16Sf9AoGavgauKgzcVW0oz9IurV863i2VylBd?= =?us-ascii?Q?HyS4bPguOA1UQKkDqn7+xgiMkKh5E5UlnaHvlY42ZS1as+7lRFCYrErHWuv0?= =?us-ascii?Q?USQd5Zm7abeXFBh0m7m599pETPJnJqqIKIWYZSvG0hhsXgCrmZyAdUBP3fjO?= =?us-ascii?Q?oRTzC4wIU/3NQM5rQYM0XKK93URj31LH0GWnxnk1geHomzbu5csoL+ohHGOf?= =?us-ascii?Q?ut7G1CgtdDCQNVv0Kub9OZes8tBQ+sPVhJPAaKhPH5Kj9uG0PfwY+xMnURmb?= =?us-ascii?Q?6Xqi4Z9yj1huWd5y90AXDqWyp9L8uO8yQdAo2vjXhq4OGizfr47BN/JdpOYD?= =?us-ascii?Q?i3r/WbJ5b2AOZsIJk27MbnPEiIdJjujRg78R2NIXmEfxUxIc8wUZQoXzWLFS?= =?us-ascii?Q?gONEK++BSaLi3IgwIYLE+Rsk4UxGY0Ob70KpJK/5mGvhU9rSEF30h1jItIwl?= =?us-ascii?Q?nd4zXT4Iz+CTts+6EyOVgzJvbWDcxoZezfDWVAGTXa9mEFEcKDuASwzFMJtE?= =?us-ascii?Q?OXaxnTaaE17W7ixzuu/p22qb4Ji5afjnlMaeP11KeYbNS0zfrCvnw/Px/S2e?= =?us-ascii?Q?FicQk2tBr7T92Ye9wwqE6ooVM6djJNsZGXNuaTj1Z7nI4o/L96IX?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 941bbb94-a51e-4990-eddb-08df0e5e1c1a X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB7216.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Sep 2026 10:35:47.3800 (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: 3ij3GKKEZ/EHe+SuQUKiMQC43NRN7WO6YUIjS1WK36qcMpHvdFw+C5uc2vNM6fg7iFMbwghQUZxVKS5lR52AdpOqqQzwd7jzV2+b6TV7fBlb44Na2qUfXW9S4tw7HBHP X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB8PR04MB7066 Content-Type: text/plain; charset="utf-8" From: Wei Fang Add a mechanism for VFs to learn the PF link state, using message class 0x80 (ENETC_MSG_CLASS_ID_LINK_STATUS) with three VSI-to-PSI commands: 1. ENETC_MSG_GET_CURRENT_LINK_STATUS: the VF queries the current PF link status synchronously. This is intended for DPDK-owned VFs and is not used by the Linux VF driver. 2. ENETC_MSG_REGISTER_LINK_CHANGE_NOTIFIER: the VF registers for link change notification. The PF then reports the current link status and notifies the VF on every later link change. 3. ENETC_MSG_UNREGISTER_LINK_CHANGE_NOTIFIER: the VF unregisters. The PSI-to-VSI notification is 16 bits wide: the upper 8 bits carry the class ID and the lower 8 bits the class code. Bit 0 of the class code indicates the link state (1 =3D down, 0 =3D up) and bit 1 indicates whether TX PAUSE is enabled on the PF. The TX PAUSE state is included so a VF can decide whether to enable congestion mode on its RX BD rings, which only works when the PF can actually send PAUSE frames. Notifications are sent through the ENETC_PSIMSGSR register. Since sending a notification may take a long time, as it polls the per-VF message status bits, the actual transmission is deferred to an ordered workqueue rather than running in the phylink link_up/link_down callbacks. The link_status_ms_mask tracks the VFs registered for notification and is cleared when SR-IOV is disabled. Export enetc_pf_notify_vf_link_up() and enetc_pf_notify_vf_link_down() for the PF phylink callbacks. Through this, VFs can perceive the link status and report it to upper layers such as the kernel network stack, containers and virtual machines. Currently only the ENETC v4 driver supports this feature; v1 does not. And the SR-IOV feature of ENETC v4 will be added by subsequent patches. Signed-off-by: Wei Fang --- drivers/net/ethernet/freescale/enetc/enetc.h | 1 + .../net/ethernet/freescale/enetc/enetc4_pf.c | 39 +++ .../net/ethernet/freescale/enetc/enetc_hw.h | 5 + .../ethernet/freescale/enetc/enetc_mailbox.h | 26 +- .../net/ethernet/freescale/enetc/enetc_msg.c | 264 +++++++++++++++++- .../net/ethernet/freescale/enetc/enetc_pf.h | 7 + .../freescale/enetc/enetc_pf_common.h | 15 + 7 files changed, 347 insertions(+), 10 deletions(-) diff --git a/drivers/net/ethernet/freescale/enetc/enetc.h b/drivers/net/eth= ernet/freescale/enetc/enetc.h index bc713a7c3aa1..0eff25b0c81b 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc.h +++ b/drivers/net/ethernet/freescale/enetc/enetc.h @@ -334,6 +334,7 @@ struct enetc_si { =20 struct dentry *debugfs_root; struct enetc_msg_swbd msg; /* Only valid for VSI */ + struct workqueue_struct *workqueue; struct work_struct msg_task; char msg_int_name[ENETC_INT_NAME_MAX]; }; diff --git a/drivers/net/ethernet/freescale/enetc/enetc4_pf.c b/drivers/net= /ethernet/freescale/enetc/enetc4_pf.c index 935a6a03b14f..e20989b6f8b4 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc4_pf.c +++ b/drivers/net/ethernet/freescale/enetc/enetc4_pf.c @@ -899,6 +899,7 @@ static void enetc4_pl_mac_link_up(struct phylink_config= *config, enetc4_set_rx_pause(pf, rx_pause); enetc4_mac_tx_enable(pf); enetc4_mac_rx_enable(pf); + enetc_pf_notify_vf_link_up(pf); } =20 static void enetc4_pl_mac_link_down(struct phylink_config *config, @@ -907,6 +908,7 @@ static void enetc4_pl_mac_link_down(struct phylink_conf= ig *config, { struct enetc_pf *pf =3D phylink_to_enetc_pf(config); =20 + enetc_pf_notify_vf_link_down(pf); enetc4_mac_rx_graceful_stop(pf); enetc4_mac_tx_graceful_stop(pf); } @@ -966,6 +968,36 @@ static void enetc4_link_deinit(struct enetc_ndev_priv = *priv) enetc_mdiobus_destroy(pf); } =20 +static void enetc4_pf_link_status_task(struct work_struct *work) +{ + struct enetc_pf *pf =3D container_of(work, struct enetc_pf, + link_status_task); + + enetc_pf_send_link_status_msg(pf); +} + +static int enetc4_pf_wq_task_init(struct enetc_si *si) +{ + struct enetc_pf *pf =3D enetc_si_priv(si); + + si->workqueue =3D alloc_ordered_workqueue("enetc-%s-wq", 0, + pci_name(si->pdev)); + if (!si->workqueue) + return -ENOMEM; + + INIT_WORK(&pf->link_status_task, enetc4_pf_link_status_task); + + return 0; +} + +static void enetc4_pf_wq_task_destroy(struct enetc_si *si) +{ + struct enetc_pf *pf =3D enetc_si_priv(si); + + disable_work_sync(&pf->link_status_task); + destroy_workqueue(si->workqueue); +} + static int enetc4_pf_netdev_create(struct enetc_si *si) { struct device *dev =3D &si->pdev->dev; @@ -1006,6 +1038,10 @@ static int enetc4_pf_netdev_create(struct enetc_si *= si) if (err) goto err_link_init; =20 + err =3D enetc4_pf_wq_task_init(si); + if (err) + goto err_wq_init; + err =3D register_netdev(ndev); if (err) { dev_err(dev, "Failed to register netdev\n"); @@ -1015,6 +1051,8 @@ static int enetc4_pf_netdev_create(struct enetc_si *s= i) return 0; =20 err_reg_netdev: + enetc4_pf_wq_task_destroy(si); +err_wq_init: enetc4_link_deinit(priv); err_link_init: enetc_free_msix(priv); @@ -1032,6 +1070,7 @@ static void enetc4_pf_netdev_destroy(struct enetc_si = *si) struct net_device *ndev =3D si->ndev; =20 unregister_netdev(ndev); + enetc4_pf_wq_task_destroy(si); enetc4_link_deinit(priv); enetc_free_msix(priv); free_netdev(ndev); diff --git a/drivers/net/ethernet/freescale/enetc/enetc_hw.h b/drivers/net/= ethernet/freescale/enetc/enetc_hw.h index 16da732dc5de..f97602714118 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc_hw.h +++ b/drivers/net/ethernet/freescale/enetc/enetc_hw.h @@ -80,6 +80,11 @@ static inline u32 enetc_vsi_set_msize(u32 size) #define ENETC_SIMSGSR_SET_MC(val) ((val) << 16) #define ENETC_SIMSGSR_GET_MC(val) ((val) >> 16) =20 +#define ENETC_PSIMSGSR 0x208 +/* n is VF index, which is less than 15 */ +#define PSIMSGSR_MS(n) BIT((n) + 1) +#define PSIMSGSR_MC GENMASK(31, 16) + /* SI statistics */ #define ENETC_SIROCT 0x300 #define ENETC_SIRFRM 0x308 diff --git a/drivers/net/ethernet/freescale/enetc/enetc_mailbox.h b/drivers= /net/ethernet/freescale/enetc/enetc_mailbox.h index d9677da38989..846998f07989 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc_mailbox.h +++ b/drivers/net/ethernet/freescale/enetc/enetc_mailbox.h @@ -66,8 +66,8 @@ * 2) PSI_TX_control: PSIMSGSR[MC] - for PSI to VSI notification messages * (async mode) * - * Note that for some GET messages, there is no COOKIE field, and the CLASS - * CODE field is expanded to 8 bits. + * Note that for some PSI-to-VSI messages, there is no COOKIE field, and t= he + * CLASS CODE field is expanded to 8 bits. */ =20 #ifndef __ENETC_MAILBOX_H @@ -87,7 +87,11 @@ /* The fileds of PSI-to-VSI message, the message is only 16-bit */ #define ENETC_PF_MSG_COOKIE GENMASK(3, 0) #define ENETC_PF_MSG_CLASS_CODE GENMASK(7, 4) -/* Extend the class code to 8-bit for GET messages without COOKIE */ +/* Extend the class code to 8-bit for PSI-to-VSI messages without COOKIE + * The class code for the following messages is 8-bit. + * 1. Get IP revision messages + * 2. Link status messages + */ #define ENETC_PF_MSG_CLASS_CODE_U8 GENMASK(7, 0) #define ENETC_PF_MSG_CLASS_ID GENMASK(15, 8) =20 @@ -107,6 +111,7 @@ enum enetc_msg_class_id { =20 /* Common Class ID for PSI-to-VSI and VSI-to-PSI messages */ ENETC_MSG_CLASS_ID_MAC_FILTER =3D 0x20, + ENETC_MSG_CLASS_ID_LINK_STATUS =3D 0x80, ENETC_MSG_CLASS_ID_IP_REVISION =3D 0xf0, }; =20 @@ -118,11 +123,21 @@ enum enetc_msg_ip_revision_cmd_id { ENETC_MSG_GET_IP_MN =3D 1, }; =20 +enum enetc_msg_link_status_cmd_id { + ENETC_MSG_GET_CURRENT_LINK_STATUS, + ENETC_MSG_REGISTER_LINK_CHANGE_NOTIFIER, + ENETC_MSG_UNREGISTER_LINK_CHANGE_NOTIFIER, +}; + /* Class-specific error return codes of MAC filter */ enum enetc_mac_filter_class_code { ENETC_MF_CLASS_CODE_INVALID_MAC, }; =20 +/* Class-specific notifications/codes of link status */ +#define ENETC_CLASS_CODE_LINK_DOWN BIT(0) +#define ENETC_CLASS_CODE_TX_PAUSE_EN BIT(1) + struct enetc_msg_swbd { void *vaddr; dma_addr_t dma; @@ -161,6 +176,11 @@ struct enetc_msg_mac_exact_filter { /* The generic message format applies to the following messages: * Get IP revision message, class_id 0xf0. * cmd_id 1: get IP minor revision + * + * Link status message, class id 0x80. + * cmd_id 0x0: get the current link status + * cmd_id 0x1: register link status change notification + * cmd_id 0x2: unregister link status change notification */ struct enetc_msg_generic { struct enetc_msg_header hdr; diff --git a/drivers/net/ethernet/freescale/enetc/enetc_msg.c b/drivers/net= /ethernet/freescale/enetc/enetc_msg.c index a89a5a418a23..79dbaf72fcff 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc_msg.c +++ b/drivers/net/ethernet/freescale/enetc/enetc_msg.c @@ -136,6 +136,104 @@ static u16 enetc_msg_handle_ip_revision(struct enetc_= pf *pf, void *vf_msg) } } =20 +static void enetc_pf_reply_msg(struct enetc_hw *hw, int vf_id, u16 pf_msg) +{ + /* w1c to clear the corresponding VF MR bit */ + enetc_wr(hw, ENETC_PSIIDR, ENETC_PSIMR_BIT(vf_id)); + enetc_wr(hw, ENETC_PSIMSGRR, ENETC_SIMSGSR_SET_MC(pf_msg) | + ENETC_PSIMR_BIT(vf_id)); +} + +static u16 enetc_build_link_status_msg(struct enetc_ndev_priv *priv, + bool link_up) +{ + u8 status =3D 0; + + if (link_up) { + if (test_bit(ENETC_RXBDR_CM, &priv->flags)) + status |=3D ENETC_CLASS_CODE_TX_PAUSE_EN; + } else { + status |=3D ENETC_CLASS_CODE_LINK_DOWN; + } + + return FIELD_PREP(ENETC_PF_MSG_CLASS_ID, + ENETC_MSG_CLASS_ID_LINK_STATUS) | + FIELD_PREP(ENETC_PF_MSG_CLASS_CODE_U8, status); +} + +static void enetc_msg_get_link_status(struct enetc_pf *pf, int vf_id) +{ + struct enetc_ndev_priv *priv =3D netdev_priv(pf->si->ndev); + struct enetc_si *si =3D pf->si; + u16 pf_msg; + + spin_lock(&si->gen_lock); + pf_msg =3D enetc_build_link_status_msg(priv, pf->link_up); + enetc_pf_reply_msg(&si->hw, vf_id, pf_msg); + spin_unlock(&si->gen_lock); +} + +static void enetc_msg_register_link_status_notifier(struct enetc_pf *pf, + int vf_id) +{ + struct enetc_si *si =3D pf->si; + + spin_lock(&si->gen_lock); + enetc_pf_reply_msg(&si->hw, vf_id, ENETC_PF_MSG_SUCCESS); + + /* SR-IOV is being disabled if pf->sriov_enabled is false, so no + * need to set link_status_ms_mask and notify the link status. + */ + if (!pf->sriov_enabled) { + spin_unlock(&si->gen_lock); + return; + } + + pf->link_status_ms_mask |=3D PSIMSGSR_MS(vf_id); + spin_unlock(&si->gen_lock); + + /* Notify VF the current link status */ + queue_work(si->workqueue, &pf->link_status_task); +} + +static void enetc_msg_unregister_link_status_notifier(struct enetc_pf *pf, + int vf_id) +{ + spin_lock(&pf->si->gen_lock); + pf->link_status_ms_mask &=3D ~PSIMSGSR_MS(vf_id); + enetc_pf_reply_msg(&pf->si->hw, vf_id, ENETC_PF_MSG_SUCCESS); + spin_unlock(&pf->si->gen_lock); +} + +static u16 enetc_msg_handle_link_status(struct enetc_pf *pf, int vf_id, + void *vf_msg) +{ + struct enetc_msg_header *msg_hdr =3D vf_msg; + + switch (msg_hdr->cmd_id) { + case ENETC_MSG_GET_CURRENT_LINK_STATUS: + /* Currently, this message is intended only for + * DPDK-owned VFs. + */ + enetc_msg_get_link_status(pf, vf_id); + break; + case ENETC_MSG_REGISTER_LINK_CHANGE_NOTIFIER: + enetc_msg_register_link_status_notifier(pf, vf_id); + break; + case ENETC_MSG_UNREGISTER_LINK_CHANGE_NOTIFIER: + enetc_msg_unregister_link_status_notifier(pf, vf_id); + break; + default: + return ENETC_PF_MSG_NOTSUPP; + } + + return 0; +} + +/* If *pf_msg is set to 0, it means that PF has responded to VF in + * enetc_msg_handle_rxmsg() through enetc_pf_reply_msg(), which also + * clears the corresponding VF MR bit in PSIIDR. + */ static void enetc_msg_handle_rxmsg(struct enetc_pf *pf, int vf_id, u16 *pf_msg) { @@ -211,6 +309,9 @@ static void enetc_msg_handle_rxmsg(struct enetc_pf *pf,= int vf_id, case ENETC_MSG_CLASS_ID_IP_REVISION: *pf_msg =3D enetc_msg_handle_ip_revision(pf, msg); break; + case ENETC_MSG_CLASS_ID_LINK_STATUS: + *pf_msg =3D enetc_msg_handle_link_status(pf, vf_id, msg); + break; default: dev_err_ratelimited(dev, "Unsupported message class ID: 0x%x\n", @@ -236,7 +337,6 @@ static void enetc_msg_task(struct work_struct *work) goto out; =20 for (i =3D 0; i < pf->num_vfs; i++) { - u32 psimsgrr; u16 msg_code; =20 if (!(ENETC_PSIMR_BIT(i) & mr_status)) @@ -244,12 +344,14 @@ static void enetc_msg_task(struct work_struct *work) =20 enetc_msg_handle_rxmsg(pf, i, &msg_code); =20 - /* w1c to clear the corresponding VF MR bit */ - enetc_wr(hw, ENETC_PSIIDR, ENETC_PSIMR_BIT(i)); + /* If msg_code is 0, it means that PF has responded to VF + * in enetc_msg_handle_rxmsg() through enetc_pf_reply_msg(), + * which also clears the corresponding VF MR bit in PSIIDR. + */ + if (!msg_code) + continue; =20 - psimsgrr =3D ENETC_SIMSGSR_SET_MC(msg_code); - psimsgrr |=3D ENETC_PSIMR_BIT(i); /* w1c */ - enetc_wr(hw, ENETC_PSIMSGRR, psimsgrr); + enetc_pf_reply_msg(hw, i, msg_code); } =20 out: @@ -340,6 +442,22 @@ static int enetc_msg_psi_init(struct enetc_pf *pf) return err; } =20 +static void enetc_msg_clear_vf_config(struct enetc_pf *pf, int vf_id) +{ + struct enetc_vf_state *vf_state =3D &pf->vf_state[vf_id]; + struct enetc_si *si =3D pf->si; + + /* For ENETC v1, we only support setting the VF's MAC address via + * VSI-to-PSI messages, so there is no configuration to clear. + */ + if (is_enetc_rev1(si)) + return; + + spin_lock(&si->gen_lock); + vf_state->msg_fail_cnt =3D 0; + spin_unlock(&si->gen_lock); +} + static void enetc_msg_psi_free(struct enetc_pf *pf) { struct enetc_si *si =3D pf->si; @@ -356,8 +474,10 @@ static void enetc_msg_psi_free(struct enetc_pf *pf) /* MR interrupts may be re-enabled by workqueue */ enetc_msg_disable_mr_int(pf); =20 - for (i =3D 0; i < pf->num_vfs; i++) + for (i =3D 0; i < pf->num_vfs; i++) { enetc_msg_free_mbx(si, i); + enetc_msg_clear_vf_config(pf, i); + } } =20 int enetc_sriov_configure(struct pci_dev *pdev, int num_vfs) @@ -367,6 +487,11 @@ int enetc_sriov_configure(struct pci_dev *pdev, int nu= m_vfs) int err; =20 if (!num_vfs) { + spin_lock(&si->gen_lock); + pf->sriov_enabled =3D false; + pf->link_status_ms_mask =3D 0; + spin_unlock(&si->gen_lock); + pci_disable_sriov(pdev); enetc_msg_psi_free(pf); pf->num_vfs =3D 0; @@ -379,6 +504,11 @@ int enetc_sriov_configure(struct pci_dev *pdev, int nu= m_vfs) goto err_msg_psi; } =20 + /* As PCI SR-IOV is not enabled at the moment, there is no + * concurrent access to sriov_enabled. So no need to use + * gen_lock to protect sriov_enabled. + */ + pf->sriov_enabled =3D true; err =3D pci_enable_sriov(pdev, num_vfs); if (err) { dev_err(&pdev->dev, "pci_enable_sriov err %d\n", err); @@ -389,6 +519,15 @@ int enetc_sriov_configure(struct pci_dev *pdev, int nu= m_vfs) return num_vfs; =20 err_en_sriov: + /* If pci_enable_sriov() fails after partially creating VFs, a VF + * driver that successfully bound to one of the created VFs could + * have sent a registration message, setting its bit in + * link_status_ms_mask. + */ + spin_lock(&si->gen_lock); + pf->sriov_enabled =3D false; + pf->link_status_ms_mask =3D 0; + spin_unlock(&si->gen_lock); enetc_msg_psi_free(pf); err_msg_psi: pf->num_vfs =3D 0; @@ -396,3 +535,114 @@ int enetc_sriov_configure(struct pci_dev *pdev, int n= um_vfs) return err; } EXPORT_SYMBOL_GPL(enetc_sriov_configure); + +void enetc_pf_send_link_status_msg(struct enetc_pf *pf) +{ + struct enetc_ndev_priv *priv =3D netdev_priv(pf->si->ndev); + u16 pf_msg, ms_mask, new_ms_msk, ms_status; + struct enetc_si *si =3D pf->si; + int retry_num =3D 0; + +retry: + spin_lock(&si->gen_lock); + ms_mask =3D pf->link_status_ms_mask; + /* VFs have unregistered link status notification, return directly */ + if (!ms_mask) + goto unlock; + + /* The MS bit is set, indicating that the corresponding VF has not + * read the last message, PF cannot send new message to the VF. To + * avoid sending messages to such a VF, the bit corresponding to VF + * is cleared from ms_mask. Because the MS bit can only be written + * as 1, writing a 0 has no effect. Writing a 1 when the bit is + * already set is undefined. + */ + ms_status =3D enetc_rd(&si->hw, ENETC_PSIMSGSR) & 0xfffe; + if ((ms_mask & ms_status) && retry_num++ < 200) { + spin_unlock(&si->gen_lock); + /* Wait VFs to handle the last message */ + usleep_range(1000, 1020); + goto retry; + } + + /* None of the relevant VFs have processed the previous message, and + * the PF has tried 200 times. This situation indicates that VF has + * malfunctioned. + */ + new_ms_msk =3D ms_mask & (~ms_status); + if (!new_ms_msk) { + dev_err_ratelimited(&si->pdev->dev, + "All registered VFs (MS: 0x%x) are busy\n", + ms_mask); + goto ms_status_check; + } + + if (new_ms_msk !=3D ms_mask) + dev_warn_ratelimited(&si->pdev->dev, + "Failed to notify link status to VFs (MS: 0x%x)\n", + ms_mask ^ new_ms_msk); + + pf_msg =3D enetc_build_link_status_msg(priv, pf->link_up); + enetc_wr(&si->hw, ENETC_PSIMSGSR, + FIELD_PREP(PSIMSGSR_MC, pf_msg) | new_ms_msk); + +ms_status_check: + /* If the PF fails to send messages to the corresponding VF for 10 + * consecutive times, clear that VF's bit in link_status_ms_mask. + */ + for (int i =3D 0; i < pf->num_vfs; i++) { + struct enetc_vf_state *vf_state =3D &pf->vf_state[i]; + + if (!(PSIMSGSR_MS(i) & ms_mask)) + continue; + + if (!(PSIMSGSR_MS(i) & ms_status)) { + vf_state->msg_fail_cnt =3D 0; + continue; + } + + if (vf_state->msg_fail_cnt++ < 10) + continue; + + vf_state->msg_fail_cnt =3D 0; + pf->link_status_ms_mask &=3D ~PSIMSGSR_MS(i); + dev_warn_ratelimited(&si->pdev->dev, + "Clear VF%d's link status MS bit\n", i); + } + +unlock: + spin_unlock(&si->gen_lock); +} +EXPORT_SYMBOL_GPL(enetc_pf_send_link_status_msg); + +static void enetc_pf_notify_vf_link_status(struct enetc_pf *pf, + bool link_up) +{ + struct enetc_si *si =3D pf->si; + + /* Currently we do not add link status message support for ENETC v1 */ + if (!pf->total_vfs || is_enetc_rev1(si)) + return; + + spin_lock(&si->gen_lock); + pf->link_up =3D link_up; + if (!pf->link_status_ms_mask) { + spin_unlock(&si->gen_lock); + return; + } + spin_unlock(&si->gen_lock); + + queue_work(si->workqueue, &pf->link_status_task); +} + +void enetc_pf_notify_vf_link_up(struct enetc_pf *pf) +{ + enetc_pf_notify_vf_link_status(pf, true); +} +EXPORT_SYMBOL_GPL(enetc_pf_notify_vf_link_up); + +void enetc_pf_notify_vf_link_down(struct enetc_pf *pf) +{ + enetc_pf_notify_vf_link_status(pf, false); +} +EXPORT_SYMBOL_GPL(enetc_pf_notify_vf_link_down); diff --git a/drivers/net/ethernet/freescale/enetc/enetc_pf.h b/drivers/net/= ethernet/freescale/enetc/enetc_pf.h index 142c911f1dfc..b3ad498f91a0 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc_pf.h +++ b/drivers/net/ethernet/freescale/enetc/enetc_pf.h @@ -15,6 +15,8 @@ enum enetc_vf_flags { struct enetc_vf_state { struct mutex lock; /* Prevent concurrent access */ enum enetc_vf_flags flags; + /* Number of consecutive failures to send PF-to-VF messages */ + int msg_fail_cnt; }; =20 struct enetc_port_caps { @@ -54,6 +56,11 @@ struct enetc_pf { =20 struct enetc_port_caps caps; const struct enetc_pf_ops *ops; + + struct work_struct link_status_task; + bool sriov_enabled; + bool link_up; + u16 link_status_ms_mask; }; =20 #define phylink_to_enetc_pf(config) \ diff --git a/drivers/net/ethernet/freescale/enetc/enetc_pf_common.h b/drive= rs/net/ethernet/freescale/enetc/enetc_pf_common.h index 96a4dc63da57..bcf113efc2ef 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc_pf_common.h +++ b/drivers/net/ethernet/freescale/enetc/enetc_pf_common.h @@ -31,9 +31,24 @@ static inline u16 enetc_get_ip_revision(struct enetc_hw = *hw) =20 #if IS_ENABLED(CONFIG_PCI_IOV) int enetc_sriov_configure(struct pci_dev *pdev, int num_vfs); +void enetc_pf_send_link_status_msg(struct enetc_pf *pf); +void enetc_pf_notify_vf_link_up(struct enetc_pf *pf); +void enetc_pf_notify_vf_link_down(struct enetc_pf *pf); #else static inline int enetc_sriov_configure(struct pci_dev *pdev, int num_vfs) { return 0; } + +static inline void enetc_pf_send_link_status_msg(struct enetc_pf *pf) +{ +} + +static inline void enetc_pf_notify_vf_link_up(struct enetc_pf *pf) +{ +} + +static inline void enetc_pf_notify_vf_link_down(struct enetc_pf *pf) +{ +} #endif --=20 2.34.1 From nobody Fri Sep 25 19:15:32 2026 Received: from PA4PR04CU001.outbound.protection.outlook.com (mail-francecentralazon11013000.outbound.protection.outlook.com [40.107.162.0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 17269524AEC; Wed, 9 Sep 2026 10:35:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.162.0 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788950158; cv=fail; b=L2S94NRZgyK5A+MiyfFEVnRDUMxppLbBlzZx9KZM9l9Df65kgObPtxIeYiKYaRyU6ZSiL6Cpk0+UiZ6i+KBbIOX5m856KaoNchnTBR9XnQZN/1+6n+LOTmts1ncn8q/uYEwjsrPPEB4iaTadUQ5nKJPAAZbr5r/fnt99KgmEEQE= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788950158; c=relaxed/simple; bh=rHCeskQqnvhivkDTeR+XDHqbkGcPpY9PTpFABF9hpuk=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=GjFrKi7T42Kr7lRjId/safsuGQqK8QUhrmaUTi1tkBc7yyyEKZKTGH1UKB4fHwoWdp9QnwNmxtTxpCll+Bl8ZUQuO7RBaQC1NU4FxLhUAZWB6d6Mjh8tsb1GjjsFBVlmygSdgSJK/LbA5zHiTUklGPNH/gu4UBUNuRjCBVkd6H8= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com; spf=pass smtp.mailfrom=oss.nxp.com; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b=OtgDCUUD; arc=fail smtp.client-ip=40.107.162.0 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b="OtgDCUUD" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=W4c7X1W+/nUFqRFsg82lQqysNoN+IEBGREc/+/BzD/1AE2zZwd+xJAWQ7KSapRxGckNNZvT2Lw56cLUxUsEKTtHXzm4HAhg7YCyesJGWk3FyzAX0Jy4QDUCzXOcIk3e1ti2gVO4ZYeBDNEesZgBpoeHFCTwoxqvZXJ6aIYAK5B3pGRZlc7AiufSOKhOsJ/SeyDVIkJMTz1lV21cxYpjHr7VHYajeH4pAWXqwjBaXCjy3tr3wr1KJchv2QE4ro+LRPgFrfgy2V2OoF+H/FSvV+0O+HdmWsJO+pSaWTBFhhO0HwyWOidcNclWaWH5YzKr70irURn89vlmk2OzXZmhozg== 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=XMm5jesuroz3b+MXnm5r6mcUt6fsk6FgT21Ds9BUmKA=; b=Q/CW9U7xuiD2rfq1ODOYSwRkyJ7qT3JIg7+0I5c/HCHg3BRu6rFB8HOSZvDzGmPoUAJqkddbZf18xk/u7ips0puG0I1fJbRtC/olSJpetB+p9/QQw0djEwPSDrmHALkqc5gB9bWobdVmLfZw9tvqdR3IwSnfoPIcMX27N72TmlAL+8ADW6BSHIOf6+kxqwzjC+Uh6XNYMqJY9bBgTaWXS/qV7ltCFC7+vtXc+cB9lYCEYi++COAD403zvXE2ewR57vQp8L3wKio0NuRc3nfXqxQwPFN90zu0N72vSxW0Jm82cdEf/IvTtQJosxm2/PYl3orDwE3V4sLF6X2S0WlTtQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oss.nxp.com; dmarc=pass action=none header.from=oss.nxp.com; dkim=pass header.d=oss.nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=NXP1.onmicrosoft.com; s=selector1-NXP1-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=XMm5jesuroz3b+MXnm5r6mcUt6fsk6FgT21Ds9BUmKA=; b=OtgDCUUDZ8tEkl2ySoPKEF1cf/VMhun/IY4Za8D/53LonfDvQo6jzkmxX6sNB+SEjlRT3IgFKqtfCvWx38i3JN0wLj9aeZDQboUYtNKo/AaiqjUdvZWy8LAozuiH66qSWNYS318VhkqYBVLDgVqMdkA8+3VaFmNpRjgRYHzXyU37UJylK9Wdd6vJ+PUKiRsV9enOWONLOwOrwEoSUoS3WcTdh7DG4eW67MjH9xBN2z8NG1lXX/aGULX6Xk1Qp22KuLxPeaHlHzQFuPbIlhETnYPOve4MRaRbb4en9nWWyf7W7K/Wh8eug1hOmr9RsX6EhX2cFsbARLinrNoZBIFyAA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from VE1PR04MB7216.eurprd04.prod.outlook.com (2603:10a6:800:1b0::22) by DB8PR04MB7066.eurprd04.prod.outlook.com (2603:10a6:10:12e::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.406.8; Wed, 9 Sep 2026 10:35:53 +0000 Received: from VE1PR04MB7216.eurprd04.prod.outlook.com ([fe80::a9a5:cf83:dbe8:1f74]) by VE1PR04MB7216.eurprd04.prod.outlook.com ([fe80::a9a5:cf83:dbe8:1f74%3]) with mapi id 15.21.0406.005; Wed, 9 Sep 2026 10:35:53 +0000 From: wei.fang@oss.nxp.com To: claudiu.manoil@nxp.com, vladimir.oltean@nxp.com, xiaoning.wang@nxp.com, andrew@lunn.ch, olteanv@gmail.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, linux@armlinux.org.uk Cc: wei.fang@nxp.com, imx@lists.linux.dev, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v4 net-next 04/15] net: enetc: add link speed message support to PF driver Date: Wed, 9 Sep 2026 18:07:22 +0800 Message-Id: <20260909100733.1139689-5-wei.fang@oss.nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260909100733.1139689-1-wei.fang@oss.nxp.com> References: <20260909100733.1139689-1-wei.fang@oss.nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SI2PR06CA0008.apcprd06.prod.outlook.com (2603:1096:4:186::23) To VE1PR04MB7216.eurprd04.prod.outlook.com (2603:10a6:800:1b0::22) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VE1PR04MB7216:EE_|DB8PR04MB7066:EE_ X-MS-Office365-Filtering-Correlation-Id: fbfa9d2a-0dae-4d5c-de54-08df0e5e1f94 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|19092799006|7416014|376014|1800799024|23010399003|366016|10067099003|11063799006|56012099006|6133799003|21046099003|22082099003|18002099003|921020; X-Microsoft-Antispam-Message-Info: 4CPQc2Ipmj762I+PpMuwB4AzEFsmH4q1fzJRTJlGHcRztkfDuxU0welWSb/rSdEbrxTWVUcaO46El0477OQ8fIDafIIojso9MJIcP6FVU2OkY6/D+PG3TT8uQVaU2D8DsB2ouiDmahue9B33WD/FE+FEKmndOtw70rni/3oYb0rrBHyTVNMzYvRwBf3UpntR261AUpEbi9q5gh5760UpUf9YsNIOv+EPKmiMp8vKhq5yJYsZz5VMn6UprR1/0go2jnzbn2a7jWyiLCzIZ4Se+PvO6YlBXFfWZR9sinkvAaJ+8OVPGIJegFNvQWkemfoEZgarThw5gqFMRJagKaTLwiylbgr0YVivXIU66fZ+BZNKMw27OTWkxQily5P4poMNbem41Azjwbht6xK1UD0O/nbzQSuX1vb2wHm3Rzt+/iGB6wbVmJsNIUp4PBf0KqXFmHV6QvGmCDJbgxUTNyEeJqKDZ2Z572uPkYY1Sx5r8f9ZrvVKdRHsAAVSsJP8IYIr65BiY+XgHsLxAYMGfClxSd001jbv2TDNdxg8GR+4FatH/fDOdM46cpGQgLDESK23ED8tqJ2iQ1EEYRC0HhNuVDBail/ZDgABHqgwsWjboXftGoLuXsNIYriOExJkidgylAN+QS1+Vgq1a+rIaivJBy9+0sv4iZSAlAcq5p8l4O8yjcsSk5URA9kwmwvJYszZ5LRxtkjQjP8SDEeZtQ6gXQ== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VE1PR04MB7216.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(19092799006)(7416014)(376014)(1800799024)(23010399003)(366016)(10067099003)(11063799006)(56012099006)(6133799003)(21046099003)(22082099003)(18002099003)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?ENtVnIL3i2hkKu845IDnh5B3Kg/AXB5fuO5/uShaVHQBZDN2SwNy1zNnPAYp?= =?us-ascii?Q?4ddu3RgG3YGqUdl+iInAke7Y5CHFrCRMWhfSHgSdDI9gIMLmqhv+EEyrOpIT?= =?us-ascii?Q?zYTPiN8ifI6GLyGnombgQIoJUHG5GYWJBgk3e3WTv7dOB2WJ9vZ7V1tIVKFO?= =?us-ascii?Q?hZtwPqAbfDtfeMOsxC2QjcA7MwKrxQLHzrDly1lKZSqpNThox4JcMVY+ENjX?= =?us-ascii?Q?4kxfPGrWpxCQjv/DOLKhPEqxsbtbrHBOtHv5O+pGLlUUusmbxLVkMloW1PAg?= =?us-ascii?Q?YtPfBdzjyvSbsIZpL4BPfdF0Lls8DatSVCwxKPRgajWo65YV2bIV7jBNpTFt?= =?us-ascii?Q?spm6OROOmnqRPx6KQCZuQHhl6naVCZYax9i61y0XBWF/LteL9cIEaA1tTWH7?= =?us-ascii?Q?iZEqO0JegbgMKhjvkX4aXpBZCyGPg8Q8aTNbcKQkQzHbMU9B6xCbQYpHEVpz?= =?us-ascii?Q?+wpxBkXObWDQF9UF3zV6CjL6XaNcuwoTLIeNpMBFiF57dsQkyvCcDZLlF28q?= =?us-ascii?Q?6oO1EF178tU4VlERqTsyCa/Ptiy6gNiQAqq76SDDPyU9v1pZR9GH9VR7u7Q9?= =?us-ascii?Q?nNf0KPE6FzyAt0+ItXO3CpsX9Rp92bjw58fMIYjHwNs/keHVy/I2iECuUyQT?= =?us-ascii?Q?XFqtvB76Mu+8ExvUa1VFfD06Jww5bqZUbR0jb246iGRQXf3nQJPu+CnRWkpu?= =?us-ascii?Q?kUcSWyrOsLRuL9ITQ0OKkHSi9QqRvg1VuSsMgVSdw+k4w//bs+SOmuyRdfAk?= =?us-ascii?Q?3PjHyV2rGq4xzcJw91wEP5icKcjQVgB5BXq1Vpp3PEgKZkYKs37lg2P7aqk2?= =?us-ascii?Q?O5ahwbPDIsgp0ExcWKnhCwWjL9meJGE9g+LCveSJ44E4bKN0nPwm9WCXOKf0?= =?us-ascii?Q?RR6qOZNTkHxt6RKWR++kfcG9xLl/2OVYejXJCtLAAZ/u0ECTF72f45BBKD1M?= =?us-ascii?Q?g7XLa9A/zT+R0/ctT+vma1iq73MQcxzBa1iFCSzNBqO/uBvnUOM8DeqGKUFC?= =?us-ascii?Q?TctQS9/eUgR9NsiL6KToOyVGgLBoRWQVw4BxMFaBZAsQbIghrT5HSS7HvZf+?= =?us-ascii?Q?dRr4NwKwhSYjU6fiaGOfplQHzPd4uh6LSt26/Gi6zixoohR7ikgV2VE3dQNm?= =?us-ascii?Q?OjJ3FPh7URUXvIgJH8hgH1pHgpE6zqnyrrtKzOx0w48FJfY5MmXn5pXm/5ML?= =?us-ascii?Q?AQuVuAhCfflfP45NWGdJoTafob49km2rwMPLPaHEfrqmJodVxf98LRKR7eN7?= =?us-ascii?Q?UKDStJNCXNEvxE3yOdLEN0RAvYl/ROX/cP10aqOo6jk6SvfiKFLfvc2gtwQn?= =?us-ascii?Q?0DptN8Aa69X3+48ZQXZuxcztiyTta7GDa1oyQSiBeNL7+BIk9bD/yO7FtK35?= =?us-ascii?Q?WcnNvMx4xykhhYX8qz4V77S9sEwssp1F6GBGxym/W/PJagtem2vM9NFuE5hB?= =?us-ascii?Q?sN/6yX7DB6szdHXR68b6XiWma7BQDlTjf0Hx0uDpQAvbJ4gQSiDD9rZoi9KY?= =?us-ascii?Q?jw6gjaMA+Mt8Gu1zFZz3xIaBbrr2ctvh79XcIympeREBvFEksQD+J3gTPJA4?= =?us-ascii?Q?Wniz0lWlJG6nYBglzojkwgxN1sRkJGRQuYGhgNLjXr9Vtzvlk2afhKq9MxTq?= =?us-ascii?Q?eWG2uUB6qIuQzkoMg9NdjC2wacU+6XkVQVs/xW6EreVD+tQ73xGbVOgV+ERD?= =?us-ascii?Q?oifYhLUOk23VWikYJDY1Y+8Hlym5de0iIuGSlAvkA9kYKns7JVpj0tzRcy+F?= =?us-ascii?Q?pVjjcuA6SJQ7l748iLg5H5JKmZtrJuMRMGOvBCprVj9P3dSsVCnn?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: fbfa9d2a-0dae-4d5c-de54-08df0e5e1f94 X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB7216.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Sep 2026 10:35:53.2206 (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: KQUUSA4a2+XkYg4+VsElVIf4cLUOiIT0CWFKzs6KTCuanzhG5XbhbHqB1qlug8XHsc7hnZA6q2/jAl5KEomNr3lwcYIpaOSm/WuknmtG0M4vtCdIRsqvYP9/vSWRhsNw X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB8PR04MB7066 Content-Type: text/plain; charset="utf-8" From: Wei Fang When a VF is driven by DPDK, its user space application needs accurate link speed information to make correct forwarding and configuration decisions. Add link speed message support so the PF replies with the current link speed when it receives a get-link-speed message from a VF. Use a new message class 0x81 (ENETC_MSG_CLASS_ID_LINK_SPEED). The PSI-to-VSI message is 16 bits: the high 8 bits are the class ID and the low 8 bits are the speed code, so up to 255 speed values are supported (ENETC_MSG_SPEED_MAX =3D 0xff). Instead of enumerating every speed above 5Gbps, use a formula so future high speeds need no enum or switch changes: speed_code =3D (link_speed - 5000) / 1000 + ENETC_MSG_SPEED_5G The speed is read via phylink_ethtool_ksettings_get() rather than the speed passed to the mac_link_up() callback. When the MAC has a PCS layer, mac_link_up() reports the PCS link speed, which may differ from the external PHY link speed; phylink_ethtool_ksettings_get() returns the actual external link speed. Unlike the link status message (class 0x80), the get-link-speed message is only permitted for trusted VFs. Reading the speed requires the PF to take rtnl_lock(), so an untrusted VF spamming this query could cause rtnl_lock contention and starve routine network configuration on the host. An untrusted VF therefore receives a permission-deny response; a VF can be marked trusted via 'ip link set vf N trust on'. Note that link speed change notification is not supported yet. Signed-off-by: Wei Fang --- .../ethernet/freescale/enetc/enetc_mailbox.h | 41 +++++++++ .../net/ethernet/freescale/enetc/enetc_msg.c | 90 +++++++++++++++++++ 2 files changed, 131 insertions(+) diff --git a/drivers/net/ethernet/freescale/enetc/enetc_mailbox.h b/drivers= /net/ethernet/freescale/enetc/enetc_mailbox.h index 846998f07989..832d2f6ddcd8 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc_mailbox.h +++ b/drivers/net/ethernet/freescale/enetc/enetc_mailbox.h @@ -91,6 +91,7 @@ * The class code for the following messages is 8-bit. * 1. Get IP revision messages * 2. Link status messages + * 3. Link speed messages */ #define ENETC_PF_MSG_CLASS_CODE_U8 GENMASK(7, 0) #define ENETC_PF_MSG_CLASS_ID GENMASK(15, 8) @@ -112,6 +113,7 @@ enum enetc_msg_class_id { /* Common Class ID for PSI-to-VSI and VSI-to-PSI messages */ ENETC_MSG_CLASS_ID_MAC_FILTER =3D 0x20, ENETC_MSG_CLASS_ID_LINK_STATUS =3D 0x80, + ENETC_MSG_CLASS_ID_LINK_SPEED =3D 0x81, ENETC_MSG_CLASS_ID_IP_REVISION =3D 0xf0, }; =20 @@ -129,6 +131,13 @@ enum enetc_msg_link_status_cmd_id { ENETC_MSG_UNREGISTER_LINK_CHANGE_NOTIFIER, }; =20 +enum enetc_msg_link_speed_cmd_id { + ENETC_MSG_GET_CURRENT_LINK_SPEED, + /* The following command IDs are not currently supported */ + ENETC_MSG_REGISTER_SPEED_CHANGE_NOTIFIER, + ENETC_MSG_UNREGISTER_SPEED_CHANGE_NOTIFIER, +}; + /* Class-specific error return codes of MAC filter */ enum enetc_mac_filter_class_code { ENETC_MF_CLASS_CODE_INVALID_MAC, @@ -138,6 +147,28 @@ enum enetc_mac_filter_class_code { #define ENETC_CLASS_CODE_LINK_DOWN BIT(0) #define ENETC_CLASS_CODE_TX_PAUSE_EN BIT(1) =20 +/* Class-specific notifications/codes of link speed */ +enum enetc_link_speed_class_code { + ENETC_MSG_SPEED_UNKNOWN, + ENETC_MSG_SPEED_10M_HD, + ENETC_MSG_SPEED_10M_FD, + ENETC_MSG_SPEED_100M_HD, + ENETC_MSG_SPEED_100M_FD, + ENETC_MSG_SPEED_1000M, + ENETC_MSG_SPEED_2500M, + ENETC_MSG_SPEED_5G, + /* Do not add enumeration values for any speed greater than + * 5Gbps. For any speed greater than 5Gbps, its speed class + * code should follow the formula below. + * + * SPEED =3D (link_speed - 5000) / 1000 + ENETC_MSG_SPEED_5G + * + * The unit of link_speed should be Mbps, the max SPEED + * should <=3D ENETC_MSG_SPEED_MAX. + */ + ENETC_MSG_SPEED_MAX =3D 0xff, +}; + struct enetc_msg_swbd { void *vaddr; dma_addr_t dma; @@ -181,6 +212,16 @@ struct enetc_msg_mac_exact_filter { * cmd_id 0x0: get the current link status * cmd_id 0x1: register link status change notification * cmd_id 0x2: unregister link status change notification + * + * Link speed message, class_id 0x81. + * cmd_id 0x0: get the current link speed. Unlike the link status + * query (class 0x80), this query is only permitted for trusted VFs; + * an untrusted VF receives a permission-deny response. This is + * because the PF must take rtnl_lock() to read the link speed, so + * restricting it to trusted VFs avoids rtnl_lock contention on the + * host from a misbehaving VF. + * cmd_id 0x1: register link speed change notification, not supported yet + * cmd_id 0x2: unregister link speed change notification, not supported yet */ struct enetc_msg_generic { struct enetc_msg_header hdr; diff --git a/drivers/net/ethernet/freescale/enetc/enetc_msg.c b/drivers/net= /ethernet/freescale/enetc/enetc_msg.c index 79dbaf72fcff..08a9ffdd3eb0 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc_msg.c +++ b/drivers/net/ethernet/freescale/enetc/enetc_msg.c @@ -230,6 +230,93 @@ static u16 enetc_msg_handle_link_status(struct enetc_p= f *pf, int vf_id, return 0; } =20 +static u16 enetc_build_link_speed_msg(int speed, int duplex) +{ + u32 speed_code =3D ENETC_MSG_SPEED_UNKNOWN; + + switch (speed) { + case SPEED_10: + if (duplex =3D=3D DUPLEX_HALF) + speed_code =3D ENETC_MSG_SPEED_10M_HD; + else if (duplex =3D=3D DUPLEX_FULL) + speed_code =3D ENETC_MSG_SPEED_10M_FD; + break; + case SPEED_100: + if (duplex =3D=3D DUPLEX_HALF) + speed_code =3D ENETC_MSG_SPEED_100M_HD; + else if (duplex =3D=3D DUPLEX_FULL) + speed_code =3D ENETC_MSG_SPEED_100M_FD; + break; + case SPEED_1000: + speed_code =3D ENETC_MSG_SPEED_1000M; + break; + case SPEED_2500: + speed_code =3D ENETC_MSG_SPEED_2500M; + break; + case SPEED_5000: + speed_code =3D ENETC_MSG_SPEED_5G; + break; + default: + if (speed < SPEED_5000) + break; + + speed_code =3D (speed - SPEED_5000) / SPEED_1000 + + ENETC_MSG_SPEED_5G; + if (speed_code > ENETC_MSG_SPEED_MAX) + speed_code =3D ENETC_MSG_SPEED_UNKNOWN; + } + + return FIELD_PREP(ENETC_PF_MSG_CLASS_ID, + ENETC_MSG_CLASS_ID_LINK_SPEED) | + FIELD_PREP(ENETC_PF_MSG_CLASS_CODE_U8, speed_code); +} + +static u16 enetc_msg_get_link_speed(struct enetc_pf *pf, int vf_id) +{ + struct enetc_ndev_priv *priv =3D netdev_priv(pf->si->ndev); + struct enetc_vf_state *vf_state =3D &pf->vf_state[vf_id]; + struct ethtool_link_ksettings link_info =3D {}; + + /* A malicious or malfunctioning VM could potentially spam these + * messages in a tight loop causing global rtnl_lock contention, + * which may severely starve other processes on the host that + * require rtnl_lock for routine network configuration, resulting + * in a system-wide control-plane denial of service. Therefore, + * we expect the VF query for link speed to be trusted. There's no + * need to consider the transition from trusted to untrusted here, + * as this won't cause rtnl_lock() to be called frequently. + */ + mutex_lock(&vf_state->lock); + if (!(vf_state->flags & ENETC_VF_FLAG_TRUSTED)) { + mutex_unlock(&vf_state->lock); + + return ENETC_PF_MSG_PERM_DENY; + } + mutex_unlock(&vf_state->lock); + + rtnl_lock(); + phylink_ethtool_ksettings_get(priv->phylink, &link_info); + rtnl_unlock(); + + return enetc_build_link_speed_msg(link_info.base.speed, + link_info.base.duplex); +} + +static u16 enetc_msg_handle_link_speed(struct enetc_pf *pf, int vf_id, + void *vf_msg) +{ + struct enetc_msg_header *msg_hdr =3D vf_msg; + + switch (msg_hdr->cmd_id) { + case ENETC_MSG_GET_CURRENT_LINK_SPEED: + return enetc_msg_get_link_speed(pf, vf_id); + case ENETC_MSG_REGISTER_SPEED_CHANGE_NOTIFIER: + case ENETC_MSG_UNREGISTER_SPEED_CHANGE_NOTIFIER: + default: + return ENETC_PF_MSG_NOTSUPP; + } +} + /* If *pf_msg is set to 0, it means that PF has responded to VF in * enetc_msg_handle_rxmsg() through enetc_pf_reply_msg(), which also * clears the corresponding VF MR bit in PSIIDR. @@ -312,6 +399,9 @@ static void enetc_msg_handle_rxmsg(struct enetc_pf *pf,= int vf_id, case ENETC_MSG_CLASS_ID_LINK_STATUS: *pf_msg =3D enetc_msg_handle_link_status(pf, vf_id, msg); break; + case ENETC_MSG_CLASS_ID_LINK_SPEED: + *pf_msg =3D enetc_msg_handle_link_speed(pf, vf_id, msg); + break; default: dev_err_ratelimited(dev, "Unsupported message class ID: 0x%x\n", --=20 2.34.1 From nobody Fri Sep 25 19:15:32 2026 Received: from DU2PR03CU002.outbound.protection.outlook.com (mail-northeuropeazon11011029.outbound.protection.outlook.com [52.101.65.29]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 90B68525A62; Wed, 9 Sep 2026 10:36:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.65.29 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788950166; cv=fail; b=MaUC3gB0VhabjaoT4D4fVSCbGAgRv0e5RJbm/DjlOuPI68P/ZmQSUFvAQOGNS3iDUs0pcbFF93K7/WHbYsPgirMUXVLprgfbqoHWOX14ZHUuI2aNIlQMW6PI99j/fsbHIJsjeRJMHfpFMFY69x/fssmWeYlhivoQhH8E4Q1jC70= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788950166; c=relaxed/simple; bh=v/DZdvrQjwppZrE+dfxbe9RxBjQltuUWnbbE2qWsBP0=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=blNuAD/Jd7OX7EHoAPTm3ey0cx1bm1u80iZpr/wPTyWVIIgbDanEi9J75odeH8Hjb90JG0kcCb5R4P3fxT8BBWPcBVblmNYV4jRgEQ1uLoAXKd4HZBBEFecKoRQNEkzkkM4GMZ+XfXblhYMGNT2eIXB9JCWYYTGIJ7hi0/419Fg= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com; spf=pass smtp.mailfrom=oss.nxp.com; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b=q08cOl5Y; arc=fail smtp.client-ip=52.101.65.29 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b="q08cOl5Y" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=osNlMtWlquVBjctphfk/gzpZeoGhNb7yljoTixgfBCyo5++HUho+Kp9bUYtqA4A/zrKWnji6RbemgmXm7+2NVxjdGnfgHNY+94f2v/M5kkTMImYFGF7MnvWRXUJ+H2+dvG9qcLo+TD3K2FLKmpqkL7J7sP71JP109kxI36/wet6Is5Kthkee71crmOWFUk5cY/LTcG3x0KSeflo4yJugLDgZSoCIvDceu37XtRs1WPbcCOeOuknFWzZifFPZACgFj1kJxxkMH1d1kzLax3w6t8+NaNPp2kb3Gpuun0gtgBiH23lrXEWa9sasHR25loWeMNgaibqPvFCAHkK7RM46eA== 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=HdjuMILEfV4fU1X8z5XqdT+77S0taxC6Wssrr4zj01U=; b=h7zmX5+d9kJiWLR9tM4WZDJT/SSmnByFY3OwvXPUjb9aS5ipad62xm6I4ZcQyeWFqj/IkD83Trh67PotTrYDyDe9BiuPgnviBeooSsNR47t4dRL78QX4GGz77vuAaT2IYCsEIynGSeePNI9EvA5dHB/jy8XdC9fgUEjV8TGM8UpL2jYPkhgc3CdB4nFUiHm/2EauWYYjCM5uMpriSIbS0EDiYXSVbU1kTL3r8xAccI7noHWItPO2ymksuc4h4UBZnyUe6W8XTJZBWO+8NPpgyrI+/Wd2wiKmpkRaHVsdyttMVBLbHlrDAqPrUPH6801sl6G66kasvEIf9CZaGJxCFw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oss.nxp.com; dmarc=pass action=none header.from=oss.nxp.com; dkim=pass header.d=oss.nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=NXP1.onmicrosoft.com; s=selector1-NXP1-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=HdjuMILEfV4fU1X8z5XqdT+77S0taxC6Wssrr4zj01U=; b=q08cOl5Ycp6Rl527zugclwAX3k9nZWppGRV6UTbOpi8cChmFqTPnWeJry+Y123ThZzyNFooTvoLUH2uP3lsQEyvaEPY0W6ZKtm13vSDE4WHD1LW2fT7bUDQzt2sORL38q2bZCcKTfRPgTrsUz9hANT19IJKW9XZWBWnUBBCmRA+BQIStVqUWypc48nQLVq5SKzY4eeP6B3fsHbEmm0FoCkcEChGz92MjDzEiN6RA2uJ7o31/8EBtDg0Y4j9UaXMSj+JZeSHwElSCZC8OPwME/Nptk+imKtPmtJgxM1glrAFIrBT4AkNGkFKbeDw70E/G5tbGwUPRWcnN0XlPSIpYzg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from VE1PR04MB7216.eurprd04.prod.outlook.com (2603:10a6:800:1b0::22) by DB8PR04MB7066.eurprd04.prod.outlook.com (2603:10a6:10:12e::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.406.8; Wed, 9 Sep 2026 10:36:00 +0000 Received: from VE1PR04MB7216.eurprd04.prod.outlook.com ([fe80::a9a5:cf83:dbe8:1f74]) by VE1PR04MB7216.eurprd04.prod.outlook.com ([fe80::a9a5:cf83:dbe8:1f74%3]) with mapi id 15.21.0406.005; Wed, 9 Sep 2026 10:35:59 +0000 From: wei.fang@oss.nxp.com To: claudiu.manoil@nxp.com, vladimir.oltean@nxp.com, xiaoning.wang@nxp.com, andrew@lunn.ch, olteanv@gmail.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, linux@armlinux.org.uk Cc: wei.fang@nxp.com, imx@lists.linux.dev, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v4 net-next 05/15] net: enetc: use enetc_set_si_hw_addr() to set VF MAC address Date: Wed, 9 Sep 2026 18:07:23 +0800 Message-Id: <20260909100733.1139689-6-wei.fang@oss.nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260909100733.1139689-1-wei.fang@oss.nxp.com> References: <20260909100733.1139689-1-wei.fang@oss.nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: PN4P287CA0066.INDP287.PROD.OUTLOOK.COM (2603:1096:c01:267::7) To VE1PR04MB7216.eurprd04.prod.outlook.com (2603:10a6:800:1b0::22) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VE1PR04MB7216:EE_|DB8PR04MB7066:EE_ X-MS-Office365-Filtering-Correlation-Id: 9e8aeaa1-9417-446b-0198-08df0e5e23a2 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|19092799006|7416014|376014|1800799024|23010399003|366016|10067099003|11063799006|56012099006|6133799003|22082099003|18002099003|921020; X-Microsoft-Antispam-Message-Info: Ew7a2pT06ky419bIRlZnDCaDkTGIZBZ3LBjmkyV9c0lXS3tAjkYvlkJSW3Oqt4cecrTfduqLZqCvDh9FF1RxBkMqpZ9nspzGgcdB/qr7+9lLCAJMw/mij7I+FVF4W2wqQoYbj2XSECBEZfaYU9+ryEmpoSHnrudW2ZCz/D3RKJCQjjHYxuxiZsqN85aRMDxyzSixfEn68A98gPTwWARS/yCx3caJMJF6C3G/jdzLC0pQESA4kihtnUKkfZ0YD5Qe5YVDLW+EkJV8TELwE8RYxNWlI/ZCDE2kAe9X6UZG/UzO7sF8N16K0l4bKm4cTKHtAV4wkq8hsVpGLTup5pNcnTSCsX6fgHwfOGFr9I8EVFYXmb5E9SD/rULEru/Ng+Xm7L78cWzAsrxS4kdNdTyqr+KykfFzn5Xf9GLJQ++G3rdbByvflgtkamOEOBRmn9cwmlS8ITd9eaR46VyPqUeRwrwjNfu5RT/JAhgNI/XIeXtBKRnO4QaM6DkfqB5JPxhe7MvQ2NoMPtA1NmQRbUFotMZ6cz0F8Og246hKGNjMKm66prg8hiUa6GHpMZWA5+Hh/vosHNLsLhuNjgnUtQOmnVNGaRbSz6VVGFgBZpRp+9zyUMS31i7/EQXMWDybwvK/yahJhpk+AnecIGSQBI1L2wlsztAmRrNG7cE1GoK7gzh9Q4/+bIpFti4WglChlvz7brBck7z/pm4KLembA0+0ng== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VE1PR04MB7216.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(19092799006)(7416014)(376014)(1800799024)(23010399003)(366016)(10067099003)(11063799006)(56012099006)(6133799003)(22082099003)(18002099003)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?229iYEByOzBaUjXUaq7uWnHdJJI9I01/yCoCfBjChDQiDFwch8BiabQLTUDB?= =?us-ascii?Q?hyvGUoSuzMD0e2qhlL7SVeHPT8ggxh9V7L470cnBWC8h8ONDJX9SsYf4j9Vb?= =?us-ascii?Q?uWEy8vNocMjPj+RNcVVqRiPLasjZkssfHpPVNcVD+hbIYLChlyGKBd3j3CbM?= =?us-ascii?Q?ldb+L8CeDqkOx7cdNfkmrG+U6swKpn5P63ecRVeNppY6hZ4xuuF153FQG89I?= =?us-ascii?Q?N37hVCXeqWnotTL/c0izpGe6NbtNgTIqpqVXKsta89D8wIHHwLLYYYrXkYQH?= =?us-ascii?Q?9DsiAWr17wiiQ2nX0Iqe2Ltr1R91VjAeC0J92UvqYV78vgiGAl1dM9ID4+06?= =?us-ascii?Q?YBlwf9DNbC6nHVEk21tewu7pIik+OB9OhfPHiO3CB/YykktXUdTRSS2r22yD?= =?us-ascii?Q?Wivh002shWfOqBMsABOZVZMUN8GxoUIL/Iu5/wUb2rf9UjEZOJ7NtHwE3crj?= =?us-ascii?Q?y4XGTP2I2gCZQprH3FAcsGuxJCWBCaELSmRzp6l8i5KeeENFqkKktt8fsESX?= =?us-ascii?Q?4jwid2ZjQe0rIWOY3KQ7Hrn5HKAFJ7gZgo+FACixzNL6/VjqlhNiDqPOQYu6?= =?us-ascii?Q?jqvmP7NKKhGcoGs2zxZ5pkQuLgzj2+J5Di1SiTKEeTxAxgGE/RR7+Wxb6aTc?= =?us-ascii?Q?6CipkgZKx+IQgpfab9DUZJ/upMF5WGS/3yioL/dxefsR0HVgRnucMiuX0Dd9?= =?us-ascii?Q?xE1mcwhjQc3yyRaxrCV8dCvBqs3i9FpR3RB/aT2NxTsFAmL7pmubBejrZBg6?= =?us-ascii?Q?pdAy3PDJsDFFl065AMUUWOmkTOQKJpgjYNpWpazZUIFQqvTW0TfJt3ysnz5U?= =?us-ascii?Q?im1B+3Lu4pE3aMZthN0q6AI99oPlYYXuGzyk4gdWmupAdu6CRoV4dVRU9vAD?= =?us-ascii?Q?XJ8emfdxQiBwEO8EP07Pt3kOwgY6IS43iuhCBnHXAikEzT5qThO32G3kgjPf?= =?us-ascii?Q?D+cwN2q4y7DAEEzH+aCxY0Zq5fn+YA8yU4VGZy2Wi3SPb449beRdaUybodu8?= =?us-ascii?Q?qpBp4G8EuZHj1NXI0SQBntnRRL8RlVJhdfRCLIvfg8kQgRxA3zZC3IYiUmyW?= =?us-ascii?Q?+2wB6Q8o0YitgDv1uZtyn6p5XDnE/Mdyjm9udBWuSUAtMCuaSkuf0spvmPwJ?= =?us-ascii?Q?zD/kwi7Wg88qNbDhn5rXIwkOvNaKgInmIpr6izUwS0rUb7kzCHE+DDLzGrWH?= =?us-ascii?Q?sfVgwIvS5e87m9GBvSajxh2uyoe7aYwvd6j1EfCGJpZSHldePEzHsGiKksjN?= =?us-ascii?Q?MbaK3Ao2uZvzBxQ4xbUbCRQfeJSIYWcSSLQLfiEaleO/Hr5FMxaXHZ91kkAr?= =?us-ascii?Q?HqL+/0PgcqHVdH2BH5w6/a494OexrnK0NIwYeVqRvsp0bWARq2MgKkY4caSh?= =?us-ascii?Q?PO83OZk0SE1s1z0kPW2MQ6ZxMzPwR2xk8e8YyxkUsF5r1ejnPZdaRSaKp3R6?= =?us-ascii?Q?lm5H1yZxkcHhhxACX6wsFDe9Clmq8mMcAjvneFdkXHJPHxCuELYYh38YG9fE?= =?us-ascii?Q?hmDPYYUL/pSQ/eGnNBnlMORkI0cf48kTYJXBME1FSoKBWHxlVW9AMeZDUygM?= =?us-ascii?Q?yR/kPPXUt9L3GzNF+nflpBZUpND6PwMxpwH6iBmY5aBYeYD8DIuj4wogDBrq?= =?us-ascii?Q?y3tQLIuaMFBmLzkSh6WlS1ZKQuLRJfedgrEt4E8K8DGktygnagHBjLbNQhsG?= =?us-ascii?Q?6gmJOS0xXFAn92IvU2aQUlWJnR6ObkFhBtTObnidJ7OKTYxO/qaTyXGb5+Ap?= =?us-ascii?Q?uL1Z+6EDamJSfZmUqfAahloZosUaKTnsSnQEGp8zJdXcLu7hRn2O?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9e8aeaa1-9417-446b-0198-08df0e5e23a2 X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB7216.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Sep 2026 10:35:59.8604 (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: MMivceoFqxDaBhCAPWNJDqF+n7Y83H4TuluMq4TwOFGnF6esSZ+LXUL66y9eLvLrUpikkn4i5EqIboKJ9NJsABa1m0JbX+6vPd/kQMtlL9AkbwgXq6BfFsV4FwpOz1Ks X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB8PR04MB7066 Content-Type: text/plain; charset="utf-8" From: Wei Fang Prepare for moving enetc_pf_set_vf_mac() into the enetc-pf-common driver by replacing enetc_pf_set_primary_mac_addr() with enetc_set_si_hw_addr(). This makes the VF primary MAC configuration path generic and allows future enetc v4 PF driver to reuse the same interface. Signed-off-by: Wei Fang --- drivers/net/ethernet/freescale/enetc/enetc_pf.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/net/ethernet/freescale/enetc/enetc_pf.c b/drivers/net/= ethernet/freescale/enetc/enetc_pf.c index a7bf4bfc25b7..b74d965e403e 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc_pf.c +++ b/drivers/net/ethernet/freescale/enetc/enetc_pf.c @@ -207,7 +207,7 @@ static int enetc_pf_set_vf_mac(struct net_device *ndev,= int vf, u8 *mac) =20 mutex_lock(&vf_state->lock); vf_state->flags |=3D ENETC_VF_FLAG_PF_SET_MAC; - enetc_pf_set_primary_mac_addr(&priv->si->hw, vf + 1, mac); + enetc_set_si_hw_addr(pf, vf + 1, mac); mutex_unlock(&vf_state->lock); =20 return 0; --=20 2.34.1 From nobody Fri Sep 25 19:15:32 2026 Received: from OSPPR02CU001.outbound.protection.outlook.com (mail-norwayeastazon11013053.outbound.protection.outlook.com [40.107.159.53]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 503B65293E5; Wed, 9 Sep 2026 10:36:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.159.53 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788950172; cv=fail; b=R2HLe9sMUCbKhBZuJtPJqoXAliNUY8S+oVaY92iVCJPRujVccfZyG23O9eJsSLoqdAeoW2LVmsgCAKERlFYC9jYrAUszTG4qB5DZkZMxn4GyIcqnMEo3QkiAXOGjyssRgZlgqAkLrnDhfAHVNRZBurTGzIPV8ow1tsC6sejesl4= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788950172; c=relaxed/simple; bh=7iHuAVpjM+dwN+n2zkdM+UiMrYeuX2f9m+gGdNMJ8Mo=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=Wr8RNTS7ipBK5c2l4xtRyCA22Mc5I0GLmkOuSlmvoj+dTk19U+A12HdE44coh8RtE7Bzbw7UT4bl5a3LnZ9kV5t2FEUGMzPJlcjxveSVPyiVRdY1aHtzdags5ZaYWeiFMdmJqzh6uOoPpIoqY9xYRNHNxxQVge6ktXQMatciLqc= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com; spf=pass smtp.mailfrom=oss.nxp.com; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b=F5EacGNG; arc=fail smtp.client-ip=40.107.159.53 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b="F5EacGNG" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=A4KgZlHHtGKvzGF+3auDCrcDqiAO8SE0lby0kLdGfmr/Z8RG385+CFbfb5cXGDbMyGPRz3+ZMQ29cq0xT0CTuNf069/kJX4RT4HBbipWGqWF8rPlCbdNVAbvEQsSGkxLydUYGsanwKeL2f3I/QMwlf01km7ezJBvVgNMyahH4IkVBBYA1XaXqOUnxKitdgG6MrydS/7Qgd4qDjjOPijaKYyGV1pAhSvtUuGlwHAsyk0Fjfw2zGJdZv//cWC3Kt4tDF69+Q2HstkQmEriYIOsrvovk54PB/ppjyr3bG4D3m0slKBxtV8MZstaYLbDjG1/oLQwn07DUei6QHzld4XoEQ== 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=roCublq3HnL0M0UL+dcBUEWjkvVLsBMDK0yXTH6Ca7g=; b=Okge37NT0nYAbmMZoaBaFb3bGnO3X5DHoyZZmOrPk3qW2IY5a3xzz6n5O91Vt7gMFCiLrxVm1hE4q8hyKKw5frdfvVp/nv6JlXnA5uhQfSKCM7zrTksIznVsZgu4YtdadCBmELrMuCFLAgBPctvUeJ/ARZ9kDd+IKQF9k0rSapqjGTMw+mvINQp2A8SVy3tK3evlgSqMGdcP75di5EyHYqpUmskhRi+nEu8dRv3dPo4/ItW1bxZSqtrhqtrpUvJPltMdfWC1hDXqccmx1rlUPsMFOZorgXHXr070/CJxDfXFlkElvS5DfebUuTkSiOCO3FGLUR+NpDz2Bu54Qx0bNQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oss.nxp.com; dmarc=pass action=none header.from=oss.nxp.com; dkim=pass header.d=oss.nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=NXP1.onmicrosoft.com; s=selector1-NXP1-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=roCublq3HnL0M0UL+dcBUEWjkvVLsBMDK0yXTH6Ca7g=; b=F5EacGNGLTdpPHbvlbn1f/ho+XDDNIZAvjDYKFVvKTQZT1iZiHDYyz2C63+8pd7L4+Qa542nH4jgghNv2RJEn64mdoZHdf2V5tARz7zGPO0VlMFUGx/HBW+zrrPIm0shmz8TQ5+A1MSc9eQ7WwWkHVeglvwsD+b8cJzcv1ZWPk+O2FGDx74RbVTpk0gPdDAQoiM4dSlaPfcC4FKwZYxcD4J//V+0QEqQHe6VHrTShDdo5NmP5l3MKbr2QseifP5drR6SRXqyW79zn9Xr8IpclLEL7jsWgPceT3IEFxZMkDHoRzOJXJ4yQutkBI3fJIXzVvrKKLCLWuUWCp28dhLp/A== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from VE1PR04MB7216.eurprd04.prod.outlook.com (2603:10a6:800:1b0::22) by DB8PR04MB7066.eurprd04.prod.outlook.com (2603:10a6:10:12e::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.406.8; Wed, 9 Sep 2026 10:36:06 +0000 Received: from VE1PR04MB7216.eurprd04.prod.outlook.com ([fe80::a9a5:cf83:dbe8:1f74]) by VE1PR04MB7216.eurprd04.prod.outlook.com ([fe80::a9a5:cf83:dbe8:1f74%3]) with mapi id 15.21.0406.005; Wed, 9 Sep 2026 10:36:06 +0000 From: wei.fang@oss.nxp.com To: claudiu.manoil@nxp.com, vladimir.oltean@nxp.com, xiaoning.wang@nxp.com, andrew@lunn.ch, olteanv@gmail.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, linux@armlinux.org.uk Cc: wei.fang@nxp.com, imx@lists.linux.dev, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v4 net-next 06/15] net: enetc: relocate enetc_pf_set_vf_mac() for common PF support Date: Wed, 9 Sep 2026 18:07:24 +0800 Message-Id: <20260909100733.1139689-7-wei.fang@oss.nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260909100733.1139689-1-wei.fang@oss.nxp.com> References: <20260909100733.1139689-1-wei.fang@oss.nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MA1PR01CA0172.INDPRD01.PROD.OUTLOOK.COM (2603:1096:a01:d::16) To VE1PR04MB7216.eurprd04.prod.outlook.com (2603:10a6:800:1b0::22) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VE1PR04MB7216:EE_|DB8PR04MB7066:EE_ X-MS-Office365-Filtering-Correlation-Id: 6b91304a-b395-4854-baad-08df0e5e27c2 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|19092799006|7416014|376014|1800799024|23010399003|366016|10067099003|11063799006|56012099006|22082099003|18002099003|921020; X-Microsoft-Antispam-Message-Info: t+FR4Z3bQ/D3+IpUek7QWR1VRhqk7bwwqaHix9cWVdYlU6nmvv2w59mzMKUc49VcEcbQdPLD20cYCrSbXhITkK3xk+bcdo7zBBhQs01Zymy36TrDtfwfPXP1Tz+T7rqOx0zwcE8pKhdbZLaGnLnSigx6UjHQQojrgK02MwKW309tVyeaqpy/3+KwgM+NWpOj+5DqFYwXz5wAcbchKEzdnawMM9/C4LOjqFW1JvYhUhVDHGHuP+zY29xNNoy+fkgocQ9skDsBcFilTv21Dcd36/iiwJJ+2xW2TPvCZ382ZYBf0ELF2dTIBsBnAFcZcw9Zg7pBtx09s3Z56PxZQ1ouobCPw3SDh/edwyqdf1SKLiez+TZX8L8hLsY8zozd4fEXsi7IGD6AgC0yr6DZkzqgpo3OfRUU5kcPLrrkAMy8LnruZ0zJloMZ0rz2C6l8cZ3+EF0b8SyjzeSpIz+XTU3AOZHB25HVNXHhlLgQYNdWadKxNlwPxJMqs5UVRrbnTQKv8VBp/P+RJ3k9nlZiik8RBuURE5JlQxsBOdDOMv8bLGAzl4fDfhwvIl255JSI0zPLkB1I4qSFS+292Z/aLnNp0TIFVOhXWRk8iqeIMeF37yrcoSM9K29Q0LQgMIagrk2Be9/HqVVLVakmkOHbBYfFHJP8zJXP0eyNItIbWr7oDzAPGKuiLru3YSWg5RkA0HXAffZOG7MEVta4h+S8Q8bPDw== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VE1PR04MB7216.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(19092799006)(7416014)(376014)(1800799024)(23010399003)(366016)(10067099003)(11063799006)(56012099006)(22082099003)(18002099003)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?cD8v1sOE4vmePaJq5pV0X94mUZKtqItVbkVqQNkZQaMEvNXiGVLQGRFQOMhI?= =?us-ascii?Q?Tv22QCyc+xqkI/fxQdKtCIoU/XD3muPf95o9JqEb3Q1zuc2QA/9WQCdqlqES?= =?us-ascii?Q?iBTQ03uspWw9w7fpJO41V+Z0h7x6Fq8Ge9iqMirodH9RpXRvATEXTh9c5xmf?= =?us-ascii?Q?juXiZlz/cEIWFtEb9h/r6QvM1dEb8FQCBH+UYlwrAcRsLC8LE0KtmE2BekyC?= =?us-ascii?Q?In/MlAsGPYikwojgjn8xppWuJGmzsl3bW3BqW5tOcag8j0bO8eW8KyM740XK?= =?us-ascii?Q?gkCRgZ5wJL00sjGnMeV2i6g4ZcQCb/Smwjk8CHBXz1j4FAmZPM4hSCQNkFi9?= =?us-ascii?Q?RV/6SulN6p1esAcZTg99yQOf3Oxw3XOGtOACbiYrv52r2RJ8yTYuHrvK2fuD?= =?us-ascii?Q?yY8dU44oPbgNIdF0oxVRN/uWGD+mgMpxSH1H7VABWvxb58nXHvJhldlXw96T?= =?us-ascii?Q?UQtDS8rlN1ic8FCUlimGSfVAqAd8+0N2RZdUvApNCwDY50sh79a2DFC9e7Fv?= =?us-ascii?Q?cewm+fLIrj5YgqbZSMmQMYNLh70XWlj/u8jIp5fyXZ/9nr8q6VyoGORiljTK?= =?us-ascii?Q?3agYFPRLu4HaWyyf8NyGt6aEXTsJl2Gi50Ipnec0qR20jTkpIAjCoyiqjSk2?= =?us-ascii?Q?sLTaiswa0peF0/ZPyUiwx6Z8wikT38NIncZmpZX9OR5i0pXgyFm/4yaTi0v9?= =?us-ascii?Q?wIfr7QQ3WlnSLHJlg5jvKn9oEKIKmPPClXvuT8bY61WdZznRqJ/hhB6sSNz9?= =?us-ascii?Q?BiyBtq6ypURXAWKbV3E2iCmzz49IhWHIa41YgDcSmDijZQ2MlqjJDAU/qWE6?= =?us-ascii?Q?9Ec+TbEXJP0llMqMNCFq3eHa651cKl/Prfe8ViAd2znZhTiOogDkV0v5t5B3?= =?us-ascii?Q?WFE/5dz6NiAeD6Jfp5RAWRcbHe7amTN3trdziom/2MCxHV51DbyJ0ppLWO76?= =?us-ascii?Q?uBd1V6mY2Azm5xAQZOZ9qj4y8uqwOjhObYe2vgClB4tvh18tXSwrgzWzbxQW?= =?us-ascii?Q?yUewBvep7Uk8ZFJHy9A1Cf1vY21TsnuIc4Ou6ZedVyNtAOCCIqC8JxK9fp/Q?= =?us-ascii?Q?mr8K9fXPogAoKzZ2XTbeb7r9QEGsqyTpLxbqLF+2+cNRSG8QGlPLXe0AwaQy?= =?us-ascii?Q?wbIOlCId4RqatWV7PgBAl7p/GPQ0/PlYrdKym3sEgHoXS1cWr2OMwGA2vJA3?= =?us-ascii?Q?tHgBV20m+slygadn/QP2E514hBJ3t7StwMJNbjBlPirH1s81V6sDOLQ1p+Ks?= =?us-ascii?Q?xb+Mfz4ceRercCD754GBr/YfWXUUmMOpno/3u8mhpAofLL/zIgzDbtdceUM1?= =?us-ascii?Q?i2IaPVWjEmq0zDTqCyrIYUx4T81ezZZOinzb9pIgz4TFU9fjYTjsjxV99Teq?= =?us-ascii?Q?UsxRU/xNOykspVZwvNDJ6j3xA5EMeNjB5l7SDyHEq++wYsMBBecEmAgEUMhy?= =?us-ascii?Q?HzgHhAzSirmMat6Yw2766AAmVZ6DBr0KHNrZO6cc2Hxe+U/q5Y8VSHTbceTZ?= =?us-ascii?Q?2D9MjNXMvaaKvSWhr993T03z85mneFcX5JJwBDtoKhKgmLLGlV3E8dE2WAny?= =?us-ascii?Q?GCtQi3AY2l22V1cJX57cbZZkzdlOOf0LTTBIKriwwTjNAdPke0N46AjzNqN6?= =?us-ascii?Q?uG/1G3+8PQ0O+NiGrvxnLmSDl/D6uNp4qFF/W+QaIAhQ+ZPSkSe0pGoRBJQD?= =?us-ascii?Q?1K7FBE0zs2Xdkrz1WktYCxJNatRddHvdVYxoti/rrnKi3bmPNmcR4RvIEUYB?= =?us-ascii?Q?QpijjZGXqTalPFhv+60kfK6rM8dc1KynTLLKPQiTL2libzUwCrmE?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6b91304a-b395-4854-baad-08df0e5e27c2 X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB7216.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Sep 2026 10:36:06.7782 (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: PLY3YJJJOQ3vDpHVQikcjGJFWaP43XiDxTihgdXlrsZeO5cWBm7ZaqTKE5B/m2x+0VpBm7jA0AaPjcdxPDJi0U/cAWxHnWIswVX6I0BCm50WK5aDwFBDa8oeKn95Q5R9 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB8PR04MB7066 Content-Type: text/plain; charset="utf-8" From: Wei Fang Move enetc_pf_set_vf_mac() into enetc-pf-common driver as a generic interface for both ENETC v1 and v4 PF driver to use. Signed-off-by: Wei Fang --- .../net/ethernet/freescale/enetc/enetc_pf.c | 22 ------------------ .../freescale/enetc/enetc_pf_common.c | 23 +++++++++++++++++++ .../freescale/enetc/enetc_pf_common.h | 1 + 3 files changed, 24 insertions(+), 22 deletions(-) diff --git a/drivers/net/ethernet/freescale/enetc/enetc_pf.c b/drivers/net/= ethernet/freescale/enetc/enetc_pf.c index b74d965e403e..c467dc05510e 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc_pf.c +++ b/drivers/net/ethernet/freescale/enetc/enetc_pf.c @@ -191,28 +191,6 @@ static void enetc_set_loopback(struct net_device *ndev= , bool en) } } =20 -static int enetc_pf_set_vf_mac(struct net_device *ndev, int vf, u8 *mac) -{ - struct enetc_ndev_priv *priv =3D netdev_priv(ndev); - struct enetc_pf *pf =3D enetc_si_priv(priv->si); - struct enetc_vf_state *vf_state; - - if (vf >=3D pf->total_vfs) - return -EINVAL; - - if (!is_valid_ether_addr(mac)) - return -EADDRNOTAVAIL; - - vf_state =3D &pf->vf_state[vf]; - - mutex_lock(&vf_state->lock); - vf_state->flags |=3D ENETC_VF_FLAG_PF_SET_MAC; - enetc_set_si_hw_addr(pf, vf + 1, mac); - mutex_unlock(&vf_state->lock); - - return 0; -} - static int enetc_pf_set_vf_vlan(struct net_device *ndev, int vf, u16 vlan, u8 qos, __be16 proto) { diff --git a/drivers/net/ethernet/freescale/enetc/enetc_pf_common.c b/drive= rs/net/ethernet/freescale/enetc/enetc_pf_common.c index 519fc90d2647..1b2ca2b31a80 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc_pf_common.c +++ b/drivers/net/ethernet/freescale/enetc/enetc_pf_common.c @@ -609,5 +609,28 @@ int enetc_pf_set_vf_trust(struct net_device *ndev, int= vf, bool setting) } EXPORT_SYMBOL_GPL(enetc_pf_set_vf_trust); =20 +int enetc_pf_set_vf_mac(struct net_device *ndev, int vf, u8 *mac) +{ + struct enetc_ndev_priv *priv =3D netdev_priv(ndev); + struct enetc_pf *pf =3D enetc_si_priv(priv->si); + struct enetc_vf_state *vf_state; + + if (vf >=3D pf->total_vfs) + return -EINVAL; + + if (!is_valid_ether_addr(mac)) + return -EADDRNOTAVAIL; + + vf_state =3D &pf->vf_state[vf]; + + mutex_lock(&vf_state->lock); + vf_state->flags |=3D ENETC_VF_FLAG_PF_SET_MAC; + enetc_set_si_hw_addr(pf, vf + 1, mac); + mutex_unlock(&vf_state->lock); + + return 0; +} +EXPORT_SYMBOL_GPL(enetc_pf_set_vf_mac); + 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/drive= rs/net/ethernet/freescale/enetc/enetc_pf_common.h index bcf113efc2ef..7d7e67a12278 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc_pf_common.h +++ b/drivers/net/ethernet/freescale/enetc/enetc_pf_common.h @@ -23,6 +23,7 @@ void enetc_set_si_uc_hash_filter(struct enetc_si *si, int= si_id, u64 hash); void enetc_set_si_mc_hash_filter(struct enetc_si *si, int si_id, u64 hash); void enetc_set_si_vlan_promisc(struct enetc_si *si, int si_id, bool promis= c); int enetc_pf_set_vf_trust(struct net_device *ndev, int vf, bool setting); +int enetc_pf_set_vf_mac(struct net_device *ndev, int vf, u8 *mac); =20 static inline u16 enetc_get_ip_revision(struct enetc_hw *hw) { --=20 2.34.1 From nobody Fri Sep 25 19:15:32 2026 Received: from PA4PR04CU001.outbound.protection.outlook.com (mail-francecentralazon11013067.outbound.protection.outlook.com [40.107.162.67]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D67C852940A; Wed, 9 Sep 2026 10:36:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.162.67 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788950178; cv=fail; b=sYqK+ktoGlClU80XToIpRJ6CDBxrVG38sc6ko5MYh/KtkLdt6qMM8V0sGrCJAa1QGyJq6QBd4y41JDEeRvWFR20phlb+7pCDZJ0gCE1Yu2vyc9YYn3lE18BR3AHdx1lehkEKmraQWFn4Knk5Ny+k6RXS3rk5F3ttM8Q/nkTXihA= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788950178; c=relaxed/simple; bh=Za7SMqOVkW9ROk1fPourKrPBXJDfEVpFkeC6rdSZ2Fs=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=GAT48/jBx94RgcEbxcUMTICS43+My/8jS/SCLrq+FaSbHCRMoXJSBRmotwp43j8rC2e1PVWlUJvknbFQrVKyBqvbK+Jwlubv9HOyhsYQ8s7ZRoZ9kiOC1EJEm1IeNP+GEarRrVFmM/4TnshTHbV64qJIV0LkiWyM7owo72dPLI8= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com; spf=pass smtp.mailfrom=oss.nxp.com; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b=kY3QZ5gI; arc=fail smtp.client-ip=40.107.162.67 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b="kY3QZ5gI" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=nBjICfSxaclauKd3eMQF1DfRYLh0BBz+TB6QSSp82ZB3pqjgRjkh/XwSpbKanr4K+wlzERru7RAbWZ3dlMJvVr32FMtt52eh/Z3vP1ZXEm+SRJUGlb/66ePSFQYBHqf0BnZiGHhQPYuFPkwteByiJ136jxqFliMUwoFy8RPQq4zx/tC7tVNX/o3+KuQEyJzNKcYA7A0Yng3hKZ2CTBYPmdQFzj4R8Tmln8oJE4x+KllH9SMx4u7xQ6K/kIU4dFaeP3RIuDLKF4ycE9wxrodtcB/gijWM03iQjah6zwrz5VwKJHD0W/dnHxQn7RGRYdNg/cTvgdZnpeoFJyxE6jp95Q== 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=3+g4u22iR/ROj4smlyHwiq0AsxgvM1x+IAErPDXluIY=; b=bH+sGV1QdajKexHg5zZHGaV0nCxn92dVYiVDA1Hr+Gfw7NejvjQSb38OvR5E20VQEhTxHexI8aKguWNd0tznqIYG36hN7+GStJdGCj7drjvYcCevDJ4F+tE+07eLPCSM9mUxiSdZY8km4jFT8DUGepUY/PEIGmmHMc88YcP811DpjuOoc/PupIYRPPL3YQDH8zF/knTSjABkhBrhlbgEiPVFUUhO77KjFbrVhLvEMkSfBc+vGxu02CAFHNA37fZd6tEy4WQHtnKSaNw5rq/YtfFI5t5coSRwaL2eTUCwEUaW6psUVhfbFeQaHQW4v7GWAbBaZu6b8gaUK6mmYG/jyA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oss.nxp.com; dmarc=pass action=none header.from=oss.nxp.com; dkim=pass header.d=oss.nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=NXP1.onmicrosoft.com; s=selector1-NXP1-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=3+g4u22iR/ROj4smlyHwiq0AsxgvM1x+IAErPDXluIY=; b=kY3QZ5gIFsCy2jovHPg3bqrladxCNoItFK2Vt35ftYZ49iiVoT9S8DUSRTEDgqZlJXB6FDlK1ZYLRBeWAAXWO4vtztjZfcJNI7IczWwx00RmIeUrmr1C5+TrxisAd43CRSdaoNZiTRnjI82lUXCj5GA3AWxIH55cD1V+5vuR4k+fZB4fBwmDbBXm6UVPfhKLegFtAijW6Jh1uXcFUuQ0QrMtclcAh8qjmlulrtEeh9FWyVEHA6gOzFWN6SUmPOKYTk2E9EtZe8zLe6sWtFU4U6WM9lJk6sNEQrJlXJP1lsc+hx119EjPrrtM7K3kxB8Qbi7SmsWVZ/EsTfe/eDaiMQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from VE1PR04MB7216.eurprd04.prod.outlook.com (2603:10a6:800:1b0::22) by DB8PR04MB7066.eurprd04.prod.outlook.com (2603:10a6:10:12e::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.406.8; Wed, 9 Sep 2026 10:36:14 +0000 Received: from VE1PR04MB7216.eurprd04.prod.outlook.com ([fe80::a9a5:cf83:dbe8:1f74]) by VE1PR04MB7216.eurprd04.prod.outlook.com ([fe80::a9a5:cf83:dbe8:1f74%3]) with mapi id 15.21.0406.005; Wed, 9 Sep 2026 10:36:14 +0000 From: wei.fang@oss.nxp.com To: claudiu.manoil@nxp.com, vladimir.oltean@nxp.com, xiaoning.wang@nxp.com, andrew@lunn.ch, olteanv@gmail.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, linux@armlinux.org.uk Cc: wei.fang@nxp.com, imx@lists.linux.dev, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v4 net-next 07/15] net: enetc: add .ndo_set_vf_mac() to the enetc v4 driver Date: Wed, 9 Sep 2026 18:07:25 +0800 Message-Id: <20260909100733.1139689-8-wei.fang@oss.nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260909100733.1139689-1-wei.fang@oss.nxp.com> References: <20260909100733.1139689-1-wei.fang@oss.nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MA5PR01CA0019.INDPRD01.PROD.OUTLOOK.COM (2603:1096:a01:177::16) To VE1PR04MB7216.eurprd04.prod.outlook.com (2603:10a6:800:1b0::22) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VE1PR04MB7216:EE_|DB8PR04MB7066:EE_ X-MS-Office365-Filtering-Correlation-Id: 058973d3-f2d0-43c6-f94b-08df0e5e2c16 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|19092799006|7416014|376014|1800799024|23010399003|366016|10067099003|11063799006|56012099006|22082099003|18002099003|921020; X-Microsoft-Antispam-Message-Info: PvKAumbUd9/i519wMIcrn1BzKysy0/5O1Lg7BuiusmJv00exXGCLn+2kBl7vuoCtA7kw7QyXbf2+19b8Ub9VaspiRcI03+qCVsfmCT7y5g4lNSplncfm9IVajwO/Wq1uLIaEwATAcFFXQ8fOztK/EVHI5huKMjB/4lQTCOHUI3Z5PwUq1jNi5WxJvh2A5ub7+ryEDc3d1jmpsh/eIAeiYcMJB4DMTdMbda4g3AVeIAPOokaDKUBgV2vj+PQxhnCCa48hekjv4KBWkztuor501CiJzD/36tqTVn4K2PG9Ctb8iFLMA98pXpDcbidXrQ7kzluaoVqJIeq3kMdDHrUfreEOll3DCJ3KIIL8O0gZghvGkIT+TbYyiR/8fiEIboowry/sgN0/gnxIDp07qVzCIfcwUqh5lu7FPV5rTIpddiLxhKKjhJn4Kmb1j6E2p1bfXCTSN8qBBvtFP1kQ6LhKbexMNuT1sMXp9jnE/zNPjKfjXlIT8fQIH1TDz0py4M/Si9j4y85g/hYHf0uNky1+JpIXSRS5opWu+Ck/LyByMetWFsJdWtrR6cSeDEoRqnr6zWZABYunblfRjZeMv1ELEQ5ZLZdgSL1ASnweea+BGnq4f3Tfw+T6x0hzcjq3b+tnfHZeJNoDfA7CO89+5S5hAvXjALTLkKYLXorsB2xeSUxczqZaDEc6Dw4uwx14mBeSz9stqnBGduj/s9rFD+ckqQ== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VE1PR04MB7216.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(19092799006)(7416014)(376014)(1800799024)(23010399003)(366016)(10067099003)(11063799006)(56012099006)(22082099003)(18002099003)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?NjJT1+plHmeFHghJ5Nd1ux6uamOuupKBYIinj9DDk3ZSf2pEmbr38HRfhhWZ?= =?us-ascii?Q?UXFDEoj0V6yEbuEtCJsBxlBZqxEFOJBPIoaw2QMAEpPAc9Nq7CmK4XqTGvex?= =?us-ascii?Q?RqQNDb8g5UzE5RKzSTS7vb93r3jDCBRCHYt7PW/UV7tITui9L/cZXvcPmLHF?= =?us-ascii?Q?GjePkehXzNuz9fIfR9r44zy1QjlvAvmNktna7lLn0AK/w6juN5XuJIsmYpgi?= =?us-ascii?Q?27AK8idfAW3fyfs0T27UUm10Itqb/jgJuVLOTxLMu14IPn8lmm9K1FxxwQV2?= =?us-ascii?Q?WXEPLdvBM5V9ZicnhMv0gELaPliC+0oFo2eTaDZnh5p385+d0SMBXjVhsDDX?= =?us-ascii?Q?M212Ap7MLrU1seIte46DNrqDGN9sU0Qxge4vcJDI7l6WMUFq7t0+jJkdiuds?= =?us-ascii?Q?62MqfCvcvV0cNz6tPO+Qm3p2G7AQa4F3F8p0BFFIJsj/YILHyf3QLM/vIGtL?= =?us-ascii?Q?KFCC0km7zHA4P+z7y1HC0ID3pzvRzLHaswoscPZL9SexjXsajZpGWVxVtqJL?= =?us-ascii?Q?DnjZvknxt/Fg3jVR7apsG/1jQq0uVsA2UbmLLzfXYGgGXefO8crdsUAHcIfr?= =?us-ascii?Q?VWVnGBTPIzbgm8H9EsHO4CfvgwGFXebxX9ds8boUUjuh2W/ZCC2D6o5IDO2p?= =?us-ascii?Q?QyqYeieHKRMFIKsMUS4L0m812yFMJk+F5g/03B/KnBg4ZGM9TckAAF3Rhui+?= =?us-ascii?Q?c+aE/1Ltn3aRbeIAa26zQTHhd4uyWSyQjPAsmcfxvDqBQCXOhgMgz6cU6xcj?= =?us-ascii?Q?7pa/GGZ8uZRkhbmxUZ6fGOMgJJ5UdOVrE/X/qvUcQnVYljSevq9PeKjKzbtg?= =?us-ascii?Q?UYzT6q+5d8edBvvyyeZaMvP0U+4kqomtzUln4XaybQM70t7XpMtDXJpgQ51m?= =?us-ascii?Q?EzrOZ4hXVyQlh2KuyHf0da2Ra5xUg/Pfc88pXplxCBxV4WyH4rn/d2sQt1eT?= =?us-ascii?Q?3G/zETlwHLijLGOGbylPwrNLrCeYPW8Amfsn8w/AAJ31Zjbb6+DHqhi5VQc8?= =?us-ascii?Q?MIr5y9BI4caT3yAfh7SmpzRbhmp2SIytAh/PCEJXlqjyUga28R/JGy+phG7Z?= =?us-ascii?Q?dA7ulfCncIBDakPmb3hnl3MiyhELj/HcvMf3V5nxbYs+7560I0fJuv4Yq3NX?= =?us-ascii?Q?vFXcS/1Liya4DaKoVjkajY2JG4TIhgB9ERjTlNNX37PTZj4yOgBBUUZ8o0KK?= =?us-ascii?Q?frekDkJNO752oPDP7oKDi3aehnPV4kKd9yR0595rwYEIJsmKU7A/gkAMHaQg?= =?us-ascii?Q?q5DZI0Qjni44gqriD/rywfLfq+G51tSQAFcG988mHxFXzH3MesALPYoqg2mB?= =?us-ascii?Q?LtZtBmA1dcK4vq+IarYMUAM9rRQNkW1CNBPBwy03x9MYD+Zu6qSkuwUNNkMp?= =?us-ascii?Q?S9ZzjnqjeyTrQlCzBO36WrM/jt9jBAL4MbLxv9EEH6GfTSbj6jTMlZ9ZGuOg?= =?us-ascii?Q?WcTshLMvjUpmBjTsAkgXUTlasQpH/IjNJ2MQO/DbFfus+KLynykLETIDzEEc?= =?us-ascii?Q?LDHLOGD6iGiGUf1o5ZhalneRNWo01bSLknF5wNCteGoowHd2wXIPYxKf2VS0?= =?us-ascii?Q?uswnA2H3r39I4gfM4RnqMBe/2k3RbnMz31jMQJJ5ZUbO+F0zJY1B9zfpk0lh?= =?us-ascii?Q?RpMpz2SYFwvxqgJT7Vapnd1EDtwrJPgSwPkYG2r/ZUNRpXjCeICb1tuRIpML?= =?us-ascii?Q?/LMfI55TmJhlrLuJpJcNNrGnFAm3KCr64hHqJ/pY2DBQXW30p6H+qGWEYqwR?= =?us-ascii?Q?wHU5jqeVdEN0lZFxzCIHhH6FORgZw7C5JxauX+tIPYOYT/46ABsQ?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 058973d3-f2d0-43c6-f94b-08df0e5e2c16 X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB7216.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Sep 2026 10:36:14.0368 (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: xuSr6iqSct8kuQgYAWDRzzeVLSonP8/wNTL5DZmIA2hvDJ6dM3WJ3QqacoGlm3MRBiOAA6op9vu+7Cd8AzJ1Ot1zlALtO/FEbdxMa2RrjON5jaJbAlMOnL1pE3AlVnjs X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB8PR04MB7066 Content-Type: text/plain; charset="utf-8" From: Wei Fang Add .ndo_set_vf_mac() to the enetc v4 driver to configure the MAC addresses of VFs. Signed-off-by: Wei Fang --- drivers/net/ethernet/freescale/enetc/enetc4_pf.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/net/ethernet/freescale/enetc/enetc4_pf.c b/drivers/net= /ethernet/freescale/enetc/enetc4_pf.c index e20989b6f8b4..a44d50b7fd2a 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc4_pf.c +++ b/drivers/net/ethernet/freescale/enetc/enetc4_pf.c @@ -579,6 +579,7 @@ static const struct net_device_ops enetc4_ndev_ops =3D { .ndo_hwtstamp_get =3D enetc_hwtstamp_get, .ndo_hwtstamp_set =3D enetc_hwtstamp_set, .ndo_set_vf_trust =3D enetc_pf_set_vf_trust, + .ndo_set_vf_mac =3D enetc_pf_set_vf_mac, }; =20 static struct phylink_pcs * --=20 2.34.1 From nobody Fri Sep 25 19:15:32 2026 Received: from PA4PR04CU001.outbound.protection.outlook.com (mail-francecentralazon11013032.outbound.protection.outlook.com [40.107.162.32]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id F394E524AF2; Wed, 9 Sep 2026 10:36:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.162.32 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788950189; cv=fail; b=EtKTRWaulSzZ6FyJ6+b2ilIbQz81ul2cSAASWDztT3p0EJEKIweM7GCPxNsT3Bc9qZFVUxdwBmQ8YYuEzvLFA9Gi2nRRKmXnCY5fmnms2nSsD1vhiFCeFdur4g9qmWBLMZ1edqigiK+2coqB5IVxPaeIfQlA4iMOSsJbWyiCKwQ= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788950189; c=relaxed/simple; bh=FbIbOAtirg+wMY/GmoCkvpteBWDBfC5QoARf95S2IZI=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=Z79SNXBY6FGyZHBEzEN3QSfveNKmG+Z9tkJD2iOm+OczSv4+FFnM6Mtm3IFc6eWbsMaebadYFCSAILI6VYofaSYa8stl2Fqcb4b2fGtJM7owrckksxQrkWy+QPEoGMPcUnHbR5Uu5m7IqVCThsW9iVDcBKrhrPdvlL+rVqgaQNk= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com; spf=pass smtp.mailfrom=oss.nxp.com; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b=d1Colr5W; arc=fail smtp.client-ip=40.107.162.32 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b="d1Colr5W" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=OHyYoLh9qIzsr0klqs+6x4sZkLMjfnLz9NR2I/oWX5nYVUHZy2uwrzQhIFdZCDv4vd/eP0oWAymoMeZUoUzRsrFbCn1sua8WcqQWzxNnca46it93jdECk8ctqtubVAUy9C7opRzOSFDzDADPnE2CYZfnwbdsPZfBgRmOttsOCLr5vIuQbBsQXcaqQegNKL2mD+wcsVIAHVIMs3bRbGil/fseWPZYH9KAsQhg1XMvkgIafMT7FWAydVzubalzummUiv8lw08XoA0UIzA74rA6vxVkGGGhfPQ+aSqX7tJowovOE2ItwP2/8/ARAl/VQ2pFQfE5ljIInK9baALf+SgZLw== 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=UYqm8awxh2dBasrt0qml5HIFvwd3+LvhtR/CvDYfWFM=; b=pVCzh1pYFIKQsh8NhN1nwkjiov+hdw6z0pbSZKaX6K1kBBGm5PCaUeSZiI3heVQotkTo1++BUE7fNLjN5XELakhTGBePauPdDLoVF4mOo5D+S87xhKtifAHjXrIxdLkOOrxp4S8Qdd3jaOQI9SJzmJ/uGhzxURZYlShXtmquuX5YV55wOv84bVXFYQa/OzU01RwTxEf2/5VyylWdnSPWlngAbd+iwHCeyGQV2d/OivQ6JuDMklEemd5IoVPsxTxkTGHvh8XATgP6PnQw6bZDDUjTQyLOHVFagBqPQdhUxQZasNzAxYbYpbYsjaSVuqgM/yQDETURqOKesZJqhfuadg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oss.nxp.com; dmarc=pass action=none header.from=oss.nxp.com; dkim=pass header.d=oss.nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=NXP1.onmicrosoft.com; s=selector1-NXP1-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=UYqm8awxh2dBasrt0qml5HIFvwd3+LvhtR/CvDYfWFM=; b=d1Colr5WhGNcKSJMs219OTRSakFh7XKNsVtoaMU+msFFHUjzNbOHKpaKKGXqQqP9RfRfT6r/jOwxoWMMbN1/5jx366ibsHPqiXoPojoZtCqXXiAruDzHvwPmHvEBjwRTfoAFYI4v8cE+7OVqVkTMFBx1A5l/ZdZ+w7rL3SL1ttzMsnAEL0NZnX6DRDAXPMXXZhu6Vwrg03Nu73fOUuTLFaMbKP5lMtRpmz7/AVvNOIaG94YLjqg/pX9iqBHeN13rkPwyMtFjbM2/lQN89MCe9JRgoLpkPTMoOTKESnDSyi+dxn+W5VK+fy18+WNQW4HNZmWKECSlTEO0lTJ4H1bM+A== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from VE1PR04MB7216.eurprd04.prod.outlook.com (2603:10a6:800:1b0::22) by DB8PR04MB7066.eurprd04.prod.outlook.com (2603:10a6:10:12e::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.406.8; Wed, 9 Sep 2026 10:36:25 +0000 Received: from VE1PR04MB7216.eurprd04.prod.outlook.com ([fe80::a9a5:cf83:dbe8:1f74]) by VE1PR04MB7216.eurprd04.prod.outlook.com ([fe80::a9a5:cf83:dbe8:1f74%3]) with mapi id 15.21.0406.005; Wed, 9 Sep 2026 10:36:25 +0000 From: wei.fang@oss.nxp.com To: claudiu.manoil@nxp.com, vladimir.oltean@nxp.com, xiaoning.wang@nxp.com, andrew@lunn.ch, olteanv@gmail.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, linux@armlinux.org.uk Cc: wei.fang@nxp.com, imx@lists.linux.dev, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v4 net-next 08/15] net: enetc: move mac_filter from struct enetc_pf to struct enetc_si Date: Wed, 9 Sep 2026 18:07:26 +0800 Message-Id: <20260909100733.1139689-9-wei.fang@oss.nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260909100733.1139689-1-wei.fang@oss.nxp.com> References: <20260909100733.1139689-1-wei.fang@oss.nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: ME3P282CA0155.AUSP282.PROD.OUTLOOK.COM (2603:10c6:220:1c3::17) To VE1PR04MB7216.eurprd04.prod.outlook.com (2603:10a6:800:1b0::22) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VE1PR04MB7216:EE_|DB8PR04MB7066:EE_ X-MS-Office365-Filtering-Correlation-Id: dbfefaad-d923-4cb1-9287-08df0e5e3293 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|19092799006|7416014|376014|1800799024|23010399003|366016|10067099003|11063799006|56012099006|22082099003|18002099003|921020; X-Microsoft-Antispam-Message-Info: JJI0Faeaw2pWIdGDNURtXaNHbUVZn9huxkTkcZetwZ0lErykMksg2lzHTkBDeuKuG1u03v6V08pivgCOLRbdibtvHrECooudko77kRst7tMZUCQKHxAhHf2l7X4SinvrV0wwQhhOhHv6LrYz5R5jhd13XiVi+dby1vpNOwFgsxzv0NeV6kBb2ZK53AMe9kUnMH0OkjDXPRnKw4Z14u0ENkrIH0dq3k/jWMSruC4oDL8ieXqFDD7pSJagT96WYNBAoNKAw0vv1ng4AqXKd9bTFlktXlueUHFclHUHMN62jj45bMm28i2Ef6ddtYGDN8QKdJWjv0ygMholJcY9QdJbCJ7ctxYVW+IemcZZSbOCS1PRL22B2DP1oLqxfEBzWX4/VmFjm24EGz1ZSQaq8wm+TffE6o5geyId2LejK8T00dSqYHd8t0aWLKwFMXkSuJ/HoyRLUF6/zlqvWDC5Q5qXe1fWwm8oEU8lbYPINVTwzWgc6nTX8JSTVilugKGMJXWQdIgC9HlZuEtaHaxQVGGTqh3xiocwjzb3CZtohhwTcIAH9IWOf5rD8bHODyW27EPoRYBM9C+1OU1ewWRkfR5T8NMrUfvbbN62lAMrk2Uljmzpv2EvvZjJEbHe7hC+CK92fk/rlBLJSzfCvtWLczt5q4VQ38pkM9bUg/QajOzLhmaqnyssAdBA4FY+ixis6u9tvvsM48q6GF9XA9JnJuW3SA== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VE1PR04MB7216.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(19092799006)(7416014)(376014)(1800799024)(23010399003)(366016)(10067099003)(11063799006)(56012099006)(22082099003)(18002099003)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?O0g0wGGw5H0Em3Zk2XsDpCiHPbTsjslT6UPYJqFIxV3F/8icin13p5n+J4RZ?= =?us-ascii?Q?1Q9MZuA+/m6yk4n7IsJwagwwsn7OuFnolPtOzaqFwFbrZhbO+TM7G9VHwVau?= =?us-ascii?Q?5i8dA258ClQ4yILESeqizDDjih0q479qXsxTpXOB7xDXB/0rTG59Qm5+AXSP?= =?us-ascii?Q?BTd4/5zxTvogkZMq9iZIpvkHTtWm2haZC9YzEqZskGQetxrUFEiLDoeYnRnj?= =?us-ascii?Q?4mvSPkqzlrAIZJ/TZXlRewUY0p4l/RTcEawKa3KefjnSiEpeIp9PQfsFce3u?= =?us-ascii?Q?bN5KIxgN9Knukj6rp319h9z96XliknxMpurfHlpNhTdvWrrENZb5o+B43lQj?= =?us-ascii?Q?FV1GKk9CyhwySx+jIDOAcCJp6yPTJj0I10ghFTINg9iYvmp4QJjZBO9wQKLk?= =?us-ascii?Q?sb8qBtx/rWpKAm7+aJhTHDD6UPUuKtaMXx2J0glEScfB6lcSS28vCSX+SAqj?= =?us-ascii?Q?vAW4KUFe9Dw10bkbn9QJZX/OagT6kyEBOA902Esmp5LAJTRujyvIBJT3tXAo?= =?us-ascii?Q?Av63V/7lfUCqxsXYuoyGVmPjMYCIa2yftyqC9XgfKO24JbF+ZaaHSX795uw6?= =?us-ascii?Q?ZgmOq/hYXRU5YXTg4jQ4KdM0fMcC0dHaPF/b8rZkirT807IijmxW0eRGJAhQ?= =?us-ascii?Q?GYykknCgwr43ntMQBQ5hq25CY8uMWk2ujO/CPPtHDrVD+ox0oxw7/cfyRxdI?= =?us-ascii?Q?P2twbl0oh3Dd/Uirj3GGoPfEye2H6dk63oXL2FHcvRxtrs0vw7/hquHI81jI?= =?us-ascii?Q?lzk9teem1tWK0CSMWcPnlL7g3QkuERegSPoVa3Eb6eADu+lgAbJooLZdOlg7?= =?us-ascii?Q?BErfHfPSpE6BguACu20zdBPWq/xXph7e9LkMwCmsgy7ly8jQ9h9XUTEzo4YP?= =?us-ascii?Q?jSz5qyeV6CJguBooGS0yz2WP8bQTHIGbSImehVz9hgId8o7W5tycqJLnimSH?= =?us-ascii?Q?qz+vCPxb91MwGRaJUecORdjK9hUnn3dK893+HRiPcwbly9ezVdfQYHAk+HJA?= =?us-ascii?Q?Tj4S/WX6EgNLdpHd/4IKsIGxUNGIsOBhMeK8KvpLAwhaHa1oc7RizM3/lAom?= =?us-ascii?Q?guEvitaPIR4fZfMZnQ/HoJGZcjnUywEEQb8ZqV0BZH1R08yWuLdrJSV2oIIv?= =?us-ascii?Q?cjfLb5bbuul0IsnPk/YHgRA04HRAj0TRvtnbFDCUghevi0e9wNzRJAEHbNOZ?= =?us-ascii?Q?uU0QB+h4bxy4aMxv8h8fsWzB3uo2MmBAeEaih58NEmhQRBiMXGsO+jeJsqjb?= =?us-ascii?Q?0SlkOTH7q8MbbAWIAKP1Q0LlEC/I81ASGNWjd3g+MhHB6/rz2jAI7lQmse6e?= =?us-ascii?Q?PUcb6lkJHm8jvdG9f/JqRj1MMSJfr940Buf3HAmhHfKuvsEnQPtGF0D4I6pV?= =?us-ascii?Q?Ga4i5JiDwdjmsUKhuTNe1oHdtJEWtbKw2wT2WNEWKiORJBLvDlFgjSWjoea+?= =?us-ascii?Q?a9KZOlbPjSAAGWFZf6SYbfs0NznOgjwm3mjeQFUa24NZy4is9RqeXbjTD9N3?= =?us-ascii?Q?asd/b/jFtdud9nhtRmRLaznYN4cRNH+SnzqIsehyzGIdU74lkioyUm6Lu1BK?= =?us-ascii?Q?RzNZVBbt66lrBWqC2GoW7uEeKgNvngh02DUleQI9rxBvKPKkJ2I9WB53qJx2?= =?us-ascii?Q?6O/43AZjogqdc/dFM6EK4ktC8JsFh4VV37v7ixlYZBCO2fyzJAU1v0KsPj8v?= =?us-ascii?Q?cmt045eySAk82CoOR6YMdjq7hplsm/YkHHD5sZomFmoQtuyos3vvv9hdJxAY?= =?us-ascii?Q?RPzj6GjSOM/aVBiklFS7mLBWfOYcc2wCQhtn5+Tr9EsJ48PmDefd?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: dbfefaad-d923-4cb1-9287-08df0e5e3293 X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB7216.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Sep 2026 10:36:25.1277 (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: Gfcg9cwG8+z58wXfJFxVqYDjiWk3cbFmhuSooDw/8ZQiCgzgOtKFqHJgPJb4MMi1oSs7pDBjoeAfJ3aNZJe9EG9/AwNnWQJHIuDZWr29z9gvmOs8hjIaFep8JHwtwq6Z X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB8PR04MB7066 Content-Type: text/plain; charset="utf-8" From: Wei Fang The mac_filter array currently resides in struct enetc_pf and is used to track unicast and multicast MAC address filters for the PF. Since struct enetc_si is the common structure shared between the PF and VF drivers, move mac_filter into struct enetc_si to prepare for MAC filter support in the VF driver. Signed-off-by: Wei Fang --- drivers/net/ethernet/freescale/enetc/enetc.h | 2 ++ .../net/ethernet/freescale/enetc/enetc4_pf.c | 6 +++--- drivers/net/ethernet/freescale/enetc/enetc_pf.c | 17 ++++++++--------- drivers/net/ethernet/freescale/enetc/enetc_pf.h | 2 -- 4 files changed, 13 insertions(+), 14 deletions(-) diff --git a/drivers/net/ethernet/freescale/enetc/enetc.h b/drivers/net/eth= ernet/freescale/enetc/enetc.h index 0eff25b0c81b..0501cc2fc304 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc.h +++ b/drivers/net/ethernet/freescale/enetc/enetc.h @@ -337,6 +337,8 @@ struct enetc_si { struct workqueue_struct *workqueue; struct work_struct msg_task; char msg_int_name[ENETC_INT_NAME_MAX]; + + struct enetc_mac_filter mac_filter[MADDR_TYPE]; }; =20 #define ENETC_SI_ALIGN 32 diff --git a/drivers/net/ethernet/freescale/enetc/enetc4_pf.c b/drivers/net= /ethernet/freescale/enetc/enetc4_pf.c index a44d50b7fd2a..eedcaf2d7bc9 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc4_pf.c +++ b/drivers/net/ethernet/freescale/enetc/enetc4_pf.c @@ -137,7 +137,7 @@ static int enetc4_pf_add_maft_entries(struct enetc_pf *= pf, static void enetc4_pf_set_uc_hash_filter(struct enetc_pf *pf, struct netdev_hw_addr_list *uc) { - struct enetc_mac_filter *mac_filter =3D &pf->mac_filter[UC]; + struct enetc_mac_filter *mac_filter =3D &pf->si->mac_filter[UC]; struct netdev_hw_addr *ha; u64 hash; =20 @@ -172,7 +172,7 @@ static int enetc4_pf_set_uc_exact_filter(struct enetc_p= f *pf, =20 err =3D enetc4_pf_add_maft_entries(pf, uc); if (!err) { - enetc_reset_mac_addr_filter(&pf->mac_filter[UC]); + enetc_reset_mac_addr_filter(&si->mac_filter[UC]); enetc_set_si_uc_hash_filter(si, 0, 0); } =20 @@ -182,7 +182,7 @@ static int enetc4_pf_set_uc_exact_filter(struct enetc_p= f *pf, static void enetc4_pf_set_mc_hash_filter(struct enetc_pf *pf, struct netdev_hw_addr_list *mc) { - struct enetc_mac_filter *mac_filter =3D &pf->mac_filter[MC]; + struct enetc_mac_filter *mac_filter =3D &pf->si->mac_filter[MC]; struct netdev_hw_addr *ha; u64 hash; =20 diff --git a/drivers/net/ethernet/freescale/enetc/enetc_pf.c b/drivers/net/= ethernet/freescale/enetc/enetc_pf.c index c467dc05510e..523c71324780 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc_pf.c +++ b/drivers/net/ethernet/freescale/enetc/enetc_pf.c @@ -60,10 +60,9 @@ static void enetc_add_mac_addr_em_filter(struct enetc_ma= c_filter *filter, filter->mac_addr_cnt++; } =20 -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 =3D pf->mac_filter; - struct enetc_si *si =3D pf->si; + struct enetc_mac_filter *f =3D si->mac_filter; int i, pos; =20 pos =3D EMETC_MAC_ADDR_FILT_RES; @@ -115,9 +114,9 @@ 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 =3D netdev_priv(ndev); - struct enetc_pf *pf =3D enetc_si_priv(priv->si); bool uprom =3D false, mprom =3D false; struct enetc_mac_filter *filter; + struct enetc_si *si =3D priv->si; struct netdev_hw_addr *ha; bool em; =20 @@ -133,7 +132,7 @@ static void enetc_pf_set_rx_mode(struct net_device *nde= v) /* first 2 filter entries belong to PF */ if (!uprom) { /* Update unicast filters */ - filter =3D &pf->mac_filter[UC]; + filter =3D &si->mac_filter[UC]; enetc_reset_mac_addr_filter(filter); =20 em =3D (netdev_uc_count(ndev) =3D=3D 1); @@ -149,7 +148,7 @@ static void enetc_pf_set_rx_mode(struct net_device *nde= v) =20 if (!mprom) { /* Update multicast filters */ - filter =3D &pf->mac_filter[MC]; + filter =3D &si->mac_filter[MC]; enetc_reset_mac_addr_filter(filter); =20 netdev_for_each_mc_addr(ha, ndev) { @@ -162,10 +161,10 @@ static void enetc_pf_set_rx_mode(struct net_device *n= dev) =20 if (!uprom || !mprom) /* update PF entries */ - enetc_sync_mac_filters(pf); + enetc_sync_mac_filters(si); =20 - enetc_set_si_uc_promisc(priv->si, 0, uprom); - enetc_set_si_mc_promisc(priv->si, 0, mprom); + enetc_set_si_uc_promisc(si, 0, uprom); + enetc_set_si_mc_promisc(si, 0, mprom); } =20 static void enetc_set_loopback(struct net_device *ndev, bool en) diff --git a/drivers/net/ethernet/freescale/enetc/enetc_pf.h b/drivers/net/= ethernet/freescale/enetc/enetc_pf.h index b3ad498f91a0..88a558649c68 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc_pf.h +++ b/drivers/net/ethernet/freescale/enetc/enetc_pf.h @@ -40,8 +40,6 @@ struct enetc_pf { int num_vfs; /* number of active VFs, after sriov_init */ int total_vfs; /* max number of VFs, set for PF at probe */ struct enetc_vf_state *vf_state; - - struct enetc_mac_filter mac_filter[MADDR_TYPE]; struct enetc_msg_swbd *rxmsg; =20 DECLARE_BITMAP(vlan_ht_filter, ENETC_VLAN_HT_SIZE); --=20 2.34.1 From nobody Fri Sep 25 19:15:32 2026 Received: from OSPPR02CU001.outbound.protection.outlook.com (mail-norwayeastazon11013033.outbound.protection.outlook.com [40.107.159.33]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 370F64FB9B2; Wed, 9 Sep 2026 10:36:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.159.33 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788950197; cv=fail; b=VoSESwIYABQ7JPPNqNrVUC7fthZ1WvWZWfNdYjbwFRVpcrNIlFi/ZspLfLja21mNDHPhPIQiKV4a2B82n62PtsG4iLf/1vMEF5F2IoeLDCtb488CWqsVvT7iFuGOrdo3hB/cvOLHa38IDai2N5zxZU+iV3btkfq+XHdaxfb+wGg= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788950197; c=relaxed/simple; bh=f82MguQntsvGMFIdeEIJC7KCNWKqh61z5PG2tL2+bdg=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=PEK7vZAdlJdBGOAW/6XHb+4cq0nRjRSZRXOoqQWcPBIBW+M+l1FJbei2giFZ9ZcKAva4S2uqdXqCHCq+jKVb0L/S4tJgvMsT66x6TPVk+d5cJkGvZ2qHjHer5OSw7zsRwhnjCkxx44fsjWQx6+ehhNu4f/CgniM/y4h3svhcEGk= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com; spf=pass smtp.mailfrom=oss.nxp.com; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b=kLKidOyd; arc=fail smtp.client-ip=40.107.159.33 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b="kLKidOyd" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=mOzI2Q6NtWrlwyKEGjtEb079odzBBBi2sE0yjz2LleaZVH8T0rxoOhGOiZdvgHnfM5EW1Aml9KLaG80cdapu/qIod7BmI/jmea0S51LVmUNd9ZWDSaDzXAxmduedoqF2FNwGR8vJhIZzkFA+qN2U4n6Nq2ahxfxt/uGOkgMGpsjxChuBEkkEKxgVfzuFep5DAqL0nLfTJAuI34uk0JO3Pt0w0uVcCw9PV5ka1SeAGLw4L5GfIkZjBPj+nbvZ8/mhEFKrvRDxNkq5bNVIIiDL46E1osLUjuWHTPZmX8tw7t6s4XUa+pUsDIfm5d5ge+2u8Hf9jGXEaIgPEQjoqv5AHw== 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=4RvjTU/C6+exn9HDL4DDn8vD5LIBu6Mp7W3uxAfm0WY=; b=vhK/O0e1VkYBCsABSX7laoxrmGuzSH9TKbka997hnI3WoCRafhOPwjgHhYMktgj+54fSeECIZGEvppZ2CnJzZt8Br4YulbuY9mNDTG8OOVXTNe2wqxdmUCtXz8OPPIsPVJdQtYJKf7IoHSIqTWVZ1jXdKoPj0o1Z0Wk3wYK2pcIVb6ukYhR0+Y5XpbjtlcqEnPsKViEfO3WVLOW5cHH4sreTO65F0lf+j+sK4H0YvLolMeRGxcTph9dJK1uWj4c87N2ZIubyCiNdgZEVv7Lp+D+n5gVAH9bjqGKo3UhKhWoX3KUrjb1VdNcKW4ui2mppTS5lXynRxZ/TiglXKNL4Mg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oss.nxp.com; dmarc=pass action=none header.from=oss.nxp.com; dkim=pass header.d=oss.nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=NXP1.onmicrosoft.com; s=selector1-NXP1-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=4RvjTU/C6+exn9HDL4DDn8vD5LIBu6Mp7W3uxAfm0WY=; b=kLKidOydCs8nt6tmUshFtQGnb9LvdtkTNaBDyiFjS6dRIRRY+wqnBm79d/qgI5hqjyHky5ok5L/k7QqJN2AxChCdIrcJgJ1zp3YJtVHgUDLpEBknwwme63fvSPrb1j0MxsbG9HVT/l+QGRSO4/zaY6dGSqvvRkrAeKZgE+gGG0E6x2M9WkibwM7ITKGgVFvLmZMzF29DvHigEFUNzL+L6w0lbY7MdMGiINXwaUW3XPRFTQceLcX3KTqSKFmX+G0UUTCjj+X9cC8noloC7qSXrZ/bE0XewDKhDuCwFUHV4W9R6CpeUuZlrOdOrbhRDmbWsY1UvOE5vtV3umRvH463cQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from VE1PR04MB7216.eurprd04.prod.outlook.com (2603:10a6:800:1b0::22) by DB8PR04MB7066.eurprd04.prod.outlook.com (2603:10a6:10:12e::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.406.8; Wed, 9 Sep 2026 10:36:32 +0000 Received: from VE1PR04MB7216.eurprd04.prod.outlook.com ([fe80::a9a5:cf83:dbe8:1f74]) by VE1PR04MB7216.eurprd04.prod.outlook.com ([fe80::a9a5:cf83:dbe8:1f74%3]) with mapi id 15.21.0406.005; Wed, 9 Sep 2026 10:36:32 +0000 From: wei.fang@oss.nxp.com To: claudiu.manoil@nxp.com, vladimir.oltean@nxp.com, xiaoning.wang@nxp.com, andrew@lunn.ch, olteanv@gmail.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, linux@armlinux.org.uk Cc: wei.fang@nxp.com, imx@lists.linux.dev, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v4 net-next 09/15] net: enetc: add MAC address filtering support for VFs of ENETC v4 Date: Wed, 9 Sep 2026 18:07:27 +0800 Message-Id: <20260909100733.1139689-10-wei.fang@oss.nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260909100733.1139689-1-wei.fang@oss.nxp.com> References: <20260909100733.1139689-1-wei.fang@oss.nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MA5PR01CA0262.INDPRD01.PROD.OUTLOOK.COM (2603:1096:a01:21c::18) To VE1PR04MB7216.eurprd04.prod.outlook.com (2603:10a6:800:1b0::22) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VE1PR04MB7216:EE_|DB8PR04MB7066:EE_ X-MS-Office365-Filtering-Correlation-Id: 321bfca1-529f-4a01-5e91-08df0e5e36ff X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|19092799006|7416014|376014|1800799024|23010399003|366016|10067099003|11063799006|56012099006|6133799003|21046099003|22082099003|18002099003|18092099006|921020; X-Microsoft-Antispam-Message-Info: juuvIrFxQ/RC7VCxiaMZo8d6vRu/hBckXv0aYGYdsxgKJNOZNdqOC/J3k3vvwV3H92lxRSml/T8CIQXAt9a9J/l6W+3bLn2bzmOVjsrzlJBM/+7b9tHQ1bKkx0QVOkVB2bsOBnoW7E4nJVcRdAStga8D/fh3Mr9n/nFIDklo9UqniT3Maj9mYZT8SAW5zIaJ/0S1Wv1nlaFWdcG8Q+slhWnyDpHH85jVseibLAL17bo4oOhnFG2DsPxCF9wugmGks9ggoSct54BFWz30Eck/nyGCx0+1k4/YLd0n+au7SSvYj/HDTA7F4kOfKokeXDncjJjE0iqhVCFyybcr3khzb08LvXwlE5Y82Q3BiYmipjHk+XouZfCqexw2gihMTZSWKFCAAUaPtko/nhvWTtn8YFklSB65Q7hE1Pi3YP0E6p9X+Jx2VIk47/oPxoZlg82Ri7w74JEFVC8Vz6oToD2OAqJi6o5YTO4gVK62oeT/amE0X4B5xmYsV9zie1WOiMBV//Qc7CLD9f/SlOEJbTjnSA0dyJqmSiSfRxsj7qyB8N7xrJMGzJYjDISpkQxtl83pgsbuePUiMi3lCnFnRlpCEHsB+Pt+E2JsPENldfbKEXVdTFeAVvsneeDyjF1lBUCgPtTRrgPmgRW+dX4A7N9f1z6hezR8GzcuCmaGPoYTSpi5SJlTJ0EcMrR+vAyBB0oZbL+hzTtq5d2112uTrG0niQ== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VE1PR04MB7216.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(19092799006)(7416014)(376014)(1800799024)(23010399003)(366016)(10067099003)(11063799006)(56012099006)(6133799003)(21046099003)(22082099003)(18002099003)(18092099006)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?6jYNxkj8Lu2Ig2H9gQLcZLGn13PnflOreijAu4eb1QuuTX2bYrR+DPUdveQq?= =?us-ascii?Q?n+j4Q3RxfHQw20prU0vW199WSHkpGhkw20fBMQMc+sQ5OQ35a+r4EFXzNZld?= =?us-ascii?Q?rXzYHQ8fpzDetvmgAbSgh80wH/nXYbgkXFOY8exjVD8pXd0XJhl4iT2HbxmH?= =?us-ascii?Q?sOOZESG0ciMWA6yr8TBUYSzmPhRW+ZMZ4S7EKDoPRNG7+XxJIjNV6vs/4SVM?= =?us-ascii?Q?3T+iz4rIVgTa1ZD2ixM86jZusT4Os/Eg3Vx6Pga+jl7d+yr01Q5KonaWa/Lb?= =?us-ascii?Q?KRhXPFzBZ5LxcYD7pU+y4tlVP5CisaLvOZc65r27X6O0fHlhrZvXi8+3tona?= =?us-ascii?Q?FQuUdnsqazdEfu+m5OsongaVtfLlZCKH4USqGse13x4OoHqYUpJjxniSLt7A?= =?us-ascii?Q?6+zHEf6w6kIB21kz9Xd97u5H26IQztYj9Q3fyYdUDOuEHAEsF97Opa/0WCnq?= =?us-ascii?Q?aNYgL+tXDIXX7gzzh24CCI6O65SWS2S2/U79tpOrBAzUhvoi1SrIVP+JrI7U?= =?us-ascii?Q?+X8IJNAOudGmZvdboiGI+0GHRvrCqtfMX8TElyKIdPTNJgf3ED+RifW423Np?= =?us-ascii?Q?QAz02v9Lr2chejP+XGJbBRGkaVO2MLqrSxIANT+RbkmZu7PuzTDVYTQaXMIc?= =?us-ascii?Q?pssejABWt91wFAfmvR3pfTPGHMZbhHcpep/qiQkiweqbaTvjMD3KwkCSfO1k?= =?us-ascii?Q?eZ5ouJp/yCZErnXhRFr7O7lerqDJ2M6iyWAkho9MsOtDt71kUZREwXRdZHqG?= =?us-ascii?Q?4w5H2SPHQ7BRIt7y3W+uBGXdVpI3I+KW1TDnJaYfKU3ykz32oVXzMkDycZ0N?= =?us-ascii?Q?saXNKGJU4vdhfFbD6tZwqMqO1xHF63YmKGYD/ENKqJm/08wae8O4/ht7yp6U?= =?us-ascii?Q?zKLq74bsjlzVQiiwgFPmc/eBHK+u8e7PuIExtKsWvsfcmVVpwOw7woKGJtT8?= =?us-ascii?Q?4cAIRrC+tZiX1s2wEfnVeSIqqHa8LONnI2JHiBxFZJ8YxuakgWFqgt1TrY+m?= =?us-ascii?Q?W8C+H3dgAofnWR3UYz5H9jZaGU0ZZRTOi1qgyL/GJSAEihnYWnUBiZqTtojC?= =?us-ascii?Q?iuzqQwidDMbqmsU7rgEzrzE3jB+jsWBvZEFChJKvksfmPefFtcaP4/15UX0L?= =?us-ascii?Q?Wq17pkjgNAgBRjKNBjFSdAG5Od8AY4BgIKRHz/uJ3qSHlSd4Rv7qWpPkzq5Z?= =?us-ascii?Q?kTd2uHt1PFFNeQ2zGhnDJ4pcYgv0dBNu6da3pN0D5XR871txMTAyOpiixIJn?= =?us-ascii?Q?bZJF3SdLOuErbcu8/EtAXL0kDz3bAX7pTHV/Z7P6ASTeAbWeXCQJW/pH0SHd?= =?us-ascii?Q?6D34vk3Xw/wVOQjjdleA+tZKWxDdQpNqvbzxC2NpK/tnI5X/+vOtO9Kohjhw?= =?us-ascii?Q?qUSqQhk0kd8kKMqYhmIu92zRvKU01RsYwjd80IYThvg9dRQ0EFRDuMqHmON2?= =?us-ascii?Q?G5Y46lz1T3HBClKTxNHxyv0mgMiLJpCppKfzbNVRHsgeJTqL7yX0aeg1laxw?= =?us-ascii?Q?LOM6oPbRH7BbBZEp5b3wC1F1xWm/AhXP06TJdW63soCOR6/zMZ+ELgunikUP?= =?us-ascii?Q?02QTMIFkO74LmixlIbeoExSBpkJKD7qmvs2R2o0oEkz7KvyrgoAvSgQWR4fT?= =?us-ascii?Q?eYcjhvbuRspbzDgNPlInkK6yCTrh1gPHweH/XTyqlAIJxtuMKRLAod8CDqgG?= =?us-ascii?Q?0jw+WFmQ/Cn/gCEf3vjpG9If/vFwAkzSaHBmt1exIVb4zzdN6eMlUFukEWHz?= =?us-ascii?Q?VYRWVBE8RbvoRoSIp7+8FI8kXjrnFV0cTED++45uGeBvzccFSEMM?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 321bfca1-529f-4a01-5e91-08df0e5e36ff X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB7216.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Sep 2026 10:36:32.3792 (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: TvlFlS7DYG67hq5WPTw60ve3Z4Iarrnzxkgn3mlyPrIXJGl5l2W8tAhsSiaudmEmGnwcL/YVFxF5oG9H+YJHAocOQbMvocTNZaoeiR67wiz14HPPQ/tOhGMk9XSGEhqL X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB8PR04MB7066 Content-Type: text/plain; charset="utf-8" From: Wei Fang ENETC v4 VF hardware supports MAC address filtering, but the underlying resources (the PSIPMMR register and per-SI hash filter tables) are owned by the PF. Add VSI-to-PSI mailbox messages so a VF can request MAC filter configuration from the PF, using two new command IDs under the existing MAC filter class (0x20): 1. ENETC_MSG_SET_MAC_HASH_TABLE (cmd_id 3): program the unicast and/or multicast MAC hash filter table. Unicast filtering is only allowed for a trusted VF, since it could be used to receive traffic destined for other SIs. Multicast filtering is allowed even for an untrusted VF, but limited to ENETC_VF_MC_HASH_BITS_MAX (8) buckets, enough for basic operation such as IPv6 neighbor discovery and mDNS; a trusted VF may use all 64 buckets. 2. ENETC_MSG_SET_MAC_PROMISC_MODE (cmd_id 5): enable or disable unicast/ multicast promiscuous mode, and optionally flush the hash filter table. Enabling promiscuous mode requires a trusted VF; flushing the table alone does not. The PSIPMMR register is a shared resource accessed by both enetc4_pf_set_rx_mode() and the VF message handler via a non-atomic read-modify-write, so protect these accesses with si->gen_lock to avoid lost updates on SMP. When a VF loses trusted status via ndo_set_vf_trust(), clear its unicast hash filter and disable promiscuous mode so it cannot receive traffic beyond its allowed scope. Signed-off-by: Wei Fang --- .../ethernet/freescale/enetc/enetc4_debugfs.c | 51 ++++-- .../net/ethernet/freescale/enetc/enetc4_pf.c | 7 +- .../ethernet/freescale/enetc/enetc_mailbox.h | 42 +++++ .../net/ethernet/freescale/enetc/enetc_msg.c | 160 +++++++++++++++++- .../net/ethernet/freescale/enetc/enetc_pf.h | 1 + .../freescale/enetc/enetc_pf_common.c | 68 ++++++-- .../net/ethernet/freescale/enetc/enetc_vf.c | 6 +- 7 files changed, 300 insertions(+), 35 deletions(-) diff --git a/drivers/net/ethernet/freescale/enetc/enetc4_debugfs.c b/driver= s/net/ethernet/freescale/enetc/enetc4_debugfs.c index 5029038bf99f..c73722e2285f 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc4_debugfs.c +++ b/drivers/net/ethernet/freescale/enetc/enetc4_debugfs.c @@ -6,24 +6,48 @@ #include #include =20 -#include "enetc_pf.h" +#include "enetc_pf_common.h" #include "enetc4_debugfs.h" =20 -static void enetc_show_si_mac_hash_filter(struct seq_file *s, int i) +static void enetc_vf_state_lock(struct enetc_pf *pf, int vf_id) { - struct enetc_si *si =3D s->private; - struct enetc_hw *hw =3D &si->hw; + struct enetc_vf_state *vf_state; + + if (vf_id < 0) + return; + + vf_state =3D &pf->vf_state[vf_id]; + mutex_lock(&vf_state->lock); +} + +static void enetc_vf_state_unlock(struct enetc_pf *pf, int vf_id) +{ + struct enetc_vf_state *vf_state; + + if (vf_id < 0) + return; + + vf_state =3D &pf->vf_state[vf_id]; + mutex_unlock(&vf_state->lock); +} + +static void enetc_show_si_mac_hash_filter(struct seq_file *s, int si_id) +{ + struct enetc_pf *pf =3D enetc_si_priv(s->private); + struct enetc_hw *hw =3D &pf->si->hw; u32 hash_h, hash_l; =20 - hash_l =3D enetc_port_rd(hw, ENETC4_PSIUMHFR0(i)); - hash_h =3D enetc_port_rd(hw, ENETC4_PSIUMHFR1(i)); + enetc_vf_state_lock(pf, si_id - 1); + hash_l =3D enetc_port_rd(hw, ENETC4_PSIUMHFR0(si_id)); + hash_h =3D enetc_port_rd(hw, ENETC4_PSIUMHFR1(si_id)); seq_printf(s, "SI %d unicast MAC hash filter: 0x%08x%08x\n", - i, hash_h, hash_l); + si_id, hash_h, hash_l); =20 - hash_l =3D enetc_port_rd(hw, ENETC4_PSIMMHFR0(i)); - hash_h =3D enetc_port_rd(hw, ENETC4_PSIMMHFR1(i)); + hash_l =3D enetc_port_rd(hw, ENETC4_PSIMMHFR0(si_id)); + hash_h =3D enetc_port_rd(hw, ENETC4_PSIMMHFR1(si_id)); seq_printf(s, "SI %d multicast MAC hash filter: 0x%08x%08x\n", - i, hash_h, hash_l); + si_id, hash_h, hash_l); + enetc_vf_state_unlock(pf, si_id - 1); } =20 static int enetc_mac_filter_show(struct seq_file *s, void *data) @@ -37,7 +61,11 @@ static int enetc_mac_filter_show(struct seq_file *s, voi= d *data) int err =3D 0; int i; =20 + /* Prevent concurrent access from causing PSIPMMR to be modified */ + spin_lock(&pf->si->gen_lock); val =3D enetc_port_rd(hw, ENETC4_PSIPMMR); + spin_unlock(&pf->si->gen_lock); + for (i =3D 0; i < num_si; i++) { seq_printf(s, "SI %d Unicast Promiscuous mode: %s\n", i, str_enabled_disabled(PSIPMMR_SI_MAC_UP(i) & val)); @@ -45,13 +73,12 @@ static int enetc_mac_filter_show(struct seq_file *s, vo= id *data) str_enabled_disabled(PSIPMMR_SI_MAC_MP(i) & val)); } =20 + rtnl_lock(); /* MAC hash filter table */ for (i =3D 0; i < num_si; i++) enetc_show_si_mac_hash_filter(s, i); =20 user =3D &pf->si->ntmp_user; - rtnl_lock(); - if (bitmap_empty(user->maft_eid_bitmap, user->maft_num_entries)) goto unlock_rtnl; =20 diff --git a/drivers/net/ethernet/freescale/enetc/enetc4_pf.c b/drivers/net= /ethernet/freescale/enetc/enetc4_pf.c index eedcaf2d7bc9..abe1e8dafe24 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc4_pf.c +++ b/drivers/net/ethernet/freescale/enetc/enetc4_pf.c @@ -12,11 +12,6 @@ =20 #define ENETC_SI_MAX_RING_NUM 8 =20 -#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) - static void enetc4_get_port_caps(struct enetc_pf *pf) { struct enetc_hw *hw =3D &pf->si->hw; @@ -528,8 +523,10 @@ static int enetc4_pf_set_rx_mode(struct net_device *nd= ev, type =3D ENETC_MAC_FILTER_TYPE_ALL; } =20 + spin_lock(&si->gen_lock); enetc_set_si_uc_promisc(si, 0, uc_promisc); enetc_set_si_mc_promisc(si, 0, mc_promisc); + spin_unlock(&si->gen_lock); =20 if (uc_promisc) { enetc_set_si_uc_hash_filter(si, 0, 0); diff --git a/drivers/net/ethernet/freescale/enetc/enetc_mailbox.h b/drivers= /net/ethernet/freescale/enetc/enetc_mailbox.h index 832d2f6ddcd8..6fa66c863748 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc_mailbox.h +++ b/drivers/net/ethernet/freescale/enetc/enetc_mailbox.h @@ -96,6 +96,17 @@ #define ENETC_PF_MSG_CLASS_CODE_U8 GENMASK(7, 0) #define ENETC_PF_MSG_CLASS_ID GENMASK(15, 8) =20 +#define ENETC_MAC_HASH_TABLE_SIZE_64 0 +#define ENETC_MSG_MAC_HASH_SIZE GENMASK(5, 0) +#define ENETC_MSG_MAC_TYPE GENMASK(7, 6) +#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) + +#define ENETC_MSG_MAC_FLUSH_MACS BIT(0) +#define ENETC_MSG_MAC_PROMISC_MODE BIT(1) + enum enetc_msg_class_id { /* Class ID for PSI-to-VSI messages */ ENETC_MSG_CLASS_ID_CMD_SUCCESS =3D 1, @@ -119,6 +130,8 @@ enum enetc_msg_class_id { =20 enum enetc_msg_mac_filter_cmd_id { ENETC_MSG_SET_PRIMARY_MAC, + ENETC_MSG_SET_MAC_HASH_TABLE =3D 3, + ENETC_MSG_SET_MAC_PROMISC_MODE =3D 5, }; =20 enum enetc_msg_ip_revision_cmd_id { @@ -141,6 +154,9 @@ enum enetc_msg_link_speed_cmd_id { /* Class-specific error return codes of MAC filter */ enum enetc_mac_filter_class_code { ENETC_MF_CLASS_CODE_INVALID_MAC, + ENETC_MF_CLASS_CODE_INVALID_TYPE =3D 4, + /* Unicast Filter Is Denied */ + ENETC_MF_CLASS_CODE_UCF_DENY =3D 5, }; =20 /* Class-specific notifications/codes of link status */ @@ -204,6 +220,32 @@ struct enetc_msg_mac_exact_filter { struct enetc_mac_addr mac[]; }; =20 +/* message format of class_id 0x20 for hash MAC filter. + * cmd_id 0x3: set MAC hash table + */ +struct enetc_msg_mac_hash_filter { + struct enetc_msg_header hdr; + /* bit 0 ~ 5: ENETC_MSG_MAC_HASH_SIZE + * bit 6~7: ENETC_MSG_MAC_TYPE + */ + u8 sz_type; + u8 resv[3]; + u32 hash_tbl[]; +}; + +/* message format of class_id 0x20 for MAC promiscuous mode. + * cmd_id 0x5: set MAC promiscuous mode + */ +struct enetc_msg_mac_promisc_mode { + struct enetc_msg_header hdr; + /* bit 0: ENETC_MSG_MAC_FLUSH_MACS + * bit 1: ENETC_MSG_MAC_PROMISC_MODE + * bit 6~7: ENETC_MSG_MAC_TYPE + */ + u8 config; + u8 resv[15]; +}; + /* The generic message format applies to the following messages: * Get IP revision message, class_id 0xf0. * cmd_id 1: get IP minor revision diff --git a/drivers/net/ethernet/freescale/enetc/enetc_msg.c b/drivers/net= /ethernet/freescale/enetc/enetc_msg.c index 08a9ffdd3eb0..22f5485e968a 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc_msg.c +++ b/drivers/net/ethernet/freescale/enetc/enetc_msg.c @@ -9,6 +9,11 @@ ENETC_MSG_CLASS_ID_CMD_NOT_SUPPORT) #define ENETC_PF_MSG_PERM_DENY FIELD_PREP(ENETC_PF_MSG_CLASS_ID, \ ENETC_MSG_CLASS_ID_PERMISSION_DENY) +#define ENETC_PF_MSG_INV_LEN FIELD_PREP(ENETC_PF_MSG_CLASS_ID, \ + ENETC_MSG_CLASS_ID_INVALID_MSG_LEN) +#define ENETC_PF_MSG_MF(code) (FIELD_PREP(ENETC_PF_MSG_CLASS_ID, \ + ENETC_MSG_CLASS_ID_MAC_FILTER) | \ + FIELD_PREP(ENETC_PF_MSG_CLASS_CODE, (code))) =20 static void enetc_msg_disable_mr_int(struct enetc_pf *pf) { @@ -79,10 +84,7 @@ static u16 enetc_msg_set_vf_primary_mac_addr(struct enet= c_pf *pf, int vf_id, if (!is_valid_ether_addr(addr)) { dev_err_ratelimited(dev, "VF%d attempted to set invalid MAC\n", vf_id); - pf_msg =3D FIELD_PREP(ENETC_PF_MSG_CLASS_ID, - ENETC_MSG_CLASS_ID_MAC_FILTER) | - FIELD_PREP(ENETC_PF_MSG_CLASS_CODE, - ENETC_MF_CLASS_CODE_INVALID_MAC); + pf_msg =3D ENETC_PF_MSG_MF(ENETC_MF_CLASS_CODE_INVALID_MAC); goto vf_state_unlock; } =20 @@ -108,6 +110,130 @@ static u16 enetc_msg_set_vf_primary_mac_addr(struct e= netc_pf *pf, int vf_id, return pf_msg; } =20 +static u16 enetc_msg_set_vf_mac_hash_filter(struct enetc_pf *pf, int vf_id, + void *vf_msg) +{ + struct enetc_vf_state *vf_state =3D &pf->vf_state[vf_id]; + struct enetc_msg_mac_hash_filter *msg =3D vf_msg; + u16 pf_msg =3D ENETC_PF_MSG_SUCCESS; + struct enetc_si *si =3D pf->si; + int si_id =3D vf_id + 1; + u64 uc_hash, mc_hash; + bool trusted; + int type; + + /* Currently, hardware only supports 64 bits table size */ + if (FIELD_GET(ENETC_MSG_MAC_HASH_SIZE, msg->sz_type) !=3D + ENETC_MAC_HASH_TABLE_SIZE_64) + return ENETC_PF_MSG_NOTSUPP; + + mutex_lock(&vf_state->lock); + + /* For an untrusted VF, unicast MAC hash filtering is not permitted. + * For multicast, the MAC hash filter is strictly limited to a maximum + * of 8 bits to satisfy its basic multicast communication requirements + * while preventing potential network abuse. + */ + trusted =3D !!(vf_state->flags & ENETC_VF_FLAG_TRUSTED); + type =3D FIELD_GET(ENETC_MSG_MAC_TYPE, msg->sz_type); + switch (type) { + case ENETC_MAC_FILTER_TYPE_UC: + if (!trusted) { + pf_msg =3D ENETC_PF_MSG_PERM_DENY; + goto vf_state_unlock; + } + + uc_hash =3D (u64)msg->hash_tbl[1] << 32 | msg->hash_tbl[0]; + enetc_set_si_uc_hash_filter(si, si_id, uc_hash); + break; + case ENETC_MAC_FILTER_TYPE_MC: + mc_hash =3D (u64)msg->hash_tbl[1] << 32 | msg->hash_tbl[0]; + if (!trusted && + hweight64(mc_hash) > ENETC_VF_MC_HASH_BITS_MAX) { + pf_msg =3D ENETC_PF_MSG_PERM_DENY; + goto vf_state_unlock; + } + + enetc_set_si_mc_hash_filter(si, si_id, mc_hash); + break; + case ENETC_MAC_FILTER_TYPE_ALL: + if (!msg->hdr.len) { + pf_msg =3D ENETC_PF_MSG_INV_LEN; + goto vf_state_unlock; + } + + uc_hash =3D (u64)msg->hash_tbl[1] << 32 | msg->hash_tbl[0]; + mc_hash =3D (u64)msg->hash_tbl[3] << 32 | msg->hash_tbl[2]; + + if (!trusted && + (hweight64(mc_hash) <=3D ENETC_VF_MC_HASH_BITS_MAX)) { + enetc_set_si_mc_hash_filter(si, si_id, mc_hash); + pf_msg =3D ENETC_PF_MSG_MF(ENETC_MF_CLASS_CODE_UCF_DENY); + goto vf_state_unlock; + } + + if (!trusted) { + pf_msg =3D ENETC_PF_MSG_PERM_DENY; + goto vf_state_unlock; + } + + enetc_set_si_uc_hash_filter(si, si_id, uc_hash); + enetc_set_si_mc_hash_filter(si, si_id, mc_hash); + break; + default: + pf_msg =3D ENETC_PF_MSG_MF(ENETC_MF_CLASS_CODE_INVALID_TYPE); + } + +vf_state_unlock: + mutex_unlock(&vf_state->lock); + + return pf_msg; +} + +static u16 enetc_msg_set_vf_mac_promisc_mode(struct enetc_pf *pf, int vf_i= d, + void *vf_msg) +{ + struct enetc_vf_state *vf_state =3D &pf->vf_state[vf_id]; + struct enetc_msg_mac_promisc_mode *msg =3D vf_msg; + u16 pf_msg =3D ENETC_PF_MSG_SUCCESS; + struct enetc_si *si =3D pf->si; + bool promisc, flush_macs; + int si_id =3D vf_id + 1; + int type; + + flush_macs =3D !!(msg->config & ENETC_MSG_MAC_FLUSH_MACS); + type =3D FIELD_GET(ENETC_MSG_MAC_TYPE, msg->config); + if (!type) + return ENETC_PF_MSG_MF(ENETC_MF_CLASS_CODE_INVALID_TYPE); + + mutex_lock(&vf_state->lock); + + promisc =3D !!(msg->config & ENETC_MSG_MAC_PROMISC_MODE); + if (promisc && !(vf_state->flags & ENETC_VF_FLAG_TRUSTED)) { + pf_msg =3D ENETC_PF_MSG_PERM_DENY; + goto vf_state_unlock; + } + + spin_lock(&si->gen_lock); + if (type & ENETC_MAC_FILTER_TYPE_UC) + enetc_set_si_uc_promisc(si, si_id, promisc); + + if (type & ENETC_MAC_FILTER_TYPE_MC) + enetc_set_si_mc_promisc(si, si_id, promisc); + spin_unlock(&si->gen_lock); + + if ((type & ENETC_MAC_FILTER_TYPE_UC) && flush_macs) + enetc_set_si_uc_hash_filter(si, si_id, 0); + + if ((type & ENETC_MAC_FILTER_TYPE_MC) && flush_macs) + enetc_set_si_mc_hash_filter(si, si_id, 0); + +vf_state_unlock: + mutex_unlock(&vf_state->lock); + + return pf_msg; +} + static u16 enetc_msg_handle_mac_filter(struct enetc_pf *pf, int vf_id, void *vf_msg) { @@ -116,6 +242,10 @@ static u16 enetc_msg_handle_mac_filter(struct enetc_pf= *pf, int vf_id, switch (msg_hdr->cmd_id) { case ENETC_MSG_SET_PRIMARY_MAC: return enetc_msg_set_vf_primary_mac_addr(pf, vf_id, vf_msg); + case ENETC_MSG_SET_MAC_HASH_TABLE: + return enetc_msg_set_vf_mac_hash_filter(pf, vf_id, vf_msg); + case ENETC_MSG_SET_MAC_PROMISC_MODE: + return enetc_msg_set_vf_mac_promisc_mode(pf, vf_id, vf_msg); default: return ENETC_PF_MSG_NOTSUPP; } @@ -333,8 +463,7 @@ static void enetc_msg_handle_rxmsg(struct enetc_pf *pf,= int vf_id, if (msg_size > ENETC_DEFAULT_MSG_SIZE) { dev_err_ratelimited(dev, "Invalid message size: %u\n", msg_size); - *pf_msg =3D FIELD_PREP(ENETC_PF_MSG_CLASS_ID, - ENETC_MSG_CLASS_ID_INVALID_MSG_LEN); + *pf_msg =3D ENETC_PF_MSG_INV_LEN; return; } =20 @@ -352,6 +481,14 @@ static void enetc_msg_handle_rxmsg(struct enetc_pf *pf= , int vf_id, } =20 memcpy(msg, msg_swbd->vaddr, msg_size); + msg_hdr =3D (struct enetc_msg_header *)msg; + + /* Check message length whether is changed */ + if (ENETC_MSG_SIZE(msg_hdr->len) !=3D msg_size) { + *pf_msg =3D ENETC_PF_MSG_INV_LEN; + goto free_msg; + } + if (!enetc_msg_check_crc16(msg, msg_size)) { dev_err_ratelimited(dev, "VSI to PSI Message CRC16 error\n"); *pf_msg =3D FIELD_PREP(ENETC_PF_MSG_CLASS_ID, @@ -362,7 +499,6 @@ static void enetc_msg_handle_rxmsg(struct enetc_pf *pf,= int vf_id, =20 /* Default to not supported */ *pf_msg =3D ENETC_PF_MSG_NOTSUPP; - msg_hdr =3D (struct enetc_msg_header *)msg; =20 /* Currently, asynchronous actions are not supported */ if (FIELD_GET(ENETC_VF_MSG_COOKIE, msg_hdr->cookie)) { @@ -536,6 +672,7 @@ static void enetc_msg_clear_vf_config(struct enetc_pf *= pf, int vf_id) { struct enetc_vf_state *vf_state =3D &pf->vf_state[vf_id]; struct enetc_si *si =3D pf->si; + int si_id =3D vf_id + 1; =20 /* For ENETC v1, we only support setting the VF's MAC address via * VSI-to-PSI messages, so there is no configuration to clear. @@ -543,9 +680,18 @@ static void enetc_msg_clear_vf_config(struct enetc_pf = *pf, int vf_id) if (is_enetc_rev1(si)) return; =20 + mutex_lock(&vf_state->lock); + spin_lock(&si->gen_lock); vf_state->msg_fail_cnt =3D 0; + enetc_set_si_uc_promisc(si, si_id, false); + enetc_set_si_mc_promisc(si, si_id, false); spin_unlock(&si->gen_lock); + + enetc_set_si_uc_hash_filter(si, si_id, 0); + enetc_set_si_mc_hash_filter(si, si_id, 0); + + mutex_unlock(&vf_state->lock); } =20 static void enetc_msg_psi_free(struct enetc_pf *pf) diff --git a/drivers/net/ethernet/freescale/enetc/enetc_pf.h b/drivers/net/= ethernet/freescale/enetc/enetc_pf.h index 88a558649c68..c5eda6c8eaf0 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc_pf.h +++ b/drivers/net/ethernet/freescale/enetc/enetc_pf.h @@ -6,6 +6,7 @@ =20 #define ENETC_PF_NUM_RINGS 8 #define ENETC_VLAN_HT_SIZE 64 +#define ENETC_VF_MC_HASH_BITS_MAX 8 /* For untrusted VFs */ =20 enum enetc_vf_flags { ENETC_VF_FLAG_PF_SET_MAC =3D BIT(0), diff --git a/drivers/net/ethernet/freescale/enetc/enetc_pf_common.c b/drive= rs/net/ethernet/freescale/enetc/enetc_pf_common.c index 1b2ca2b31a80..9dbb0a1417ea 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc_pf_common.c +++ b/drivers/net/ethernet/freescale/enetc/enetc_pf_common.c @@ -151,26 +151,44 @@ void enetc_set_si_uc_hash_filter(struct enetc_si *si,= int si_id, u64 hash) } EXPORT_SYMBOL_GPL(enetc_set_si_uc_hash_filter); =20 -void enetc_set_si_mc_hash_filter(struct enetc_si *si, int si_id, u64 hash) +static void enetc_get_psimmhfr_offsets(struct enetc_si *si, int si_id, + int *psimmhfr0, int *psimmhfr1) { - int psimmhfr0_off, psimmhfr1_off; - struct enetc_hw *hw =3D &si->hw; - if (is_enetc_rev1(si)) { bool err =3D si->errata & ENETC_ERR_UCMCSWP; =20 - psimmhfr0_off =3D ENETC_PSIMMHFR0(si_id, err); - psimmhfr1_off =3D ENETC_PSIMMHFR1(si_id); + *psimmhfr0 =3D ENETC_PSIMMHFR0(si_id, err); + *psimmhfr1 =3D ENETC_PSIMMHFR1(si_id); } else { - psimmhfr0_off =3D ENETC4_PSIMMHFR0(si_id); - psimmhfr1_off =3D ENETC4_PSIMMHFR1(si_id); + *psimmhfr0 =3D ENETC4_PSIMMHFR0(si_id); + *psimmhfr1 =3D ENETC4_PSIMMHFR1(si_id); } +} =20 +void enetc_set_si_mc_hash_filter(struct enetc_si *si, int si_id, u64 hash) +{ + int psimmhfr0_off, psimmhfr1_off; + struct enetc_hw *hw =3D &si->hw; + + enetc_get_psimmhfr_offsets(si, si_id, &psimmhfr0_off, &psimmhfr1_off); enetc_port_wr(hw, psimmhfr0_off, lower_32_bits(hash)); enetc_port_wr(hw, psimmhfr1_off, upper_32_bits(hash)); } EXPORT_SYMBOL_GPL(enetc_set_si_mc_hash_filter); =20 +static u64 enetc_get_si_mc_hash_filter(struct enetc_si *si, int si_id) +{ + int psimmhfr0_off, psimmhfr1_off; + struct enetc_hw *hw =3D &si->hw; + u32 hash_h, hash_l; + + enetc_get_psimmhfr_offsets(si, si_id, &psimmhfr0_off, &psimmhfr1_off); + hash_l =3D enetc_port_rd(hw, psimmhfr0_off); + hash_h =3D enetc_port_rd(hw, psimmhfr1_off); + + return ((u64)hash_h << 32) | hash_l; +} + void enetc_set_si_vlan_promisc(struct enetc_si *si, int si_id, bool promis= c) { struct enetc_hw *hw =3D &si->hw; @@ -591,6 +609,8 @@ int enetc_pf_set_vf_trust(struct net_device *ndev, int = vf, bool setting) struct enetc_ndev_priv *priv =3D netdev_priv(ndev); struct enetc_pf *pf =3D enetc_si_priv(priv->si); struct enetc_vf_state *vf_state; + struct enetc_si *si =3D priv->si; + int si_id =3D vf + 1; =20 if (vf >=3D pf->total_vfs) return -EINVAL; @@ -598,11 +618,39 @@ int enetc_pf_set_vf_trust(struct net_device *ndev, in= t vf, bool setting) vf_state =3D &pf->vf_state[vf]; mutex_lock(&vf_state->lock); =20 - if (setting) + if (setting) { vf_state->flags |=3D ENETC_VF_FLAG_TRUSTED; - else + } else { + u64 hash; + vf_state->flags &=3D ~ENETC_VF_FLAG_TRUSTED; =20 + /* For ENETC v1, we only support setting the VF's MAC address + * via VSI-to-PSI messages. Unicast and multicast promiscuous + * mode and hash filters are not supported, so there is no need + * to clear these configurations. + */ + if (is_enetc_rev1(si)) + goto vf_state_unlock; + + /* Disable unicast and multicast promiscuous modes */ + spin_lock(&si->gen_lock); + enetc_set_si_uc_promisc(si, si_id, false); + enetc_set_si_mc_promisc(si, si_id, false); + spin_unlock(&si->gen_lock); + + /* Clear unicast hash filter */ + enetc_set_si_uc_hash_filter(si, si_id, 0); + + /* Clear multicast hash filter if its set bits exceed + * ENETC_VF_MC_HASH_BITS_MAX. + */ + hash =3D enetc_get_si_mc_hash_filter(si, si_id); + if (hweight64(hash) > ENETC_VF_MC_HASH_BITS_MAX) + enetc_set_si_mc_hash_filter(si, si_id, 0); + } + +vf_state_unlock: mutex_unlock(&vf_state->lock); =20 return 0; diff --git a/drivers/net/ethernet/freescale/enetc/enetc_vf.c b/drivers/net/= ethernet/freescale/enetc/enetc_vf.c index 7dcb4a0246f5..a60af40d8546 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc_vf.c +++ b/drivers/net/ethernet/freescale/enetc/enetc_vf.c @@ -107,8 +107,12 @@ static int enetc_msg_vsi_send(struct enetc_si *si, str= uct enetc_msg_swbd *msg) case ENETC_MSG_CLASS_ID_CMD_TIMEOUT: err =3D -ETIME; break; - case ENETC_MSG_CLASS_ID_INVALID_MSG_LEN: case ENETC_MSG_CLASS_ID_MAC_FILTER: + if (FIELD_GET(ENETC_PF_MSG_CLASS_CODE, pf_msg) =3D=3D + ENETC_MF_CLASS_CODE_UCF_DENY) + return -EACCES; + fallthrough; + case ENETC_MSG_CLASS_ID_INVALID_MSG_LEN: err =3D -EINVAL; break; case ENETC_MSG_CLASS_ID_CMD_NOT_PERMITTED: --=20 2.34.1 From nobody Fri Sep 25 19:15:32 2026 Received: from OSPPR02CU001.outbound.protection.outlook.com (mail-norwayeastazon11013019.outbound.protection.outlook.com [40.107.159.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1E0E2525A8E; Wed, 9 Sep 2026 10:36:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.159.19 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788950203; cv=fail; b=FpjDor7zg30ltvj2INKYW3Iac1UnXg+3j7wzWT96ctb3rmL2FkcNZBi3nzLUDu8TP/oWTkL5GAxybVkDxZjbviHVqJCyjlHSkG7ToYz6zyPcdLMRD2gAUUBozMpkDhORKcNKI7+xK2KhbzDw7kTswR5vnNhFcsB0l/Y8G5L8pyY= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788950203; c=relaxed/simple; bh=O3ORr5+0JXLZEPqLmfAoQ/LoqXN3s5S0WtTX84avgD4=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=pxCAOuWqlHcXHTQ0nB5Ti/NhluhYIt5IN2L6IQJ0AD3WW1KxZEbYxeAJr6PDxWC77gDN6Z3yqvrruFLbiHa4cNJY2x5aIBXtVwIKuNpm3k0VaG4B+bT1n1GPslq2Uq8V0G7wfO5zOx9u+dq8SJddmwjll9OjjbE1w0mve5YQtyw= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com; spf=pass smtp.mailfrom=oss.nxp.com; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b=hgvYVoVr; arc=fail smtp.client-ip=40.107.159.19 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b="hgvYVoVr" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=j2v06nz2TIOBYhiBJUoUqfz52RmRFTuelAaeOopmFr5i4sXkTRPkYkqPlgufKZBbscms1sefhGntxQgd/YN+5bkL/z2sy5lsmpQ+zPHZuUhgGWiKExhBUZOCpuhPQ75X/yBv4SRyEhgNmikIiTGUSQ/uwiOVt5whLkRywWGwo/ypdMneHnxJ2F+sX+IeW3Nms7bv76ebzRg8y2PQS9HgUwIaLkCIKZfoWWJCYd/kGjoOFsY1NDIwbnN1ALIA1xu3XUOW3kpQNeyjoSQ+pX62Q8h3FW48fFaY+ecppP6smVh4v5+jG33OJQaB7E5mraRAQJXedAQ8skJLuoshPuZkCQ== 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=ZXZSpiFVHNek1yJ5ukn0PaAYvFvD9aT73Qcv/tFiMKg=; b=fWBCOontX7wwnn3xyOCfkFxfJ74nupP+kEKuB5GAFuOzswPT395RJfipIcpXJllf0TeCPLEtZ9NmQGecPEPqUTn7H5ITwvGxx06jIBX9mvdJhsU3y13BsoQyqoyvbA/6W0KcID9pFh2G+p4zEnZU1GzvVThwk1BUYXob9uUny5/iB+4CyMjG7oklZcdxl+CGuEuCV51GwFrY+Ihi3QeX2orUiyO7FCKg5yOkkpN9TorE2iJiFjiDuTdD16/AhsO77vmf3Hm/D/E/e7zLTN7k/FN4ZipsIt39uJ2am9GPV5xW4iGqyasBCTB2/ATTU2CrUgRr4Q6BCO5acHbJoqq2Pw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oss.nxp.com; dmarc=pass action=none header.from=oss.nxp.com; dkim=pass header.d=oss.nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=NXP1.onmicrosoft.com; s=selector1-NXP1-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ZXZSpiFVHNek1yJ5ukn0PaAYvFvD9aT73Qcv/tFiMKg=; b=hgvYVoVrk4S3oVhYTopqv8CbiMJIywgc5U7ZuV0FGgqUElKpN4IztjN0Uu2syCg6FDDm5CHOIQhAeTBeGxcTQt+d4XOXXrFcOH8MM/DWcJr96aNh5O5lgN4B3aI8E6ZsKiUEFdve8YPeSzuX6HDpDkE5odwRsF+LqYZhnzBDHDN62Kb7F86bxk+GL8BHzEWTBGk5PzgMzF9V3Spl/kCGGsc2k65WTGj8PE7KWqMDsOsH74AZK0qrMumjXLPcknxOBJnxkBfN+BZarc9ir4pi5ObD7v9HuffIt9mG39iHcApgz8+IN7Sjv97ZNuGAxlZ8nyxJKKkrpWI7PQdaXDDzdw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from VE1PR04MB7216.eurprd04.prod.outlook.com (2603:10a6:800:1b0::22) by DB8PR04MB7066.eurprd04.prod.outlook.com (2603:10a6:10:12e::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.406.8; Wed, 9 Sep 2026 10:36:39 +0000 Received: from VE1PR04MB7216.eurprd04.prod.outlook.com ([fe80::a9a5:cf83:dbe8:1f74]) by VE1PR04MB7216.eurprd04.prod.outlook.com ([fe80::a9a5:cf83:dbe8:1f74%3]) with mapi id 15.21.0406.005; Wed, 9 Sep 2026 10:36:39 +0000 From: wei.fang@oss.nxp.com To: claudiu.manoil@nxp.com, vladimir.oltean@nxp.com, xiaoning.wang@nxp.com, andrew@lunn.ch, olteanv@gmail.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, linux@armlinux.org.uk Cc: wei.fang@nxp.com, imx@lists.linux.dev, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v4 net-next 10/15] net: enetc: simplify and rename PSIIER enable/disable helpers Date: Wed, 9 Sep 2026 18:07:28 +0800 Message-Id: <20260909100733.1139689-11-wei.fang@oss.nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260909100733.1139689-1-wei.fang@oss.nxp.com> References: <20260909100733.1139689-1-wei.fang@oss.nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MA5PR01CA0156.INDPRD01.PROD.OUTLOOK.COM (2603:1096:a01:1ac::6) To VE1PR04MB7216.eurprd04.prod.outlook.com (2603:10a6:800:1b0::22) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VE1PR04MB7216:EE_|DB8PR04MB7066:EE_ X-MS-Office365-Filtering-Correlation-Id: 4eb33d00-c095-4bee-833a-08df0e5e3af0 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|19092799006|7416014|376014|1800799024|23010399003|366016|10067099003|11063799006|56012099006|22082099003|18002099003|921020; X-Microsoft-Antispam-Message-Info: g0q3WUKzTLhEWt7uZW3blNnc3CZWH6g7pusk+K2ju/wAmFrwRX6+LK6qb2IrK74aNPUvjl0JP748R2Ln/G5UhtNaaqI/cswoZA0tVSZo7PmTflk+levZyw1vzwrax+livtk9lXYCalOqnDM4oSP73QPQ5RYW+W48NeLYpK+fFeuYMmRkrd35k4ksTMuhxRRJ+pYFaiTK7zeJK5pOJYm1aof6owXb4vS3Cf71Gv/8kjp5fBVPehV0ln3kTzuzXNa/yZ3cD29TDf8FItoohP4aw1Uav5rAWsoClc9DYyggUhCi7ye0gbqAElGjQKuLCfiY8iUcKKWvez/W3ggnmcBjOY39k/zaLVokvIlAGdyXxrJtKDCtZKCxmCXEaGsL9AjCU3Bb+nw3xsd1lQRaa/Sb0tWNowyhKKfZF39PUekhsboT3fw1LmqaQm09KNMmnrZ2BKSwt0Dfy9wvSSWiiuBSkwSs96lbzz6DJZWodUjTTyAuBLmTClPWPmZJhJ2KVI+ekx12HKJa2spyAGLzfxI9enJqiYIYPDEj3SMsY71ubmbD4DnTTSzKxUV8NyAkwj/Q2PdLGjFlwAY/8YnaANHk4Sg+EA69SW3jIdyFCkBlBmSuAP8d17/nHjuyr/leQeLVqE3l4qCmROrimXWNv5YIpuoozWEaHyLiLla/HdwqQjDWkFt/J1hEOCt4A8YKgQ/cNRqnEHKMeMv3JLQGG/DFag== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VE1PR04MB7216.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(19092799006)(7416014)(376014)(1800799024)(23010399003)(366016)(10067099003)(11063799006)(56012099006)(22082099003)(18002099003)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?fTUPCDyhvELqPSNnChU7kUeD21ngtKMCs/bDGrWOPmE8ElUkn6F083dk7/BQ?= =?us-ascii?Q?qyd5Ki9Odgu+cDBXnqqOWTVGhFAWGpyBkJk8M4BotcI6EsLxw3Ijk8A93nuy?= =?us-ascii?Q?z63HhEYLFDGnwquYciR3IuNhUJNSPxWwg3SCAr0QzS9jfJE/bsYF0y9z/M2H?= =?us-ascii?Q?ZtTKm9alOkq1LXb/+p6/o7PfvPBN14iz49oe5iGef2nWxGktri9VbWSRoHLI?= =?us-ascii?Q?QeTmWKms0UFO/Upx/VGj8vziqyJkE5mbX0Clu5G1G6KCjdydA/nLKAsA6svJ?= =?us-ascii?Q?pVi88bbP5V3XHv2cCbqHP7kKoK/oBX1+jy2xP0tvbR2PTROsILpgVynKPuPY?= =?us-ascii?Q?J7E0neBbksNJI2E2AElfGLOk5OiFV7GWRdyddFzH4rXV5LxJG+jkiLUWL/wx?= =?us-ascii?Q?hEe6V2ePV9Av1JMgptP4E79nwrdRJUjpEzONxm8MCY6J4vJvPi9a/R/ZR8v4?= =?us-ascii?Q?HFP5ea0J3iJOeA2XZ/bcczFRJcIv1UL/SGOL5Xenu4m9JlIwC7kkiCJEGQzo?= =?us-ascii?Q?Gy0T/LdWYmo43cHlQQQztmR2sBmQ2OrBEjmN0wrhyXhcDrEzpUDqwMC8fh8f?= =?us-ascii?Q?8c58nW9OjdpS8lwtahg75OnJmHEkKGCmFV4I1yEJNLxd4FXv0RW4sabuOcKh?= =?us-ascii?Q?K44njw1585Jo75Pc7iiI8aUTGTIH3eWxA7EMy/uewCtmeIq93UUp+0E8bNSr?= =?us-ascii?Q?ONbGZZb6NhWa88yeVrCDqa2Ego4CG85gYnvTBGPQ9huB3IwjrxNTsDZ4599B?= =?us-ascii?Q?BRey8kbIdJQszPJzNVLd8kQqxWtiwf1929MdV0dlrE4iftdUfm6ejiYuydIR?= =?us-ascii?Q?Wt/Ni3sic6SJBcz1yhCJKfnE5r2/dDNqhd27ok9FoepYp+HVCQv1jyOgFbEh?= =?us-ascii?Q?ptYG087NnGvGE9aTwQ2k7fu4rQugTHcD5rM7DztmsjZL7fZzzmzPSspd84cU?= =?us-ascii?Q?vNu1bde78N/0Pdc453zBywUI6TEob/tDSEDOe052RqJe1ThQdF3p60N+x7uA?= =?us-ascii?Q?bLs8N37363ckgsbTXizUlrq6rLA8quPJNi+f1e3KhrgzYPchlt/93n6Lhutn?= =?us-ascii?Q?L4nQpgT+IwzJqZh/QCI4CQIgXtJlB1q1AzN9oAo3neQXG4IrJpTcWA7DwgUW?= =?us-ascii?Q?vsNxZGOW4IxqpOZSpUFceZkqQDK4d3+xm1LFSJC/ycU7Gl2WDajk6qidQVLq?= =?us-ascii?Q?0f0w+i6HmCF09MJg1b2O6QhhSvN7msTvjH5NwIr8dkJIgbOuuWv3YE8xGyw0?= =?us-ascii?Q?cz3YueSvwHjIL4K0nA18+cQn0daqJyU49vyQRvwdbaIIRjtjiTpsPqUBeG/V?= =?us-ascii?Q?mj0Bc7HHKml3BS/vG1CopuUw/rJKvt4VPPhFiNDuguW54msAE1Wcc0AErcks?= =?us-ascii?Q?SFs7+N/UU1bImDx2eO4mYHO63M66IsginOlhX+GH8NF9qLDSRpAEonCUSWxE?= =?us-ascii?Q?FHuHZkmUNUrxYJSlvF1qdIyf5nJUPEOvXvFHz+bMbzrNli3dXcviHnjAZ8g5?= =?us-ascii?Q?7HSvvMR9L8yMgk/KMh0kTu0jiuYhLQc+m28R3FHJoyiWO6DAOtCNXWmW2oJW?= =?us-ascii?Q?rI5FOrXAe5OSTdv/MXuaKle0y9NBkZ9942Q9pameL5CYzxZhLiGTIQjjfZ+b?= =?us-ascii?Q?wCC4ggHCTzN8cgfcV66Hxxmc/uMEr/d9p7itWDK88MG0I9qNp7uW9+tRIuJu?= =?us-ascii?Q?KL/sCyicg96f/TM+jttDlvBd4DqKa6WBwBdmYtqbV3FSv1ttBdS7bR5W+uZw?= =?us-ascii?Q?d/ruil2DypCeWgOuhTVFUgTDV2LISJI0EgjThcxTvYS3m9zElekk?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4eb33d00-c095-4bee-833a-08df0e5e3af0 X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB7216.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Sep 2026 10:36:38.9529 (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: cM0sZul347M4ITrqULWvDNmV1mH4zT1XQ/YR8kgyEtlm0fKcGVDfzuS12SqyyYHdPb2mHTKnUbPiUcKB4reM1kUCNjdMGblYLr8vsSGZR/3+6L4p86BpgFgMQfB5+p4H X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB8PR04MB7066 Content-Type: text/plain; charset="utf-8" From: Wei Fang The PSIIER register controls two categories of interrupt sources: message-receive (MR) interrupts, which fire when a VF sends a mailbox message to the PSI, and VF FLR interrupts, which fire when a VF performs a Function Level Reset. The current helpers enetc_msg_enable_mr_int() and enetc_msg_disable_mr_int() use a read-modify-write sequence to update only the MR bits in PSIIER, intending to preserve any other bits that may be set. However, VF FLR interrupt support is not yet implemented, so PSIIER only ever holds MR interrupt bits at this point. The read-modify-write is therefore unnecessary overhead. Simplify enetc_disable_psiier_interrupts() to write 0 directly to PSIIER, disabling all interrupt sources at once, and simplify enetc_enable_psiier_interrupts() to write the MR mask directly without reading the current register value first. Rename both helpers from the MR-specific names to names that reflect their true scope, i.e. managing all PSIIER interrupt sources rather than just the MR bits. This prepares the code for a future patch that adds VF FLR interrupt support, at which point enetc_enable_psiier_interrupts() will be extended to also set the corresponding FLR bits. Signed-off-by: Wei Fang --- .../net/ethernet/freescale/enetc/enetc_msg.c | 30 ++++++++----------- 1 file changed, 12 insertions(+), 18 deletions(-) diff --git a/drivers/net/ethernet/freescale/enetc/enetc_msg.c b/drivers/net= /ethernet/freescale/enetc/enetc_msg.c index 22f5485e968a..aa37a0123274 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc_msg.c +++ b/drivers/net/ethernet/freescale/enetc/enetc_msg.c @@ -15,23 +15,17 @@ ENETC_MSG_CLASS_ID_MAC_FILTER) | \ FIELD_PREP(ENETC_PF_MSG_CLASS_CODE, (code))) =20 -static void enetc_msg_disable_mr_int(struct enetc_pf *pf) +static void enetc_disable_psiier_interrupts(struct enetc_pf *pf) { struct enetc_hw *hw =3D &pf->si->hw; - u32 psiier; =20 - psiier =3D enetc_rd(hw, ENETC_PSIIER) & ~ENETC_PSIMR_MASK(pf->num_vfs); - - /* disable MR int source(s) */ - enetc_wr(hw, ENETC_PSIIER, psiier); + enetc_wr(hw, ENETC_PSIIER, 0); } =20 -static void enetc_msg_enable_mr_int(struct enetc_pf *pf) +static void enetc_enable_psiier_interrupts(struct enetc_pf *pf) { + u32 psiier =3D ENETC_PSIMR_MASK(pf->num_vfs); struct enetc_hw *hw =3D &pf->si->hw; - u32 psiier; - - psiier =3D enetc_rd(hw, ENETC_PSIIER) | ENETC_PSIMR_MASK(pf->num_vfs); =20 enetc_wr(hw, ENETC_PSIIER, psiier); } @@ -41,7 +35,7 @@ static irqreturn_t enetc_msg_psi_msix(int irq, void *data) struct enetc_si *si =3D (struct enetc_si *)data; struct enetc_pf *pf =3D enetc_si_priv(si); =20 - enetc_msg_disable_mr_int(pf); + enetc_disable_psiier_interrupts(pf); schedule_work(&si->msg_task); =20 return IRQ_HANDLED; @@ -581,7 +575,7 @@ static void enetc_msg_task(struct work_struct *work) } =20 out: - enetc_msg_enable_mr_int(pf); + enetc_enable_psiier_interrupts(pf); } =20 /* Init */ @@ -656,8 +650,8 @@ static int enetc_msg_psi_init(struct enetc_pf *pf) /* set one IRQ entry for PSI message receive notification (SI int) */ enetc_wr(&si->hw, ENETC_SIMSIVR, ENETC_SI_INT_IDX); =20 - /* enable MR interrupts */ - enetc_msg_enable_mr_int(pf); + /* enable PSIIER interrupts */ + enetc_enable_psiier_interrupts(pf); =20 return 0; =20 @@ -699,16 +693,16 @@ static void enetc_msg_psi_free(struct enetc_pf *pf) struct enetc_si *si =3D pf->si; int i; =20 - /* disable MR interrupts */ - enetc_msg_disable_mr_int(pf); + /* disable PSIIER interrupts */ + enetc_disable_psiier_interrupts(pf); =20 /* de-register message passing interrupt handler */ free_irq(pci_irq_vector(si->pdev, ENETC_SI_INT_IDX), si); =20 cancel_work_sync(&si->msg_task); =20 - /* MR interrupts may be re-enabled by workqueue */ - enetc_msg_disable_mr_int(pf); + /* PSIIER interrupts may be re-enabled by workqueue */ + enetc_disable_psiier_interrupts(pf); =20 for (i =3D 0; i < pf->num_vfs; i++) { enetc_msg_free_mbx(si, i); --=20 2.34.1 From nobody Fri Sep 25 19:15:32 2026 Received: from GVXPR05CU001.outbound.protection.outlook.com (mail-swedencentralazon11013056.outbound.protection.outlook.com [52.101.83.56]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4B7A7526A9E; Wed, 9 Sep 2026 10:36:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.83.56 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788950211; cv=fail; b=kXvGZXT2kO7zjhlwSdV868Iv2U3V09rex1c4iy3KogrbpnrK78WW9ADgrnIiLABEJ0/yf08fMN8OOKUcqtlyBcEcoiDnSazAVCrJ91E38cE5zhwxRdIdq27yk5nZpiO7k+cdSQsCxnlo2fteFR9n8bIYPf5aJr2+/toxa8a4/4Q= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788950211; c=relaxed/simple; bh=vIhgqkfpQtGD1Jidg3yMpE16QSBbJM8MM3Oq8WjNeS4=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=PD39NNlU/zDYO1AwHS87qr8vhfZCXuKsHN7DgfJE4Z0oDcXqoTfbuCWbDzH8nfPJCDgUZ9Y9AS7BGE6wniisYRvGJY3d8pJ8e0r8LYKVEmvjcQt5sMa2pfLdpSbjFJvIqwOZh7CwgsuvKpDRT9zw5ztVO+yphDXNIZi4mwo46Xs= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com; spf=pass smtp.mailfrom=oss.nxp.com; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b=E+Ygy2tO; arc=fail smtp.client-ip=52.101.83.56 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b="E+Ygy2tO" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=imgNl3wc0qIFOGW4+nJ/iuFNVKS1lRmpoBqVw05eEsGgIpdHHQMAf2RSd7D0ad+BBylNmI8Tnm/ocNx11qTyJvmrgOfbVbKI9f81sm+wKdzYuT43beUCdrFkfjxL2jWCO3HnBUh5RVxpBCU3pH5egnMke2TYarNdBZI7vS+odIbGPCQ4wQi0Z6q3vXJ4AJzmbC4Dr6HJUWoDwoXimYzvaxZKtsbeCbUhjjl6b7JMWIpvC2xqbRRRgsuje04PCWPyl33iYzu3fxM9xAD57Kjzap3ufmfa5LrwfeoTw15F6IuXlhznlOFVajH+2g00yvcVk+pP0RzQ62GnAVlqqwzhLQ== 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=p91FYoVzGmh+n/TsmSLSwxkPwzjpTBTMPVmMZBvg1Qo=; b=eO+tK7tXCxd3VymWl/gXuMRAEo+7tMgf6lCJvbWDGv+2Zt43+GM8nvKqGwhTw2cBitL7vqZiqv1W7vsD2s6GXY68hTurXWtays8Kp04/3/L4U5AeqdaCAowDeK4gvAXj0GsWWjVZOjpkaE0BfReAYTVJVQ1XVqBDNgu09b29jaXGaTDnekOKizkaxOHrei4Ow3Qplqs5QwXzwaps4Ej1ydB9A8XWzwqGIce8nEGqucVtWrg011GkEA0+TippqKVZPEq9RfiKy0IEKB6i8TEBOCGFmL+z29WpbHlvGwHA1O2iX5QZXLIbQ4HH/vsOdXqgO9S4b5sYjC4eMCfnh5dlnw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oss.nxp.com; dmarc=pass action=none header.from=oss.nxp.com; dkim=pass header.d=oss.nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=NXP1.onmicrosoft.com; s=selector1-NXP1-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=p91FYoVzGmh+n/TsmSLSwxkPwzjpTBTMPVmMZBvg1Qo=; b=E+Ygy2tO7gVra2J+F7wrq6fftPT+bNU8m92cqC/jcsnEkDULNaGvPxGzNkezbKP6dTzjcCQfDxxIDsXhgWOrHGCH3kZ/1tEarwaS2qMZ21HC8xtp3IpEsyoB6l9MmCAH4w+ndpi+6h0n/s7Fnh614sSyrNnRAZVmwTY8RbB9clB2RcN/HhDZS3f1C17N7qU+Qasd4vdFM9qB/lHrwrsEbUppY76GlATFaZYjxz7fN9h0bhEDwLcLB6zLdiILAyK1Z4+MP4d8NJq6nXidbZK1v9RSyqvwiYI31PbeNeP88XVMP3SuvyD/QUFJk0m0N5JT9Cl+LtFgP/5QBsye53J9nQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from VE1PR04MB7216.eurprd04.prod.outlook.com (2603:10a6:800:1b0::22) by AMBPR04MB617387.eurprd04.prod.outlook.com (2603:10a6:20b:7ae::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.406.6; Wed, 9 Sep 2026 10:36:46 +0000 Received: from VE1PR04MB7216.eurprd04.prod.outlook.com ([fe80::a9a5:cf83:dbe8:1f74]) by VE1PR04MB7216.eurprd04.prod.outlook.com ([fe80::a9a5:cf83:dbe8:1f74%3]) with mapi id 15.21.0406.005; Wed, 9 Sep 2026 10:36:46 +0000 From: wei.fang@oss.nxp.com To: claudiu.manoil@nxp.com, vladimir.oltean@nxp.com, xiaoning.wang@nxp.com, andrew@lunn.ch, olteanv@gmail.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, linux@armlinux.org.uk Cc: wei.fang@nxp.com, imx@lists.linux.dev, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v4 net-next 11/15] net: enetc: restore VF MAC promiscuous mode after FLR for ENETC v4 Date: Wed, 9 Sep 2026 18:07:29 +0800 Message-Id: <20260909100733.1139689-12-wei.fang@oss.nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260909100733.1139689-1-wei.fang@oss.nxp.com> References: <20260909100733.1139689-1-wei.fang@oss.nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MA5PR01CA0055.INDPRD01.PROD.OUTLOOK.COM (2603:1096:a01:1b8::6) To VE1PR04MB7216.eurprd04.prod.outlook.com (2603:10a6:800:1b0::22) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VE1PR04MB7216:EE_|AMBPR04MB617387:EE_ X-MS-Office365-Filtering-Correlation-Id: 0f94408f-e130-4b3a-6ab1-08df0e5e3f62 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|19092799006|23010399003|7416014|376014|366016|1800799024|10067099003|6133799003|22082099003|5023799004|56012099006|11063799006|18002099003|921020; X-Microsoft-Antispam-Message-Info: kcXv2wkSMSIlCMkBhYbhedkJQGMIV6+mpGsGCNHCOr7OKriLBnAeL3guEMFOJddemdgQM+/F7UJ1dFMmr+h8MSt/Jqn5JHUjCNPijlSwecOUrmYC+Q4/e8tjPjfPYODqIdcYPsI30bwEFSu9WrPDO7G67r+vmtSrjjnfI5rNfPqYbUlgg2hEXIMcRkXSz3RDJPSPJO9kniVNBs60Q7eUBiSe/D2mDYxA8uhotqKtD1ywHXmpPhTpiEBGp4gmzRXiEheu94HOvCYoPmRNza7Th6+aM5DmyiZ6WzX2KTbTi/T6pYZwyAktdpw4zp6WGZd/l+yQxrkJimgsmm6X8xDEdD667fiGjeSGotBVr9DsteaVPbYdqpnBMumSfkipegk/HTfmVlkabrDDgpzlL+Pwe61vxGdqCzLdWYUhkf2iBvSr4YsIl8S++jUkjj1qNbSjeBOk2c5S6j/418o78d9HuP1GwMXu+/AY2hSrWI+NlvH8UbJh6kA1L3sYVfDYovjCLIrXVc8OuRrEgcbEqeFsCkxkY3No13HM3Zzeh3j2dsyKoHdOjbBxxxOAVyAI3befsrtMkIH1gB+g6hxLiQGACEKLs1yUALSKG1xTddQY25iH1SiFa6EdPDA93F9vUSx/5aImRRlr0NVNkqHWJkkok9B1hFE5slt979iKogl8GKCFfFBl1sMM/sRzz32lZ8C64Nh52PnKC5ZlS+AJW7C8/Q== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VE1PR04MB7216.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(19092799006)(23010399003)(7416014)(376014)(366016)(1800799024)(10067099003)(6133799003)(22082099003)(5023799004)(56012099006)(11063799006)(18002099003)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?CdPbIhq5CfB72exdt1XmmzpfZZAd0PmnBl/60lN7jnfiWISeHJ+v8Mdm2BE3?= =?us-ascii?Q?FTojgmnp+7BLolF75MrDMWu30hUFs5VnpirEVEWqqwzQYdnzH8ZJqW6Uxbg2?= =?us-ascii?Q?KVYv6ZaqwO3jfydjdO0lU8ly7y5ab7wq/Nm+YI5EyqBi4iulNOn6lqElsQdi?= =?us-ascii?Q?Zs9LxU8oyGSwzy+Vy1QDXlbkJ102oQa1QvwNB1KMAeOwv6Pm9n5KK5y/DLmo?= =?us-ascii?Q?WMrFZBEOy9cBMiPo/YqdwiBPDyAoDNIHsCBzLy0kCpt7yBA3TMzKbgknXAXl?= =?us-ascii?Q?ff+vOpkR3TI/bGrxxPbeEbr+7sIR2xes0gTWAKIoQFN9RF9KxhPc2rSH5UeI?= =?us-ascii?Q?AbHFFs+xPT92TGOv4/OA0ZZ3pLF66yXNdMryKznLvCz6+xYfKwbjhB8OfDL3?= =?us-ascii?Q?gfrOnfJNczIuPcI0HyywY12q8mvOwD+v4IS6JnJlfsbLZaKcaaO7v0Ioqy3l?= =?us-ascii?Q?yo7EyYGzpCZhY0SJORN8i1fxn3pFDMVicAFPaXYYmFWy27vysWxbxqzKvLI1?= =?us-ascii?Q?qFGj0Oi52mhwzGbvfWiIPd7u6ztyUy3NnKKwyZwaazgpOO1dEPjM+yhh+GgI?= =?us-ascii?Q?8QyxjbSw+Ilesa2A072a4xlJr53q1peXtsTVIYa9IL1pkJVqTi6UYH6hS0gx?= =?us-ascii?Q?GpftTAVziTPd/5tX2fW2jDXz/zyf5rnnZdnxen/C5Ba4ErluA1/wT/kzECRb?= =?us-ascii?Q?VKFSsnwJE6PmW+Z+1jRLbIcAgsb8AKFbwnDn8jQa/Upa9loSxtI+zaX4Xjko?= =?us-ascii?Q?8cyBdwQoStgH5s0tnXMzL4twEG/P9bI7bpfrz1NStdZ6nkzKJYM67yIoPLbr?= =?us-ascii?Q?+StuPiYVy+KCZUtovNaOocwzMdtIcIWFXC93Z/B/t0zhW/W86gwhevYUSZVY?= =?us-ascii?Q?JpRrWKVRvP8/ob95o/Zx5//ZYsawBLTWprCJK1ymueqr0mNWoZ2uB70LlyHB?= =?us-ascii?Q?M9jVzCiGyU5exA2S3bdpzISwy2o3VvrUT2Avg2EnUt/kv9qNzdebk8BCDc8u?= =?us-ascii?Q?OL63YgeFZNdSrqnMr0Ej+rzog7ZRackeyrrR5BNBVC2t4RCrAv7kHJOl9L7K?= =?us-ascii?Q?f+L0WhJ9PJ6COrLttRubbAzy0koQ/cGxHkFmk+HJ6VWUHkthafW+G+7N6t4A?= =?us-ascii?Q?OxoEMMVZK++pPu0jRp8kUrheG0mD8AiG6+TcifgYfZJanBeVwQFSD11nxGuZ?= =?us-ascii?Q?Afnfm/kf6y4tN7wHlgaxmDhWRMVS2B8PhceHuctbzqGbdnWQYeTbKx6zIeOc?= =?us-ascii?Q?cFqpqHrtuywN29pR7D3vTxWEdr8LzvDDlHYZa+yAvBQXakeJRupXbybeFEZY?= =?us-ascii?Q?wk7p/nFN0LqzySMxTN5ZR/743HISpV93SuKWYOL5txjE8/GIJUw6Tr+P7dSe?= =?us-ascii?Q?YlM7TWtzJIRtO8XCgRGL/Ult0eaDPRw9Amio3lYQwiQiRUoJv6REAt0r9dAk?= =?us-ascii?Q?aH6Z/6aiXe8A7vBJ5v7kOtcZ46M9/V8qJk2KPx6IPtCTFKYF9/PIz2Ztxaw3?= =?us-ascii?Q?JQ1ds+f8RyIGX02TJ+ZlUj0UtOsCW0yjEV5dgAAWgxOPAoHP+KUc5Q0Y98O+?= =?us-ascii?Q?bagH3P5bGqs+iZ8GUPtVQPDIx+gEc2RSGd3xO1YKkJbbyXuOobAEfvfVXG0I?= =?us-ascii?Q?Zi1rPeF/DwaFLQJc+86ApxrSwWNVni1O/tQR8BKkMwgBCOKzyYuNwtRzLoI8?= =?us-ascii?Q?vUF8Y/BsJ2USyzhIkD5kuWMTAAKTW4elNKiaC/LxoRiDsD6S/P/Iy1+X6doj?= =?us-ascii?Q?P2h1JzJYlfhNmgac7prqnfDabqYsa7EZ0cGFwXoHCVCgSnfXmfpX?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0f94408f-e130-4b3a-6ab1-08df0e5e3f62 X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB7216.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Sep 2026 10:36:46.4758 (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: tLgsj6yBU45p7+3p606V4fjVuTNV4dmhF3fIZet0LFtG4SWmDiXbA1/a7NeUnTcmMKPgsexzwfGHwJkNJvtsuW4yX+I0fWmgzGJRc9VgI5h0LBJLnK2OjUXxKtxh+Vw/ X-MS-Exchange-Transport-CrossTenantHeadersStamped: AMBPR04MB617387 Content-Type: text/plain; charset="utf-8" From: Wei Fang On ENETC v4, when VF performs a PCI FLR, it resets PSIPMMR[SIn_MAC_UP] and PSIPMMR[SIn_MAC_MP] bits, which control the unicast and multicast promiscuous mode for the corresponding SI. The reset (default) value of these bits enables promiscuous mode, meaning that after a VF FLR, the SI is left in promiscuous mode regardless of the configuration set by the PF driver prior to the reset. This is a potential security vulnerability: a malicious VM could deliberately trigger a VF FLR to force promiscuous mode on its SI, allowing it to capture network traffic not destined for that VF. To mitigate this, make the following changes: - Add ENETC_VF_FLAG_UC_PROMISC and ENETC_VF_FLAG_MC_PROMISC to enetc_vf_flags to track the PF-managed promiscuous mode state for each VF. - Update enetc_msg_set_vf_mac_promisc_mode() to keep these flags in sync whenever a VF requests a promiscuous mode change via messaging. - Update enetc_pf_set_vf_trust() to clear both promisc flags when a VF is untrusted, so that a subsequent FLR cannot restore promiscuous mode that the PF has already revoked. - Add a vf_flr_handler callback to enetc_pf_ops. The ENETC v4 implementation re-applies the tracked UC/MC promiscuous mode settings to the hardware after each FLR, ensuring the hardware state matches the PF-managed policy rather than the insecure reset default. - Add enetc_vf_flr_handler() in enetc_msg.c to detect FLR events via the PSIIDR register and dispatch to the vf_flr_handler callback. Invoke it at the start of enetc_msg_task() before processing VF messages. - Enable FLR interrupts in PSIIER only when a vf_flr_handler callback is registered, keeping ENETC v1 behavior unchanged. Signed-off-by: Wei Fang --- .../net/ethernet/freescale/enetc/enetc4_pf.c | 20 ++++++++ .../net/ethernet/freescale/enetc/enetc_hw.h | 12 +++++ .../net/ethernet/freescale/enetc/enetc_msg.c | 50 +++++++++++++++++++ .../net/ethernet/freescale/enetc/enetc_pf.h | 3 ++ .../freescale/enetc/enetc_pf_common.c | 4 +- 5 files changed, 88 insertions(+), 1 deletion(-) diff --git a/drivers/net/ethernet/freescale/enetc/enetc4_pf.c b/drivers/net= /ethernet/freescale/enetc/enetc4_pf.c index abe1e8dafe24..6a9b1e079ae2 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc4_pf.c +++ b/drivers/net/ethernet/freescale/enetc/enetc4_pf.c @@ -212,9 +212,29 @@ static void enetc4_pf_set_mac_filter(struct enetc_pf *= pf, int type, enetc4_pf_set_mc_hash_filter(pf, mc); } =20 +static void enetc4_pf_vf_flr_handler(struct enetc_pf *pf, int vf_id) +{ + struct enetc_vf_state *vf_state; + bool uc_promisc, mc_promisc; + + vf_state =3D &pf->vf_state[vf_id]; + mutex_lock(&vf_state->lock); + + uc_promisc =3D !!(vf_state->flags & ENETC_VF_FLAG_UC_PROMISC); + mc_promisc =3D !!(vf_state->flags & ENETC_VF_FLAG_MC_PROMISC); + + spin_lock(&pf->si->gen_lock); + enetc_set_si_uc_promisc(pf->si, vf_id + 1, uc_promisc); + enetc_set_si_mc_promisc(pf->si, vf_id + 1, mc_promisc); + spin_unlock(&pf->si->gen_lock); + + mutex_unlock(&vf_state->lock); +} + static const struct enetc_pf_ops enetc4_pf_ops =3D { .set_si_primary_mac =3D enetc4_pf_set_si_primary_mac, .get_si_primary_mac =3D enetc4_pf_get_si_primary_mac, + .vf_flr_handler =3D enetc4_pf_vf_flr_handler, }; =20 static int enetc4_pf_struct_init(struct enetc_si *si) diff --git a/drivers/net/ethernet/freescale/enetc/enetc_hw.h b/drivers/net/= ethernet/freescale/enetc/enetc_hw.h index f97602714118..c18ad8b9b071 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc_hw.h +++ b/drivers/net/ethernet/freescale/enetc/enetc_hw.h @@ -110,6 +110,18 @@ static inline u32 enetc_vsi_set_msize(u32 size) =20 #define ENETC_PSIIER 0xa00 #define ENETC_PSIIDR 0xa08 + +/* VF FLR interrupt mask, n is the active number of VFs. + * It is available for ENETC_PSIIER and ENETC_PSIIDR registers. + */ +#define ENETC_VFFLR_MASK(n) \ + ({ typeof(n) _n =3D (n); (_n) ? GENMASK(16 + (_n), 17) : 0; }) + +/* VF FLR interrupt bit, n is VF index. It is available + * for ENETC_PSIIER and ENETC_PSIIDR registers. + */ +#define ENETC_VFFLR_BIT(n) BIT(17 + (n)) + #define ENETC_SITXIDR 0xa18 #define ENETC_SIRXIDR 0xa28 #define ENETC_SIMSIVR 0xa30 diff --git a/drivers/net/ethernet/freescale/enetc/enetc_msg.c b/drivers/net= /ethernet/freescale/enetc/enetc_msg.c index aa37a0123274..ff99937815c0 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc_msg.c +++ b/drivers/net/ethernet/freescale/enetc/enetc_msg.c @@ -27,6 +27,9 @@ static void enetc_enable_psiier_interrupts(struct enetc_p= f *pf) u32 psiier =3D ENETC_PSIMR_MASK(pf->num_vfs); struct enetc_hw *hw =3D &pf->si->hw; =20 + if (pf->ops->vf_flr_handler) + psiier |=3D ENETC_VFFLR_MASK(pf->num_vfs); + enetc_wr(hw, ENETC_PSIIER, psiier); } =20 @@ -208,6 +211,20 @@ static u16 enetc_msg_set_vf_mac_promisc_mode(struct en= etc_pf *pf, int vf_id, goto vf_state_unlock; } =20 + if (type & ENETC_MAC_FILTER_TYPE_UC) { + if (promisc) + vf_state->flags |=3D ENETC_VF_FLAG_UC_PROMISC; + else + vf_state->flags &=3D ~ENETC_VF_FLAG_UC_PROMISC; + } + + if (type & ENETC_MAC_FILTER_TYPE_MC) { + if (promisc) + vf_state->flags |=3D ENETC_VF_FLAG_MC_PROMISC; + else + vf_state->flags &=3D ~ENETC_VF_FLAG_MC_PROMISC; + } + spin_lock(&si->gen_lock); if (type & ENETC_MAC_FILTER_TYPE_UC) enetc_set_si_uc_promisc(si, si_id, promisc); @@ -542,6 +559,29 @@ static void enetc_msg_handle_rxmsg(struct enetc_pf *pf= , int vf_id, kfree(msg); } =20 +static void enetc_vf_flr_handler(struct enetc_pf *pf) +{ + u32 flr_mask =3D ENETC_VFFLR_MASK(pf->num_vfs); + struct enetc_hw *hw =3D &pf->si->hw; + u32 flr_status; + + if (!pf->ops->vf_flr_handler) + return; + + flr_status =3D enetc_rd(hw, ENETC_PSIIDR) & flr_mask; + if (!flr_status) + return; + + for (int i =3D 0; i < pf->num_vfs; i++) { + if (!(ENETC_VFFLR_BIT(i) & flr_status)) + continue; + + /* Clear FLR interrupt status, W1C */ + enetc_wr(hw, ENETC_PSIIDR, ENETC_VFFLR_BIT(i)); + pf->ops->vf_flr_handler(pf, i); + } +} + static void enetc_msg_task(struct work_struct *work) { struct enetc_si *si =3D container_of(work, struct enetc_si, msg_task); @@ -550,6 +590,8 @@ static void enetc_msg_task(struct work_struct *work) u32 mr_status, mr_mask; int i; =20 + enetc_vf_flr_handler(pf); + mr_mask =3D ENETC_PSIMR_MASK(pf->num_vfs); mr_status =3D (enetc_rd(hw, ENETC_PSIMSGRR) & mr_mask) | (enetc_rd(hw, ENETC_PSIIDR) & mr_mask); @@ -676,6 +718,14 @@ static void enetc_msg_clear_vf_config(struct enetc_pf = *pf, int vf_id) =20 mutex_lock(&vf_state->lock); =20 + /* VF may set these flags by mailbox messages, so need to clear these + * flags when enetc_msg_psi_free() is called. PF-set flags (TRUSTED, + * PF_SET_MAC) are not cleared, because these flags are unrelated to + * whether SR-IOV is enabled or disabled. + */ + vf_state->flags &=3D ~(ENETC_VF_FLAG_UC_PROMISC | + ENETC_VF_FLAG_MC_PROMISC); + spin_lock(&si->gen_lock); vf_state->msg_fail_cnt =3D 0; enetc_set_si_uc_promisc(si, si_id, false); diff --git a/drivers/net/ethernet/freescale/enetc/enetc_pf.h b/drivers/net/= ethernet/freescale/enetc/enetc_pf.h index c5eda6c8eaf0..1a9fa3714c3c 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc_pf.h +++ b/drivers/net/ethernet/freescale/enetc/enetc_pf.h @@ -11,6 +11,8 @@ enum enetc_vf_flags { ENETC_VF_FLAG_PF_SET_MAC =3D BIT(0), ENETC_VF_FLAG_TRUSTED =3D BIT(1), + ENETC_VF_FLAG_UC_PROMISC =3D BIT(2), + ENETC_VF_FLAG_MC_PROMISC =3D BIT(3), }; =20 struct enetc_vf_state { @@ -34,6 +36,7 @@ struct enetc_pf_ops { struct phylink_pcs *(*create_pcs)(struct enetc_pf *pf, struct mii_bus *bu= s); void (*destroy_pcs)(struct phylink_pcs *pcs); int (*enable_psfp)(struct enetc_ndev_priv *priv); + void (*vf_flr_handler)(struct enetc_pf *pf, int vf_id); }; =20 struct enetc_pf { diff --git a/drivers/net/ethernet/freescale/enetc/enetc_pf_common.c b/drive= rs/net/ethernet/freescale/enetc/enetc_pf_common.c index 9dbb0a1417ea..86958f1e9cd3 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc_pf_common.c +++ b/drivers/net/ethernet/freescale/enetc/enetc_pf_common.c @@ -623,7 +623,9 @@ int enetc_pf_set_vf_trust(struct net_device *ndev, int = vf, bool setting) } else { u64 hash; =20 - vf_state->flags &=3D ~ENETC_VF_FLAG_TRUSTED; + vf_state->flags &=3D ~(ENETC_VF_FLAG_TRUSTED | + ENETC_VF_FLAG_UC_PROMISC | + ENETC_VF_FLAG_MC_PROMISC); =20 /* For ENETC v1, we only support setting the VF's MAC address * via VSI-to-PSI messages. Unicast and multicast promiscuous --=20 2.34.1 From nobody Fri Sep 25 19:15:32 2026 Received: from GVXPR05CU001.outbound.protection.outlook.com (mail-swedencentralazon11013046.outbound.protection.outlook.com [52.101.83.46]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 67298526AB8; Wed, 9 Sep 2026 10:36:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.83.46 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788950218; cv=fail; b=BEibkw7KXNYuoAtU0YaGSF8LgKEp1rJMljPOx0y2BZH/DCO7Jv4Fp5QXUarVD1SPswxVPLjGzlzeapbVWMLlvXUdUzV0pl11u0akeUSZRpZhlJU6xiqNKOX91BKSq3ZTUzEDNo8cpd1Ly1kyihj4RuAqnRwtYWXD11SkmT5g0l8= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788950218; c=relaxed/simple; bh=A++GiLSFepCNqIHTVOlQwe3mnVDy+4mnzQsiFJC0lQ8=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=dNH9shsoEkJbwpOI8Wa5f/TCJnOxeBUWFxEowkrGeOfvsh7ZJDkpkKNq0L+OEmI1D10TTdd0apiHmCJZLYzK/1g9GYKiRm7ymuO6OuYWfl5Fp3WISJY8stIlOn75JS5kCGJ8mGk6aztgRqprRYcVSQ6vUXzF6fPMd8fzhpNfiak= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com; spf=pass smtp.mailfrom=oss.nxp.com; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b=C4XxoNWV; arc=fail smtp.client-ip=52.101.83.46 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b="C4XxoNWV" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=gf8sbF/PPFfnHyX4L9RBtg4ay8gUqajBenBpYwCn4BxJWONx9GpVojTxDowDPOR4jWeSVi3v2QlSe3dnPp74KJej6eO0e7B/DD3r0oIkOOtpv+tTY/2Pgdrhn2LVCaxuDaFdkLsl1G8PP+bqd+bWg9mdx04orRWaoFUabutRTghvphipNwxlS44awOQzrOdqziSWeVQxHggRpqxhuwsD5oPcduC/7msf1l1QRvo/pncPy5HDJ/f8FkR3oTlUbMc8OGbvuZHa+6HQOvkomLAWYQo2kZgmHvM+HP0HUI8PXCjMPysK/Bc4I8V/omBnWSfSDJy5kFIq1aoL/aLI0tZQ0A== 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=zvfuFRWPaRwlqWa54qQ0IXio3FqoJ8m65oadvsduej8=; b=cE+CEFuHt7EcAzUvDi699cqTV4/OvGB+Onx4WJPPA6I5v98qNYnSSKD9L7SZkQH2xTrFrbHdxifYW2hmyk7Vx0/6QxjkDIDEHX9XWJd8LFI/YPCcaaoLGsMEKbDI2HzDRovltid9ltXQoW4xIvLkv3Wd27U0EMk5qXqGrUhYapPhBeL5d3RPPEF7IAioDN9pWRbq6fAEw/1wfpcsy1Wm/u4Pq9YTgW/6t6kOXJ+NXT1T4Sp4lZ+aFxU9J6Y1Swu9pUO0BhEglTEhCMnNgtHCio2umTsBOeeJlray7fxJYqUbEYpCDw6NAVNQ+oAFbFPJOGTtl6eX81MRiz0amDU5wA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oss.nxp.com; dmarc=pass action=none header.from=oss.nxp.com; dkim=pass header.d=oss.nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=NXP1.onmicrosoft.com; s=selector1-NXP1-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=zvfuFRWPaRwlqWa54qQ0IXio3FqoJ8m65oadvsduej8=; b=C4XxoNWVzWUCsn4igE20E+OqSmFNxN0pao8+cEEfENYQ0GMSEDt9NI4YYi3pj6BcgQfEpRlBGIij0gOMK3nGVR5j+r0dFv+11yE/QnD6HfN0MScHYBqETv0/IIajRsZyF8hV1hEJxwpixF3ITVw3wic0m29N42QBfxlgNRaQ8IJiw6hKBca/azxhH5y6IUx8lK+4VSzb35lTasULFwiqoUDkNcz3SXIADW28FSvk1Gm8hx+J2qqasSePtPIcri+A4rbhtlN0XGu5/fIyuTjil6kZK24r/1O5GJk4Wde6W0xk9a+FobK0vgEr105SyaXIVjuAAhbio++5fq94ZWiRrg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from VE1PR04MB7216.eurprd04.prod.outlook.com (2603:10a6:800:1b0::22) by AMBPR04MB617387.eurprd04.prod.outlook.com (2603:10a6:20b:7ae::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.406.6; Wed, 9 Sep 2026 10:36:53 +0000 Received: from VE1PR04MB7216.eurprd04.prod.outlook.com ([fe80::a9a5:cf83:dbe8:1f74]) by VE1PR04MB7216.eurprd04.prod.outlook.com ([fe80::a9a5:cf83:dbe8:1f74%3]) with mapi id 15.21.0406.005; Wed, 9 Sep 2026 10:36:53 +0000 From: wei.fang@oss.nxp.com To: claudiu.manoil@nxp.com, vladimir.oltean@nxp.com, xiaoning.wang@nxp.com, andrew@lunn.ch, olteanv@gmail.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, linux@armlinux.org.uk Cc: wei.fang@nxp.com, imx@lists.linux.dev, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v4 net-next 12/15] net: enetc: add VF support for i.MX94 and i.MX95 Date: Wed, 9 Sep 2026 18:07:30 +0800 Message-Id: <20260909100733.1139689-13-wei.fang@oss.nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260909100733.1139689-1-wei.fang@oss.nxp.com> References: <20260909100733.1139689-1-wei.fang@oss.nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MA5P287CA0052.INDP287.PROD.OUTLOOK.COM (2603:1096:a01:1d3::13) To VE1PR04MB7216.eurprd04.prod.outlook.com (2603:10a6:800:1b0::22) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VE1PR04MB7216:EE_|AMBPR04MB617387:EE_ X-MS-Office365-Filtering-Correlation-Id: 1ac90af1-171d-4ff0-c6bf-08df0e5e43a4 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|19092799006|23010399003|7416014|376014|366016|1800799024|10067099003|22082099003|56012099006|11063799006|18002099003|921020; X-Microsoft-Antispam-Message-Info: LJNj393NUHGsGcoLCsB2mccB8lVQm9RDH874taxQXs2DTR9X+noPy+bzVNRKiSKNsjPGrbYVS4+xNNBFBtvG/5+63X3ZpUJEGXATAHGh6cfV292I90mRDJ5YVc4/XwwMwKg8cZAJA9eOBAbp7ZmpBSLuw0InFmGlbqfPSCHrK/WDOPTMBaM4K6VRzVI1JOM719DNikVR/34/h2zKtjGZOLgk0aFsr6KhTw62cRJDJnq4vnKsDIK87Dg4u0BynPi+gD8eyb2zdV7CpFLky4ADvGtXLB+9LRohh3ZQfT7TC9yEM0LTm/6ldect5lZ5v6img+zg2ZV8QvBvR0Q7QRGRgXqtMd8+xwGvVncej09/AemLYbSDIxCfx4tOCGHHKCl4eq7YeaWj5dFFiIJAPtWfQ4MHI/UWN4D1eb/C4ghltLbx+XGTDtQHsKGsCVFm/E9reGOyG6P8/qhyh1LfkSItFHDb/61/ehSLL8i1Mxs6XKKZYM6Mpm31wSI20J8PHAkiXquzKFvDID7BiTzxfD3g2Fknu/VtXJqHxWjoE+qAjORg/8UXzshXdpjp4lHH/8VyVSy0RfK2dR4mQejw9yXXakNxSeZPhD87JAbQ+cPkuxCqIudi95nGlQznOswOv7fYZ10eKr0rox60AwiXVsu+/WqayRthrffI9yev5/T7TPUqhNXm+sw+VkIb6Y0suxptyRacxqjFjLzQtaQ24zkPog== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VE1PR04MB7216.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(19092799006)(23010399003)(7416014)(376014)(366016)(1800799024)(10067099003)(22082099003)(56012099006)(11063799006)(18002099003)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?Hl8ZozR/K2hfgztrejs66lmc+gsCwC6FhUCibQVA+U+eu4hd4rufJ0HizNax?= =?us-ascii?Q?yKZnD8Cu/PvEsfcgEoM+rj4AjXBr1MMuv6CWfMgVyiANfHhxFEQNi/NFlxD+?= =?us-ascii?Q?WUW1yGx0Wyv8NDzL2tFy16H6JXJD6bGxxcPjy2yi08vshgvGBvqlkgx/pcoV?= =?us-ascii?Q?HF3JZcN5VUTHbOZYfHfsvDSPW843KqT22I3E5+u+c6HOstfcccuFcXeysfjK?= =?us-ascii?Q?sy+FatiixFlt5S8oUpa9Vgokh5l3g+MPBTacmWdoNIv7O8r0ytg8JxS2btUg?= =?us-ascii?Q?lRlWI7xYSKxhCHEaCyBqfxhmY+AeoDD20+b8+yNKYuRwc1tva00Ks7QJ7Sz5?= =?us-ascii?Q?K+aa30k82TCm40HkdCj1VR5RWD7L7X6J7+N8EmsRl3edYcs9/IMasqabq3+z?= =?us-ascii?Q?zE/jpaFJ/fTXVeunB0kcOJRpsCFfH7W4awjV/wgdWd+FgG13G1JsybmrR4lA?= =?us-ascii?Q?P2eTtUrNtCivZJt4qoNpUMLn4tBkyFhBuPqWTV3ydXZNy9/cpKjimBe35CXE?= =?us-ascii?Q?Wzh0OOO8wDqVSCvM9jblgzpdNjzxrt1E6TCusmZgxOQMb4usV+QurwYC8Y1/?= =?us-ascii?Q?aTHOiMTK+Ltlofi+lHP494popwdfs89w0V/rSMsg3qD1WKgMowaAOvNx3+oa?= =?us-ascii?Q?r74fI7drwV1iXq6Hxt7eKmsxvkPrL7MoYjVxXz6r8enyt74kTf0ZH/H9alA6?= =?us-ascii?Q?oveA5zz/QMFW6RC4FRQ+1fKCiF7ti2xl5uwXXgRlux57uoIPhW1jPiu3otFU?= =?us-ascii?Q?JvBFDvPOA41ht7eN98jtT2SgpVBdU5GijQUulXJJxXQrMUMTxFm9Ls0zH4/k?= =?us-ascii?Q?aqtmSOBr0EIJ8VfYCkzh5t6IfJi/h7CH7Z3tjSNCiAeeAdtpVwwH6J2azqSo?= =?us-ascii?Q?gD8zlkDifBlIoDN0j7jxj1UJLfY+VHlqe3CNH5vB3w2uKKxRoAV1eUzISsuK?= =?us-ascii?Q?zlDoSuN44voMJVCXeNk8pRZHIki60ZpRXxW0xpgImloKNCCzF1Xot6RA4V+O?= =?us-ascii?Q?sDv3PmerC0by4PONYjNJvInPBfPh8mX4EMex8e/wQCVwLDt0f8ylJvYLJHbQ?= =?us-ascii?Q?Qj5asdz3xOxuKcBqm6TFIu5KGCh6F9AwyP+DF99QwYHJfRFtUgul8Ix2fJEX?= =?us-ascii?Q?Lfj6u7rcQSY7tUO4vxH9xKnib0NA0Mv9yb6yFq8+UkzV0wwldmiEYQK3WF/l?= =?us-ascii?Q?oyTt9pNTimRK1/rOtJk8S7i2KAGHxyWAcpKON3loVSqUvPQzeZ2RyCgvBsPq?= =?us-ascii?Q?jVRdR9SitE8nG8TDjk/AsHKwUTgPUPkxaXjUgaJ5iCMbardlFN/luDnp+8x2?= =?us-ascii?Q?Eu7itA0vuwTE58+/er2G29tQNikR6BPZ1H4JOynAPX0Yk0Fh0zOGpPefnPw6?= =?us-ascii?Q?6QTrMDThrIfrDl9GjpHVL89uIVpHqEfoyytgI/T7RMN3vFIxNSD1PNNCpDK9?= =?us-ascii?Q?TBmOw8TNr2enr4UdTqB/taX5obrg6OM/6QwBM1GzAR+ZdyVdTjkqIAEeutaP?= =?us-ascii?Q?LE1rH4mU2Ya+piPSpTeH4EpUtF/eEJzplPZp6kYPX/fnifEflE8PpD0jDy1h?= =?us-ascii?Q?OkgQueqUCsrVPRLMM/qInDfhpzJOB72nezZeWLIqS0FAbwUIXEcY0MlDQbDz?= =?us-ascii?Q?TGAU1iyhVCmFMW4sNWWbRVjsSWhJLQgUcbpjUYgiEIhHb4CEYJjE2vuhsdWW?= =?us-ascii?Q?QDgN46OIl/o+GSsV/kCsfDFO1fxIl/uyc6ia3UcIP/IREv/nXo9MicMvJ9rZ?= =?us-ascii?Q?1yGREGjxPn3dln9aF07eBsuldM96ASsTyG/28x9Xw7l/ji1Pw7Bq?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1ac90af1-171d-4ff0-c6bf-08df0e5e43a4 X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB7216.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Sep 2026 10:36:53.5669 (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: qaevNIo90Y0sW9ulxvIx1h/779XhKs10ThNQdaC5l/WyVo9MdIFO8ZFb6QqLpdgvCYncoG36oJsLQwa0quSshxrxXuVzFT/duM2T1Mi+i+HexXyDB9+dL0pxCNuoBuMx X-MS-Exchange-Transport-CrossTenantHeadersStamped: AMBPR04MB617387 Content-Type: text/plain; charset="utf-8" From: Wei Fang Add VF support for the i.MX94 and i.MX95 platforms. Compared to the LS1028A ENETC, the VF device ID is updated to 0xef00, so add it to the VF driver's PCI device ID table. Also add the enetc4 SI ops and VF driver data, and wire up .sriov_configure for the enetc4 PF driver so that VFs can be created and torn down on these SoCs. The number of VFs is not decided by the driver. It is determined by each ENETC instance's SR-IOV hardware capability, reported through the PCI SR-IOV TotalVFs field and configured by the SoC integration and device tree. The driver derives it from pci_sriov_get_totalvfs() in enetc_init_sriov_resources(); an instance that advertises zero VFs simply cannot enable SR-IOV. So there is no driver-side revision or device-ID check bounding the VF count. For reference, the per-instance VF capability on these SoCs is: - i.MX95 (v4.1): each ENETC instance supports 2 VFs. - i.MX94 (v4.3) has two kinds of ENETC: - standalone ENETC, the same instance type as on i.MX95, but on i.MX94 it advertises no VFs; - internal ENETC connected to the CPU port of the NETC switch, which supports 3 VFs. Signed-off-by: Wei Fang --- drivers/net/ethernet/freescale/enetc/Kconfig | 1 + drivers/net/ethernet/freescale/enetc/enetc.c | 15 ++++++++++++++ .../net/ethernet/freescale/enetc/enetc4_hw.h | 1 + .../net/ethernet/freescale/enetc/enetc4_pf.c | 4 ++++ .../ethernet/freescale/enetc/enetc_ethtool.c | 6 ++++++ .../net/ethernet/freescale/enetc/enetc_vf.c | 20 ++++++++++++++++++- 6 files changed, 46 insertions(+), 1 deletion(-) diff --git a/drivers/net/ethernet/freescale/enetc/Kconfig b/drivers/net/eth= ernet/freescale/enetc/Kconfig index db5c17a44613..f425f82a6213 100644 --- a/drivers/net/ethernet/freescale/enetc/Kconfig +++ b/drivers/net/ethernet/freescale/enetc/Kconfig @@ -69,6 +69,7 @@ config FSL_ENETC_VF depends on PCI_MSI select FSL_ENETC_CORE select FSL_ENETC_MDIO + select NXP_NTMP select PHYLINK select DIMLIB select CRC_ITU_T diff --git a/drivers/net/ethernet/freescale/enetc/enetc.c b/drivers/net/eth= ernet/freescale/enetc/enetc.c index 80f0082f6c63..803c5c541a5c 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc.c +++ b/drivers/net/ethernet/freescale/enetc/enetc.c @@ -3794,6 +3794,13 @@ static const struct enetc_drvdata enetc_vf_data =3D { .eth_ops =3D &enetc_vf_ethtool_ops, }; =20 +static const struct enetc_drvdata enetc4_vf_data =3D { + .sysclk_freq =3D ENETC_CLK_333M, + .tx_csum =3D true, + .max_frags =3D ENETC4_MAX_SKB_FRAGS, + .eth_ops =3D &enetc_vf_ethtool_ops, +}; + static const struct enetc_platform_info enetc_info[] =3D { { .revision =3D ENETC_REV_1_0, .dev_id =3D ENETC_DEV_ID_PF, @@ -3807,6 +3814,10 @@ static const struct enetc_platform_info enetc_info[]= =3D { .dev_id =3D ENETC_DEV_ID_VF, .data =3D &enetc_vf_data, }, + { .revision =3D ENETC_REV_4_1, + .dev_id =3D NXP_ENETC_VF_DEV_ID, + .data =3D &enetc4_vf_data, + }, { .revision =3D ENETC_REV_4_3, .dev_id =3D NXP_ENETC_PPM_DEV_ID, @@ -3816,6 +3827,10 @@ static const struct enetc_platform_info enetc_info[]= =3D { .dev_id =3D NXP_ENETC_PF_DEV_ID, .data =3D &enetc4_pf_data, }, + { .revision =3D ENETC_REV_4_3, + .dev_id =3D NXP_ENETC_VF_DEV_ID, + .data =3D &enetc4_vf_data, + }, }; =20 int enetc_get_driver_data(struct enetc_si *si) diff --git a/drivers/net/ethernet/freescale/enetc/enetc4_hw.h b/drivers/net= /ethernet/freescale/enetc/enetc4_hw.h index 09025e7a2a3a..e23d8d82d2ba 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc4_hw.h +++ b/drivers/net/ethernet/freescale/enetc/enetc4_hw.h @@ -12,6 +12,7 @@ #define NXP_ENETC_VENDOR_ID 0x1131 #define NXP_ENETC_PF_DEV_ID 0xe101 #define NXP_ENETC_PPM_DEV_ID 0xe110 +#define NXP_ENETC_VF_DEV_ID 0xef00 =20 /**********************Station interface registers************************/ /* Station interface LSO segmentation flag mask register 0/1 */ diff --git a/drivers/net/ethernet/freescale/enetc/enetc4_pf.c b/drivers/net= /ethernet/freescale/enetc/enetc4_pf.c index 6a9b1e079ae2..24c1fd869c2c 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc4_pf.c +++ b/drivers/net/ethernet/freescale/enetc/enetc4_pf.c @@ -1158,6 +1158,9 @@ static void enetc4_pf_remove(struct pci_dev *pdev) struct enetc_si *si =3D pci_get_drvdata(pdev); struct enetc_pf *pf =3D enetc_si_priv(si); =20 + if (pf->num_vfs) + enetc_sriov_configure(pdev, 0); + enetc_remove_debugfs(si); enetc4_pf_netdev_destroy(si); enetc4_pf_free(pf); @@ -1175,6 +1178,7 @@ static struct pci_driver enetc4_pf_driver =3D { .id_table =3D enetc4_pf_id_table, .probe =3D enetc4_pf_probe, .remove =3D enetc4_pf_remove, + .sriov_configure =3D enetc_sriov_configure, }; module_pci_driver(enetc4_pf_driver); =20 diff --git a/drivers/net/ethernet/freescale/enetc/enetc_ethtool.c b/drivers= /net/ethernet/freescale/enetc/enetc_ethtool.c index 07b7832f2427..7965dfd06f5f 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc_ethtool.c +++ b/drivers/net/ethernet/freescale/enetc/enetc_ethtool.c @@ -859,6 +859,9 @@ static int enetc_get_rxnfc(struct net_device *ndev, str= uct ethtool_rxnfc *rxnfc, struct enetc_ndev_priv *priv =3D netdev_priv(ndev); int i, j; =20 + if (!is_enetc_rev1(priv->si)) + return -EOPNOTSUPP; + switch (rxnfc->cmd) { case ETHTOOL_GRXCLSRLCNT: /* total number of entries */ @@ -903,6 +906,9 @@ static int enetc_set_rxnfc(struct net_device *ndev, str= uct ethtool_rxnfc *rxnfc) struct enetc_ndev_priv *priv =3D netdev_priv(ndev); int err; =20 + if (!is_enetc_rev1(priv->si)) + return -EOPNOTSUPP; + switch (rxnfc->cmd) { case ETHTOOL_SRXCLSRLINS: if (rxnfc->fs.location >=3D priv->si->num_fs_entries) diff --git a/drivers/net/ethernet/freescale/enetc/enetc_vf.c b/drivers/net/= ethernet/freescale/enetc/enetc_vf.c index a60af40d8546..322705202d49 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc_vf.c +++ b/drivers/net/ethernet/freescale/enetc/enetc_vf.c @@ -285,6 +285,12 @@ static void enetc_vf_netdev_setup(struct enetc_si *si,= struct net_device *ndev, ndev->features |=3D NETIF_F_RXHASH; } =20 + if (si->drvdata->tx_csum) + priv->active_offloads |=3D ENETC_F_TXCSUM; + + if (si->hw_features & ENETC_SI_F_LSO) + priv->active_offloads |=3D ENETC_F_LSO; + /* pick up primary MAC address from SI */ enetc_load_primary_mac_addr(&si->hw, ndev); } @@ -296,6 +302,13 @@ static const struct enetc_si_ops enetc_vsi_ops =3D { .teardown_cbdr =3D enetc_teardown_cbdr, }; =20 +static const struct enetc_si_ops enetc4_vsi_ops =3D { + .get_rss_table =3D enetc4_get_rss_table, + .set_rss_table =3D enetc4_set_rss_table, + .setup_cbdr =3D enetc4_setup_cbdr, + .teardown_cbdr =3D enetc4_teardown_cbdr, +}; + static int enetc_vf_probe(struct pci_dev *pdev, const struct pci_device_id *ent) { @@ -311,7 +324,11 @@ static int enetc_vf_probe(struct pci_dev *pdev, =20 si =3D pci_get_drvdata(pdev); enetc_vf_get_revision(si); - si->ops =3D &enetc_vsi_ops; + if (is_enetc_rev1(si)) + si->ops =3D &enetc_vsi_ops; + else + si->ops =3D &enetc4_vsi_ops; + err =3D enetc_get_driver_data(si); if (err) { dev_err_probe(&pdev->dev, err, @@ -413,6 +430,7 @@ static void enetc_vf_remove(struct pci_dev *pdev) =20 static const struct pci_device_id enetc_vf_id_table[] =3D { { PCI_DEVICE(PCI_VENDOR_ID_FREESCALE, ENETC_DEV_ID_VF) }, + { PCI_DEVICE(NXP_ENETC_VENDOR_ID, NXP_ENETC_VF_DEV_ID) }, { 0, } /* End of table. */ }; MODULE_DEVICE_TABLE(pci, enetc_vf_id_table); --=20 2.34.1 From nobody Fri Sep 25 19:15:32 2026 Received: from AM0PR02CU008.outbound.protection.outlook.com (mail-westeuropeazon11013047.outbound.protection.outlook.com [52.101.72.47]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DFB1E5293E0; Wed, 9 Sep 2026 10:37:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.72.47 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788950225; cv=fail; b=BfiCkTJBiaxCYJsaJLX7EoBba6slHo/KHNw0o5eSbdIQ2F1ETWrbBl4u0V31/m5qmZNp7VJ0aRjtEnPhH0GK18jTcA0SimtFw0Kj+c5UsP/4GXOv+VlJlGhLiDUqDaFS9DU1MVBGcMBN31k117GwUUQxJLEyNKafgjQrTA9wdFY= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788950225; c=relaxed/simple; bh=ZZYdS/+ZGnVs7B8FxondtT8sKk4rx905275pKReGiTU=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=P6DqXkcht0i/onwZVI7XTvHQTpqkFdgyaHnrEZbTVKz0+aJ1unrMYQJsg1n4OZuilzC5mpCZEjUa1RQD1xhSVSYLTUb08zF3rFun5FLfUctNDwTSe96HAN/uGJEjEyegJTEoiVZEL8oYbqBu3E/DZt0tW5GR24k3g3SG1lkB6u0= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com; spf=pass smtp.mailfrom=oss.nxp.com; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b=RWWB5x5r; arc=fail smtp.client-ip=52.101.72.47 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b="RWWB5x5r" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=vf4Eu2Sm20pQJAaG+oOdZwDs2HR82JyLayfzlrzXE2BY3LfDJ0Z6NezEENnHUsuRdGw9SYdkQHl1nXa8UYs3KXsocSXnm0jdcwapWVQKACDxzD2ddCY5te+uC9DB/QW7LavNROZgGh6bnZV5CGw093+255qJC7NDftUWYU9MCclBZ/41vp/oRsw1DtLt6sDT0ZTmx+AVlz4qtWidVEnpiZsZmMMwBgGZdtYP1lB95raCf6stC7Hvhc14EZ7pToRajAHNqd6FWw8rShwpjyJX7o0hml29OHgR09f7jGBlZM+ZjbcdEiDNcDmXWrVmXF0w+PodnN8jPQaTKtDiMpCVBA== 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=Y1SLxkB9kqj9jiCGY1CtGeHTRkozQcQWHFb7CqxOvu0=; b=pRH0K3yVu/vDI2vkCO55cHcP7cpc7dS6CvmmV9YmVjoeH/pvTWJMKn2UjDvsFwSsj+/HiJtPgohryq8u2GLRUKYG1+rCLvK+yVAnKkFUN6ho6Ua7lAsPiu0K9jcYYIhntRwvqEx0K/V1eAemNzgFtDf6SS+lwfz9RrP/6w1BSPEJEPvuKmHgrSfPaBWAKcQE0wCqKMiqTjs6OQ256aJzVZGcS35bSzXIOf5TvCOA0bL6j6NuzAlUihSqFhjWBASkT69WC1ddvJ17czDO/mZ7WdoLxdt1bM1Pff6wzGXL/d8oxTx6LDDQYkiqkx/Z84eAFce4UxNiZHJaUuJlNm3YFg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oss.nxp.com; dmarc=pass action=none header.from=oss.nxp.com; dkim=pass header.d=oss.nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=NXP1.onmicrosoft.com; s=selector1-NXP1-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Y1SLxkB9kqj9jiCGY1CtGeHTRkozQcQWHFb7CqxOvu0=; b=RWWB5x5rQliIwnxG+bL8RjBj0TmPbc748aGdDD39SYupAiaWIlzEZ+C34hFPmhXUlljMTnUonM4/Pufm9qZtP6CDIQD0OGyGFrT5O0ZNqsMzm9RMP7QfV3PKy177I8gbAJ6j7o5eq3nI0/0kbAPbWfvvlt7hC8JyH+KNQsuz9ZBQfTNuyspDLBI55RQk4BsMoDm073mC3Mmj3GZ8WLUjBjgSW1nME3FKOVk21QDFgkCbgY//sY/2UFZUgqPrrsBhETjBl7If9RqEqG2/ZOSmcqYhfc0JoFLyvwgmTNkVakJqjRBdGwcNKFg9o5EALaX6QTsPxJTJyHC/p6BRMnfE5g== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from VE1PR04MB7216.eurprd04.prod.outlook.com (2603:10a6:800:1b0::22) by AMBPR04MB617387.eurprd04.prod.outlook.com (2603:10a6:20b:7ae::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.406.6; Wed, 9 Sep 2026 10:37:00 +0000 Received: from VE1PR04MB7216.eurprd04.prod.outlook.com ([fe80::a9a5:cf83:dbe8:1f74]) by VE1PR04MB7216.eurprd04.prod.outlook.com ([fe80::a9a5:cf83:dbe8:1f74%3]) with mapi id 15.21.0406.005; Wed, 9 Sep 2026 10:37:00 +0000 From: wei.fang@oss.nxp.com To: claudiu.manoil@nxp.com, vladimir.oltean@nxp.com, xiaoning.wang@nxp.com, andrew@lunn.ch, olteanv@gmail.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, linux@armlinux.org.uk Cc: wei.fang@nxp.com, imx@lists.linux.dev, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v4 net-next 13/15] net: enetc: implement ndo_set_rx_mode_async for ENETC v4 VF Date: Wed, 9 Sep 2026 18:07:31 +0800 Message-Id: <20260909100733.1139689-14-wei.fang@oss.nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260909100733.1139689-1-wei.fang@oss.nxp.com> References: <20260909100733.1139689-1-wei.fang@oss.nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MA5PR01CA0112.INDPRD01.PROD.OUTLOOK.COM (2603:1096:a01:1d1::17) To VE1PR04MB7216.eurprd04.prod.outlook.com (2603:10a6:800:1b0::22) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VE1PR04MB7216:EE_|AMBPR04MB617387:EE_ X-MS-Office365-Filtering-Correlation-Id: 7409a4c2-092d-414f-c821-08df0e5e47b9 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|19092799006|23010399003|7416014|376014|366016|1800799024|10067099003|6133799003|22082099003|56012099006|11063799006|18002099003|921020; X-Microsoft-Antispam-Message-Info: hHgqIE3vUa6GXaxrLUoTRRwBiufvtLivjCJp2EQb4tGmyV/QYJZj9PHn0QWFvkuQkuLrF68m4EV4aLNltK82lO/kmpWIZdw5vDyFXxObjscKaFoyBDOb+Xbu8dEuKYCyhqXDFJEOax5Hexu1+6AgOAFPb5VUZeUDZCXZ88l66PuxSomxMUJ8HF7XbcpbqPf+fOqDaTJKMfKQ0neYXayrzjG42Edkv5usd448pNj86xIu86g+Eoqx/rKbnRfIbuup9BiBz9mD1J7mo/OeZ48q8yrFeRXMzy43t6UmbXkkjq9v7oKcwRykPS+fHLJLV31Hp1d2RA5p/prMtdoTrRHAEOj+WnOtanxC3+/m16G0bWFo5buo2kqWgcWcw4jnazI+yf5f1X+UO2zyt93C2b6QwrE672ys+if52DtAtsyHQXSVYHWwhR9NptuSLRksPXKY0E38Z7cQY7P/Qd+8GiTib1NAdTF7I8lBnjxWdTYd9o1Ya+9JSbABJwlJkp0jCxzKRPnBaid92GIXJziZOLN7pi86+EETCOp3OeRjWu3SSggsUmAlM7NcM2MQcFYWZTU5WTyV9xu/r9paImr1N4zyYAKT+/yrpAMqDlS0HX/R0wciitNkjEXmYzC1yLdlI5S3/7tHcqWMgpmrOmVwKoky1d9Y+gdbezw39kPe5PZPWze2BV3VoOKG7rx/1rDdi4EoRHmUoZrA5iLOT2qSVqtANA== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VE1PR04MB7216.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(19092799006)(23010399003)(7416014)(376014)(366016)(1800799024)(10067099003)(6133799003)(22082099003)(56012099006)(11063799006)(18002099003)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?tGEhgVfCPSeXTGCpt0Iwkp96Weat04zXya8xfRgXa70+dQZL+cXZIjRIIr1l?= =?us-ascii?Q?vGP0aaYqqVSKI9wjgqAAGSZOPy//X2+tUaVi10hJ/Ll87Sm4EBYTl8HbSjLj?= =?us-ascii?Q?E4/2s09Z0DvyOa6paVmHu5J3DjKucoIcimIPxmd2JQszlNCXIM2CdbWI3gFW?= =?us-ascii?Q?GjjMjlD69i4MZRL5FYm+78M0zYbJL3wkQ9vxVunFdyw+cplGZZKLECQ+/4Px?= =?us-ascii?Q?X+MRWNqvYvZ4jtIsB8xVf4UphObl9WG+8ZDsjMQDZEbVTTWR6MmskYTU0KMg?= =?us-ascii?Q?/AjbCQ3TWQ/JPrseV0dHpWGnZ3fsRmg5zbSv13/cQzUt4MxTJtR/mIHQIx3U?= =?us-ascii?Q?zB8dC78xfO333+cYK+wcDnxZqdoGRCUXxx2uGjLMLjv3ZyObSqa0gLM7AsL1?= =?us-ascii?Q?NSakbcJ3a5ZSMuU5/54ulavYOQXIrnuj3It0QUf4EyQCBWMU5FM13kamE20W?= =?us-ascii?Q?/oDdai0ngtznFQURGW+rkqJ2mQL9H071kjKfkkQS3Qyz/9f043bQzBfvYglC?= =?us-ascii?Q?isM2ZuLYltKl0BVjqZ3zvGVvyNwSPtcti0VFMBAx8PomMC6KBITlVABt42U0?= =?us-ascii?Q?cL7jSW1InXby/7vySPmY9fjodZ6XJZTqoWMwB81TANrJhEB3mSqfSt+JYcbh?= =?us-ascii?Q?sCP/9LBb3a8oeeKFF0x70sPgrZrTEMhUEHdLH03I0fNhmGqgq3OKRo9ZRTvr?= =?us-ascii?Q?JZHiHuc8d4xMbUj7OfWxcWpM+Fl0gVecyrynmJx/HM6Xr5pr2TgK/jWViCmo?= =?us-ascii?Q?NSrRTTo9THXsUhjUv0D1YyeNkuy4QDz6U6j1DjGk/W4U7fPSl+XA1PwjOkGF?= =?us-ascii?Q?xDg3f6D+D8O34uRUryhfWGpDC/3+YGsrAGYBH+FvWua5dQ4rm7Yt9Rgnnjdz?= =?us-ascii?Q?W5O/iAYVnLezp41sSaRofERNN3XDk0egzpf9eMtP7GWkAV4o9iidWM4ri7Ga?= =?us-ascii?Q?RT97He+V6e8IjQbkaPrfHSwk1tbtOlqwqP4F4h2KCgPRd2diSsYOkoCiINUW?= =?us-ascii?Q?e2GFLTfmI9AHBdEYt3AE0+6r6QpLTy4evrZV/3uF05ec4VEKmO4AJpRM3L8m?= =?us-ascii?Q?bGHpJGfDcPqJPxgu8Ill010hkvmEebQV1+0z8Y2MrKD6XUmiCLO5DYT4Em7t?= =?us-ascii?Q?mc5iP8mmp52VnPFlD0qEVgUs3POkMGmXc5F3TTQ69asQgrKaeoNzNrzZixdU?= =?us-ascii?Q?j/jbPYyBUnWEKn3sV3cv4o5Lcn9z08sCHDzC3xUcAp25fMEAi/+R/fgpojag?= =?us-ascii?Q?mHj5BzbDNh7gM/epHubZsce9enmm+JU+tspkDz+Atc08G1yMD1CJlZa75NRw?= =?us-ascii?Q?mdjuhzkTMdyqahhAnKOc5a2YtoNmGjRSRnJvc688gHglzwTqYJWvGTRyqw5H?= =?us-ascii?Q?tCAq4lngvu1aLcSqtqfyvZQt5Y4Axru9K1wh+NZCOBsrMJ080IRulThoyEM1?= =?us-ascii?Q?ijuxTSV3ZtoXwrdFZlMfwZr/nOWewt5HdgyN04LYb3aH/IBnMFPQLOyRyXto?= =?us-ascii?Q?LbGm0KqK5ed0q8HVO1hYc+ANYb0G2sfcVgXbqLZ7Dr8earvzlgSYLuXOPmM7?= =?us-ascii?Q?MzIjYLkyrhypW7q2NAKCVqB2mCEOV3PopcIuRQuBxG8nV+oMC+9sC1u+d6ct?= =?us-ascii?Q?2vLsKwvQZACQuYW8ifFUZ4rW4AK6LtpHj7RAL1skExomTJLcBSN1CzQRHCQf?= =?us-ascii?Q?p1zsuKc9X8/VwFZZY3DmeWZL4j7HH5RsfXN7tUi23HY4MHsDvRSIYC4Llifj?= =?us-ascii?Q?UYB8SA+KrWm2w5tO0mpBQ4++3wdTB31Y/eAb6jdJVBOH+Yxsxy9t?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7409a4c2-092d-414f-c821-08df0e5e47b9 X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB7216.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Sep 2026 10:37:00.4519 (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: OZe2QNZxq1QEDFSg7A1p/KuHo2AYAEGKAWEpLd86NhsTTH0iKPk0AgU4UJw0xiUKrRwuAq8W/MJrEdwzo0R1vP95Nrpm/i9KmZ7fFna4Lzwsqhs8/O5HQbQz0w62p9ro X-MS-Exchange-Transport-CrossTenantHeadersStamped: AMBPR04MB617387 Content-Type: text/plain; charset="utf-8" From: Wei Fang An ENETC VF sends MAC filter changes to the PF over the VSI mailbox, whose send path may sleep for up to 200ms waiting for completion. Since the legacy ndo_set_rx_mode runs in atomic context, use ndo_set_rx_mode_async instead, which runs from a workqueue under rtnl_lock and receives pre-snapshotted unicast and multicast address lists from the core. Add two helpers built on the VSI mailbox: - enetc_vf_set_mac_promisc() sends a promiscuous mode message for a given filter type (unicast, multicast or both). - enetc_vf_set_mac_hash_filter() sends the 64-bit MAC hash filter table, built from the snapshotted address lists. The callback picks the configuration from the current netdev flags: - IFF_PROMISC: enable promiscuous mode for both unicast and multicast. - IFF_ALLMULTI: enable multicast promiscuous mode, disable unicast promiscuous mode and apply a unicast hash filter. - otherwise: disable promiscuous mode and apply both unicast and multicast hash filters. These requests are subject to the PF-side ENETC_VF_FLAG_TRUSTED check. For an untrusted VF (the default) the PF denies promiscuous mode and unicast hash filtering, so only the multicast hash filter is applied, limited to ENETC_VF_MC_HASH_BITS_MAX buckets. Mark a VF trusted via 'ip link set vf N trust on' for the full behaviour. Set IFF_UNICAST_FLT for ENETC v4 VFs so the stack does not needlessly fall back to full promiscuous mode; whether a unicast hash filter is actually programmed still depends on the PF trust policy. Since a denied request always fails, map -EOPNOTSUPP, -EACCES and -EPERM to 0 so the core does not retry an operation that can never succeed. ENETC v1 (LS1028A) does not support VF-to-PF MAC filter messaging and keeps using the legacy ndev ops. On VF removal, disable promiscuous mode and clear the MAC filters, so that stale configuration does not persist if the VF is later bound to another driver. Signed-off-by: Wei Fang --- .../net/ethernet/freescale/enetc/enetc_vf.c | 214 +++++++++++++++++- 1 file changed, 213 insertions(+), 1 deletion(-) diff --git a/drivers/net/ethernet/freescale/enetc/enetc_vf.c b/drivers/net/= ethernet/freescale/enetc/enetc_vf.c index 322705202d49..8cf38c426dae 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc_vf.c +++ b/drivers/net/ethernet/freescale/enetc/enetc_vf.c @@ -213,6 +213,193 @@ static int enetc_vf_setup_tc(struct net_device *ndev,= enum tc_setup_type type, } } =20 +static int enetc_vf_set_mac_promisc(struct enetc_si *si, int type, + bool promisc, bool flush_macs) +{ + struct enetc_msg_mac_promisc_mode *msg; + struct device *dev =3D &si->pdev->dev; + struct enetc_msg_swbd msg_swbd; + + if (!(type & ENETC_MAC_FILTER_TYPE_ALL)) + return -EINVAL; + + msg_swbd.size =3D ALIGN(sizeof(*msg), ENETC_MSG_ALIGN); + msg_swbd.vaddr =3D dma_alloc_coherent(dev, msg_swbd.size, + &msg_swbd.dma, GFP_KERNEL); + if (!msg_swbd.vaddr) + return -ENOMEM; + + msg =3D (struct enetc_msg_mac_promisc_mode *)msg_swbd.vaddr; + msg->config =3D FIELD_PREP(ENETC_MSG_MAC_TYPE, + type & ENETC_MAC_FILTER_TYPE_ALL); + msg->config |=3D FIELD_PREP(ENETC_MSG_MAC_PROMISC_MODE, promisc); + msg->config |=3D FIELD_PREP(ENETC_MSG_MAC_FLUSH_MACS, flush_macs); + enetc_msg_fill_common_hdr(&msg_swbd, ENETC_MSG_CLASS_ID_MAC_FILTER, + ENETC_MSG_SET_MAC_PROMISC_MODE, 0, 0); + + return enetc_msg_vsi_send(si, &msg_swbd); +} + +static int enetc_vf_set_mac_hash_filter(struct enetc_si *si, + struct netdev_hw_addr_list *uc, + struct netdev_hw_addr_list *mc) +{ + struct enetc_msg_mac_hash_filter *msg; + struct enetc_mac_filter *mac_filter; + struct device *dev =3D &si->pdev->dev; + struct enetc_msg_swbd msg_swbd; + struct netdev_hw_addr *ha; + int mac_filter_type =3D 0; + u32 tbl_cnt =3D 0; + u32 msg_size; + int i =3D 0; + + if (!uc && !mc) + return 0; + + if (uc) { + tbl_cnt +=3D 2; + mac_filter_type |=3D ENETC_MAC_FILTER_TYPE_UC; + } + + if (mc) { + tbl_cnt +=3D 2; + mac_filter_type |=3D ENETC_MAC_FILTER_TYPE_MC; + } + + msg_size =3D struct_size(msg, hash_tbl, tbl_cnt); + msg_swbd.size =3D ALIGN(msg_size, ENETC_MSG_ALIGN); + msg_swbd.vaddr =3D dma_alloc_coherent(dev, msg_swbd.size, + &msg_swbd.dma, GFP_KERNEL); + if (!msg_swbd.vaddr) + return -ENOMEM; + + msg =3D (struct enetc_msg_mac_hash_filter *)msg_swbd.vaddr; + msg->sz_type =3D FIELD_PREP(ENETC_MSG_MAC_TYPE, mac_filter_type); + msg->sz_type |=3D FIELD_PREP(ENETC_MSG_MAC_HASH_SIZE, + ENETC_MAC_HASH_TABLE_SIZE_64); + + if (uc) { + mac_filter =3D &si->mac_filter[UC]; + enetc_reset_mac_addr_filter(mac_filter); + netdev_hw_addr_list_for_each(ha, uc) + enetc_add_mac_addr_ht_filter(mac_filter, ha->addr); + + bitmap_to_arr32(&msg->hash_tbl[i], mac_filter->mac_hash_table, + ENETC_MADDR_HASH_TBL_SZ); + i +=3D 2; + } + + if (mc) { + mac_filter =3D &si->mac_filter[MC]; + enetc_reset_mac_addr_filter(mac_filter); + netdev_hw_addr_list_for_each(ha, mc) + enetc_add_mac_addr_ht_filter(mac_filter, ha->addr); + + bitmap_to_arr32(&msg->hash_tbl[i], mac_filter->mac_hash_table, + ENETC_MADDR_HASH_TBL_SZ); + } + + enetc_msg_fill_common_hdr(&msg_swbd, ENETC_MSG_CLASS_ID_MAC_FILTER, + ENETC_MSG_SET_MAC_HASH_TABLE, 0, 0); + + return enetc_msg_vsi_send(si, &msg_swbd); +} + +static int enetc_vf_enable_iff_promisc(struct enetc_si *si) +{ + int err; + + err =3D enetc_vf_set_mac_promisc(si, ENETC_MAC_FILTER_TYPE_ALL, + true, true); + if (err) + dev_err(&si->pdev->dev, + "Failed to enable promiscuous mode, err: %pe\n", + ERR_PTR(err)); + + return err; +} + +static int enetc_vf_disable_iff_promisc(struct enetc_si *si, + struct netdev_hw_addr_list *uc, + struct netdev_hw_addr_list *mc) +{ + int err; + + err =3D enetc_vf_set_mac_hash_filter(si, uc, mc); + if (err) { + dev_err_once(&si->pdev->dev, + "Failed to set MAC hash filters, err: %pe\n", + ERR_PTR(err)); + return err; + } + + err =3D enetc_vf_set_mac_promisc(si, ENETC_MAC_FILTER_TYPE_ALL, + false, false); + if (err) + dev_err_once(&si->pdev->dev, + "Failed to disable promiscuous mode, err: %pe\n", + ERR_PTR(err)); + + return err; +} + +static int enetc_vf_enable_iff_allmulti(struct enetc_si *si, + struct netdev_hw_addr_list *uc) +{ + int err; + + err =3D enetc_vf_set_mac_promisc(si, ENETC_MAC_FILTER_TYPE_MC, + true, true); + if (err) { + dev_err(&si->pdev->dev, + "Failed to enable multicast promiscuous mode, err: %pe\n", + ERR_PTR(err)); + return err; + } + + err =3D enetc_vf_set_mac_hash_filter(si, uc, NULL); + if (err) { + dev_err(&si->pdev->dev, + "Failed to set unicast filter, err: %pe\n", + ERR_PTR(err)); + return err; + } + + err =3D enetc_vf_set_mac_promisc(si, ENETC_MAC_FILTER_TYPE_UC, + false, false); + if (err) + dev_err(&si->pdev->dev, + "Failed to disable unicast promiscuous mode, err: %pe\n", + ERR_PTR(err)); + + return err; +} + +static int enetc_vf_set_rx_mode(struct net_device *ndev, + struct netdev_hw_addr_list *uc, + struct netdev_hw_addr_list *mc) +{ + struct enetc_ndev_priv *priv =3D netdev_priv(ndev); + struct enetc_si *si =3D priv->si; + int err; + + if (ndev->flags & IFF_PROMISC) + err =3D enetc_vf_enable_iff_promisc(si); + else if (ndev->flags & IFF_ALLMULTI) + err =3D enetc_vf_enable_iff_allmulti(si, uc); + else + err =3D enetc_vf_disable_iff_promisc(si, uc, mc); + + /* If the error code is -EOPNOTSUPP or -EACCES or -EPERM, return 0 + * directly to avoid meaningless retries. + */ + if (err =3D=3D -EOPNOTSUPP || err =3D=3D -EACCES || err =3D=3D -EPERM) + return 0; + + return err; +} + /* Probing/ Init */ static const struct net_device_ops enetc_ndev_ops =3D { .ndo_open =3D enetc_open, @@ -227,6 +414,20 @@ static const struct net_device_ops enetc_ndev_ops =3D { .ndo_hwtstamp_set =3D enetc_hwtstamp_set, }; =20 +static const struct net_device_ops enetc4_ndev_ops =3D { + .ndo_open =3D enetc_open, + .ndo_stop =3D enetc_close, + .ndo_start_xmit =3D enetc_xmit, + .ndo_get_stats =3D enetc_get_stats, + .ndo_set_mac_address =3D enetc_vf_set_mac_addr, + .ndo_set_features =3D enetc_vf_set_features, + .ndo_eth_ioctl =3D enetc_ioctl, + .ndo_setup_tc =3D enetc_vf_setup_tc, + .ndo_hwtstamp_get =3D enetc_hwtstamp_get, + .ndo_hwtstamp_set =3D enetc_hwtstamp_set, + .ndo_set_rx_mode_async =3D enetc_vf_set_rx_mode, +}; + static void enetc_vf_get_revision(struct enetc_si *si) { int ip_mn; @@ -280,6 +481,9 @@ static void enetc_vf_netdev_setup(struct enetc_si *si, = struct net_device *ndev, ndev->vlan_features =3D NETIF_F_SG | NETIF_F_HW_CSUM | NETIF_F_TSO | NETIF_F_TSO6; =20 + if (!is_enetc_rev1(si)) + ndev->priv_flags |=3D IFF_UNICAST_FLT; + if (si->num_rss) { ndev->hw_features |=3D NETIF_F_RXHASH; ndev->features |=3D NETIF_F_RXHASH; @@ -352,7 +556,10 @@ static int enetc_vf_probe(struct pci_dev *pdev, goto err_alloc_netdev; } =20 - enetc_vf_netdev_setup(si, ndev, &enetc_ndev_ops); + if (is_enetc_rev1(si)) + enetc_vf_netdev_setup(si, ndev, &enetc_ndev_ops); + else + enetc_vf_netdev_setup(si, ndev, &enetc4_ndev_ops); =20 priv =3D netdev_priv(ndev); =20 @@ -416,6 +623,11 @@ static void enetc_vf_remove(struct pci_dev *pdev) priv =3D netdev_priv(si->ndev); unregister_netdev(si->ndev); =20 + /* Disable promiscuous mode and clear MAC filters */ + if (!is_enetc_rev1(si)) + enetc_vf_set_mac_promisc(si, ENETC_MAC_FILTER_TYPE_ALL, + false, true); + enetc_free_msix(priv); =20 enetc_free_si_resources(priv); --=20 2.34.1 From nobody Fri Sep 25 19:15:32 2026 Received: from AS8PR04CU009.outbound.protection.outlook.com (mail-westeuropeazon11011012.outbound.protection.outlook.com [52.101.70.12]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 61AE152ED35; Wed, 9 Sep 2026 10:37:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.70.12 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788950234; cv=fail; b=gs4BfcJzbWzPMEnj3Eeo3GF8yxXZx0zn7PYlXfjZdBoXv7vFm7RH2h97g3JNzwNb6hx6U9er7eoL9BZdYtFtiSQdK1f+kjHSllvQtqV8Xa7uDk4/n7PEo7NZAddogx1MYvvGnK7Mto6b6mAb38yllMZQyqbJcpD/Vk6E89THlxI= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788950234; c=relaxed/simple; bh=9TOGF6t0VpBRgi0ef1PpGegD+JSjksuT0uR9MyD10AM=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=Vv38ZLwcgyPwidgvx+miHkxRem3NXI+PizP6fSt2UXqpJxU68FblvkVkYt2uzIt3o9DomHk9RxkCfIavVvDAFlc41uCc/lB8QTqgyuoN6kdji3kuujRr0BRgcwe8stId7SI4JkuNxQRKaULdsyn9ooUderuzVJ/A1EEEAFkdVdA= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com; spf=pass smtp.mailfrom=oss.nxp.com; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b=ZJYqoLUs; arc=fail smtp.client-ip=52.101.70.12 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b="ZJYqoLUs" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=YMFs8yK9UD7fesYhMTfYbuI9jeNeDGbsBqzGseVduzfQZnw1Ld8Zxv15c7v6oZvGOfAO7ChY3oiqxZoAc6+L0gngxZtkRxLznmDE30U3Y9OcII4nkaGf02qYEE/zOfef0yIAp/olWNURhRQcNMXZzed3LHhIbpSmV7nk3xI/FkiEFY+mZyddlDohPKKxeROJxsvL3bShyj3iOEbFIggjLqg5mozYgaazYNF/yXoY9knwSZzBjrVrYQQNhs3HA4EGXVuCTE6vUhvhPgG/u4lOo1QD0FD0YDjFRlQ/pWLd4L69y+GvGD42EvdnHdo+rpzQj2syLZNyMzxWYxr7Z//DJA== 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=CeJxVCMtshvofDxKxvgdYexeXI9ZNxF55qs+bUMrnuE=; b=vETMA/DwfD7pU8LHWhU4r0RNF6GoT5tYzq2kxG5w3pWN+RU4c7I52jlRw44gOwc/bEFaT2FrlljlChiMmbaBLUHDYZMHmmswS5nShG71yEgq9DoEkBqax15M+tgAuow6C+k5V6GpF3dSi5Nu21tVJZVdiV9Uv9AHs7RCyri/UlG9f2+DmDXRQtpVUyOSPVUYUyTEQQINIzgWNj1fJ/nFO/pHeEe+Xz1XH181NNiEaPcjOiTRac/0ani1k/u4GNh+cIB3D1qcMLYU1wluPxZWDtjNrJPco3nJb4FIyIWz3DCcD1Kmi5nTQlvKerCBARV6VEah5mi7TT16jNgIiYlTkw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oss.nxp.com; dmarc=pass action=none header.from=oss.nxp.com; dkim=pass header.d=oss.nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=NXP1.onmicrosoft.com; s=selector1-NXP1-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=CeJxVCMtshvofDxKxvgdYexeXI9ZNxF55qs+bUMrnuE=; b=ZJYqoLUsxGALXw3lLs+IzEQhTw7ibBiz/IA442JsP8GGjW+9XkzNclcCUyNi043cUP6hzO6XqbW4doD6Y9lRlHzZ0R6o/JJsz8oBRRifmhPawBOTMv+rKlov+MDveAVR4Zxi8FZXPZYwuwuRvAuaVfjNz6/MTmxRFRitZDvEQiI6+m8NbH8BPtT8GkejlI0Nu6CuWjKPuE2SMqjA1hL/8qAyqaEhCRcV2ec1+dTf90Elvb/EHENa1knQ8kFqJ9Wd4iAg4dyxOr+ELmvkuLIHtfNyPHUFZYNTSxNnvO/KONo/U3ML6qH4N/hz8aZH8zRZZlkGq4U/3KkBgChNvcsebA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from VE1PR04MB7216.eurprd04.prod.outlook.com (2603:10a6:800:1b0::22) by AMBPR04MB617387.eurprd04.prod.outlook.com (2603:10a6:20b:7ae::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.406.6; Wed, 9 Sep 2026 10:37:09 +0000 Received: from VE1PR04MB7216.eurprd04.prod.outlook.com ([fe80::a9a5:cf83:dbe8:1f74]) by VE1PR04MB7216.eurprd04.prod.outlook.com ([fe80::a9a5:cf83:dbe8:1f74%3]) with mapi id 15.21.0406.005; Wed, 9 Sep 2026 10:37:09 +0000 From: wei.fang@oss.nxp.com To: claudiu.manoil@nxp.com, vladimir.oltean@nxp.com, xiaoning.wang@nxp.com, andrew@lunn.ch, olteanv@gmail.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, linux@armlinux.org.uk Cc: wei.fang@nxp.com, imx@lists.linux.dev, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v4 net-next 14/15] net: enetc: add PSI-to-VSI link status notification support for VF Date: Wed, 9 Sep 2026 18:07:32 +0800 Message-Id: <20260909100733.1139689-15-wei.fang@oss.nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260909100733.1139689-1-wei.fang@oss.nxp.com> References: <20260909100733.1139689-1-wei.fang@oss.nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MA5PR01CA0281.INDPRD01.PROD.OUTLOOK.COM (2603:1096:a01:21d::15) To VE1PR04MB7216.eurprd04.prod.outlook.com (2603:10a6:800:1b0::22) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VE1PR04MB7216:EE_|AMBPR04MB617387:EE_ X-MS-Office365-Filtering-Correlation-Id: fead091f-67b5-44c2-2690-08df0e5e4cc7 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|19092799006|23010399003|7416014|376014|366016|1800799024|10067099003|22082099003|56012099006|11063799006|18002099003|921020; X-Microsoft-Antispam-Message-Info: 6/yOtSifme3WLOesLR8ebWmfamkYUN1xW8ZQ3xxiE6cmAln26JfhHnSFPUH0OQePtxem/q2bY7PwVrQTghMwvzaHmR0xvvmz5BGGOqanaZpLA9rthkyx9/io7KufkzVHy+BbPmUScCZLY/WYtZ3kfX8o9RYWq+AR+lce8XIIxu/F/6Cz9FlM++nm0fbqu9ATCA3k7V2YFCoU0BmhyFh8QP1eW8y8E7NjG+dowvabK50mDTdO/9nbraDxRgy9zBZTdMl/wq7eyQ345A/cTLGZQJxsmXfgtVVM+CS0I+j4Gy9KHJjAy71z2uU5cuSHWO39CiwLChvczK1508tPWEqX6pTKPg23MMa0DfZQL4rb0No5Hk55oGJw9YcJ9YvHiLsA5KDqDTrTGUrkeGX3Dnx1biyYHVxVV0YJJNzs9775zoUQABhV0J0Mwtb8ZuQpvXJEebndtd9cfTOyupIJtYg4t2fNglmORCVzDj0iXDCwowRAhCbRZhS9jz02SbSDsyh2IQX81n+Om1w4xHt0mSzqHofS7VHuo7tG81bBddH/LJgb6N1A4zPH4XQwie2J8Gm0ycIbDaWnupmmM8Xt35zs93xnkDDkG2buyErP3adFjl7jtC7CEjHleCDNrWVCMGxvVBbSZaERmNwFlLuN4znSoRDik303KuvVXwSaWbXdiHlXk0x5Rwzoo9RYNwzu5EY7iUTOoCddR77KvVOxwCA8cg== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VE1PR04MB7216.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(19092799006)(23010399003)(7416014)(376014)(366016)(1800799024)(10067099003)(22082099003)(56012099006)(11063799006)(18002099003)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?A8I/D1f5ef8nEzU6Na58XnMechFaM1T2d5d/BY8vM9mgmEO9ouKNp1qO6CH7?= =?us-ascii?Q?jV7h9mD9EiIIISoqdw/Q4Hg5HkW9/BmHDZcC+2sEUI+icHebDcbrGKEofvkn?= =?us-ascii?Q?ZrgoQGnWg0pCZ9+pY+hnq5X7BzTAqDh/4ycvybwwEizLrX0tKuqyAABIIycM?= =?us-ascii?Q?2ugcFA91rZWs43BgxDFcSkUnd4dS5KRZgeDZAjcDswontMV3l4mgA51bZZiA?= =?us-ascii?Q?Xj9DQ6/2UpK39vowwQP059gfEO+6PTBrN40pA8zMDXd7saXmS8T3pMvettP4?= =?us-ascii?Q?B3bJXoKqLQekKtzQ76fptOYytcZdRjg/wn5LgecHeJP2rvDGBJFy1qQv1+uR?= =?us-ascii?Q?pMMxrcHzWB9Vuvq8GPr5feNVzrpFqNOUuBoTiJIO25UotHoTrtK7gyBqZR0V?= =?us-ascii?Q?wbT1FZ4rMJIB5mV/r2Rw3Cjjm5yUZYSwTG5GJbpEMbjepzJIp3zIqpeiLhxG?= =?us-ascii?Q?IrAFnNk0W7NrD0ox+rBiT7h9yY3X+HOQK+ZpB0oLu+1tM3c+j3UUki/H+cPy?= =?us-ascii?Q?V0I+BVvCGi0k3KCT/+rVmJmJRhOS7685dokJof8efcA/rF1NddmWHLzntZLO?= =?us-ascii?Q?YyqKu3GcmRWWDfV3nNX04JV+9Qv0pEIb2d25cjizfjlZ1Ci9Qu9TzZy99bM5?= =?us-ascii?Q?NKn9DgvC6O5kN7opTSxBUtix0qkoQpF2H3HK/IZtUcEnaKpZ61lVho73SnBf?= =?us-ascii?Q?3F+9b8QJIR/ahK50HSPq10+T703nqSpF1GY3cQM8oFTiUp0L/aXLLlC/aXhZ?= =?us-ascii?Q?0OLkdGN3wEpoSLC4vd6yQGS7UNetFvnnAZBdn009WH0yw2+T9ofwT6PS+NmL?= =?us-ascii?Q?oGsRP6zdTDwFXlaJjTZNYmmZBb8IUs39eNqWdrSbV5y7rTnaIxscwWM2YiHN?= =?us-ascii?Q?noeJy9piAcj2pXdFd3KscHuCd3OZPEswa7EzYvG9dXXK7YrNk3XrDoJBHCSq?= =?us-ascii?Q?g3vNHyYRQCjPXyhX5a36uoM3A/LancHhvQE1Wnmsd+8AHhu2wRVnmISQsDHc?= =?us-ascii?Q?REABs9V7dSQ2HyLlhIb4s0N5mEuE++ddBUr71xAPUWAcCceUtZNoFpTTYdXF?= =?us-ascii?Q?JbW71lrp8iNgQDYBKMm+fPA+l1AnQlzJtExNHeeomkefEfIP8uMMRdv5iCkv?= =?us-ascii?Q?PNbOmys4zOpasvCSK+1qIalecMEX1OXHNTkVGUegzSMLUc5nLN5jJCnsk2u6?= =?us-ascii?Q?OFea9BEP8CoZfU66iJkcVdEbtmUMKLNgWHL9mc34wVD4iwV++ZUy5uaSYu9a?= =?us-ascii?Q?kf2Gaqhcgt1v+rVHxMRnZFop9bnM2KAJmMIOYD4wnIlC1eGAbhpF9XaH1QIq?= =?us-ascii?Q?ryEg55LcgrqmnUUcjg+pMFaikjaYMQp9rCMfRuooMncoq5GFjldwkOis4bmM?= =?us-ascii?Q?tWq5OrYq4GT03XZ3U0DpXvex8mcgkqglRJ0DuMIL51Xd1w0Gd3gIONvXZiY1?= =?us-ascii?Q?URuRc4v8lQZDj7vj0K3UrvVK1ku0neyS6MJ5F9+6StIwTuVQPoAcKL/89PNt?= =?us-ascii?Q?oggbk1u8KHQUJ9c0RclCjMfj+KBoV2zgPIehHPQ0/Iw/9zivUk5X/PqTLlR+?= =?us-ascii?Q?ckpl7OsSFRCEs3Sz/+XK91dw85SdAP9jFR4sSrN5S6tzpXHTQw05l1Vs+ZjY?= =?us-ascii?Q?967L/yR0KwAjLH+9jtkWgGhWFX612ynHdaiptn2Dq56EBYPLle5QJiA1XduH?= =?us-ascii?Q?AnThljUpZEb4qWS4k6AUHtbzP5s3H4NifgQDHfTwJvU0NGpZOit9Jx6VBmns?= =?us-ascii?Q?Iqi/u9bGnJz8vMxvlZqXmw5mkKWLIpXFBc6/KDlTCcm6TFxw7q7W?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: fead091f-67b5-44c2-2690-08df0e5e4cc7 X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB7216.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Sep 2026 10:37:08.9518 (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: gC89LPYiHaW+qP4yw93Gux/tE8dM8uFBixWCiQZZ40pbFTWZrr0UhK4oaMxoKGYS/XSlLxR9Ly6a/t0U9Ad7WZ++NoY80XbOZePI1uEJFvXNDkIhE7uOemBT9Y5bllVB X-MS-Exchange-Transport-CrossTenantHeadersStamped: AMBPR04MB617387 Content-Type: text/plain; charset="utf-8" From: Wei Fang Let ENETC v4 VFs track PF link status through the PSI-to-VSI messaging channel. Add two enetc_si_ops hooks, vf_reg_link_status_notifier and vf_unreg_link_status_notifier, populated only in enetc4_vsi_ops; rev1 hardware is unaffected. A dedicated MSI-X vector on the VF handles incoming PSI-to-VSI messages. Its handler schedules a work item on an ordered workqueue that reads the notification via VSIMSGRR, updates the carrier state and sets congestion mode from the PF TX PAUSE state in the message. Reading VSIMSGRR also acknowledges the PF so it can send the next message. The workqueue is set up in enetc_vf_probe() and torn down in enetc_vf_remove(). On a VF, enetc_phylink_connect() registers the notifier with the PF and enetc_close() unregisters it. On registration the PF immediately sends the current link status and then broadcasts every later transition; if registration fails, fall back to the LS1028A behaviour and assert carrier unconditionally. Register the notifier only after the Tx/Rx resources are allocated in enetc_open(), because once registered the PF may queue si->msg_task via a link-up message. An error unwind cannot drain that work item, since enetc_open() and the work item both take the RTNL lock and waiting would deadlock; and as __LINK_STATE_START is set before ndo_open() runs, netif_running() stays true during the unwind, so the queued work could still call netif_carrier_on() and leave carrier 'on' after a failed open. Signed-off-by: Wei Fang --- drivers/net/ethernet/freescale/enetc/enetc.c | 48 +++- drivers/net/ethernet/freescale/enetc/enetc.h | 4 + .../net/ethernet/freescale/enetc/enetc_hw.h | 9 + .../net/ethernet/freescale/enetc/enetc_vf.c | 209 +++++++++++++++++- 4 files changed, 261 insertions(+), 9 deletions(-) diff --git a/drivers/net/ethernet/freescale/enetc/enetc.c b/drivers/net/eth= ernet/freescale/enetc/enetc.c index 803c5c541a5c..04c49b680709 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc.c +++ b/drivers/net/ethernet/freescale/enetc/enetc.c @@ -2935,11 +2935,31 @@ static void enetc_clear_interrupts(struct enetc_nde= v_priv *priv) static int enetc_phylink_connect(struct net_device *ndev) { struct enetc_ndev_priv *priv =3D netdev_priv(ndev); + struct enetc_si *si =3D priv->si; struct ethtool_keee edata; int err; =20 if (!priv->phylink) { /* phy-less mode */ + if (!si->ops->vf_reg_link_status_notifier) + goto carrier_on; + + /* For phy-less VFs on ENETC v4, attempt to register a link + * status notifier with the PF via the VSI-to-PSI messaging + * channel. If registration succeeds, the PF will immediately + * send the current link status and broadcast future link + * transitions; carrier state is then managed in + * enetc_vf_msg_handle_link_status(). If registration fails, + * fall back to the LS1028A behaviour and assert carrier + * unconditionally via netif_carrier_on(). + */ + if (!si->ops->vf_reg_link_status_notifier(si)) + return 0; + + dev_warn(&ndev->dev, + "Link status notifier registration failed\n"); + +carrier_on: netif_carrier_on(ndev); return 0; } @@ -3024,10 +3044,6 @@ int enetc_open(struct net_device *ndev) if (err) goto err_setup_irqs; =20 - err =3D enetc_phylink_connect(ndev); - if (err) - goto err_phy_connect; - tx_res =3D enetc_alloc_tx_resources(priv); if (IS_ERR(tx_res)) { err =3D PTR_ERR(tx_res); @@ -3040,6 +3056,10 @@ int enetc_open(struct net_device *ndev) goto err_alloc_rx; } =20 + err =3D enetc_phylink_connect(ndev); + if (err) + goto err_phy_connect; + enetc_tx_onestep_tstamp_init(priv); enetc_assign_tx_resources(priv, tx_res); enetc_assign_rx_resources(priv, rx_res); @@ -3048,12 +3068,11 @@ int enetc_open(struct net_device *ndev) =20 return 0; =20 +err_phy_connect: + enetc_free_rx_resources(rx_res, priv->num_rx_rings); err_alloc_rx: enetc_free_tx_resources(tx_res, priv->num_tx_rings); err_alloc_tx: - if (priv->phylink) - phylink_disconnect_phy(priv->phylink); -err_phy_connect: enetc_free_irqs(priv); err_setup_irqs: clk_disable_unprepare(priv->ref_clk); @@ -3093,6 +3112,7 @@ EXPORT_SYMBOL_GPL(enetc_stop); int enetc_close(struct net_device *ndev) { struct enetc_ndev_priv *priv =3D netdev_priv(ndev); + struct enetc_si *si =3D priv->si; =20 enetc_stop(ndev); =20 @@ -3100,6 +3120,20 @@ int enetc_close(struct net_device *ndev) phylink_stop(priv->phylink); phylink_disconnect_phy(priv->phylink); } else { + if (!si->ops->vf_unreg_link_status_notifier) + goto carrier_off; + + /* No need to check whether the previous registration was + * successful. Sending the deregistration message has no + * impact; the PF side simply clears the corresponding bit + * in link_status_ms_mask for the VF. + */ + if (!si->ops->vf_unreg_link_status_notifier(si)) + goto carrier_off; + + dev_warn(&ndev->dev, + "Link status notifier unregistration failed\n"); +carrier_off: netif_carrier_off(ndev); } =20 diff --git a/drivers/net/ethernet/freescale/enetc/enetc.h b/drivers/net/eth= ernet/freescale/enetc/enetc.h index 0501cc2fc304..d9e91832a9c1 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc.h +++ b/drivers/net/ethernet/freescale/enetc/enetc.h @@ -300,6 +300,10 @@ struct enetc_si_ops { int (*set_rss_table)(struct enetc_si *si, const u32 *table, int count); int (*setup_cbdr)(struct enetc_si *si); void (*teardown_cbdr)(struct enetc_si *si); + + /* VSI-specific hooks */ + int (*vf_reg_link_status_notifier)(struct enetc_si *si); + int (*vf_unreg_link_status_notifier)(struct enetc_si *si); }; =20 /* PCI IEP device data */ diff --git a/drivers/net/ethernet/freescale/enetc/enetc_hw.h b/drivers/net/= ethernet/freescale/enetc/enetc_hw.h index c18ad8b9b071..2c9d9042eb0b 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc_hw.h +++ b/drivers/net/ethernet/freescale/enetc/enetc_hw.h @@ -85,6 +85,9 @@ static inline u32 enetc_vsi_set_msize(u32 size) #define PSIMSGSR_MS(n) BIT((n) + 1) #define PSIMSGSR_MC GENMASK(31, 16) =20 +#define ENETC_VSIMSGRR 0x208 +#define VSIMSGRR_MC GENMASK(31, 16) + /* SI statistics */ #define ENETC_SIROCT 0x300 #define ENETC_SIRFRM 0x308 @@ -108,6 +111,12 @@ static inline u32 enetc_vsi_set_msize(u32 size) #define ENETC_SICAPR0 0x900 #define ENETC_SICAPR1 0x904 =20 +#define ENETC_VSIIER 0xa00 +#define VSIIER_MRIE BIT(9) + +#define ENETC_VSIIDR 0xa08 +#define VSIIDR_MR BIT(9) + #define ENETC_PSIIER 0xa00 #define ENETC_PSIIDR 0xa08 =20 diff --git a/drivers/net/ethernet/freescale/enetc/enetc_vf.c b/drivers/net/= ethernet/freescale/enetc/enetc_vf.c index 8cf38c426dae..ee9567998c7c 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc_vf.c +++ b/drivers/net/ethernet/freescale/enetc/enetc_vf.c @@ -135,6 +135,37 @@ static int enetc_msg_vsi_send(struct enetc_si *si, str= uct enetc_msg_swbd *msg) return err; } =20 +static int enetc_msg_link_status_notifier(struct enetc_si *si, bool reg) +{ + struct device *dev =3D &si->pdev->dev; + struct enetc_msg_swbd msg_swbd; + u8 cmd_id; + + msg_swbd.size =3D ALIGN(sizeof(struct enetc_msg_generic), + ENETC_MSG_ALIGN); + msg_swbd.vaddr =3D dma_alloc_coherent(dev, msg_swbd.size, + &msg_swbd.dma, GFP_KERNEL); + if (!msg_swbd.vaddr) + return -ENOMEM; + + cmd_id =3D reg ? ENETC_MSG_REGISTER_LINK_CHANGE_NOTIFIER : + ENETC_MSG_UNREGISTER_LINK_CHANGE_NOTIFIER; + enetc_msg_fill_common_hdr(&msg_swbd, ENETC_MSG_CLASS_ID_LINK_STATUS, + cmd_id, 0, 0); + + return enetc_msg_vsi_send(si, &msg_swbd); +} + +static int enetc_vf_reg_link_status_notifier(struct enetc_si *si) +{ + return enetc_msg_link_status_notifier(si, true); +} + +static int enetc_vf_unreg_link_status_notifier(struct enetc_si *si) +{ + return enetc_msg_link_status_notifier(si, false); +} + static int enetc_msg_vsi_set_primary_mac_addr(struct enetc_ndev_priv *priv, struct sockaddr *saddr) { @@ -499,6 +530,128 @@ static void enetc_vf_netdev_setup(struct enetc_si *si= , struct net_device *ndev, enetc_load_primary_mac_addr(&si->hw, ndev); } =20 +static void enetc_vf_enable_mr_int(struct enetc_si *si) +{ + if (is_enetc_rev1(si)) + return; + + enetc_wr(&si->hw, ENETC_VSIIER, VSIIER_MRIE); +} + +static void enetc_vf_disable_mr_int(struct enetc_si *si) +{ + if (is_enetc_rev1(si)) + return; + + enetc_wr(&si->hw, ENETC_VSIIER, 0); +} + +static void enetc_vf_msg_handle_link_status(struct enetc_si *si, u8 status) +{ + bool tx_pause =3D !!(status & ENETC_CLASS_CODE_TX_PAUSE_EN); + bool link_down =3D !!(status & ENETC_CLASS_CODE_LINK_DOWN); + struct enetc_ndev_priv *priv =3D netdev_priv(si->ndev); + struct net_device *ndev =3D si->ndev; + + rtnl_lock(); + if (!netif_running(ndev)) + goto unlock_rtnl; + + if (link_down) { + if (netif_carrier_ok(ndev)) { + netif_carrier_off(ndev); + netdev_info(ndev, "Link is Down\n"); + } + + goto unlock_rtnl; + } + + /* Link is up */ + enetc_set_congestion_mode(priv, tx_pause); + + if (!netif_carrier_ok(ndev)) { + netif_carrier_on(ndev); + netdev_info(ndev, "Link is Up, tx pause %s\n", + tx_pause ? "on" : "off"); + } + +unlock_rtnl: + rtnl_unlock(); +} + +static void enetc_vf_msg_task(struct work_struct *work) +{ + struct enetc_si *si =3D container_of(work, struct enetc_si, msg_task); + struct enetc_hw *hw =3D &si->hw; + u8 class_id, class_code; + u16 pf_msg; + + /* W1C to clear the message received interrupt event */ + enetc_wr(hw, ENETC_VSIIDR, VSIIDR_MR); + + /* Reading VSIMSGRR retrieves the message data and acknowledges to + * the PF that the message was received and another message can be + * sent. + */ + pf_msg =3D FIELD_GET(VSIMSGRR_MC, enetc_rd(hw, ENETC_VSIMSGRR)); + class_id =3D FIELD_GET(ENETC_PF_MSG_CLASS_ID, pf_msg); + + switch (class_id) { + case ENETC_MSG_CLASS_ID_LINK_STATUS: + class_code =3D FIELD_GET(ENETC_PF_MSG_CLASS_CODE_U8, pf_msg); + enetc_vf_msg_handle_link_status(si, class_code); + break; + default: + dev_err(&si->pdev->dev, + "Unsupported Message Class ID (0x%02x) from PF\n", + class_id); + } + + enetc_vf_enable_mr_int(si); +} + +static irqreturn_t enetc_vf_msg_msix_handler(int irq, void *data) +{ + struct enetc_si *si =3D (struct enetc_si *)data; + + enetc_vf_disable_mr_int(si); + queue_work(si->workqueue, &si->msg_task); + + return IRQ_HANDLED; +} + +static int enetc_vf_register_msg_msix(struct enetc_si *si) +{ + int irq, err; + + if (is_enetc_rev1(si)) + return 0; + + snprintf(si->msg_int_name, sizeof(si->msg_int_name), "%s-pfmsg", + pci_name(si->pdev)); + irq =3D pci_irq_vector(si->pdev, ENETC_SI_INT_IDX); + err =3D request_irq(irq, enetc_vf_msg_msix_handler, 0, + si->msg_int_name, si); + if (err) { + dev_err(&si->pdev->dev, + "VF messaging: request_irq() failed!\n"); + return err; + } + + /* set one IRQ entry for PSI-to-VSI messaging */ + enetc_wr(&si->hw, ENETC_SIMSIVR, ENETC_SI_INT_IDX); + + return 0; +} + +static void enetc_vf_free_msg_msix(struct enetc_si *si) +{ + if (is_enetc_rev1(si)) + return; + + free_irq(pci_irq_vector(si->pdev, ENETC_SI_INT_IDX), si); +} + static const struct enetc_si_ops enetc_vsi_ops =3D { .get_rss_table =3D enetc_get_rss_table, .set_rss_table =3D enetc_set_rss_table, @@ -511,8 +664,41 @@ static const struct enetc_si_ops enetc4_vsi_ops =3D { .set_rss_table =3D enetc4_set_rss_table, .setup_cbdr =3D enetc4_setup_cbdr, .teardown_cbdr =3D enetc4_teardown_cbdr, + .vf_reg_link_status_notifier =3D enetc_vf_reg_link_status_notifier, + .vf_unreg_link_status_notifier =3D enetc_vf_unreg_link_status_notifier, }; =20 +static int enetc_vf_wq_task_init(struct enetc_si *si) +{ + if (is_enetc_rev1(si)) + return 0; + + si->workqueue =3D alloc_ordered_workqueue("enetc-%s-wq", WQ_MEM_RECLAIM, + pci_name(si->pdev)); + if (!si->workqueue) + return -ENOMEM; + + INIT_WORK(&si->msg_task, enetc_vf_msg_task); + + return 0; +} + +static void enetc_vf_wq_task_destroy(struct enetc_si *si) +{ + if (!si->workqueue) + return; + + disable_work_sync(&si->msg_task); + + /* Disable the MR interrupt */ + enetc_vf_disable_mr_int(si); + enetc_wr(&si->hw, ENETC_VSIIDR, VSIIDR_MR); + /* Reading VSIMSGRR to clear the MS bit on the PF's side */ + enetc_rd(&si->hw, ENETC_VSIMSGRR); + + destroy_workqueue(si->workqueue); +} + static int enetc_vf_probe(struct pci_dev *pdev, const struct pci_device_id *ent) { @@ -587,15 +773,32 @@ static int enetc_vf_probe(struct pci_dev *pdev, goto err_alloc_msix; } =20 + err =3D enetc_vf_wq_task_init(si); + if (err) { + dev_err(&pdev->dev, "Failed to init workqueue\n"); + goto err_wq_init; + } + + err =3D enetc_vf_register_msg_msix(si); + if (err) { + dev_err(&pdev->dev, "Failed to register msg irq\n"); + goto err_register_msg_msix; + } + + netif_carrier_off(ndev); + /* Enable message received interrupt */ + enetc_vf_enable_mr_int(si); err =3D register_netdev(ndev); if (err) goto err_reg_netdev; =20 - netif_carrier_off(ndev); - return 0; =20 err_reg_netdev: + enetc_vf_free_msg_msix(si); +err_register_msg_msix: + enetc_vf_wq_task_destroy(si); +err_wq_init: enetc_free_msix(priv); err_config_si: err_alloc_msix: @@ -628,6 +831,8 @@ static void enetc_vf_remove(struct pci_dev *pdev) enetc_vf_set_mac_promisc(si, ENETC_MAC_FILTER_TYPE_ALL, false, true); =20 + enetc_vf_free_msg_msix(si); + enetc_vf_wq_task_destroy(si); enetc_free_msix(priv); =20 enetc_free_si_resources(priv); --=20 2.34.1 From nobody Fri Sep 25 19:15:32 2026 Received: from AM0PR83CU005.outbound.protection.outlook.com (mail-westeuropeazon11010047.outbound.protection.outlook.com [52.101.69.47]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 36D3352941B; Wed, 9 Sep 2026 10:37:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.69.47 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788950241; cv=fail; b=DZMhJBNWwGgsTkPa+UtNbI0DseJG7s04R3I/ny9l1g3hvv6QTOS84i736fQaUNwBpC7SRMtRSZE1QQAVpLg7QMvSIOcxF/1F1OMOJgVO8sUv5c6CNNGH0NCbYpFbsLizoCkRkjQbfz9qFuS5fkiYRtnBOdj54H/XPrmP8fZhduo= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788950241; c=relaxed/simple; bh=DWadPBeCmVppvUsm2e+AoYJpeAGxax0Epr7A2eiKWpg=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=YH2awkTmJ9mw0tbWnHu6DSLSctaHx0kNqKqsIr0UThoaR+tFLxdote/wc/TiB6PDR/14NoWs+Y430V3yfJaQbIMFp0y1YM174Sor14h6N2zUjhzk895w9jUZltd/ZdM4YjlqfZsKwTqJ74zKtB9d/oBwCJNjnH7FBUeAVOXmyak= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com; spf=pass smtp.mailfrom=oss.nxp.com; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b=MTxmcfE5; arc=fail smtp.client-ip=52.101.69.47 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b="MTxmcfE5" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=K5PGME0o9JNBf51m/mTBUm36RumTHeU61LdcnveVQUEHQ5lgQJhFSPlR+5X4INthM+zF0bi6fm+vs+bESj6NNza71dLehDVYQh1YqsV1v6RvqDo0vfrBBYoo6nYBT9I/UoJ3m+e6l8W+lTnLlWuFAHJLb7VURqqrShlZtD50aQraYHN1Of+XZfZ2zMtrWi2oABqq2M8jw7cLqMYLGGu2pKfGbjgtGzCnNGPOGyb4Rxc1yjHGS3Z2eJMOi6qYsWlGD5IvD3wUuqV7tJ68dsIboCxgWRbbnyz5xRj06zXGPCIisnZV9GVBdCHPItBtUk+7/1RWTFPfvi6GGYIkAiovZw== 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=p2hl++nnOmqrN9WOhV4kjB0ssgfich5k6ZDwc/Gkz3I=; b=sznfFO4Z+OhcO00dll6qo7GkjaUavOCnNz0vPqdDc83pgCpbREchOR56w0K3/opqu8q466XcMwbo1PvPpBaLZaLXMh6vjIPYMfymvMddL4CiITc0Zmzasb8KDSxyRJhaq4wbcgL/yT0HQq8b/woInk7LyDW8fqyKI/0T6H/E4dH20ZkL74l2WfEIjbqGBs5Kf0yK35nuVMw8t7GusUJgh6z5wIE4vdK4R4kGtkTIVi8YpktheLalpmYWaw0rUXjxena/5yrRN4tEz7NHhpkGiWsvNT7gcUl/pqxIZyQhU7+BQ590FP3CIHAit8RrKLx+Irk3s7kk4j5wkNufXV8IoA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oss.nxp.com; dmarc=pass action=none header.from=oss.nxp.com; dkim=pass header.d=oss.nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=NXP1.onmicrosoft.com; s=selector1-NXP1-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=p2hl++nnOmqrN9WOhV4kjB0ssgfich5k6ZDwc/Gkz3I=; b=MTxmcfE5CxI6ZRKoRCis/1hwX1eetpQfEZSyascSBoxG6R6X4xnAGPT7Ul41k7JKL0f3KVbMu6WkYLY3IwraZjA3u8WfPQG7X0NKkr6Nm8nL19FQTObqwGhGOw/Z5U+HY8rs6DFxDPfsjOXPAXdTB8tqCxqrVkxfduhP5hThbR0+xZ8PUsxyDhFPYtRHmXocjZesmnKutyJOMkCFXPtIka3uv/HUzilu/Q2OzEg7Qf6SjGpvUroQeLWjLdti4mwPN3FrRDqmylTzYfbmF4F13amwV/FtWDAB2OLn0I/EkG6/mVzpW4Fubm8sb8agvHWBmWx/CsHXVXaOM3dICa/APA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from VE1PR04MB7216.eurprd04.prod.outlook.com (2603:10a6:800:1b0::22) by AMBPR04MB617387.eurprd04.prod.outlook.com (2603:10a6:20b:7ae::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.406.6; Wed, 9 Sep 2026 10:37:16 +0000 Received: from VE1PR04MB7216.eurprd04.prod.outlook.com ([fe80::a9a5:cf83:dbe8:1f74]) by VE1PR04MB7216.eurprd04.prod.outlook.com ([fe80::a9a5:cf83:dbe8:1f74%3]) with mapi id 15.21.0406.005; Wed, 9 Sep 2026 10:37:16 +0000 From: wei.fang@oss.nxp.com To: claudiu.manoil@nxp.com, vladimir.oltean@nxp.com, xiaoning.wang@nxp.com, andrew@lunn.ch, olteanv@gmail.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, linux@armlinux.org.uk Cc: wei.fang@nxp.com, imx@lists.linux.dev, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v4 net-next 15/15] net: enetc: add ndo_get_vf_config() support Date: Wed, 9 Sep 2026 18:07:33 +0800 Message-Id: <20260909100733.1139689-16-wei.fang@oss.nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260909100733.1139689-1-wei.fang@oss.nxp.com> References: <20260909100733.1139689-1-wei.fang@oss.nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MA5PR01CA0149.INDPRD01.PROD.OUTLOOK.COM (2603:1096:a01:1b9::14) To VE1PR04MB7216.eurprd04.prod.outlook.com (2603:10a6:800:1b0::22) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VE1PR04MB7216:EE_|AMBPR04MB617387:EE_ X-MS-Office365-Filtering-Correlation-Id: 1bd4cc52-6b7d-45be-f810-08df0e5e5167 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|19092799006|23010399003|7416014|376014|366016|1800799024|10067099003|6133799003|3023799007|22082099003|56012099006|11063799006|18002099003|921020; X-Microsoft-Antispam-Message-Info: h9DoavntkiF0QH0pUVDm9Xu6oyIqGMRHxsn9l25LopKLVylcBQTDJeHgaVw+zoGYxjvJhcb6rdZ1sjNQRV3cVqUE2Auv0lS4oCkyxVE2Xk9cShvwc14rH5mGBOK+CNCai24hsHEncF6mXwD/OC17QZHk2jUt6U5TGL86nSKnGqq1UVzTNnzFAJ+CWYy8wZdqRQrBbP8cXU7CuXZEJyW/Ce8xrMy48A6y36l9L3DsvM7b0DiMtCEeIHRLgSfymy1EFLedpmNrkKkbGd/uMAp1lBtFleIcUM9cIPQyCjfBN7rAUvMWU3/fOmLVvz5WJurEZa3Xg/JrEv4cEQ1qFTKNfEth7Q1a4L8CkUslnOAWNDQhxH0ISGqfRNJ6mYhClNgrko5ekRXQEWY9yTiZl9fHzX8983SxKbuw4m2C0WJkAIwH17jPHubzoMcUGflDiwrVmyIcbArI6PsBU58+0JVWWWbl8EaM6iYXtLab03tw8Im/mhvIe9vSBMcmom7FgRV3IO/221UivBUlywxiGdc8gxN+V2Kz4ZrEvs7O1TV9qEqAAJ7G3EprHh+IVu3ncRXmgcPvb/Si8Rw+xfQsTKMqgk3pJewZZnRwChefPq5Rqnk47roDtbW3kMoe0yKb3QaLGA8RJocyhkqoEsOJxuqpnbG+C5Wc1bHaWpyXHgXO3FqCmEB8Lk/NI4qwQzha0jpK3uvDCwl8hLah6PewF3K07A== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VE1PR04MB7216.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(19092799006)(23010399003)(7416014)(376014)(366016)(1800799024)(10067099003)(6133799003)(3023799007)(22082099003)(56012099006)(11063799006)(18002099003)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?okG97+3uOsYASZZwiXlN0C6RcnlM/9c6G31LiiBiyWgxA50sa4nFKL6hmmmw?= =?us-ascii?Q?nHBTejNtVD2b9EkmFbhuMLH2wEIY6wE5aiqpf4phAEZOBZCN0Y9GRRVxpch7?= =?us-ascii?Q?JfnapjM5BJSdD5765BqYtOKOdga6lAf+AqXGiyJDRjhIZ5oYZ9o0ji4i7Gcz?= =?us-ascii?Q?ALYD9IZ7LBaLPVbwBZGies2sMahFivsd3gKxBqSG56hUlOKZfiwc1bY5CMxG?= =?us-ascii?Q?/9fE6aY/h/sbuatHnBwzNyvc7nFL36+nbbAtD5xQ+iQ4t62nydu2/53Ni4YE?= =?us-ascii?Q?7W1Tpacg++qDtTZ+sAsk7ALG2ur3L49K9XxaamQ9cBscBO4cj+fdxJNf2HSf?= =?us-ascii?Q?9mLV5mreB1BDtLKveUgOW9qf29DbV2dfFEbiGNcBnWtNoTvKp0AWmDIYhtvY?= =?us-ascii?Q?fkJnVZsKZDsj1cNZ+IqHO/qtf4F1fk8yPlCdkdIVccVMYBeZG8h5ZXNGV890?= =?us-ascii?Q?NH5cdMOXQ7X/NlFamBFiQ/YLkowX/gZGIsvgEdAj764U3GbfXshFYsbdGCjj?= =?us-ascii?Q?omSbkOmuKMU8ZieVrfRSqUzmEZd12+jLI+U0mKX5pba8NmjBoM2w0U2PGh9P?= =?us-ascii?Q?35c0fGkdwinFZrA8m21bv/2valq9Po4vWYHdR33iMaEHJIyvWgWlVZdBJiP/?= =?us-ascii?Q?HuQgbXiK2x7SriAor78Y813v2e8xZuXP9SghwMXgn04qnNU31kCzk1gHaMX/?= =?us-ascii?Q?x5AzPbewvn3nRGabMJvyGyWUIGgZ2Ufj8OwhnLOuZ18d7irh1b0ziffvviLz?= =?us-ascii?Q?U3xXHqZjum5G/iv+7UzB22jsaXE4/qcH9C9ZfpwJCQJIGjABvgqqhlr4tpwy?= =?us-ascii?Q?hjMC3Z0ss7fL0w9D/8/zTHj30v9D59cRRz7ul7tyLbEbkgtxWJYi8YEj2oct?= =?us-ascii?Q?o4Bi3tzxZxw5KUjMSNtfTMCplffemHgauLlViwas9nQ9v1wF3Gnpoj+Bqpu9?= =?us-ascii?Q?7Q+R2vtHUwsjZghtCybjqDQCmboar5/5m9JLV14kQrs2TuWI3fqPNJZyzpdN?= =?us-ascii?Q?7SP5nV2cT7nZkGcu3SavUZmAdTOzKJOArGISHQO8qrRXvVRyT6XsW4q/bdw8?= =?us-ascii?Q?KToS6I8+8V8k42nNpHh4MT6RvsB/p2DXgM/j4L1OiqsScEe9e4EnX9LxmSo2?= =?us-ascii?Q?BkInp+JHJqiCQx66D5aoX1NEGeoTYWfrJuv5iB/n2OCam3Grndv8IwSetKFB?= =?us-ascii?Q?bI/KT3H+AhQTraAQOwIBPoUGleN7NVaaK9MI8oA0hYySgFUpXT/gBSMRqqsC?= =?us-ascii?Q?vFxiuZpYdVVD52S8gPKNImGipY+Ce7dF2GpXhz+tPHJEwnsotLSA3E8daoqq?= =?us-ascii?Q?gEQ4/HhEV79Ly4aEEVR/LQFbscoSK0q4ovvEHt9Gy74NKe2PPScHSsCCJhEH?= =?us-ascii?Q?WdrygfaCwiJra6NP1eNGEauyEojKuD6XFJP3vMg6IvsgN6yY/R2svzaybJr6?= =?us-ascii?Q?+1YV6jcCDHooAMceM5UBhNog/WofqGB9Xy9vduMRjjkKy44e9UgIDByotNum?= =?us-ascii?Q?s/iWWpPIQa0skotYkKxq1QUF62lGgvmbCoVtQPGrKKeqWSqYwJYY2DCw4xeY?= =?us-ascii?Q?ka5QyqV1x+zx7Yy7wZYd5NAVuXtHvv1vNJ3NZAICvjimcDFk5BvV0r5GC2uC?= =?us-ascii?Q?s+1OBpSyvqO1ySfBRTpkHorE04cH4iIy0+vbUj/apSbR/FszjRz2M16yLB+t?= =?us-ascii?Q?h4rs6MsFuUOZCwg6NrYoGcWnghzHa3Yxd/SqriIHF7bdif1bNt/lDzU1/5nd?= =?us-ascii?Q?0jdCyshpgJQMbe6dqBFsEMnZc9zKhbiohXL/DF64ykZpeXT3TvMp?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1bd4cc52-6b7d-45be-f810-08df0e5e5167 X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB7216.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Sep 2026 10:37:16.6505 (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: 6A2Xa+LBXI7SKRjE7uUqaar6ckcPO147nOZYC8M+ZSyByj01/HxCSRJM10E30gZt/CHwFgxO7yPeU8N0yYY5t8M4DcloUlKyx9NXhxEZr8jAR6weUm+DY3YUfsLEjJmp X-MS-Exchange-Transport-CrossTenantHeadersStamped: AMBPR04MB617387 Content-Type: text/plain; charset="utf-8" From: Wei Fang Without ndo_get_vf_config(), userspace tools such as 'ip link show' cannot query the current VF configuration from the PF. To support this, extend struct enetc_vf_state to track the per-VF VLAN and spoofchk settings, and update the corresponding setter callbacks to persist their state when the hardware is programmed. enetc_pf_get_vf_config() reads back the persisted state and reports MAC address, VLAN parameters, spoofchk, and trust state through struct ifla_vf_info. Signed-off-by: Wei Fang --- .../net/ethernet/freescale/enetc/enetc4_pf.c | 1 + .../net/ethernet/freescale/enetc/enetc_pf.c | 24 +++++++++++++ .../net/ethernet/freescale/enetc/enetc_pf.h | 4 +++ .../freescale/enetc/enetc_pf_common.c | 34 +++++++++++++++++++ .../freescale/enetc/enetc_pf_common.h | 2 ++ 5 files changed, 65 insertions(+) diff --git a/drivers/net/ethernet/freescale/enetc/enetc4_pf.c b/drivers/net= /ethernet/freescale/enetc/enetc4_pf.c index 24c1fd869c2c..71c971618388 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc4_pf.c +++ b/drivers/net/ethernet/freescale/enetc/enetc4_pf.c @@ -597,6 +597,7 @@ static const struct net_device_ops enetc4_ndev_ops =3D { .ndo_hwtstamp_set =3D enetc_hwtstamp_set, .ndo_set_vf_trust =3D enetc_pf_set_vf_trust, .ndo_set_vf_mac =3D enetc_pf_set_vf_mac, + .ndo_get_vf_config =3D enetc_pf_get_vf_config, }; =20 static struct phylink_pcs * diff --git a/drivers/net/ethernet/freescale/enetc/enetc_pf.c b/drivers/net/= ethernet/freescale/enetc/enetc_pf.c index 523c71324780..d77a07cece28 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc_pf.c +++ b/drivers/net/ethernet/freescale/enetc/enetc_pf.c @@ -195,6 +195,7 @@ static int enetc_pf_set_vf_vlan(struct net_device *ndev= , int vf, u16 vlan, { struct enetc_ndev_priv *priv =3D netdev_priv(ndev); struct enetc_pf *pf =3D enetc_si_priv(priv->si); + struct enetc_vf_state *vf_state; =20 if (priv->si->errata & ENETC_ERR_VLAN_ISOL) return -EOPNOTSUPP; @@ -207,6 +208,17 @@ static int enetc_pf_set_vf_vlan(struct net_device *nde= v, int vf, u16 vlan, return -EPROTONOSUPPORT; =20 enetc_set_isol_vlan(&priv->si->hw, vf + 1, vlan, qos); + + vf_state =3D &pf->vf_state[vf]; + mutex_lock(&vf_state->lock); + /* Currently only C-tags is supported, so tpid is always 0, + * which indicates ETH_P_8021Q. + */ + vf_state->tpid =3D 0; + vf_state->qos =3D qos; + vf_state->vid =3D vlan; + mutex_unlock(&vf_state->lock); + return 0; } =20 @@ -214,6 +226,7 @@ static int enetc_pf_set_vf_spoofchk(struct net_device *= ndev, int vf, bool en) { struct enetc_ndev_priv *priv =3D netdev_priv(ndev); struct enetc_pf *pf =3D enetc_si_priv(priv->si); + struct enetc_vf_state *vf_state; u32 cfgr; =20 if (vf >=3D pf->total_vfs) @@ -223,6 +236,16 @@ static int enetc_pf_set_vf_spoofchk(struct net_device = *ndev, int vf, bool en) cfgr =3D (cfgr & ~ENETC_PSICFGR0_ASE) | (en ? ENETC_PSICFGR0_ASE : 0); enetc_port_wr(&priv->si->hw, ENETC_PSICFGR0(vf + 1), cfgr); =20 + vf_state =3D &pf->vf_state[vf]; + mutex_lock(&vf_state->lock); + + if (en) + vf_state->flags |=3D ENETC_VF_FLAG_SPOOFCHK; + else + vf_state->flags &=3D ~ENETC_VF_FLAG_SPOOFCHK; + + mutex_unlock(&vf_state->lock); + return 0; } =20 @@ -476,6 +499,7 @@ static const struct net_device_ops enetc_ndev_ops =3D { .ndo_xdp_xmit =3D enetc_xdp_xmit, .ndo_hwtstamp_get =3D enetc_hwtstamp_get, .ndo_hwtstamp_set =3D enetc_hwtstamp_set, + .ndo_get_vf_config =3D enetc_pf_get_vf_config, }; =20 static struct phylink_pcs * diff --git a/drivers/net/ethernet/freescale/enetc/enetc_pf.h b/drivers/net/= ethernet/freescale/enetc/enetc_pf.h index 1a9fa3714c3c..1f92d16d8ca8 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc_pf.h +++ b/drivers/net/ethernet/freescale/enetc/enetc_pf.h @@ -13,6 +13,7 @@ enum enetc_vf_flags { ENETC_VF_FLAG_TRUSTED =3D BIT(1), ENETC_VF_FLAG_UC_PROMISC =3D BIT(2), ENETC_VF_FLAG_MC_PROMISC =3D BIT(3), + ENETC_VF_FLAG_SPOOFCHK =3D BIT(4), }; =20 struct enetc_vf_state { @@ -20,6 +21,9 @@ struct enetc_vf_state { enum enetc_vf_flags flags; /* Number of consecutive failures to send PF-to-VF messages */ int msg_fail_cnt; + u8 tpid; /* SI-based VLAN TPID (0: 0x8100, 1: 0x88a8) */ + u8 qos; /* SI-based VLAN QOS (priority) bits */ + u16 vid; /* SI-based VLAN ID */ }; =20 struct enetc_port_caps { diff --git a/drivers/net/ethernet/freescale/enetc/enetc_pf_common.c b/drive= rs/net/ethernet/freescale/enetc/enetc_pf_common.c index 86958f1e9cd3..8206884294a4 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc_pf_common.c +++ b/drivers/net/ethernet/freescale/enetc/enetc_pf_common.c @@ -682,5 +682,39 @@ int enetc_pf_set_vf_mac(struct net_device *ndev, int v= f, u8 *mac) } EXPORT_SYMBOL_GPL(enetc_pf_set_vf_mac); =20 +int enetc_pf_get_vf_config(struct net_device *ndev, int vf, + struct ifla_vf_info *ivi) +{ + struct enetc_ndev_priv *priv =3D netdev_priv(ndev); + struct enetc_pf *pf =3D enetc_si_priv(priv->si); + struct enetc_vf_state *vf_state; + + if (vf >=3D pf->total_vfs) + return -EINVAL; + + vf_state =3D &pf->vf_state[vf]; + mutex_lock(&vf_state->lock); + + ivi->vf =3D vf; + /* ENETC v4 has not support spoofchk yet */ + if (is_enetc_rev1(priv->si)) + ivi->spoofchk =3D !!(vf_state->flags & ENETC_VF_FLAG_SPOOFCHK); + + ivi->trusted =3D !!(vf_state->flags & ENETC_VF_FLAG_TRUSTED); + enetc_get_si_hw_addr(pf, vf + 1, ivi->mac); + + if (vf_state->vid) { + ivi->vlan =3D vf_state->vid; + ivi->qos =3D vf_state->qos; + ivi->vlan_proto =3D vf_state->tpid ? htons(ETH_P_8021AD) : + htons(ETH_P_8021Q); + } + + mutex_unlock(&vf_state->lock); + + return 0; +} +EXPORT_SYMBOL_GPL(enetc_pf_get_vf_config); + 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/drive= rs/net/ethernet/freescale/enetc/enetc_pf_common.h index 7d7e67a12278..c9eed879d5a3 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc_pf_common.h +++ b/drivers/net/ethernet/freescale/enetc/enetc_pf_common.h @@ -24,6 +24,8 @@ void enetc_set_si_mc_hash_filter(struct enetc_si *si, int= si_id, u64 hash); void enetc_set_si_vlan_promisc(struct enetc_si *si, int si_id, bool promis= c); int enetc_pf_set_vf_trust(struct net_device *ndev, int vf, bool setting); int enetc_pf_set_vf_mac(struct net_device *ndev, int vf, u8 *mac); +int enetc_pf_get_vf_config(struct net_device *ndev, int vf, + struct ifla_vf_info *ivi); =20 static inline u16 enetc_get_ip_revision(struct enetc_hw *hw) { --=20 2.34.1