From nobody Tue Dec 2 02:32:17 2025 Received: from OSPPR02CU001.outbound.protection.outlook.com (mail-norwayeastazon11013015.outbound.protection.outlook.com [40.107.159.15]) (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 4AF902DF131; Tue, 18 Nov 2025 19:05:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.159.15 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763492755; cv=fail; b=luXU2x7Jl2+NFg6O6V929ItV9bgJqM5M4WBFZivr7/YPS28yjV4CME6E1p0vn/BvVr+CozYke3dM+dXYShAphF8C1hohuLbK4JY/dZ+Cj3tBA0O5aVpK4Fhj11k9nRQd8PUPJNmyVs0uekh9MGmBUzE4OomQBZHmlrvUX2YNcNA= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763492755; c=relaxed/simple; bh=QzgfSpeZFH3tg0mI+dfiexIeivc1nItH5xUP31/o0oo=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=B5RuN/YnHw3EiSLkU2++KRnw1LCZgMW0c2EqMOpMK/6xTBKEO3r1+V5HGklg4pVO2+BSWWaYuQYIJDLmh29cMraB89iyD+5efwDEMr6vBdDmoNtLo7I8iwRhcwL77VPyj0rO/sleCubagNGklOi+g2wIYCIKEPBThZVat28LN00= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=aO33NUpe; arc=fail smtp.client-ip=40.107.159.15 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="aO33NUpe" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=PBEDm8GV2KYEZ5tHENkx21jh0d+5ut4rwajAdxeu9XZd4VAbjx9C7Z5Yf8y1qQBAbEyDGAHS/NwuiHADn1fz6efbvirNbcMVjb519CsoQmmy27DZ2fIL/QdcvyGjji0+dQRTcJ2N7l9DEIHUdBwPLHw76Xw5OstvGKCAsSM5bjylfeFB03m9t+XOGFcBhKCDJT6bKJV9Xlfe1zhz8PU89q1bXmcHPE/8QjIN8nNUB7iOr0IRaiOBwe+tB24fQNsaTvryDwQnqnQPSV0D463cQqNpHSzpyKsvscStAndvEB3MW5dbTm3RW8MmnA2QeEXG56vClvnUByZ9BnLCR2uIzg== 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=GYT3iuxfTJ2CXszx+FhBg5TJ8UT2ynvoYhiKQbh4Zcw=; b=ecf4MYLdF5kB7T1mz9R2qco8vCjH1xAgj+GkDxvW8cAE819RvlltggNic4k9uYsTit32yZWTAoRZryK2J5l4oeZWWihDWkKQbfG8vfvDg03EL3088WBvqse7+qFvZMsaoqh+4BB5i6kpdU4mOUAvxVLmu1a6FCuW1W8EFZCZI+6SD7kbXkFTQD3ArH1/sm542AZqrT10O9nUDR5fh3hmVhTKcw5aXQbdZyCUHx/WQCptQEfES6fH25JpHKGmVVlqGjZeAvQBf/kAH8nTl4fdy+o1olarm48AB0MT1DeT7t6RzsdXh6cH/OCBLZK5dEebVHT0nRro2VWPffIsQQk/Ew== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=GYT3iuxfTJ2CXszx+FhBg5TJ8UT2ynvoYhiKQbh4Zcw=; b=aO33NUpeOhkgrxe0nIYHrfpzZazwjtO0tQIgNi2ette4wUh8hnX3sQMQfLNhjDtEva4ctmQZadFSgWHOTBOAgbROjn/9dJYZFJc+kZikow97EQBxEORcC8rsAJ9Y90sEUq3ewwXm4f5uVWR4x33e5Ez7/8zm1WsOH08qof3S3zuTV6HLLrQFZi/di4MsV1GH9T8YCspKeNpZUkoMBv5MDUGMxRQtpsLJYLWpuV6GSNvjK4u1hnjPDhfMmuSklsI16dG+ccVFDMAIjnp1wsHgvw7UMfkd0oKmpcFwRy1qf3Pbu0vEsz5cSh+7wJqH4pEQ0+3td0vEH/+pKaHBuT93BQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from DBBPR04MB7497.eurprd04.prod.outlook.com (2603:10a6:10:204::9) by PA4PR04MB7695.eurprd04.prod.outlook.com (2603:10a6:102:e3::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9343.10; Tue, 18 Nov 2025 19:05:48 +0000 Received: from DBBPR04MB7497.eurprd04.prod.outlook.com ([fe80::503f:b388:6d07:adff]) by DBBPR04MB7497.eurprd04.prod.outlook.com ([fe80::503f:b388:6d07:adff%4]) with mapi id 15.20.9343.009; Tue, 18 Nov 2025 19:05:48 +0000 From: Vladimir Oltean To: netdev@vger.kernel.org Cc: Andrew Lunn , Heiner Kallweit , Russell King , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , linux-kernel@vger.kernel.org Subject: [PATCH net-next 01/15] net: dsa: sja1105: let phylink help with the replay of link callbacks Date: Tue, 18 Nov 2025 21:05:16 +0200 Message-Id: <20251118190530.580267-2-vladimir.oltean@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20251118190530.580267-1-vladimir.oltean@nxp.com> References: <20251118190530.580267-1-vladimir.oltean@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM0P190CA0022.EURP190.PROD.OUTLOOK.COM (2603:10a6:208:190::32) To DBBPR04MB7497.eurprd04.prod.outlook.com (2603:10a6:10:204::9) 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: DBBPR04MB7497:EE_|PA4PR04MB7695:EE_ X-MS-Office365-Filtering-Correlation-Id: 2e8f87ac-794b-46c4-f289-08de26d57c0c X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|10070799003|366016|376014|52116014|19092799006; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?ZsX6I1sA1K5w46ixFnPr6c1f4+7O59gi+GkAroLxlTz3yAyTGh3Z5z6BhyGz?= =?us-ascii?Q?KT9qGtoi2/7jTbM2X18Dzzu1NDtHiUjTnW08LcL+qj4nihnj6gHbfBq2o4wp?= =?us-ascii?Q?5oULQ9bafJLUP3mX+Pboa5WBL7M/2AJvpWZmLKn3sVGG2TKnMWw0bW5pmi6C?= =?us-ascii?Q?OqhqEGU4Oz2gN9kr8zMF/8dq9pPj/tYpITGDEc++qHNbsas9UPz+tO7M5Hhz?= =?us-ascii?Q?wnncV6jDBhQilBtBLkyIV7iXoCAmF6xZJQLLcsc0OGZdjH9YpIoc7gdQMQIE?= =?us-ascii?Q?H/m4owxF1rlFsCLnu93EJq6eP7o57lPDVqd4FcYebd/gYDipfdKe2zE74DJS?= =?us-ascii?Q?2ShL499W6HkQRPj+OZWlI3wgtjnWjJkVbiKCcqa3s3/I2xYMeUUXSkxEUSZR?= =?us-ascii?Q?cMoE3Xs5c4G/vbUv6cZZyuJLlD3sGWHYeQGhafFYhMYwTSRNaNSDvuXpeaRt?= =?us-ascii?Q?S/g9Gn6hxyzntVWE/5IkMVHgLoOsG67kNJ6TMdu0WoCg799udbw/3FF6HaL6?= =?us-ascii?Q?oqlOQZaW+uiPQG9+Ovcof7EyX3d4rzJbzRNgW8Gd1uliy+bpdSTEBcL+1r7K?= =?us-ascii?Q?1g9WwlkwpUWtVTCQrDAsL2wwmZr1yakdj1+og8JEOJEFgd8oQUTpebS7UT9N?= =?us-ascii?Q?DmufQVUbc88tH3WjmMpkfgcfqAQpc7CENJ9QdjrwOnETF2QGRNOX6O8xwGvS?= =?us-ascii?Q?6rH70T7FlB9ruFqFLKx3hwx+VmQsRrYry8vmyk+W/Ny3ij41r0zNXVLMVmZM?= =?us-ascii?Q?/78vqq+D5ttlqiiUM1i6/DTJHP/4dZRraS67AztgAHps/XjSllD/s2H5JwHx?= =?us-ascii?Q?lQL0mhMTvQjo9uycs9VkMa/TMy1o58JAz4eEHOBQkbfgHDOgwKtJm2efYHMX?= =?us-ascii?Q?damzTdkXOyMVOk3z7l01T8QQKh9nMtJsUpQvpSKOjZybxbBfT+1O8+wkEdNL?= =?us-ascii?Q?UiH69ufZ+1YP45ME0Xo3kgka6vSk3ZFYsgi5NgUPOcdOnEplXrX2fqlIcfus?= =?us-ascii?Q?5TT7LMiZZG8t4p/9ZCVk7yG/VOxA93q6thriTLzK0HDG3UeI9neiYU5EZK1y?= =?us-ascii?Q?ZdDUreh5y9Cu8S3duG9JRnFsh7AE4Zmh4yd+MOEnBeUaKL66q93BYeiL+cZa?= =?us-ascii?Q?fCPyayjFIzUEHt0suWHeETFnoWO/GYqg+XmngVAV1IBaCttItL0HJ03bdpeJ?= =?us-ascii?Q?icsLVoBuTTx23lgcr8xj6TohBvkat0LM8c30K84qB5eDuWAiTCYSa1sR81bW?= =?us-ascii?Q?X5Z/POT/3JdMguguKAu2sjMMlHOoePAyaQMmNqSHLfVJEUCfHep43cHiFoxl?= =?us-ascii?Q?P/PQ/6Hd8pjzKUufssY7XROpB6QV9ipsTbiadPN91nvxZr5YyMiijkUQSxQw?= =?us-ascii?Q?o5KnHVFpRvkr7yEKEmjDwGSxVzjeCNh/pHnIxQPbGLdwN+mcXh7jCdxHZbSN?= =?us-ascii?Q?EfsChH6aYW0w6RfZW4LZW8fR09muZKxd?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DBBPR04MB7497.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(10070799003)(366016)(376014)(52116014)(19092799006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?FYPBxT7rCZxWU7ByMyjfA9vzKWDt5FUzsW7bT+InB+f/hu4/ExzrkShAejWl?= =?us-ascii?Q?pFiLWEgocWiGki+EC+LYIHUe+uSAH0WJ7Mkx4m/ua7XYITYpGMeAeB1vXlsX?= =?us-ascii?Q?O28vlpCYkqhpS7BgfW6r1v6UKYhAK6oTAbqAJp5xwjTDbaScqFNNi52sObRA?= =?us-ascii?Q?IAsH9QAsnTfX+9ynd0dxXEcJ2AptodmNR2rwlc+ZOWK7KLDluA7JF3UvVeGM?= =?us-ascii?Q?mjAW2cYNbS12iKCv7sdcIHQLx8zwjbjuVOZh3zlD/SKLHbxNIfmXnwqbcCOL?= =?us-ascii?Q?ZqNLpY1oy2MtXBfRZkCqm0bWt7Q1AsGaMBwWW3sABFEOwDjdq3PTO9WGMRuZ?= =?us-ascii?Q?5+uZ84FbncUAYBxG1fOUqdj+7yI2GU8RhsYSUOFX2sKO2qIx7fOhgcLmmNq7?= =?us-ascii?Q?a013GmIeHQzWDxEnNtkdGe2RDWSMjtPuGXvJqXbPTjDxi3u98Bk/7gN/OhgE?= =?us-ascii?Q?Z4t2rJwNf5J4V0T4cbFHMHnE2bn46CaiFPQrr2cdRr62F0WtCtQ96Uao5AlD?= =?us-ascii?Q?xkHPh3k4K5E/IcFsVVgnzdH05+UTqeAryHLB5L+326VDaXa24i9V0nUIF3DI?= =?us-ascii?Q?G/gyj2RhlDJPwvpMAlFWpCSy1oznKzjp76H7dhmD8sOsG/u1AOPeuzjpdBnD?= =?us-ascii?Q?gFyUGfupmvM6Kb1pNEo1GwxVjZQkLC7MBNglrht6JfuXpfIAfSKptuAckuA9?= =?us-ascii?Q?Mn0iVN2bIPgFmUmxKb7zdLT6/NJV5pRidBA+R2kn+ZuAukWvEN6cjjWQQHxu?= =?us-ascii?Q?arLvHI4bLfO2V7Cs9q7V3JvnXFV+lsL110CMubU0Xm/a2asFXvjowgaod41G?= =?us-ascii?Q?Et1kCt2AeurDCWttmeSMdkc6I7+837tqTd1h1E7uBramoKjM1Jvu4r6L9auw?= =?us-ascii?Q?xtRc5EKWatRwzXhvzTQeYAKvbCHXnkWcWJ5dMOSQR89k/LmPyALvZlrnYLIw?= =?us-ascii?Q?A1bO2/tx6abvu2j5/27i4Av4ZjZLCQ9KTwLSSVXrhZAqCNtR7hrufylZsYSF?= =?us-ascii?Q?mNH7d1S2iXZwj/GGzskn0AhT4ReNW9wvoAP26dhmylArKs/M5cDqWddgHwvn?= =?us-ascii?Q?BAaBroQchzhUe4ESzB0ZKawB0LfFQLh72dW/oNXTL77PAv+KwjUH6O7QWFeI?= =?us-ascii?Q?MemkrlNFNE/m159kaq649OXTUAJcLS8M/bBXOjM0sSkuv31/vvJ5s3GFmPbl?= =?us-ascii?Q?zcLZFBOpoM1XqQGwX814O17JKXI2mtHjxif0DYP7Rf4qhzBs65Iiz11m55wO?= =?us-ascii?Q?SLeyeQxyvcIXDjjZZrgT2fARJ9P+UjssZ6RMmbPfghuN4G8m4x5LTF/gVvpL?= =?us-ascii?Q?BDfJll62UsKneeXiZBcKbrchZzvF+F6GZu/8nbZXfOEekSEjPiUR6zUqCRxH?= =?us-ascii?Q?JpVu6M8lKz2ET5o4LRUAZT901hsslFwuTn0t52sb6o3zfsPPIY8v/k+iaCbo?= =?us-ascii?Q?ZuID+ynIYTsXA7OwARXL1Ex+Pnwt9k9w0/YZFNf1hEZfuhrHQuno+byS6so5?= =?us-ascii?Q?J/sV/xWVd/Rv5eusFX19KvAvyWJdmar4S7e+ejw6mkloKEs/+QeAMMW9r3Dy?= =?us-ascii?Q?vBebajezxNTmj6eNIr0I6GThiQLu2BOCpwrL+WvmcukNSGcidjnjruoarVv3?= =?us-ascii?Q?hpqTzY0Q7XoWADqLZzGqVrw=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2e8f87ac-794b-46c4-f289-08de26d57c0c X-MS-Exchange-CrossTenant-AuthSource: DBBPR04MB7497.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Nov 2025 19:05:48.5986 (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: 2xOBEnaoj2MTbRPjln2VKDiZR+2GUCa/8ZnzIzluVyItARsoxTwSl2llX4WStiw/eG+NNd02AlFEMyWysn7l0w== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA4PR04MB7695 Content-Type: text/plain; charset="utf-8" sja1105_static_config_reload() changes major settings in the switch and it requires a reset. A use case is to change things like Qdiscs (but see sja1105_reset_reasons[] for full list) while PTP synchronization is running, and the servo loop must not exit the locked state (s2). Therefore, stopping and restarting the phylink instances of all ports is not desirable, because that also stops the phylib state machine, and retriggers a seconds-long auto-negotiation process that breaks PTP. Thus, saving and restoring the link management settings is handled privately by the driver. The method got progressively more complex as SGMII support got added, because this is handled through the xpcs phylink_pcs component, to which we don't have unfettered access. Nonetheless, the switch reset line is hardwired to also reset the XPCS, creating a situation where it loses state and needs to be reprogrammed at a moment in time outside phylink's control. Although commits 907476c66d73 ("net: dsa: sja1105: call PCS config/link_up via pcs_ops structure") and 41bf58314b17 ("net: dsa: sja1105: use phylink_pcs internally") made the sja1105 <-> xpcs interaction slightly prettier, we still depend heavily on the PCS being "XPCS-like", because to back up its settings, we read the MII_BMCR register, through a mdiobus_c45_read() operation, breaking all layering separation. But the phylink instance already has all that state, and more. It's just that it's private. In this proposal, phylink offers 2 helpers for walking the MAC and PCS drivers again through the callbacks required during a destructive reset operation: mac_link_down() -> pcs_link_down() -> mac_config() -> pcs_config() -> mac_link_up() -> pcs_link_up(). This creates the unique opportunity to simplify away even more code than just the xpcs handling from sja1105_static_config_reload(). The sja1105_set_port_config() method is also invoked from sja1105_mac_link_up(). And since that is now called directly by phylink.. we can just remove it from sja1105_static_config_reload(). This makes it possible to re-merge sja1105_set_port_speed() and sja1105_set_port_config() in a later change. Note that my only setups with sja1105 where the xpcs is used is with the xpcs on the CPU-facing port (fixed-link). Thus, I cannot test xpcs + PHY. But the replay procedure walks through all ports, and I did test a regular RGMII user port + a PHY. ptp4l[54.552]: master offset 5 s2 freq -931 path delay 764 ptp4l[55.551]: master offset 22 s2 freq -913 path delay 764 ptp4l[56.551]: master offset 13 s2 freq -915 path delay 765 ptp4l[57.552]: master offset 5 s2 freq -919 path delay 765 ptp4l[58.553]: master offset 13 s2 freq -910 path delay 765 ptp4l[59.553]: master offset 13 s2 freq -906 path delay 765 ptp4l[60.553]: master offset 6 s2 freq -909 path delay 765 ptp4l[61.553]: master offset 6 s2 freq -907 path delay 765 ptp4l[62.553]: master offset 6 s2 freq -906 path delay 765 ptp4l[63.553]: master offset 14 s2 freq -896 path delay 765 $ ip link set br0 type bridge vlan_filtering 1 [ 63.983283] sja1105 spi2.0 sw0p0: Link is Down [ 63.991913] sja1105 spi2.0: Link is Down [ 64.009784] sja1105 spi2.0: Reset switch and programmed static config. R= eason: VLAN filtering [ 64.020217] sja1105 spi2.0 sw0p0: Link is Up - 1Gbps/Full - flow control= off [ 64.030683] sja1105 spi2.0: Link is Up - 1Gbps/Full - flow control off ptp4l[64.554]: master offset 7397 s2 freq +6491 path delay 765 ptp4l[65.554]: master offset 38 s2 freq +1352 path delay 765 ptp4l[66.554]: master offset -2225 s2 freq -900 path delay 764 ptp4l[67.555]: master offset -2226 s2 freq -1569 path delay 765 ptp4l[68.555]: master offset -1553 s2 freq -1563 path delay 765 ptp4l[69.555]: master offset -865 s2 freq -1341 path delay 765 ptp4l[70.555]: master offset -401 s2 freq -1137 path delay 765 ptp4l[71.556]: master offset -145 s2 freq -1001 path delay 765 ptp4l[72.558]: master offset -26 s2 freq -926 path delay 765 ptp4l[73.557]: master offset 30 s2 freq -877 path delay 765 ptp4l[74.557]: master offset 47 s2 freq -851 path delay 765 ptp4l[75.557]: master offset 29 s2 freq -855 path delay 765 Signed-off-by: Vladimir Oltean --- Change previously submitted here: https://lore.kernel.org/netdev/20241212172026.ivjkhm7s2qt6ejyz@skbuf/ I've implemented Russell's feedback given back then, which he hasn't confirmed back. drivers/net/dsa/sja1105/sja1105_main.c | 58 +++----------------- drivers/net/phy/phylink.c | 75 ++++++++++++++++++++++---- include/linux/phylink.h | 5 ++ 3 files changed, 77 insertions(+), 61 deletions(-) diff --git a/drivers/net/dsa/sja1105/sja1105_main.c b/drivers/net/dsa/sja11= 05/sja1105_main.c index f674c400f05b..9f62cc7e1bd1 100644 --- a/drivers/net/dsa/sja1105/sja1105_main.c +++ b/drivers/net/dsa/sja1105/sja1105_main.c @@ -2287,14 +2287,12 @@ int sja1105_static_config_reload(struct sja1105_pri= vate *priv, { struct ptp_system_timestamp ptp_sts_before; struct ptp_system_timestamp ptp_sts_after; - u16 bmcr[SJA1105_MAX_NUM_PORTS] =3D {0}; - u64 mac_speed[SJA1105_MAX_NUM_PORTS]; struct sja1105_mac_config_entry *mac; struct dsa_switch *ds =3D priv->ds; + struct dsa_port *dp; s64 t1, t2, t3, t4; - s64 t12, t34; - int rc, i; - s64 now; + s64 t12, t34, now; + int rc; =20 mutex_lock(&priv->fdb_lock); mutex_lock(&priv->mgmt_lock); @@ -2306,13 +2304,9 @@ int sja1105_static_config_reload(struct sja1105_priv= ate *priv, * switch wants to see in the static config in order to allow us to * change it through the dynamic interface later. */ - for (i =3D 0; i < ds->num_ports; i++) { - mac_speed[i] =3D mac[i].speed; - mac[i].speed =3D priv->info->port_speed[SJA1105_SPEED_AUTO]; - - if (priv->pcs[i]) - bmcr[i] =3D mdiobus_c45_read(priv->mdio_pcs, i, - MDIO_MMD_VEND2, MDIO_CTRL1); + dsa_switch_for_each_available_port(dp, ds) { + phylink_replay_link_begin(dp->pl); + mac[dp->index].speed =3D priv->info->port_speed[SJA1105_SPEED_AUTO]; } =20 /* No PTP operations can run right now */ @@ -2366,44 +2360,8 @@ int sja1105_static_config_reload(struct sja1105_priv= ate *priv, goto out; } =20 - for (i =3D 0; i < ds->num_ports; i++) { - struct phylink_pcs *pcs =3D priv->pcs[i]; - unsigned int neg_mode; - - mac[i].speed =3D mac_speed[i]; - rc =3D sja1105_set_port_config(priv, i); - if (rc < 0) - goto out; - - if (!pcs) - continue; - - if (bmcr[i] & BMCR_ANENABLE) - neg_mode =3D PHYLINK_PCS_NEG_INBAND_ENABLED; - else - neg_mode =3D PHYLINK_PCS_NEG_OUTBAND; - - rc =3D pcs->ops->pcs_config(pcs, neg_mode, priv->phy_mode[i], - NULL, true); - if (rc < 0) - goto out; - - if (neg_mode =3D=3D PHYLINK_PCS_NEG_OUTBAND) { - int speed =3D SPEED_UNKNOWN; - - if (priv->phy_mode[i] =3D=3D PHY_INTERFACE_MODE_2500BASEX) - speed =3D SPEED_2500; - else if (bmcr[i] & BMCR_SPEED1000) - speed =3D SPEED_1000; - else if (bmcr[i] & BMCR_SPEED100) - speed =3D SPEED_100; - else - speed =3D SPEED_10; - - pcs->ops->pcs_link_up(pcs, neg_mode, priv->phy_mode[i], - speed, DUPLEX_FULL); - } - } + dsa_switch_for_each_available_port(dp, ds) + phylink_replay_link_end(dp->pl); =20 rc =3D sja1105_reload_cbs(priv); if (rc < 0) diff --git a/drivers/net/phy/phylink.c b/drivers/net/phy/phylink.c index 6e1243bf68aa..19b8ddabee03 100644 --- a/drivers/net/phy/phylink.c +++ b/drivers/net/phy/phylink.c @@ -28,6 +28,7 @@ enum { PHYLINK_DISABLE_STOPPED, PHYLINK_DISABLE_LINK, PHYLINK_DISABLE_MAC_WOL, + PHYLINK_DISABLE_REPLAY, =20 PCS_STATE_DOWN =3D 0, PCS_STATE_STARTING, @@ -77,6 +78,7 @@ struct phylink { =20 bool link_failed; bool suspend_link_up; + bool force_major_config; bool major_config_failed; bool mac_supports_eee_ops; bool mac_supports_eee; @@ -1680,18 +1682,18 @@ static void phylink_resolve(struct work_struct *w) if (pl->act_link_an_mode !=3D MLO_AN_FIXED) phylink_apply_manual_flow(pl, &link_state); =20 - if (mac_config) { - if (link_state.interface !=3D pl->link_config.interface) { - /* The interface has changed, force the link down and - * then reconfigure. - */ - if (cur_link_state) { - phylink_link_down(pl); - cur_link_state =3D false; - } - phylink_major_config(pl, false, &link_state); - pl->link_config.interface =3D link_state.interface; + if ((mac_config && link_state.interface !=3D pl->link_config.interface) || + pl->force_major_config) { + /* The interface has changed or a forced major configuration + * was requested, so force the link down and then reconfigure. + */ + if (cur_link_state) { + phylink_link_down(pl); + cur_link_state =3D false; } + phylink_major_config(pl, false, &link_state); + pl->link_config.interface =3D link_state.interface; + pl->force_major_config =3D false; } =20 /* If configuration of the interface failed, force the link down @@ -4355,6 +4357,57 @@ void phylink_mii_c45_pcs_get_state(struct mdio_devic= e *pcs, } EXPORT_SYMBOL_GPL(phylink_mii_c45_pcs_get_state); =20 +/** + * phylink_replay_link_begin() - begin replay of link callbacks for driver + * which loses state + * @pl: a pointer to a &struct phylink returned from phylink_create() + * + * Helper for MAC drivers which may perform a destructive reset at runtime. + * Both the own driver's mac_link_down() method is called, as well as the + * pcs_link_down() method of the split PCS (if any). + * + * This is similar to phylink_stop(), except it does not alter the state of + * the phylib PHY (it is assumed that it is not affected by the MAC destru= ctive + * reset). + */ +void phylink_replay_link_begin(struct phylink *pl) +{ + ASSERT_RTNL(); + + phylink_run_resolve_and_disable(pl, PHYLINK_DISABLE_REPLAY); +} +EXPORT_SYMBOL_GPL(phylink_replay_link_begin); + +/** + * phylink_replay_link_end() - end replay of link callbacks for driver + * which lost state + * @pl: a pointer to a &struct phylink returned from phylink_create() + * + * Helper for MAC drivers which may perform a destructive reset at runtime. + * Both the own driver's mac_config() and mac_link_up() methods, as well a= s the + * pcs_config() and pcs_link_up() method of the split PCS (if any), are ca= lled. + * + * This is similar to phylink_start(), except it does not alter the state = of + * the phylib PHY. + * + * One must call this method only within the same rtnl_lock() critical sec= tion + * as a previous phylink_replay_link_start(). + */ +void phylink_replay_link_end(struct phylink *pl) +{ + ASSERT_RTNL(); + + if (WARN(!test_bit(PHYLINK_DISABLE_REPLAY, + &pl->phylink_disable_state), + "phylink_replay_link_end() called without a prior phylink_replay_link_b= egin()\n")) + return; + + pl->force_major_config =3D true; + phylink_enable_and_run_resolve(pl, PHYLINK_DISABLE_REPLAY); + flush_work(&pl->resolve); +} +EXPORT_SYMBOL_GPL(phylink_replay_link_end); + static int __init phylink_init(void) { for (int i =3D 0; i < ARRAY_SIZE(phylink_sfp_interface_preference); ++i) diff --git a/include/linux/phylink.h b/include/linux/phylink.h index 38363e566ac3..d6ea817abcda 100644 --- a/include/linux/phylink.h +++ b/include/linux/phylink.h @@ -836,4 +836,9 @@ void phylink_mii_c45_pcs_get_state(struct mdio_device *= pcs, =20 void phylink_decode_usxgmii_word(struct phylink_link_state *state, uint16_t lpa); + +void phylink_replay_link_begin(struct phylink *pl); + +void phylink_replay_link_end(struct phylink *pl); + #endif --=20 2.34.1 From nobody Tue Dec 2 02:32:17 2025 Received: from OSPPR02CU001.outbound.protection.outlook.com (mail-norwayeastazon11013015.outbound.protection.outlook.com [40.107.159.15]) (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 EA95E2E3B07; Tue, 18 Nov 2025 19:05:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.159.15 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763492758; cv=fail; b=e91nkTZBPARPgMoPWQ+xH1xiLMDGbjLxxZB5x2sGLoBBkgsB6sPQNbmHNVLAOBivTijFGJaHAjm555lL5yhSIRrHVp+rKmnz2+YnWU0fqkHU9np8TiFgBHK020O2Gxo1ZZJz5WQjzsjBIk6Sn+lN6Vm3geeKUGf3lO2tKp+YXcI= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763492758; c=relaxed/simple; bh=TRPAGKm4UvvuWvyaBRP8m04jrlw9tRE48ZcNk0hXgVw=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=dZHdCD9FNhb+smrKcFI/of4X9kcglz4Tsaq4zooI5jFfcZbDjsU3xCYr87NANOvpvlra0wbtwRTe1oKD57w+QOPtZ7HRaxapajuwbsUGhVUoVfND7tOhP+PQWD4m1GpVuBKxG1CDMTXNe5wpd1Uo6am+0Uougwk8Nl/+YoZNTUo= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=HDj4lJa7; arc=fail smtp.client-ip=40.107.159.15 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="HDj4lJa7" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=OWtLYaLcchmINey8z1YLnVTsT/QzscL0ldR3il3d/3M3AjmpOHTKD80PVKWLRBRyJyZT2vGo1QUA6uf39Y4ikvYUX6e04m19XJKZeWqI2i5O18QwFFxAWyDLYbaw4Zlx8cQ2GfgFz16PeNBPMPYaau8NNrPSysdtYkrEfV5+nocm/YR9YbXs1NagnM2jJO/3XO89wt8kCf5ZrXCqwVZMz3FxpdfttWgZj62uwlet8xtWD0sC0CE16peGWKuD0dtgOxMyWDB9uD99gVu8pboIquoACd74GmqX6UTsHpdqR6UIT74w8TI35LL9onHOvfrKM86DaJLpe84YJEdtddRFkg== 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=NI7u70324seZy9oIR3hVpe4GjtnSdbTzrHZWzZALxw8=; b=YxsGd0YGeY1fLg4EU+kpyOooDY2vvzLCIrbrAYYhGWi21qcyLJfcA46HqyU9exuPXmhUhFdc/POio/m9MsBn6D6E8gnVMZPA8tce9G5PN/ToKMH/amJtULEc6bgS+AxE37MZQoCzQ3h9Z76svT8pJs4l2ARiAYCNVGgBOCUvs39PmY8T1Ua9fviQObXtCujigXFo4R3UpzVbc41oWMJj5aJ4kQQ5L6nJJerD+r9FYSqxJDyux9irxRDw1KdeYhqyDJ7TiyXFQEt4cZaT3IG7+1cZRrEEX5zkNyivA2Og2jo7DrhH94HEkVsfvsBUug4bEeDB87aJVASMk5LJ44w8Vw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=NI7u70324seZy9oIR3hVpe4GjtnSdbTzrHZWzZALxw8=; b=HDj4lJa7EtE8vJbqNCTIcnB1a0VTMOAgXNq4cPVEIOxC9zaiZl5erZ+mnHCaEU4wB9ujbCzoITATQbjLMFzezwzyvgZ9c0llsDkUmDx0bN/9P8tCQHokKGRJbiArrgmPToOzL3RjY/0sDLRgCx9OHy0+7rEEGY43ORviI+9jAHob0OtH9Lq/dYwxUyHtELNWYej0Ya2eJ2Q5zK4AFF65QZ44zL46cJWtDNGsbX936w6OxqeSvPeqBviITcPSN0rqLghC/mZeH0s2QtATCssGY7S7z9LRE9/FUOh5DglooA3GzHbc0hWx33H3rLzVP2OjColBKiNGEwunSOCkLtwAmg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from DBBPR04MB7497.eurprd04.prod.outlook.com (2603:10a6:10:204::9) by PA4PR04MB7695.eurprd04.prod.outlook.com (2603:10a6:102:e3::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9343.10; Tue, 18 Nov 2025 19:05:49 +0000 Received: from DBBPR04MB7497.eurprd04.prod.outlook.com ([fe80::503f:b388:6d07:adff]) by DBBPR04MB7497.eurprd04.prod.outlook.com ([fe80::503f:b388:6d07:adff%4]) with mapi id 15.20.9343.009; Tue, 18 Nov 2025 19:05:49 +0000 From: Vladimir Oltean To: netdev@vger.kernel.org Cc: Andrew Lunn , Heiner Kallweit , Russell King , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , linux-kernel@vger.kernel.org, Mark Brown , Maxime Chevallier Subject: [PATCH net-next 02/15] net: mdio-regmap: permit working with non-MMIO regmaps Date: Tue, 18 Nov 2025 21:05:17 +0200 Message-Id: <20251118190530.580267-3-vladimir.oltean@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20251118190530.580267-1-vladimir.oltean@nxp.com> References: <20251118190530.580267-1-vladimir.oltean@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM0P190CA0022.EURP190.PROD.OUTLOOK.COM (2603:10a6:208:190::32) To DBBPR04MB7497.eurprd04.prod.outlook.com (2603:10a6:10:204::9) 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: DBBPR04MB7497:EE_|PA4PR04MB7695:EE_ X-MS-Office365-Filtering-Correlation-Id: cf2bda4b-7e51-4b04-c516-08de26d57cc7 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|10070799003|366016|7416014|376014|52116014|19092799006; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?HXUtwmgVRV0+Xl+1PYyds7kBVe+xh0GQv4WcOwo0v3ijGvEKHjQWYfUHCKZ7?= =?us-ascii?Q?LrBXx5DrfJ3n6T9bxzwiX4IxRFe4PRBY89I8c6wuRwXFV67CWJdyMYDp+5Xh?= =?us-ascii?Q?4QNi2jl0di1WGtaZXKULRcVNTlg6vP+6vSW/f0la55hnhRl85us+Qy2NXdbJ?= =?us-ascii?Q?uD28TXAxtDtwkbRieuxbxN8S/eZWSmRy9yEaES4+Ks6y3eCUw1MbskPUvYq2?= =?us-ascii?Q?qi7bxN0tOcX4Wr9Xp4vMZX0koFCuGz/ypXI0YvbbZwbHR7MzGZQWZ9Q2iQ4R?= =?us-ascii?Q?gOMH6Hsn8noELeYJLGiQVhC/3wjxeRCEbwdmWIHS//a+YspPMZ+JGWil3evc?= =?us-ascii?Q?AxeOB6tXHwG/G9sUZ93BCikkXutIvwEq0GIKRbL0mR87xXKv1e0krl61DAZZ?= =?us-ascii?Q?qHboA/r5E+8bkmuXweXgjMTJ3FzXpZOr/Fp0IVa155jdFbDZgLA6NFVvu2cP?= =?us-ascii?Q?wceenaOu+xfDPtjYfBw8/GCkGW5FruGLLr9y/O9QWhzuBB5TDunIRWtVtUwZ?= =?us-ascii?Q?f1cvP7mhYTQDCEYlI0RfSVeizSBONnApPcgvCCgEPQ0F4wTR0MWqe/Ju9URj?= =?us-ascii?Q?DEADFyX/ZaYk8r1A+ojaxr3iN7qfS+wXGPCt34ADaGTdX+uWbgjKGrPEXQ26?= =?us-ascii?Q?eeCej6JPeGN1LZIE7gdnIVCG7Gk76YBdWtaeHjs3Sk4wAHhU3UWChXtiDyjs?= =?us-ascii?Q?sjBDZUprUH+CShYEQor2IRtw8BX8mcBRvG+X03NxvKvVl7HYM8nwGSUMn5An?= =?us-ascii?Q?55JMvLhhO/pSbcSEayIntZLkZ96hrzjkfS7qzL2S2luBZ9sEn43zyKmtYgub?= =?us-ascii?Q?BW1B3ZjfSlCuE7F2vQi9fF0M8ohF7wMA8oOPliymvYJEwKkSdJJSMFK4gIL0?= =?us-ascii?Q?FqAB+dqJh1MmYwYC4XyDKAstkiqnnbKlonsirXyFdfLeT4HHpkiqxVEv7mXe?= =?us-ascii?Q?G3imfL9/MtTOw0/8MLdaknecCIQXK33d4OKe4e2JM5x0prVHM6bMskfwvulr?= =?us-ascii?Q?9AI82uSIjnewfVaeRaYc1UIXDvIM16EfZg8bBwAwHgGLRgFpcQzmsGlZLYAv?= =?us-ascii?Q?tvOocbk0nniHmvYs8jjVSLVJhQ1tJXoJqKSODazQfcJUpqfRCTe44uY0gptB?= =?us-ascii?Q?cLD134yZsnx7PpujPGk1j9jLMM5LE6fQqs2HWgHRE/wdvEXq/ctNQYk9Tirb?= =?us-ascii?Q?tRYr48t7pJCw148jv2YJdptp4gfLmgybxUmcA9A/Qs1t3KianBWeY//fZ7N/?= =?us-ascii?Q?os2ZaxQd3wxSpaja3czJ2jqENnoXx5gJROiSu8ftLr8+AS44h6p1UImzL8Qn?= =?us-ascii?Q?3SNNow9X9vaq9GhUHncZnLC/iJVKLBccKkP56M7Y4kfM1Xw/9S9H7TYrOskr?= =?us-ascii?Q?+JxHTo55vrO/9nfiF5JvJJfIS+HS+6HpZxbS3TVEn1e3ae+p51G1TKcWLEY1?= =?us-ascii?Q?YZCHgeHksRQ0BuVCxb5NLH9Do0wHzlUM?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DBBPR04MB7497.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(10070799003)(366016)(7416014)(376014)(52116014)(19092799006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?rdGNtND/bY6nHF/lBMSR8x1T/gXUgXYGMkJR3ZzMnI+Xr5B4N8rp98PioEH7?= =?us-ascii?Q?FxcGPmYheaIeCdtKawcaWziEQVFh1wyhX2k/YCTdtCgtAtJSq5ezopDyOy3u?= =?us-ascii?Q?qaHKUPwmMdU/1BfPzUhfQqTt+Ih8G4YHvBLI+nWd6iN169sbshjH7s3xxJsZ?= =?us-ascii?Q?NsuIvoRH7g3GBaCqgHvSROb9WqV7O6Re9NSllMOQ/k/5ueNqq3dxGkShqTiT?= =?us-ascii?Q?3Mh85/gILWR43VbsTOepMoDn+Xtp5MdlmTL0HX482w7+swtUG0BnYBs7OdnL?= =?us-ascii?Q?+ATofuv4D3WG0dtycE1F5LwNAf9rKXjSHzv+5EA59gqp0shW4mCKeAdFKx7d?= =?us-ascii?Q?epV6nstN98+EI+38XNSrO/9sNPIpTBq03efnthq6QROyi9MN5V7rxV8H6nr/?= =?us-ascii?Q?MMriohilJIxfMTHkyx4qjbKsZ7Qj+a0H1Ar/illKSN9mX1iSc/Ty+/VCbN16?= =?us-ascii?Q?RujzmfQQLWBEbRoj5wkzQrnc3Jq8qoplSj9KlTIRD3HXcKJPYmU5isKwdf0y?= =?us-ascii?Q?Vk6R52XFfQ70ohB8tTRs9l5cyG01lmQ6aqBwAfM+JPyOcpbMa7gX5ze+fVFT?= =?us-ascii?Q?Nj0ulkw3pQVnsh1YXlARvo1wuNm6iiv7oIwrcaGtT9KAa5AM2/Je1FRYzYDW?= =?us-ascii?Q?opXsLLPUaonljesHQ/Ix3b9Vng3vAGB8P94WNSOBEyyiTU2QiHUP13Unq3ZX?= =?us-ascii?Q?o2TnKMxceaii+PFal+lBBZoQF35kI4xAMwo+MiNYqZpYjJznwbT1VPUD+7Eq?= =?us-ascii?Q?Qa5ChLhkeVc4uK0kqkxtpbMGuW/MoSbpgSqsM+YOt74tP/vgQJBewhBoaPj9?= =?us-ascii?Q?pnsZe1VenUJJo/vf+rCIxbcId9D0KAKwEHwZZGvO4K9s9iAL9eFS2pKvrmfy?= =?us-ascii?Q?1v/ByDVzGX96CauLjqHq6PobtI/sRYkP1CFInUrRccGiWfhUVgb9qt+os7Qe?= =?us-ascii?Q?PtUGAL+CfvhWkTh2/LQHgpp+m/gxbWomUBdBjXU8fYdTpoAJV+htcG+clhqo?= =?us-ascii?Q?0qjwP8+nc6/qE8IPMX9k0dgLJgDyP6OLnGLnAx0uBM55WKEs6iRxQyvOb4jF?= =?us-ascii?Q?Vhhl6g0VWNgOo9eNCkEPTr0qmsnk6v661toVCk8OFmiEsxmKsmXo8TvQ27r4?= =?us-ascii?Q?iNQHAisvMdrUlJcKOHYSuq/1+2FeQOm4WUVsc02YV0zvhboTUVb/dedJ6EPu?= =?us-ascii?Q?Vy3RJy76q4M9S1NV+tXYHTvOs6g7HDF56PO/aXPNNpcjEmWzely6AdBKEgKv?= =?us-ascii?Q?HCTUkmTBm5dogYdttuEqptOEUCde4lvK78Izclg6wy/qod1sgRGy5C/R51NL?= =?us-ascii?Q?+enG+X/Q/7McL+wu3cj6IKfWsESA1XS0GViomxhVXWQhoPQD/X0HFajxNTZK?= =?us-ascii?Q?ewFm8gd3yRmQslvwndX7W3P3tad46QsXzH74EtXD8yOjdMcmjSH3Qjc1mfnu?= =?us-ascii?Q?4t3N4TAoU/FfIMyG7MoVowXRiHW4Hf5d9CHjXAS0MjbdLU/QUImQ4yF8t58d?= =?us-ascii?Q?wr/aQw1LM5+TJ6m2enK0hXB92fQ1gyR53i8o8odHLjosgRmPvjvSMPZuxeEF?= =?us-ascii?Q?1ioK69Ew2sDsv8McL8InaoD7CndLEu66UQP5IhU3ww5ZPtOKwZSnYIfql9l8?= =?us-ascii?Q?JyOhXV0AUV0EM15JFqcx7ms=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: cf2bda4b-7e51-4b04-c516-08de26d57cc7 X-MS-Exchange-CrossTenant-AuthSource: DBBPR04MB7497.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Nov 2025 19:05:49.7793 (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: NywSUuvkgtGsUPy8A4YcGZnhssuwvxbvcME4wqD8X7MgO2jQzAJHAekbdQOkeVR9GE6ogo+G2YCBzdrksYFwjQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA4PR04MB7695 Content-Type: text/plain; charset="utf-8" The regmap world is seemingly split into two groups which attempt to solve different problems. Effectively, this means that not all regmap providers are compatible with all regmap consumers. First, we have the group where the current mdio-regmap users fit: altera_tse_main.c and dwmac-socfpga.c use devm_regmap_init_mmio() to ioremap their pcs_base and obtain a regmap where address zero is the first PCS register. Second, we have the group where MFD parent drivers call mfd_add_devices(), having previously initialized a non-MMIO (SPI, I2C) regmap and added it to their devres list, and MFD child drivers use dev_get_regmap(dev->parent, NULL) in their probe function, to find the first (and single) regmap of the MFD parent. The address zero of this regmap is global to the entire parent, so the children need to be parent-aware and add their own offsets for the registers that they should manage. This is essentially because MFD is seemingly coming from a world where peripheral registers are all entangled with each other, but what I'm trying to support via MFD are potentially multiple instances of the same kind of device, at well separated address space regions. To use MFD but provide isolated regmaps for each child device would essentially mean to fight against the system. The problem that needs to be now solved is that each child device needs to find the correct regmap, which means that "dev_get_regmap(dev->parent, NULL)" transforms either in: - dev_get_regmap(dev, NULL): search in the child device's devres list, not in the parent's. But MFD does not give us a hook in between platform_device_alloc() and platform_device_add() where we could make the devm_regmap_init_spi() call for the child device. We have to make it for the parent. - dev_get_regmap(dev->parent, "unique-regmap-name"): now the child device needs to know, in case there are multiple instances of it, which one is it, to ask for the right one. I've seen drivers/mfd/ocelot-core.c work around this rather elegantly, providing a resource to the child, and then the child uses resource->name to find the regmap of the same name in the parent. But then I also stumbled upon drivers/net/pcs/pcs-xpcs-plat.c which I need to support as an MFD child, and that superimposes its own naming scheme for the resources: "direct" or "indirect" - scheme which is obviously incompatible with namespacing per instance. So a MFD parent needs to decide whether it is in the boat that provides one isolated regmap for each child, or one big regmap for all. The "one big regmap" is the lowest common denominator when considering children like pcs-xpcs-plat.c. This means that from mdio-regmap's perspective, it needs to deal with regmaps coming from both kinds of providers, as neither of them is going away. Users who provide a big regmap but want to access only a window into it should provide as a struct mdio_regmap_config field a resource that describes the start and end of that window. Currently we only use the start as an offset into the regmap, and hope that MDIO reads and writes won't go past the end. Cc: Mark Brown Cc: Maxime Chevallier Signed-off-by: Vladimir Oltean Reviewed-by: Maxime Chevallier --- drivers/net/mdio/mdio-regmap.c | 7 +++++-- include/linux/mdio/mdio-regmap.h | 2 ++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/drivers/net/mdio/mdio-regmap.c b/drivers/net/mdio/mdio-regmap.c index 8a742a8d6387..2a0e9c519fa3 100644 --- a/drivers/net/mdio/mdio-regmap.c +++ b/drivers/net/mdio/mdio-regmap.c @@ -19,6 +19,7 @@ =20 struct mdio_regmap_priv { struct regmap *regmap; + unsigned int base; u8 valid_addr; }; =20 @@ -31,7 +32,7 @@ static int mdio_regmap_read_c22(struct mii_bus *bus, int = addr, int regnum) if (ctx->valid_addr !=3D addr) return -ENODEV; =20 - ret =3D regmap_read(ctx->regmap, regnum, &val); + ret =3D regmap_read(ctx->regmap, ctx->base + regnum, &val); if (ret < 0) return ret; =20 @@ -46,7 +47,7 @@ static int mdio_regmap_write_c22(struct mii_bus *bus, int= addr, int regnum, if (ctx->valid_addr !=3D addr) return -ENODEV; =20 - return regmap_write(ctx->regmap, regnum, val); + return regmap_write(ctx->regmap, ctx->base + regnum, val); } =20 struct mii_bus *devm_mdio_regmap_register(struct device *dev, @@ -66,6 +67,8 @@ struct mii_bus *devm_mdio_regmap_register(struct device *= dev, mr =3D mii->priv; mr->regmap =3D config->regmap; mr->valid_addr =3D config->valid_addr; + if (config->resource) + mr->base =3D config->resource->start; =20 mii->name =3D DRV_NAME; strscpy(mii->id, config->name, MII_BUS_ID_SIZE); diff --git a/include/linux/mdio/mdio-regmap.h b/include/linux/mdio/mdio-reg= map.h index 679d9069846b..441cead97936 100644 --- a/include/linux/mdio/mdio-regmap.h +++ b/include/linux/mdio/mdio-regmap.h @@ -11,10 +11,12 @@ =20 struct device; struct regmap; +struct resource; =20 struct mdio_regmap_config { struct device *parent; struct regmap *regmap; + const struct resource *resource; char name[MII_BUS_ID_SIZE]; u8 valid_addr; bool autoscan; --=20 2.34.1 From nobody Tue Dec 2 02:32:17 2025 Received: from OSPPR02CU001.outbound.protection.outlook.com (mail-norwayeastazon11013015.outbound.protection.outlook.com [40.107.159.15]) (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 605512E0923; Tue, 18 Nov 2025 19:05:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.159.15 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763492760; cv=fail; b=gPDHgFT1D+CX9KJJKFje2zryZs3x3IiIUuVutFl1NM4tGinhSevgyZw398iAADg3ckN0+ji73XtkwW+ySg+DT6QjidnyWOmCdRD5ya1DdW/PT5oA+RjT6zVWgaE2yNWhYMemp69J+2BaW4woys0ipr7Q/F6sSEoTJAB7r8TIxT0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763492760; c=relaxed/simple; bh=RQFdIK85Y6fQSVZj3M5r9rDDHJxVr1twZSdsTOhRnF4=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=hvNYqqO2B472vhc8yBLNrId4rgwsQG3nCTLL+rvaXjHmnznhq46bcaNurt1+WsZuW/Ac+I/9I5ccuiFM+Y6Wa/Vn9SoX2UIVEOh1Nki/B++dSHY67NQJ2odg2C0fr75jgimswOy21z8ocwDd/QE7CfE2uhNOLvhi9AVLGAUCzfA= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=AQOoqykt; arc=fail smtp.client-ip=40.107.159.15 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="AQOoqykt" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=AkvxKM3OYQwhGD3xPT3gtcMSaL5H8FOii+uTORZD3bWMq/Ep//bOY8gZDkqw2PWk85figPqLL7Q6TFsnM2wzJV4oJrM02O//DGv90MaBIVRaesvXxs1wNJSoS1+XSyJnSH2vRM7e0fZb2XjWpWB1hdawAmjN7tvg6cVW+atlmsz9WVUVjLu3+oWLoWLnCiQ73fLaitNm02sdU9Vg4BwPLoRu4k9l/Gtf1hUGnNjdzWhYDhMGjKkBVArtOcsSx2OxCqyVkSNdm3FV1FZxoxAIVKD+t+YLTcYpiXUz4JN0oX2qFiQwtl48kWUu0a3lFnlzr0x8URQGLXI2TxxxrGjc5A== 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=mLTokMySjNCSV+t4RLCGjVixSmha5W0M5N7RG/wdk9Q=; b=RAUw6cTZujR5XXa1j/s6erQS8JTBqpQEgZRa6FlArP5MCMeQziKB/5uTLtQIvBKMYYHxtMwCDTdGa2q/AYkBN47T7OL20Ro7Vyfs6zn8oG3zIgPTXADSDHps0IszvHwCiQx4+14/pU/ENyrB+8ayI72XoszFcPdwK2Xkl/xqy0lQuLL7Or7UKIofCFg2PxPrBg4shguAezMnvWPVC1/ZybKPNxQORuNW290UR6eE1fmSUJrweXM/NhmYHd+j5Z2P0nXcAEuSLO3Tpz57iGVu6DQYg+NhrO5jwrluw2HFNBXRndcEzp618NPhoiGnW4W3QFFIg8RFmuoKDt7WYKiLPQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=mLTokMySjNCSV+t4RLCGjVixSmha5W0M5N7RG/wdk9Q=; b=AQOoqyktvMtYE4R2vyyhbk9kNRcDyGkYtIN0MlGomolHftUCbg5qvKAI3HiWMx2wFo06dyb6j7OnAsOkVKjcedRtgGR4b0bb85RkV5fwBOsiQrqwSRVc5UKp4I6VI4Va0L3eVX02tDoaVpoHCMi1lgn+HHv25xQ5l+gh6xKs36JUa673TqlQdeMeiMc96/xM5GG4DMyg8F+9w5hWQo35gg7WD8SMqr7VuwVEZ8ZO+5aeF+brTM4ZAl8rpUcoonTXrK1bUGDa/h3dwfnqCpbreKnVntbVgxDmjQES6M9nBJaVy6G4phNJoWXZ1WUtHF84VV85FiYCfUsIX15YWHEDcg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from DBBPR04MB7497.eurprd04.prod.outlook.com (2603:10a6:10:204::9) by PA4PR04MB7695.eurprd04.prod.outlook.com (2603:10a6:102:e3::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9343.10; Tue, 18 Nov 2025 19:05:51 +0000 Received: from DBBPR04MB7497.eurprd04.prod.outlook.com ([fe80::503f:b388:6d07:adff]) by DBBPR04MB7497.eurprd04.prod.outlook.com ([fe80::503f:b388:6d07:adff%4]) with mapi id 15.20.9343.009; Tue, 18 Nov 2025 19:05:50 +0000 From: Vladimir Oltean To: netdev@vger.kernel.org Cc: Andrew Lunn , Heiner Kallweit , Russell King , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , linux-kernel@vger.kernel.org Subject: [PATCH net-next 03/15] net: mdio: add driver for NXP SJA1110 100BASE-T1 embedded PHYs Date: Tue, 18 Nov 2025 21:05:18 +0200 Message-Id: <20251118190530.580267-4-vladimir.oltean@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20251118190530.580267-1-vladimir.oltean@nxp.com> References: <20251118190530.580267-1-vladimir.oltean@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM0P190CA0022.EURP190.PROD.OUTLOOK.COM (2603:10a6:208:190::32) To DBBPR04MB7497.eurprd04.prod.outlook.com (2603:10a6:10:204::9) 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: DBBPR04MB7497:EE_|PA4PR04MB7695:EE_ X-MS-Office365-Filtering-Correlation-Id: 7ff1332a-eccb-4824-0a5a-08de26d57d70 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|10070799003|366016|376014|52116014|19092799006; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?EZpOh4eKP5ApDXfenVTPO6cj0VD58/h8B45DyvXWIcWmpmcQBsNCKgKJdIDw?= =?us-ascii?Q?Ne+QwzPkf1tH4MzdIl/oYKav2T6tvfrkD+0tMFxxo5LVZawWwKNfDyZD8y3k?= =?us-ascii?Q?YPu/uXdA+tmj2zi1m1kTiabYGjRVtbaAIFUx6xdPZ5BV8h1A3BZmXbmwNTFu?= =?us-ascii?Q?cxstZo1Vi3SxY/O15acmYrLIEuUsWacrm/c101JZqzyJswnba23/HGpryvYS?= =?us-ascii?Q?pfxTulBi9RJCPY7qSra+s1c+kROl2ldk2Cx4DgMmz4u0yrIH3Y2/zknCoPS4?= =?us-ascii?Q?9/n7OOBrJWUNjf13s2Ei+03BiHmcs76AzyBXI0617leXF4AdNgwPLuwKC7TB?= =?us-ascii?Q?UMLFqq0AuxgSDVD95G2kxv/O2U8X9CurFvOxvl2f7TqeynVxyquz7w/b5rUX?= =?us-ascii?Q?11xfpwYBYOrIvQObQVKFqMwIVyLig+9uMD4VfSuoe0o1QX6HAJip/CLT+MNO?= =?us-ascii?Q?EPsWOvJOnqDP/z/C8D+6urIZoH6iG7jyVReAsT8678dWhiASP3mLs2DBQk4m?= =?us-ascii?Q?qNHMMdTIexKENyHmAeQ/mIpoiJprYZ14UfL51cTOZN0YeJfUH+1XHXH4SGsX?= =?us-ascii?Q?WJVYiDLfcEkjHOVWl7MG7T2hmsdUaSSYQRvppYE3OXOb7Is5KEQfYP7J/wdx?= =?us-ascii?Q?OneIoNRS3IwLunecncoOMF4bStYztmXD8nR7pkC8alJI7KQz370FUkcmhTTW?= =?us-ascii?Q?mmBlzW9YQHBD70g27yP7M6lV43Tnh5GzyF4dCFb/uwx8QSNgZEVm96k6Musa?= =?us-ascii?Q?R6irhbC/g+x/bsIVEQR69ND2pxIsOcT4eeRqXx4f6YuUk7vK9lpC5fh69odP?= =?us-ascii?Q?HGnfbMCTaS3Tzjc+sdHSTZF10PHDzSlU/fUTK6z29hbJUl107soDR97nSFZB?= =?us-ascii?Q?3JtzPF8YldAXBa7kwhRQ1S0C1fyomBUCMm0XQV47f7C22Dq9UVHHh6Yvtqqk?= =?us-ascii?Q?DwHA7vpjSgsnBcYA+QveHWzm8BJWImmg6Mxa7mohM+K7+l77NBvbm2/zMmVU?= =?us-ascii?Q?qqZNoqmwB9d3hQSZPmMht3HLA94Zgb0gO6nnRefQwa62Ktyvyop5B0nsdMnx?= =?us-ascii?Q?IHRU5g/2iCwUB765/0NSIJ4BoDG+BLHn9193Tu/4PIjSoF3mM5C/0HSZFaVs?= =?us-ascii?Q?uHOGHHIkfB4iYVLQ5LKExwxDhuQORIQRnJgWSKTc5TAk22oIy59lFJLTmC3n?= =?us-ascii?Q?eqx+2Abgg53wNNCVZCw31z4llcIYx3CsUScYzAuYPJ1xYtkfHlC6whwYytzf?= =?us-ascii?Q?jPGp5NSOPikRbpVck15ea9aLk+GNlgQAwT0wR4Vt4mCsKNQajpDfo0oAzkvq?= =?us-ascii?Q?AyHA//X44k18nIHAtZ3PJXr3plf7zIvrpGgJKyxJJ6Bm/dwK9ptSVu6H4dPA?= =?us-ascii?Q?t0Ub3jXSOY2j/nYnMbFTGKTzh1E4Mf7X8eonQRbpEq1XJ8mwPkBYj/iUJZBN?= =?us-ascii?Q?hwP7Rh3Q82wag2EekYejqyGR3qrAd9E9?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DBBPR04MB7497.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(10070799003)(366016)(376014)(52116014)(19092799006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?+Zp4HDN00rqRcphtaKlxa1lZdTFwUXa5EQtS+9M9V8Z33N7jSnNffZ3+mwFt?= =?us-ascii?Q?zGzHH9hDAemZlyXY4olqZVc6X2rTInsjWkUtW4ssMA88PBrbaOcILHEFrjUP?= =?us-ascii?Q?N4JSda3KbwFpqvS0cQ/aBhw93EWO07Uj8YYd0WnwcvRb787KPRlCQ9BNCKCe?= =?us-ascii?Q?Px/7WN6z+MyaTgrv+ZYLYjz5W2lVP1hNXf8bYFs9cgG6soSiqv2I/egZQwTj?= =?us-ascii?Q?Jg5TeC7rDtaIeHHudkkKVlTqGI+1HP9+ovQHpML7hpYfUETwSQ4dNHtICB4N?= =?us-ascii?Q?KFlOi4b35iH996/6bGBYlEAd22KJOIRaaW9svT49/OJycvGNUAzZeUjs0hQo?= =?us-ascii?Q?k/0TepPxSCHgMt+3FFWPCBGb3RoiLOuPs0ZRFHQ1EpnzpcQmdcOdX63WSqzd?= =?us-ascii?Q?iweZa2hX4efVj4fA6huCCFmA9tRIPVOkMldDbLEfzy65jMVLAjYkPcSpKyL4?= =?us-ascii?Q?kCvT5TbNj5I9rimX+QJ7USQ+CxuHyMGh/WljI/610GvUhso8oil+bZQCcrhi?= =?us-ascii?Q?C+kBrGvdq43PVqHtYhvilMn5GeuHCJxKCu2I2jjwNFxkF0jYGaqY14HypSO6?= =?us-ascii?Q?fJbghbD/nCOdWZW+fNf+A+2cPeCchfdj9TXOlTARhie1e9CPRyFAa2xlQ8h2?= =?us-ascii?Q?QFRKUnOeTFj1FCi8m8pglNuFjBnfxeSD++zX6D3nWwwi84cIxpvaIQKSbE/Z?= =?us-ascii?Q?lLZqfeoE5k/zSr+of9XLVWjEZRSSfMPwXxPKbdRT+4fPIsM4iQNSvE8sLtJm?= =?us-ascii?Q?2+Gme6ITpekJJ9mU620X1Rn4FKGsSYJ26nekVfqtR3EergvOF7jntuhScV8a?= =?us-ascii?Q?MZzFOVzUBqRPeIWe9Uc/Wnd6CoWO2uD/ahPpfgw4mZMbTwn75m0WXVnWuZmk?= =?us-ascii?Q?K0pmxs5rLSZ6k1/DSjCSVMLUB2NeE0+updpZUyHteQVgNzAe3OOO0LZInGXe?= =?us-ascii?Q?wi95NUW7ge76a/Od7By/aj+oi3umzm8h4DASCjIkA02OYT0QPFyPjZ42SMLC?= =?us-ascii?Q?ax6qMENH3AuQOvQbBxJEPUzK9UujEnnI9ciyBP792b/tly1MRVzl0xsgfDsl?= =?us-ascii?Q?NPuOLNkzYgTsVRb+Qr9LBMEWeFxd7R67z+vmx33tqYV4EpX0dPg2PjmNZlDp?= =?us-ascii?Q?yHhi76rCro0u0ND0+OIRgvEY/uQTJuib1GwxN6j6lWhkEl5FpyMUnUPggXPD?= =?us-ascii?Q?M5pQiYWVZzcQEzAlkhQM8kbkobR+sOZ1LIK5TJlO0HlR/DwKp7jf6TL79Si2?= =?us-ascii?Q?ZdJeEAfucCPJfjC5RRpnQKsEsYlZDYKuE4pjMyGM9A49iBOpBQscybEn+5N0?= =?us-ascii?Q?DeIbseZjZ0ZMB/CybCUymJfCpXK6tdOsUSrQXMgm940/ktxbC1OWdMsx56/V?= =?us-ascii?Q?4elFoEKr47ERPzDlrNnZUXOlAOJAkK5O2iwLeT6C6hs1oUGJBcuXh6T972an?= =?us-ascii?Q?lfu6cCs0cKaz2ervBGiTRW40eMEekttVCbzZUOV3x3Y/0qCGLdWg6qdQMN2L?= =?us-ascii?Q?u/voLRv7KzYf5MswuwunhZkOCWl62wkhUvPGqloJ2WsWbHhsPPwv2ZYRcySH?= =?us-ascii?Q?QN6rzozlPHvuyEEzYvpUyxZr4rQklFGQvV+DjdoJKvVwur9V2V9uSU3Urg2f?= =?us-ascii?Q?n5ro9Kl95jLg1CPHO9ASC+A=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7ff1332a-eccb-4824-0a5a-08de26d57d70 X-MS-Exchange-CrossTenant-AuthSource: DBBPR04MB7497.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Nov 2025 19:05:50.9327 (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: AycRGqhKx3zbxycIxSSxjy6gGOHjYi05mSuCpoDoPB/tizP7uZMeFYIigoMCSIyucvOysS5v+3d47rywJXfltQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA4PR04MB7695 Content-Type: text/plain; charset="utf-8" This driver is the standalone variant of drivers/net/dsa/sja1105/sja1105_md= io.c. In terms of differences: - this one uses regmaps provided by the parent as a method to abstract away the sja1105_xfer_u32() calls for register access - the driver prefix has been changed from sja1105 to sja1110 (this MDIO controller is not present on the older SJA1105 family) - in the sja1105 driver, each memory word has 32 bits, so addresses as seen by regmap need to be multiplied by 4. This affects what sja1110_base_t1_encode_addr() returns, and is different compared to sja1105_base_t1_encode_addr(). Signed-off-by: Vladimir Oltean --- MAINTAINERS | 1 + drivers/net/mdio/Kconfig | 7 ++ drivers/net/mdio/Makefile | 1 + drivers/net/mdio/mdio-sja1110-cbt1.c | 173 +++++++++++++++++++++++++++ 4 files changed, 182 insertions(+) create mode 100644 drivers/net/mdio/mdio-sja1110-cbt1.c diff --git a/MAINTAINERS b/MAINTAINERS index 37f4278db851..c41b9d86c144 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -18679,6 +18679,7 @@ M: Vladimir Oltean L: linux-kernel@vger.kernel.org S: Maintained F: drivers/net/dsa/sja1105 +F: drivers/net/mdio/mdio-sja1110-cbt1.c F: drivers/net/pcs/pcs-xpcs-nxp.c =20 NXP TDA998X DRM DRIVER diff --git a/drivers/net/mdio/Kconfig b/drivers/net/mdio/Kconfig index 44380378911b..9819d1dc18de 100644 --- a/drivers/net/mdio/Kconfig +++ b/drivers/net/mdio/Kconfig @@ -136,6 +136,13 @@ config MDIO_MOXART This driver supports the MDIO interface found in the network interface units of the MOXA ART SoC =20 +config MDIO_SJA1110_CBT1 + tristate "NXP SJA1110 100BASE-T1 MDIO bus" + help + This driver supports the MDIO controller embedded in the NXP SJA1110 + automotive Ethernet switches, which is used to access the internal + 100BASE-T1 PHYs over SPI. + config MDIO_OCTEON tristate "Octeon and some ThunderX SOCs MDIO buses" depends on (64BIT && OF_MDIO) || COMPILE_TEST diff --git a/drivers/net/mdio/Makefile b/drivers/net/mdio/Makefile index fbec636700e7..9abf20d1b030 100644 --- a/drivers/net/mdio/Makefile +++ b/drivers/net/mdio/Makefile @@ -22,6 +22,7 @@ obj-$(CONFIG_MDIO_MVUSB) +=3D mdio-mvusb.o obj-$(CONFIG_MDIO_OCTEON) +=3D mdio-octeon.o obj-$(CONFIG_MDIO_REALTEK_RTL9300) +=3D mdio-realtek-rtl9300.o obj-$(CONFIG_MDIO_REGMAP) +=3D mdio-regmap.o +obj-$(CONFIG_MDIO_SJA1110_CBT1) +=3D mdio-sja1110-cbt1.o obj-$(CONFIG_MDIO_SUN4I) +=3D mdio-sun4i.o obj-$(CONFIG_MDIO_THUNDER) +=3D mdio-thunder.o obj-$(CONFIG_MDIO_XGENE) +=3D mdio-xgene.o diff --git a/drivers/net/mdio/mdio-sja1110-cbt1.c b/drivers/net/mdio/mdio-s= ja1110-cbt1.c new file mode 100644 index 000000000000..a5f7830a6257 --- /dev/null +++ b/drivers/net/mdio/mdio-sja1110-cbt1.c @@ -0,0 +1,173 @@ +// SPDX-License-Identifier: GPL-2.0 +/* Copyright 2022 NXP + * + * NXP SJA1110 100BASE-T1 MDIO bus driver + */ +#include +#include +#include +#include +#include + +struct sja1110_base_t1_private { + struct regmap *regmap; + struct mii_bus *bus; + unsigned int base; +}; + +enum sja1110_mdio_opcode { + SJA1110_C45_ADDR =3D 0, + SJA1110_C22 =3D 1, + SJA1110_C45_DATA =3D 2, + SJA1110_C45_DATA_AUTOINC =3D 3, +}; + +static unsigned int sja1110_base_t1_encode_addr(unsigned int phy, + enum sja1110_mdio_opcode op, + unsigned int xad) +{ + return (phy << 9) | (op << 7) | (xad << 2); +} + +static int sja1110_base_t1_mdio_read_c22(struct mii_bus *bus, int phy, int= reg) +{ + struct sja1110_base_t1_private *priv =3D bus->priv; + struct regmap *regmap =3D priv->regmap; + unsigned int addr, val; + int err; + + addr =3D sja1110_base_t1_encode_addr(phy, SJA1110_C22, reg & 0x1f); + + err =3D regmap_read(regmap, priv->base + addr, &val); + if (err) + return err; + + return val & 0xffff; +} + +static int sja1110_base_t1_mdio_read_c45(struct mii_bus *bus, int phy, + int mmd, int reg) +{ + struct sja1110_base_t1_private *priv =3D bus->priv; + struct regmap *regmap =3D priv->regmap; + unsigned int addr, val; + int err; + + addr =3D sja1110_base_t1_encode_addr(phy, SJA1110_C45_ADDR, mmd); + err =3D regmap_write(regmap, priv->base + addr, reg); + if (err) + return err; + + addr =3D sja1110_base_t1_encode_addr(phy, SJA1110_C45_DATA, mmd); + err =3D regmap_read(regmap, priv->base + addr, &val); + if (err) + return err; + + return val & 0xffff; +} + +static int sja1110_base_t1_mdio_write_c22(struct mii_bus *bus, int phy, in= t reg, + u16 val) +{ + struct sja1110_base_t1_private *priv =3D bus->priv; + struct regmap *regmap =3D priv->regmap; + unsigned int addr; + + addr =3D sja1110_base_t1_encode_addr(phy, SJA1110_C22, reg & 0x1f); + return regmap_write(regmap, priv->base + addr, val & 0xffff); +} + +static int sja1110_base_t1_mdio_write_c45(struct mii_bus *bus, int phy, + int mmd, int reg, u16 val) +{ + struct sja1110_base_t1_private *priv =3D bus->priv; + struct regmap *regmap =3D priv->regmap; + unsigned int addr; + int err; + + addr =3D sja1110_base_t1_encode_addr(phy, SJA1110_C45_ADDR, mmd); + err =3D regmap_write(regmap, priv->base + addr, reg); + if (err) + return err; + + addr =3D sja1110_base_t1_encode_addr(phy, SJA1110_C45_DATA, mmd); + return regmap_write(regmap, priv->base + addr, val & 0xffff); +} + +static int sja1110_base_t1_mdio_probe(struct platform_device *pdev) +{ + struct sja1110_base_t1_private *priv; + struct device *dev =3D &pdev->dev; + struct regmap *regmap; + struct resource *res; + struct mii_bus *bus; + int err; + + if (!dev->of_node || !dev->parent) + return -ENODEV; + + regmap =3D dev_get_regmap(dev->parent, NULL); + if (!regmap) + return -ENODEV; + + bus =3D mdiobus_alloc_size(sizeof(*priv)); + if (!bus) + return -ENOMEM; + + bus->name =3D "SJA1110 100base-T1 MDIO bus"; + snprintf(bus->id, MII_BUS_ID_SIZE, "%s", dev_name(dev)); + bus->read =3D sja1110_base_t1_mdio_read_c22; + bus->write =3D sja1110_base_t1_mdio_write_c22; + bus->read_c45 =3D sja1110_base_t1_mdio_read_c45; + bus->write_c45 =3D sja1110_base_t1_mdio_write_c45; + bus->parent =3D dev; + priv =3D bus->priv; + priv->regmap =3D regmap; + + res =3D platform_get_resource(pdev, IORESOURCE_REG, 0); + if (res) + priv->base =3D res->start; + + err =3D of_mdiobus_register(bus, dev->of_node); + if (err) + goto err_free_bus; + + priv->bus =3D bus; + platform_set_drvdata(pdev, priv); + + return 0; + +err_free_bus: + mdiobus_free(bus); + + return err; +} + +static void sja1110_base_t1_mdio_remove(struct platform_device *pdev) +{ + struct sja1110_base_t1_private *priv =3D platform_get_drvdata(pdev); + + mdiobus_unregister(priv->bus); + mdiobus_free(priv->bus); +} + +static const struct of_device_id sja1110_base_t1_mdio_match[] =3D { + { .compatible =3D "nxp,sja1110-base-t1-mdio", }, + {}, +}; +MODULE_DEVICE_TABLE(of, sja1110_base_t1_mdio_match); + +static struct platform_driver sja1110_base_t1_mdio_driver =3D { + .probe =3D sja1110_base_t1_mdio_probe, + .remove =3D sja1110_base_t1_mdio_remove, + .driver =3D { + .name =3D "sja1110-base-t1-mdio", + .of_match_table =3D sja1110_base_t1_mdio_match, + }, +}; + +module_platform_driver(sja1110_base_t1_mdio_driver); + +MODULE_DESCRIPTION("NXP SJA1110 100BASE-T1 MDIO bus driver"); +MODULE_AUTHOR("Vladimir Oltean "); +MODULE_LICENSE("GPL"); --=20 2.34.1 From nobody Tue Dec 2 02:32:17 2025 Received: from PA4PR04CU001.outbound.protection.outlook.com (mail-francecentralazon11013035.outbound.protection.outlook.com [40.107.162.35]) (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 6ADCF2DF147; Tue, 18 Nov 2025 19:06:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.162.35 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763492762; cv=fail; b=WW/SMipBJ8WsYAo5C9nQvFOjH2P++lW32G/6KPLRY8D6RyHrmEfKk8GNN5/Blu+rUg/XjoTdEXomkyWqmu/tD2vkBsNvKZTY5Ztwyl5JmIiAMjLtbTXWy/DhVgIoCUGRDDM9quZGLlI0Gw37BEHIVFyux+PfvHvqjNKelnzEJuk= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763492762; c=relaxed/simple; bh=2apFSyZ8qU3T9F2bSBCDBqDeAgQook38N1FNDoTPyQo=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=XBHHQL9Bw/zo/I4ObDCmihC66CiJvjEiAYG3eH9HHfknTh44Q7O0bgER/gMv2mQYK95+8WSNiYWwpVaRqNSNLMyQhKDI2v2wbdpWj+pr+iy5Ufn2p36lWKh5N5rdzMMaTyghwTZ+nvtxHWeRE0PzQ8DK2Ha8cP6d2rdPHJ4a8jM= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=OJtl2lZl; arc=fail smtp.client-ip=40.107.162.35 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="OJtl2lZl" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=KpGoVBIDyWl5IE686DxETWb+A0j8fcz9F44EqTs4HE1bSjc3I9l6sbYS0eAZGOnyb2WsjReP8CBj5gCTTeeWvaY/XDb1MjLY+Oh6D9cJUGGXydlWziJ62CRBus8GpMZTse3GZc4iGM/LsLzT+2s81b9c6a/bJyZrdVB0nBHaz2HB/zUL++5T60Bh1wnwmmK6/mACjY+P737EkI6UZK9UnyDA1qAZ69zhAJBz7RfhZWMew6QxDLaRxw8RrG3vqI4ExqZoPw65ACk0tNsg4fVtDGQr0LGEnt0YnbjLpqEWB28lvesuioVS+G9qWVWqSgHvNTdxBd/mgrAuJnlKMTTjcw== 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=jYt6SZTUZkfXQX6MoUfX4qJ7Y1PZWVp/l4LSDtzvP2w=; b=sdgobAoCv8ChgSYuiX/D2TVuX7Of+RLHo4UuMJzxIi20tDgfzLDmFzEYcr8BIVOXyEPFPZlgdLH14NtN2rrVx7/IkCO0/UIm3eD3svkykQN4/Db4OiZY8M4ZtHg03Bb8AzFsrSmnvfGXHgKY7Hjn6JI8ePCYNh2c9uV7bqJVk+sVWmUCOl7G2LgO/eg8KoOsbCJ6oAmhawod9359Gwi3EbcQBYP83RhT1ZLxTLPvORS8O5n7F3NomQNRq7LkYuLC0jv3hCewInaQ0N2wArQFpO5BUQoa8VTcvd5Dpiwo8FXZY4qbXsSto2SLe/NU7/PQxB2R//5BxxBE3aGLiCZIYQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=jYt6SZTUZkfXQX6MoUfX4qJ7Y1PZWVp/l4LSDtzvP2w=; b=OJtl2lZlZkyZQYikaf8FrxfyyYsiqaFDIop8WNDxtTZBgWHLF0anHia0N9SBiZ1Fpx7ZnLPMp2SG1r2uES79fD+i24koOns/nkrG88uUiNvu6uz0BQAhrjNMjCouLD4traxOTaYuo8S9IAekW0rKB8+wBoKPA5DAHpqEuQPOr3xKcbOvrgIwUe4+fot2eHFHWhtr7M0ZQ1KEzNyj7YRNrIyiZ3/qp/OPvyDlG6/IMow0+Vb+YcGIWQ5z9LC5hI+9XLosSuiEfkZDyWC++x2uvoVygtYtnNW3XEvO0wxAsdd4jkuHQ8lijiTQeHRIBlPYSN5wToczt/gWv4nAdjWFPQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from DBBPR04MB7497.eurprd04.prod.outlook.com (2603:10a6:10:204::9) by PA4PR04MB7695.eurprd04.prod.outlook.com (2603:10a6:102:e3::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9343.10; Tue, 18 Nov 2025 19:05:52 +0000 Received: from DBBPR04MB7497.eurprd04.prod.outlook.com ([fe80::503f:b388:6d07:adff]) by DBBPR04MB7497.eurprd04.prod.outlook.com ([fe80::503f:b388:6d07:adff%4]) with mapi id 15.20.9343.009; Tue, 18 Nov 2025 19:05:52 +0000 From: Vladimir Oltean To: netdev@vger.kernel.org Cc: Andrew Lunn , Heiner Kallweit , Russell King , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , linux-kernel@vger.kernel.org, Maxime Chevallier Subject: [PATCH net-next 04/15] net: mdio: add generic driver for NXP SJA1110 100BASE-TX embedded PHYs Date: Tue, 18 Nov 2025 21:05:19 +0200 Message-Id: <20251118190530.580267-5-vladimir.oltean@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20251118190530.580267-1-vladimir.oltean@nxp.com> References: <20251118190530.580267-1-vladimir.oltean@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM0P190CA0022.EURP190.PROD.OUTLOOK.COM (2603:10a6:208:190::32) To DBBPR04MB7497.eurprd04.prod.outlook.com (2603:10a6:10:204::9) 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: DBBPR04MB7497:EE_|PA4PR04MB7695:EE_ X-MS-Office365-Filtering-Correlation-Id: 1de494ab-eb38-4ca9-5c8d-08de26d57e20 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|10070799003|366016|7416014|376014|52116014|19092799006|7053199007; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?i0kunheWziooAN46wQhFHcN4QJjrBJakUkPZhGE6kE72psBL6fZg72bih88K?= =?us-ascii?Q?cENLka0SjgOwwVJlMZEsi7ZPBYpbJzsggoDlbIme0n1XzRJP7ki1fqBpYTvx?= =?us-ascii?Q?vssh9PsL+9l3zoABIK5JvnLURLEAZxjlOoqix4iZQwHPZqcP36ogChtpN1uk?= =?us-ascii?Q?XjLp7Bnot/VGAghIJas4O8kc1Lrbb8fPpzImvgTWWnT3PAeEJj3wT68pNpQA?= =?us-ascii?Q?HGUQlJZ+vfS5V4M/HqdBTzDmoipi3gA+uklgIJRqH5g8Q5ZRrLEWzbN4GPiN?= =?us-ascii?Q?TMpfm0+24W3bvrqvmTzcN3LIGRzZ8J4F9aypcslmxYVXF7prMji6KtN1a6hG?= =?us-ascii?Q?Ubh5EKTZPFoLFNfHMt2IpPLiTYPHkGWVnIC/SMctcYT8cDY8pkKLJGlSXXWv?= =?us-ascii?Q?b41hSDajQBRHQ2F4htpKNQUWT2BfZnI2jVmVkJcwVkvFsP3ffQanj5l9CNXh?= =?us-ascii?Q?MoYfQkYz7AKAsGTIrSUSGlGcbErkeiNERBCtvu+GtdlEU4m5oaG4r16aVdnQ?= =?us-ascii?Q?D4l79YCYN88UArlOPEJ6X+H1XWbJOmenuZIuSK3Xw0cXItYyFqx0yByqf+lE?= =?us-ascii?Q?mRuonrQNx7jeZI5iEsuD4oQKTwVgyjbLs2VDxYLnUZtN1JER9JGiaYrktWzT?= =?us-ascii?Q?atLbmGUymC135Udp5TIBWjTFthZLzzrOUuR5ZlOx4xFKSKgxGi0gMYQKEEBU?= =?us-ascii?Q?TYIMiPpuanq3AjVePw8L5L9qBuNFNifFa/d06noYowm7HIqXZcXXZ1JuDJIL?= =?us-ascii?Q?Q3O79HgpSaCOy1LtUw+izWKIlRIJQiyNfeX+HDRHzt3HMIqlupqBV88WIoDs?= =?us-ascii?Q?rEiGlsEBlnhgBgybdvqO7ljY8nL0IlzGPiDM4U4JoJRsi6UTBdSXn9gd83r4?= =?us-ascii?Q?UMzw0mGoqzN2VVMOi1/QyZbuWGO1LG8fv3eTULYTgZ5dXlZfi0anepeLsG0q?= =?us-ascii?Q?RlngikyvwtNXknMHtgR1NdQCZ7Ho7FYoUjbYFrvT+T6FyECzViFbiKE8KgqO?= =?us-ascii?Q?NmOMST6iFwOvV1ytrnFmqvVlDI++DHuL/6eGGoez2LQI3pRS7jSJ8dLe+zGp?= =?us-ascii?Q?ZVskFU7FkXBT8QRmSm9LZwvrr03ea/CP4tWbPA9MXT4ljlWaaWdzttChaUNq?= =?us-ascii?Q?rAHlY/tqlglsh5pypwtYAIquEu5zamFihZwLIuIfqmLxj/A5BkUFDfrGwRKW?= =?us-ascii?Q?Q5rhfvT6IZAQ/ktwz1MBqqnLjYci9VspIaDucsHQ+VSsszd1IfmdntgN3J3u?= =?us-ascii?Q?hIhYs3FHbIJn5Wc1FGIzP4RM1RpSP6Y7pEBuVan6x32qdml6kEtlxGyVQ6rn?= =?us-ascii?Q?phkkWDmjzKUdCLezlRtJSTFGKgembLqWw664wnx+i/MlSBeHVPcRfO/H/RJ6?= =?us-ascii?Q?5edZ7oKxcquzW+O8Xbyn1TMaGTRbYzr/+jYPmxAFYlv7DjaDsG9P6tUI6js9?= =?us-ascii?Q?SGC5MjyE4EmCzqM2K5SO0ejLdSnm1sRk?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DBBPR04MB7497.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(10070799003)(366016)(7416014)(376014)(52116014)(19092799006)(7053199007);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?hrTet+83dXhRLNqfClDlPxE6lBuNDTF+aAgt/Wb9wQhpCE3jFuWo1RGxhDbf?= =?us-ascii?Q?6h4MR6w+XjT3Rr976YgOnEbeqjgfp6XKSPQV5OCrMl97MU5ahfMu7DeE4zGG?= =?us-ascii?Q?mAAjJHKczpjZbRL3cHBh0h7SCTfQDLSIq3uokF6qqueloPj7V8aVbeXNGqFX?= =?us-ascii?Q?ms0UXq3AsBqa47g6R1rSX3xLgRdMUhqReSuH9vAMrdxYXN0MXs4+gPhn+7jo?= =?us-ascii?Q?jsBPB5rU5AlaFovZxgZMVOHXCVMHj4T9CoCkE7XT5FyX2RB3PS43O58AKZEG?= =?us-ascii?Q?ifCha0hw0s+wSucaA6RIosQmJhC5tIPEnOOy3nSr23dpOjjyQlIg3P9p6qol?= =?us-ascii?Q?JWdI6KZTwLgmDTdlAPud0Nptb/wdQxaFKOzWHgdeoEoqgSLQkhiny07i73VN?= =?us-ascii?Q?rvbT5usFVEKa3JmtC/+P8nKml9/SYyosgcjKZy98bX+69qQfCNyyyyw2Vapv?= =?us-ascii?Q?YNrIu3HB6RV2kp8iNpFG/6qxA26MtQn5ihn6r+6yOJF2MSHHQ2/yVXR9kC1e?= =?us-ascii?Q?uClG8YhkTL12BRHZViGzx065hfP3eMnFC7+jPg0cM2QIF/AD/yvvAg+L0td5?= =?us-ascii?Q?t82Trpx/KpckFP4fphhW5d+Pb8OHdLXJbXj9TO3mCXLpNwSKwmQXYiisAT/0?= =?us-ascii?Q?OrnQg2VCV5zk8C/o00kvDot2nv6hT6o1ei2pe+X1d0I5z+gN6o4u01yefAI1?= =?us-ascii?Q?YsA1LmapFbb8PzLye7mr5kiJRIUqDGb5kD75FHH26bo426F5rJNrRs4ipUoq?= =?us-ascii?Q?18mFVrqMgL4Z5Bt3flrwoKcu77itutwGRFyGvI16JV4SCaEJRCHHXFdnPL3y?= =?us-ascii?Q?KgV/t9FJvW7zI8xrZfAzWM8xATdUDFfrsRloiOYwAvvU2klbD0LJ3z6q7Dbp?= =?us-ascii?Q?ZrljKIm3JK9N3AaBHjM7U0SoO67AiXW8rXop1uQCUQUjlaCOqnGVlOcCwTNz?= =?us-ascii?Q?7LcOXW9qGkY1PBVgIu9XVfrp8CZRsqDWSi4jjunFbWD7MvsgIP7D2hkFpb0F?= =?us-ascii?Q?Jyi75OO9w0NlBs6WgX5kBFxC6Q3CfuJgwr/WQl0C/GnqsWvBNWrjXf6gx3yb?= =?us-ascii?Q?Gvi9oZY41jkRl4T0793W3rynV6Mrfx0o0KDnzhw6kJTzO0F5wk0Re+s7sAy+?= =?us-ascii?Q?OSaDzt4pDmkpG0PBWiuvUM0cvxZqvkXdC0VH2AU9CES+I8OsaM3to4ia8MU+?= =?us-ascii?Q?dTqKHvhbzh3zkb6nyuf7gmZqTbhGpLgiT0O0R/fyV5aJzbx6fZTBxlrkLzmd?= =?us-ascii?Q?m8WS92/pcd9Jy1YGGvtrieC8NSRw7dR8vRFCbPsL7wAlUu0dIzMhONZNaY0r?= =?us-ascii?Q?9jJe/C1SgopRll7zsCt2fhqan4PD/JJlBhN2RuAp5Que0XSSInBkE3zhBQ6+?= =?us-ascii?Q?sTADZS53HUnoiqMWb430lazyW2hcotgTy3IId12UcjxzQrhvIulwNbJ9wyMW?= =?us-ascii?Q?PhhORiSGA+uFaNZ7BT4ZAsawVEqAelLVnJGY0I+p1qyaOmI13r2o0M8dgRmk?= =?us-ascii?Q?q19At4Lu6+sw6kNBDHISrjO1I9rAyoYKlbyT0Tks7yOEJb5AaNCGBZKLSgo3?= =?us-ascii?Q?6vNkxGovj6H2C5XB9Ow3El1whc4dxi9kaMH+uxDGGQyD0ixxxEeMBmPX4b5Q?= =?us-ascii?Q?Rc8WDUMmM6qCvKagJpLsMPk=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1de494ab-eb38-4ca9-5c8d-08de26d57e20 X-MS-Exchange-CrossTenant-AuthSource: DBBPR04MB7497.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Nov 2025 19:05:52.0545 (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: Guz/OXxqLOS7VHJuIKEh3Ny4IUMvh6F8pDvd5jKC/7DWhsrd+0wV0P524YiuNNS2jtw23uAxyuafyAAedfVcZg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA4PR04MB7695 Content-Type: text/plain; charset="utf-8" This is the standalone variant of drivers/net/dsa/sja1105/sja1105_mdio.c. Same kind of differences between this driver and the embedded DSA one apply: regmap is being used for register access, and addresses are multiplied by 4 with regmap. In fact this is so generic that there is nothing NXP SJA1110 specific about it at all, and just instantiates mdio-regmap. I decided to name it mdio-regmap-simple.c in the style of drivers/mfd/simple-mfd-i2c.c which has support for various vendor compatible strings. Cc: Maxime Chevallier Signed-off-by: Vladimir Oltean --- MAINTAINERS | 1 + drivers/net/mdio/Kconfig | 14 +++-- drivers/net/mdio/Makefile | 1 + drivers/net/mdio/mdio-regmap-simple.c | 77 +++++++++++++++++++++++++++ 4 files changed, 90 insertions(+), 3 deletions(-) create mode 100644 drivers/net/mdio/mdio-regmap-simple.c diff --git a/MAINTAINERS b/MAINTAINERS index c41b9d86c144..81c3dba6acd0 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -15473,6 +15473,7 @@ M: Maxime Chevallier L: netdev@vger.kernel.org S: Maintained F: drivers/net/mdio/mdio-regmap.c +F: drivers/net/mdio/mdio-regmap-simple.c F: include/linux/mdio/mdio-regmap.h =20 MEASUREMENT COMPUTING CIO-DAC IIO DRIVER diff --git a/drivers/net/mdio/Kconfig b/drivers/net/mdio/Kconfig index 9819d1dc18de..2f86a438a2a7 100644 --- a/drivers/net/mdio/Kconfig +++ b/drivers/net/mdio/Kconfig @@ -179,14 +179,22 @@ config MDIO_REALTEK_RTL9300 config MDIO_REGMAP tristate help - This driver allows using MDIO devices that are not sitting on a - regular MDIO bus, but still exposes the standard 802.3 register + This support module allows using MDIO devices that are not sitting on + a regular MDIO bus, but still exposes the standard 802.3 register layout. It's regmap-based so that it can be used on integrated, memory-mapped PHYs, SPI PHYs and so on. A new virtual MDIO bus is created, and its read/write operations are mapped to the underlying - regmap. Users willing to use this driver must explicitly select + regmap. Users willing to use this module must explicitly select REGMAP. =20 +config MDIO_REGMAP_SIMPLE + tristate + help + Generic platform driver for MDIO buses with a linear address space + that can be directly accessed using the MDIO_REGMAP support code and + need no special handling. The regmap is provided by the parent + device. + config MDIO_THUNDER tristate "ThunderX SOCs MDIO buses" depends on 64BIT diff --git a/drivers/net/mdio/Makefile b/drivers/net/mdio/Makefile index 9abf20d1b030..95f201b73a7d 100644 --- a/drivers/net/mdio/Makefile +++ b/drivers/net/mdio/Makefile @@ -22,6 +22,7 @@ obj-$(CONFIG_MDIO_MVUSB) +=3D mdio-mvusb.o obj-$(CONFIG_MDIO_OCTEON) +=3D mdio-octeon.o obj-$(CONFIG_MDIO_REALTEK_RTL9300) +=3D mdio-realtek-rtl9300.o obj-$(CONFIG_MDIO_REGMAP) +=3D mdio-regmap.o +obj-$(CONFIG_MDIO_REGMAP_SIMPLE) +=3D mdio-regmap-simple.o obj-$(CONFIG_MDIO_SJA1110_CBT1) +=3D mdio-sja1110-cbt1.o obj-$(CONFIG_MDIO_SUN4I) +=3D mdio-sun4i.o obj-$(CONFIG_MDIO_THUNDER) +=3D mdio-thunder.o diff --git a/drivers/net/mdio/mdio-regmap-simple.c b/drivers/net/mdio/mdio-= regmap-simple.c new file mode 100644 index 000000000000..6ac390ec759b --- /dev/null +++ b/drivers/net/mdio/mdio-regmap-simple.c @@ -0,0 +1,77 @@ +// SPDX-License-Identifier: GPL-2.0 +/* Copyright 2025 NXP + * + * Generic MDIO bus driver for simple regmap-based MDIO devices + * + * This driver creates MDIO buses for devices that expose their internal + * PHYs or PCS through a regmap interface. It's intended to be a simple, + * generic driver similar to simple-mfd-i2c.c. + */ +#include +#include +#include +#include +#include +#include + +struct mdio_regmap_simple_data { + u8 valid_addr; + bool autoscan; +}; + +static const struct mdio_regmap_simple_data nxp_sja1110_base_tx =3D { + .valid_addr =3D 0, + .autoscan =3D false, +}; + +static int mdio_regmap_simple_probe(struct platform_device *pdev) +{ + const struct mdio_regmap_simple_data *data; + struct mdio_regmap_config config =3D {}; + struct device *dev =3D &pdev->dev; + struct regmap *regmap; + struct mii_bus *bus; + + if (!dev->of_node || !dev->parent) + return -ENODEV; + + regmap =3D dev_get_regmap(dev->parent, NULL); + if (!regmap) + return -ENODEV; + + data =3D device_get_match_data(dev); + + config.regmap =3D regmap; + config.parent =3D dev; + config.name =3D dev_name(dev); + config.resource =3D platform_get_resource(pdev, IORESOURCE_REG, 0); + if (data) { + config.valid_addr =3D data->valid_addr; + config.autoscan =3D data->autoscan; + } + + return PTR_ERR_OR_ZERO(devm_mdio_regmap_register(dev, &config)); +} + +static const struct of_device_id mdio_regmap_simple_match[] =3D { + { + .compatible =3D "nxp,sja1110-base-tx-mdio", + .data =3D &nxp_sja1110_base_tx, + }, + {} +}; +MODULE_DEVICE_TABLE(of, mdio_regmap_simple_match); + +static struct platform_driver mdio_regmap_simple_driver =3D { + .probe =3D mdio_regmap_simple_probe, + .driver =3D { + .name =3D "mdio-regmap-simple", + .of_match_table =3D mdio_regmap_simple_match, + }, +}; + +module_platform_driver(mdio_regmap_simple_driver); + +MODULE_DESCRIPTION("Generic MDIO bus driver for simple regmap-based device= s"); +MODULE_AUTHOR("Vladimir Oltean "); +MODULE_LICENSE("GPL"); --=20 2.34.1 From nobody Tue Dec 2 02:32:17 2025 Received: from OSPPR02CU001.outbound.protection.outlook.com (mail-norwayeastazon11013015.outbound.protection.outlook.com [40.107.159.15]) (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 DDBD22E9EA4; Tue, 18 Nov 2025 19:06:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.159.15 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763492764; cv=fail; b=d5rJTktNrrnIEqsB7ZM9V3y9sWJ/E4axLGBJSRDmHQg4wjmrgYooUoTt8MrTyaVkGmjyQTDFXW1PDD+th5VEzdyhR+KlS7uSOBHI2XG7rKcc5chawET5hTuf8a0qWTCQjAG38j1kHcWY9NtGokPsA5tTWmBKuE4Ih1O+gimQlFA= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763492764; c=relaxed/simple; bh=TTKzGoiP5Fs3XlRHMEH601GzhezBP7KdmJHWS+vNh+s=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=kJbgRqoiv+TzQJXfm5O5lU/ui1T19E6bG0Sfdp+OBueXGwu+c7FarEMcPjNUfXXOChT5RMnKEv8Qz9ppFOLCepxfvIpqz9dFNC/PVcbyBgN0a4iwqRsfq7pxBsoqSldgQT3p+8O570Wnbcj5ddUao5gTBZc0+VdUCnpVPNK9YlI= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=nHRDlWpK; arc=fail smtp.client-ip=40.107.159.15 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="nHRDlWpK" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=uN47eEAlRnBvfR4mrQhe8vI0/MCJokRdJb2xwSnEPP+ALp/nQC6Ct/W2ffR9gQimEeg7KvfHaapjUMebLnc7ScfDItlYa8iZXmfPO+2Zf6U4LECUHONMpKM6+J+i3VXM2WG1enuRAwdHAL90mJLPSbPA8V4wUnzcBOF6xNmQh8CWyPo4C+itxWTyNYmXmIf8AmPITfrB+zoWf8Cvbnj3fTIEklPsFhJ0xp0W1ubJ5Gp9qJA/hrT6M9nog8G9b4zS1AVO4cpZQI7ohky+XVwBvAv8NK8RQlKXG7iCpleUNZD2Vu8VBI4kCLwOX2VCCmxs6b8+sxFkEWSUJu62cVeumg== 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=T2Y9gP1y3C0M+VxsOU50jFyJOi0XVdWxuejgWiIXKCE=; b=kis2LiTqU/KJkjdLFGG5qN/2Tq0Ge/MhCW2MDMn8adfPkDIuv4cboTCX8//s6uC5k3gIQjXPPtsqVY6HZDl6QbgvQwj1Su3A5oZzobJc3vVaB+7rkxpEja1zZabjMKncuaGTbQqbYeZlbdaOCCH71MjWVkXL87KowDve0HUxjoRfUybuS8PP8ewXYrQvnRT0ZPkO3caqLmUaJk1TeO8RoZmnkRndpCnXRe6u6UeN5xt/U1aXWrk8bLrrAVGYwHGEcGxnJU2aA/RG1YPWsKPuH+N1GI3R5n4FA0K1KTwU4fHc2XKjURRgtbyaAheM94caF1YZJvKqitipe3Z02YR1Jw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=T2Y9gP1y3C0M+VxsOU50jFyJOi0XVdWxuejgWiIXKCE=; b=nHRDlWpKNhlrihC6exyXLMY7aYdzWNSBGOZQmZMfDjcpR2KqKwrVMQ875I2rNzjiQF4bOwidSgE91zn1iA+vkf34suBFtJniDiQU0V6enucKGjf5DEaeH+QgA5BcF39vJzZMCcFGErCwZ5XY70E7/jbj2Gk19pBkGR7P8OKPYQWcjnzlGhrliPITL5hFdxUsFpSBK0gNHsoxA3D6YaIwdyl15TkQ41nHTHMDC2HUWsNr60hqtzXGhq4jc05NqRf5GZbIjAdrDt2M/1irvIzYBtvRlZDL8WVWng2FsQrogZsiF6SNbYrTAzncsseXyAAuazK5thzaAhtYTjVBB+00SQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from DBBPR04MB7497.eurprd04.prod.outlook.com (2603:10a6:10:204::9) by PA4PR04MB7695.eurprd04.prod.outlook.com (2603:10a6:102:e3::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9343.10; Tue, 18 Nov 2025 19:05:53 +0000 Received: from DBBPR04MB7497.eurprd04.prod.outlook.com ([fe80::503f:b388:6d07:adff]) by DBBPR04MB7497.eurprd04.prod.outlook.com ([fe80::503f:b388:6d07:adff%4]) with mapi id 15.20.9343.009; Tue, 18 Nov 2025 19:05:53 +0000 From: Vladimir Oltean To: netdev@vger.kernel.org Cc: Andrew Lunn , Heiner Kallweit , Russell King , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , linux-kernel@vger.kernel.org Subject: [PATCH net-next 05/15] net: dsa: sja1105: prepare regmap for passing to child devices Date: Tue, 18 Nov 2025 21:05:20 +0200 Message-Id: <20251118190530.580267-6-vladimir.oltean@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20251118190530.580267-1-vladimir.oltean@nxp.com> References: <20251118190530.580267-1-vladimir.oltean@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM0P190CA0022.EURP190.PROD.OUTLOOK.COM (2603:10a6:208:190::32) To DBBPR04MB7497.eurprd04.prod.outlook.com (2603:10a6:10:204::9) 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: DBBPR04MB7497:EE_|PA4PR04MB7695:EE_ X-MS-Office365-Filtering-Correlation-Id: 0ff39b17-ef7d-4899-22dc-08de26d57ec2 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|10070799003|366016|376014|52116014|19092799006; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?ODn8qMYwhSD+XfHpyofMx2GzfK0kH3d+3jytrVUqxJkPBUhpapYXNSfArOjK?= =?us-ascii?Q?rYMggSEkkekLjfIPw+Z+KKS5EZDW99f+ARqSEfUXki7r2hnr2eApbTN7cTY9?= =?us-ascii?Q?+99u40GmFHwfCGuoOyMyay3wREljkS1G1RKOxed68g/6QmU1+w/bOEQpcOIv?= =?us-ascii?Q?tXQW8y9lahNmAc65iTyJlA9N+ddCniawg5UumwpO7LWtY+v40sHJm12YjBo3?= =?us-ascii?Q?HIjT5ldgR/3Vl6Fdj5qmYWtDMWd6TXKyTh96iF80uufJML6AbgMYhOTSyrnc?= =?us-ascii?Q?Cd2L7B0aXjBTlLfEkJ+B5BsXEMCyM96iLV9aQGEOqjiynQLe/Fj7uk0+cOk3?= =?us-ascii?Q?G/JflAkIq3vYxFDQfozDhgsguMisO12CBwkTVX7YxYTGDYJY8H7OV2D9TXko?= =?us-ascii?Q?pUWxRuSRlfW4hiXLvfY9sw1xdxDUe2bxtUzb6D1ZbBiffkXG8lAhdXdC5YyY?= =?us-ascii?Q?bpGKeeN0YBcvy85w+TJ29tSN+dJeEI52CjCaCAX9HEUOSmARHfg3cl9qL4DT?= =?us-ascii?Q?UQxgz85ItqvgcS/00s0ahS7ovCeIAybGl3sAJry5vmoRnB3IUYhe5Jk5bFJt?= =?us-ascii?Q?FEHItT2QqVKy5+tIXA4wn/GiX2Q6s9lRFK+aX/6c0BP8vw5XnenIrRsz4ukq?= =?us-ascii?Q?+8SB3WSFf4LsuktEPY+VaWI0iUyczdqZjNZf05ad/syBzdpdwwNhjizrQAap?= =?us-ascii?Q?lQHMoQb6ORl+SJesXqMDSLsfkKX1XWpxVLXX7YthgEdKXazpcBe9X2DGpvZS?= =?us-ascii?Q?tY33qLsmDH9r7p7PqSqmpzIVKIaM+/xMqpjE/9wq53x+gmrzL6UIoindgwW9?= =?us-ascii?Q?AIQPRHfTmqmS6aWfW2MwuWiky1hXyfacGzzOK8ptBTkIjaIYZiZt5UETqJjE?= =?us-ascii?Q?KYwuENGzZFJXIjgGUX9eOqd9i8UBX/vZCh3FO/Y0JWZln0hSr4w0/vAK5kkQ?= =?us-ascii?Q?hv7K7sCyNRHEd181FRdojd+Ht42/X+RHY1CLG9D6WL6NbtPTfJZeXMRN/U5j?= =?us-ascii?Q?PWPF1sGVT+VNby43+cprvHYDx4g8wdTonxZAsQ448rElrBQgunWfqoGfIprr?= =?us-ascii?Q?EUlsQJDH7JMM14r3UXwfwmDnvzyqk9Ot+bbaPxCeNm+c+0Umf/rto3WV09pn?= =?us-ascii?Q?XNcLPLpXcz2C0cbWsC/S8WPk5gsOdKVMT3I/dGKCgB81s9lMFu83d7o1UwtJ?= =?us-ascii?Q?D9CXbdUxLOG5lkCRJjDu8aDh8ZSphjVLeQDnDw0aOxhGBSo7SiRgUmXydUni?= =?us-ascii?Q?5JL4aqpizyOYxeno5eymOTntDkG7sU8tR/DyNPZJC6bo/EpwFVbQj2U+blg3?= =?us-ascii?Q?iT1qL89l8st2L+P1p4eDZfYbM+jbpqmo5ifkR+ZPWypBZCLjrk7AW2bmfbqd?= =?us-ascii?Q?f357sgtiuVLpPG54c5IazlpB1gysybJpSOEz8LvlRDFl5W5pGXo+JiHFClWM?= =?us-ascii?Q?5HozqJ9kWn4YXbt/DS68XaSSCMyEJeUk?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DBBPR04MB7497.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(10070799003)(366016)(376014)(52116014)(19092799006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?Sg8RYU+zIUx1sKeRbDtfLt5DFlq+b67RZoCsHT3/bO6Di8HfZiDaQjbAzZ6y?= =?us-ascii?Q?lHH0oRZtIyV/QQfBnAhtzlh9+nMzMAPT0+jo2q4Nm83HWwYvKoD9JBAWrkFv?= =?us-ascii?Q?3GINCFDXXIdKFZlVylTMSrmpCVzP6/68ahBSpdLZOcAaSQ/IINDRL2zgiGk9?= =?us-ascii?Q?NjFX26JAFnqQsoGOhfD//CHU1fxeB3lf7PHi9CWnJgSo0gAwNPudRa0qWtFG?= =?us-ascii?Q?ocsu5eizk6J7HuIohZC8hn0NJYnpy44YlGFtlm2A67T250txEzVon26899FC?= =?us-ascii?Q?ZHWyWGWS9/aAVCXEA7+z4OjvSPQ6gttle1LBfpE1jFo1SdZV2nNic65rhIxM?= =?us-ascii?Q?rhldylPUO74X84+uxeNXkDe1x6/x+wOrlrFwAyIbbpbDMWoYgY8V2XQr5kEL?= =?us-ascii?Q?XQE8dAwxM3gecmcm/zFbbrSe7lEDBY11PXWvKSdjhD/4ICqYEQVL4si6ne6z?= =?us-ascii?Q?I0QjcXSVVvPhthjRYVU5UwdCFIQFQ+1frjUjpryh0NKQvCJftKqAWqePx+/b?= =?us-ascii?Q?4ltWv8z+rThPGNu5aWgXUUKBjWLP+CgsmIpRH0IwzXYrgwJqmBIAvsYKgOyE?= =?us-ascii?Q?cWX9i2OOEcew6inY9RmguMLtSmywJghH+IvlRqwLco4jCXTiQRGe59DAASqE?= =?us-ascii?Q?2NyoeFHDv/ZyIX5xdqLe2rwIZeFFd7yW5Sa70vLwFTB1r909pf6SiUZLeaA6?= =?us-ascii?Q?znMEsng5rWVF9xYzd3/Z+i1N/T4OdnWzevVVXVipf1Qmm4FhqVHiU+4zFREL?= =?us-ascii?Q?clC8mUs8C7Cmr0CErmT6mDqMYrC6aGTizUoGnjSnSidYQYRYXePQFjc3mh1q?= =?us-ascii?Q?G/9IRrSOp4pNIc5weN2Ja0Hk+weDdAMXhYJ7AFNNThh9uI33eYvNL9VHyu1O?= =?us-ascii?Q?hMyCDSiFjRcUDW3tfzI1wcy5K+6xITnG0ALtsoUt5lSg6TSRtQnCdaRCJuZu?= =?us-ascii?Q?khbkogSiIeoronDeykxQ4Dxea4Ap/wh/wA7gkc+3O+NxSrpckahdVS82iisz?= =?us-ascii?Q?KHNHDF8P7nrWMbL20wGTLHt+Aag2aXaTJo8iIodNkwM8aY/OmW6fAyzykwVm?= =?us-ascii?Q?WEKYxPN3a2loJ8CglaJ459y209HppOb1q270eCkUT4VQ4uRgwdZcWzyFECJu?= =?us-ascii?Q?RqxdMrpiBTFoUUt3y0G3q+2Y8rvj6h+w7QvfhtFl5HfcPMzHRh/iZYMMBOTl?= =?us-ascii?Q?/GxchmXBf95yF8MQO+uMQEZVCV0IxuVzYLemBraNXcJz/gGOTnk6OrMG3qlR?= =?us-ascii?Q?9FGlin7jD03iB23uvij9GlZgYj9bMiclPlV4RlyX3mCmlLobxjcmPjoWvSdm?= =?us-ascii?Q?5sohoqIt79WlWgFNDZgZtT/Y36q53nUODAIRQUNadfUqyKsV25td/gGw+dOm?= =?us-ascii?Q?Pp12Zsww84yst3x8qqioppSrkWoRrW8bAvBAxE1HDNwxrvVXnNsHHMhQKzMr?= =?us-ascii?Q?btvyHOWm5MgUPe5ejHaXUt8OYrY6cLinb/iny6O7iWFRgzf+TW1G7N4yKEte?= =?us-ascii?Q?5xCnxEMYjm3iwQb7ef7pYxxYfZKxQhc1DLDMDj/UrB3jTZmhxfEgvPS+barJ?= =?us-ascii?Q?u19Bv9dFtxr8uWxeTlpr7/64W8HzUFJ852G6PVnWvMFh/Qo/HrrEf5+0D4/H?= =?us-ascii?Q?c/F0XN+8CQJQpv8v0ifxV18=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0ff39b17-ef7d-4899-22dc-08de26d57ec2 X-MS-Exchange-CrossTenant-AuthSource: DBBPR04MB7497.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Nov 2025 19:05:53.0936 (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: tC/xSACRnc5XsS3Gtx5Ea0loq/+YkONG0MAlefVTcutPz8XSolvHDot2fOM04dIR8oD4Xa3Ol3mfSICj41fRrA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA4PR04MB7695 Content-Type: text/plain; charset="utf-8" Prepare a single regmap covering the entire SPI address space of the SJA1105 and SJA1110 switches which can be given to MDIO buses, XPCS, irqchip drivers etc. This regmap is zero-based, can access the entire switch address space, and child devices are supposed to access their respective memory region with the help of struct resource (IORESOURCE_REG, to be precise). Nothing is currently done with the regmap, it is just allocated and added to the device's devres list, so it doesn't need to be freed. Signed-off-by: Vladimir Oltean --- drivers/net/dsa/sja1105/sja1105.h | 4 ++ drivers/net/dsa/sja1105/sja1105_main.c | 6 +++ drivers/net/dsa/sja1105/sja1105_spi.c | 58 ++++++++++++++++++++++++++ 3 files changed, 68 insertions(+) diff --git a/drivers/net/dsa/sja1105/sja1105.h b/drivers/net/dsa/sja1105/sj= a1105.h index dceb96ae9c83..e952917b67b6 100644 --- a/drivers/net/dsa/sja1105/sja1105.h +++ b/drivers/net/dsa/sja1105/sja1105.h @@ -11,6 +11,8 @@ #include #include #include +#include + #include "sja1105_static_config.h" =20 #define SJA1105ET_FDB_BIN_SIZE 4 @@ -273,6 +275,7 @@ struct sja1105_private { u8 ts_id; /* Serializes access to the dynamic config interface */ struct mutex dynamic_config_lock; + struct regmap *regmap; struct devlink_region **regions; struct sja1105_cbs_entry *cbs; struct mii_bus *mdio_base_t1; @@ -338,6 +341,7 @@ int static_config_buf_prepare_for_upload(struct sja1105= _private *priv, int sja1105_static_config_upload(struct sja1105_private *priv); int sja1105_inhibit_tx(const struct sja1105_private *priv, unsigned long port_bitmap, bool tx_inhibited); +int sja1105_create_regmap(struct sja1105_private *priv); =20 extern const struct sja1105_info sja1105e_info; extern const struct sja1105_info sja1105t_info; diff --git a/drivers/net/dsa/sja1105/sja1105_main.c b/drivers/net/dsa/sja11= 05/sja1105_main.c index 9f62cc7e1bd1..622264c13fdb 100644 --- a/drivers/net/dsa/sja1105/sja1105_main.c +++ b/drivers/net/dsa/sja1105/sja1105_main.c @@ -3318,6 +3318,12 @@ static int sja1105_probe(struct spi_device *spi) =20 priv->info =3D of_device_get_match_data(dev); =20 + rc =3D sja1105_create_regmap(priv); + if (rc < 0) { + dev_err(dev, "Failed to create regmap: %pe\n", ERR_PTR(rc)); + return rc; + } + /* Detect hardware device */ rc =3D sja1105_check_device_id(priv); if (rc < 0) { diff --git a/drivers/net/dsa/sja1105/sja1105_spi.c b/drivers/net/dsa/sja110= 5/sja1105_spi.c index 834b5c1b4db0..cfc76af8a65b 100644 --- a/drivers/net/dsa/sja1105/sja1105_spi.c +++ b/drivers/net/dsa/sja1105/sja1105_spi.c @@ -408,6 +408,64 @@ int sja1105_static_config_upload(struct sja1105_privat= e *priv) return rc; } =20 +static int sja1105_regmap_bus_reg_read(void *ctx, unsigned int reg, + unsigned int *val) +{ + struct sja1105_private *priv =3D ctx; + u32 tmp; + int rc; + + rc =3D sja1105_xfer_u32(priv, SPI_READ, SJA1110_SPI_ADDR(reg), &tmp, + NULL); + if (rc) + return rc; + + *val =3D tmp; + + return 0; +} + +static int sja1105_regmap_bus_reg_write(void *ctx, unsigned int reg, + unsigned int val) +{ + struct sja1105_private *priv =3D ctx; + u32 tmp =3D val; + + return sja1105_xfer_u32(priv, SPI_WRITE, SJA1110_SPI_ADDR(reg), &tmp, + NULL); +} + +static struct regmap_bus sja1105_regmap_bus =3D { + .reg_read =3D sja1105_regmap_bus_reg_read, + .reg_write =3D sja1105_regmap_bus_reg_write, + .reg_format_endian_default =3D REGMAP_ENDIAN_NATIVE, + .val_format_endian_default =3D REGMAP_ENDIAN_NATIVE, +}; + +/* The primary purpose of this is to pass it to child devices, + * not to abstract SPI access for the main driver. + */ +int sja1105_create_regmap(struct sja1105_private *priv) +{ + struct device *dev =3D &priv->spidev->dev; + struct regmap_config regmap_config =3D { + .name =3D "switch", + .reg_bits =3D 32, + .val_bits =3D 32, + .reg_stride =3D 4, + }; + struct regmap *regmap; + + regmap =3D devm_regmap_init(dev, &sja1105_regmap_bus, priv, + ®map_config); + if (IS_ERR(regmap)) + return PTR_ERR(regmap); + + priv->regmap =3D regmap; + + return 0; +} + static const struct sja1105_regs sja1105et_regs =3D { .device_id =3D 0x0, .prod_id =3D 0x100BC3, --=20 2.34.1 From nobody Tue Dec 2 02:32:17 2025 Received: from PA4PR04CU001.outbound.protection.outlook.com (mail-francecentralazon11013035.outbound.protection.outlook.com [40.107.162.35]) (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 CF8F72F7ACB; Tue, 18 Nov 2025 19:06:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.162.35 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763492764; cv=fail; b=CJTRlfGQflXTFRQ4TWfdgYnWV+foI8oNaq0SJBE8JL6ag3oq3LGuJ6heuxRB+LJ0PZ79eUxR6X4iJZ+9T8tBPLpdC/TYMHn3cYfXwrrqgOULlgVoK7Xo08QEatj3OryAjJAmbUuUeKUW8y9+AFuO1TOtdHp6HFdA+y2HSBuaGyM= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763492764; c=relaxed/simple; bh=u9fkNn66G4TGtXp8W9cP84Ch0Or2WwBQEGOQ/wKYGHw=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=RpFdjFBrcOPG/gjBu3DirEBxU+2LgUmUGITSKn7Og31555uc6mKaMaYCbYLVke3Qby/IXOtUKQk/TBG4SWQrZG1nOTgRLIKHKBYrFbMNIAiktG6YE7XI46dI3qk77a5lM9SCjFFbMfEv8PJ+Ax9jBt2OgDeWdm6wNXDA4T8ahkM= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=ea4Ia+un; arc=fail smtp.client-ip=40.107.162.35 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="ea4Ia+un" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=bYa5KszfpsjQ3xbxRen0lPBXeEhdbBKFXitr6aYvunVKjExy8KEXcFNw97gbD5X9NvKfGAHbYqjFu2/ayRaoL19Lyn6Nd8ZcJXMg0w5HDHh2CwBxMaiEtoDYpB3giCbmGp62A5dBTLwSYehKrYJg5DTGEzXHJ9VvwUG2qeDemxyZKKlE4u2QbTbHerNoRxQw8ebzBwyjaFWW1BTwEj+wa4btVpsO/4UZwgSBB/MNr+zzpu0BK6IzlK0lOdX3mU628BycB0+tJcTcvS2tIJc14zzNKKRQQtqaGoyA2swy2CyTHWqug53O5AMjh8S4e0JgT0IRvfqQFzSmPLMlzjdYnQ== 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=9a5lSqa8GBsDbFz8sp3x49Kjk+tlNgiBy57EBHlm6qs=; b=aDP42t/a0iYYQtkVY94Kdui14YTbvwKg+hGaI8aWpOfDkt8m+8VtNPP0WknVMErfApL0p5Hbk+LYEcSB+4z7ytGF1UhdA5mUKG2WWnpt5e9zRMnaxuF1PO0+/vKR28MAkSFDWWaYlDo1pVGuhXSoDqoajnFnqgpc6VieaJmo3wQOjxAVqsyBDy8zKL7iCbFTb3xG4tcjb2tRhiE0QorOpg5SWY/WgGnenZVYoZTTXYGMVELPKi1b4jX5fMTOy7mrewMq2wmbbffm7m+05yzNQpe7eK3GcUW1PF46OZMlMMTB3aoatklI1miOJFYim56L+DHOp7w8cMBTs5vY0u+s5w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=9a5lSqa8GBsDbFz8sp3x49Kjk+tlNgiBy57EBHlm6qs=; b=ea4Ia+unHNKBohsZRs6DKQGOJEtnNWIWL708OFiU9I+wqJ+3cHvBP/VWx9Rp5vtvMJ4vKQRWjIzL7X6bPEN1vfOlXU3awQLFsWBKd9bN877Hapq6BjmPz9F8qAA6WU7keBGM6OLTOxge1vf+fHzrCsGojFbrc8OslgZcqlOByX/M5kRqYZ2ALKYxMxLGnqDSSsLbT0wRpNZh7X4d3+UKButSIwEzROWwojAQLSwgV5P2gG8nG0rqeakaUShwBVlH0oGcQecHEw7mKkFaSW2WU7XxfOVyptT6bgw0FwO4ifwTAnG/3gtBLZqyyZyWeDgRRdwJxZ1qSdRBNc4P+pqKtQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from DBBPR04MB7497.eurprd04.prod.outlook.com (2603:10a6:10:204::9) by PA4PR04MB7695.eurprd04.prod.outlook.com (2603:10a6:102:e3::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9343.10; Tue, 18 Nov 2025 19:05:54 +0000 Received: from DBBPR04MB7497.eurprd04.prod.outlook.com ([fe80::503f:b388:6d07:adff]) by DBBPR04MB7497.eurprd04.prod.outlook.com ([fe80::503f:b388:6d07:adff%4]) with mapi id 15.20.9343.009; Tue, 18 Nov 2025 19:05:54 +0000 From: Vladimir Oltean To: netdev@vger.kernel.org Cc: Andrew Lunn , Heiner Kallweit , Russell King , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , linux-kernel@vger.kernel.org Subject: [PATCH net-next 06/15] net: dsa: sja1105: include spi.h from sja1105.h Date: Tue, 18 Nov 2025 21:05:21 +0200 Message-Id: <20251118190530.580267-7-vladimir.oltean@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20251118190530.580267-1-vladimir.oltean@nxp.com> References: <20251118190530.580267-1-vladimir.oltean@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM0P190CA0022.EURP190.PROD.OUTLOOK.COM (2603:10a6:208:190::32) To DBBPR04MB7497.eurprd04.prod.outlook.com (2603:10a6:10:204::9) 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: DBBPR04MB7497:EE_|PA4PR04MB7695:EE_ X-MS-Office365-Filtering-Correlation-Id: 68b10b8c-4a23-4c69-ae91-08de26d57f67 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|10070799003|366016|376014|52116014|19092799006; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?ybBytcK6p4RiUYSDXzSXHR46PeKoKZt0C0iE0sToy0j+96aRlQt7AObUILtO?= =?us-ascii?Q?iwOU2B6Xb/ZLFVxWCFP9gWOp5tpLBJbau8K/pPI9r/6zWeNvDJw0qXWgMOp5?= =?us-ascii?Q?cWf01SP+PMweqUzkVxB3gvgX+OU2L90zwbo4QVoGq1grW0W9tdFA9hPz9TIE?= =?us-ascii?Q?z8P+BNMW04du+Q9qhtLZ4CLRt9btsm53ztLIfi51Em4aW9c97uTY9Hobpok/?= =?us-ascii?Q?xrBW/VKKes1qN3JKjPEW10lZDsR5O3TkzdKH8wGOCKAvvNMWMf9rboxZ7b4b?= =?us-ascii?Q?lp3tTS8f4tnXuLlIs2AZ4wt2bx0S6B+9dXeHdGLLZPBmnvKZ7Xi7x8GKMqnr?= =?us-ascii?Q?cLfnocqyes52FkIsjgAFp22LIetJMmwYDyXw7Y12/Pf9lMxPUS3N4LHsITnw?= =?us-ascii?Q?znElze5wcsdt0G0OTnPu1P0i82MlI6eJHyMpOeUScrF+rxarA2OxS00ucKc8?= =?us-ascii?Q?x+I5mmmhWZy1p9V2dBGOTTV3rY0VKJ8C/MQ8Jl/xEOjbZAzJWezJbt3rWONb?= =?us-ascii?Q?wepHoLHiwVinxD/v30KQJTGOYUKXNiUwT77C+/WJhpeS5WzEDVBdZ03BvepR?= =?us-ascii?Q?0p4KmmZ5dufCf518VhWhBcTHotii5Zk5MoI+B9FbtIULzWdm9pMrChDi/HcQ?= =?us-ascii?Q?LyxGYb62G+0lllKm/eKhiNZGLtFL9A0scXgGnYl1mGxPNQz9OsnUfmiF8w8v?= =?us-ascii?Q?XyNS8O/K9TMY13Ott/GQzEz8/8akRFK1VedNJZ5TEq3E7stTpQjSKnLGcKSF?= =?us-ascii?Q?vEF3jaq2XmFxk3xvdIyJP5UegwU+EFV0rE7mj6PQVBc3mr8czOlZVGBZGMgM?= =?us-ascii?Q?6DeW+8Zlt3x6Zih5spAxEHaVkigwY42OOPbCiqKuHpff5KDFRVzSh+wrZvDM?= =?us-ascii?Q?+0Gv/S8fQvxGsQj1mfxWM99PoCJ+Mk2LSwKvQHiMuduVRpSkTc7MnDFSAXmr?= =?us-ascii?Q?ODpZ0ebH+V0gstBbItreNgZRHG4/BgDxV4YIPcPc+xGS4yOZWY2GAgCATYr4?= =?us-ascii?Q?rvoKF/54q6Ug3MdNIrkFPIibK7g/lS+QjNNqhKRfuzLsBiQ/0DENCcvz1w15?= =?us-ascii?Q?XURZ6HGsWqQ6b+jPghtYcuaADQzfLZ4Z0o7UBhRwXN2X3Jj6ufbPcZ/HLd96?= =?us-ascii?Q?GMTRAtLXTQ1SYs8byqx+UoK/KemDRvps1m9HBwBj+iaJHxqVNbi3lTxnDPae?= =?us-ascii?Q?AlOUeWuYcZlP3ajSWRry+p11WR32at8OCPx9KNOZKu3kUgiyDflK6UTQ/rxm?= =?us-ascii?Q?SwH2I8fPhc3fl8E0dtWXYM05ZLgNMmW1csHRL5gpATJ+J5kPBKxzncPOcZ5D?= =?us-ascii?Q?P3p7+r2yoN/3uVgQcUdDc4Loe9KMLXqyAX+vrJ0x90lQ4MpGILVVZvYycozk?= =?us-ascii?Q?9Y3az3pSxXveer40T/Hy1QtSBO4W/F8O1qqUh8rcCFk1xTdpgnioapEBiR+5?= =?us-ascii?Q?GQe2mYaC3vZlom5O8R8IOqP2dA4UOCjU?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DBBPR04MB7497.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(10070799003)(366016)(376014)(52116014)(19092799006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?oQ0eijxVBQMEGP3UK3gd8MV182bHt6BEmzz9cjRO/w30YEiIkGg5C+ZvTexr?= =?us-ascii?Q?2JN+dBG0t7hhp6mYEFwwnkC0NHLlZOSj9sEyJnH+kBYYENhgdOHkvgaE5QeR?= =?us-ascii?Q?8Be7OjtzzUDcFbuK3tku9xbDbGWkvCj1K0k9+J4aQHN2hQjJszecIQUS+H59?= =?us-ascii?Q?rvPvJFJ0c+UGge9FoOHvwWNJYpjQPj8OwhWYXu1dqSeK8CgVqQ/F1jiMZENB?= =?us-ascii?Q?KcLvZqeFzDnuiGqV9X4iZy33WjchJR6w/srHLbipDMl3E7gb89YAYRg7nEtD?= =?us-ascii?Q?WqndEPES+UmzE23RVVvqj7x8l5QYgIbsY6Q5PeFAyHCgWx5U6OZ9DDLh1lMl?= =?us-ascii?Q?q3JIugW3M5DKeve587/jmW7K+DW2CHDJ1sSZAX9jJC5dnb5vc8qyLq7//8ld?= =?us-ascii?Q?FHcbnI82ok1ygyNl91+VeXoYbw7LNJ9f9PclgrroJ/1ipyFcdwlWolqzWQUq?= =?us-ascii?Q?VITmvROuZxtPpvwmlpG1gYghdsIO9w5CM5bXG3y2KB0ZaU+Z+TT/pLUFKYHG?= =?us-ascii?Q?yFt3WZANzgCQVQZCWh6lphTX+ZXAaaY4//7U3aQM9Om0thV3w9NTiEiL+R2t?= =?us-ascii?Q?w/M3UcI+vIEuXExBuWEZ0H9zGec36eGjrNR630T6oFCmVdz5JXqIC6GR8bXk?= =?us-ascii?Q?qaInng9DuAUC8xxC521wf2jlUNdwBjzK/3y1jSAw7MIWo1M9iA368QRbx5nL?= =?us-ascii?Q?hAyMHYDsMpo7HdmERZMWgVSX84A5lb+JbRNsHOTBKWx03x1t+vZaxNuKLs4p?= =?us-ascii?Q?3j1mwDX8u1SohMyi/qIIbKqjJ9RisU/HQNAEKjBNSXXzelVgWuo6b2HXTsdi?= =?us-ascii?Q?vcPhr3k3HAfQtUxzCjfiZnYVAEgVfKrzB+6CliPvOhuoad+pQWo1SdpYHvie?= =?us-ascii?Q?n58sXIjjHpUKqL9TxoFpjGtaLDJun2aIS9UVatJorY8S7RRE75dkhoH8XsNH?= =?us-ascii?Q?iuHsDZudFL3VnVEwGDSht1BSOWAGQLPZKWcrIfPe50ZLsZfsx3D+4BAI/wEM?= =?us-ascii?Q?sTBsRFyLPra2N5z5jEONbW7q/axro2Z88Dq5sjjcKoGZEvbDQk3TCjndZV1C?= =?us-ascii?Q?KZXPIth/wcNuNh7gW7NXgy9Bl+gx+/3iPmGQYfq9kEWqPDEPn2G4mBEWy5C6?= =?us-ascii?Q?UNIaLWzXe+Kfyy+MwTUEmIStfuNng7Z+EN7qAtsdD+qqKAie1WjlppGeOKmk?= =?us-ascii?Q?/QcyeQU1gdV7IHi+3P4+2XzBhy7x3ojTHcY+w5jMOUj5yQMQacbcC3/qHOE3?= =?us-ascii?Q?zjYRGaRLArArToo/oYqr0kLVcUdVgA/FsAU/ezLPk8r4X4Nv0hD9Bae6hOu0?= =?us-ascii?Q?Qz6tvN9rRoXjjl45qIb5BgyFT2E7yDDZKjUsmgXR07nzxQ8WP2irxqjf6tDo?= =?us-ascii?Q?farVnf6JXm+RlLkr/aRMcC6kKCshGoy0USeZLzJs2t3hHPMNqhbjebjaHkeg?= =?us-ascii?Q?6qN8IvZdf0YYXKIEobGi6lml8ztIWr5bIETk0y2lcCT414l/xUVzChnVGMbY?= =?us-ascii?Q?YeOjhPIfwM9V6P5wgDqek9eLtA+TjpP1LFhM1QTcZNuP3r3JPMyi2vMR1VT2?= =?us-ascii?Q?807OCZ0o7CKwZoE5mm7mjF1zi6ERQySPJTY/yruenDS3vtOR+8yIBrZGk6e4?= =?us-ascii?Q?qCwM5sG2D/qJzv0jMCl0Sco=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 68b10b8c-4a23-4c69-ae91-08de26d57f67 X-MS-Exchange-CrossTenant-AuthSource: DBBPR04MB7497.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Nov 2025 19:05:54.3298 (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: J6ThlW3h5sbcvJ5aL6TuJ1IMZRDvxyWergZDZJfqbpy1kybA/cMAGYmoZ+aaSFXFQVDPZ/kczAVFrPE4jymcxA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA4PR04MB7695 Content-Type: text/plain; charset="utf-8" We have a reference to struct spi_device, but users of sja1105.h cannot dereference it if they need to. One such example will come in the next change, where sja1105_mdio.c does not include , so it cannot dereference priv->spidev->dev. Signed-off-by: Vladimir Oltean --- drivers/net/dsa/sja1105/sja1105.h | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/net/dsa/sja1105/sja1105.h b/drivers/net/dsa/sja1105/sj= a1105.h index e952917b67b6..4fd6121bd07f 100644 --- a/drivers/net/dsa/sja1105/sja1105.h +++ b/drivers/net/dsa/sja1105/sja1105.h @@ -9,6 +9,7 @@ #include #include #include +#include #include #include #include --=20 2.34.1 From nobody Tue Dec 2 02:32:17 2025 Received: from OSPPR02CU001.outbound.protection.outlook.com (mail-norwayeastazon11013015.outbound.protection.outlook.com [40.107.159.15]) (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 7A3E6324B3D; Tue, 18 Nov 2025 19:06:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.159.15 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763492766; cv=fail; b=p1y8+JdzolbU0V852G347+e+r4ykKCH86YOtj1w4/toCcO6GXqb/n8Uj74OP6A7gX7VdbLc/ppxXK+k5Ngl9A20afuEj1YviiZx2jgS1/BvJTRaMHmoHZNW0j0LJJ1mc6yvy4+xJCT1Ibmo1MiA5fZmo4LdpgoWiSZoz98Ys1q8= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763492766; c=relaxed/simple; bh=4LDGRMSZkAgPN0ztwBUJaBL/JiGMuoEPPPwCWOQnrCo=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=O6laQ8OAy7QMoeeOFJPKK/uY608hwZr/Omd7WZqw+7k4S1HZewd52xq3AK2Sa9894GYFAiyNZD96xvzAgBbHabfglXcOkYy9WAUId8fTv3cJGUDIn0Wsdhc41Y6fXmceVZ/2yvJPP3K1a4/glJ+4zHGeii1kGK6P0ANUTT+UJKQ= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=UFnxKFIr; arc=fail smtp.client-ip=40.107.159.15 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="UFnxKFIr" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=F93nJATPsptHDLtqIIC2DiC7zbqKMPtVp/6w8/ToT0bzOaVZIZEPnrJNQAsHjpDFiOB2oOhRPHJsCCyLQAlK1TTsSDuUaD5v7H+lGTRbf0Ki4qCWRGhfrfvBfnAlLXw9HnbK0RR4n3GvkM2Mkp6TJRJkhUfQsfQQSbAR4GczFahwK0/jeeuw1NcQLUb1BHUQ1NqIQrbB05Ccvdd1kl96eP4L4oQTQoCUJtHl73TG7ZeYilHjBno/BBXEU58hZ1JWoavBDX9d3lQlD6HpfYkcNKxb05+W6Vgxn8SE8EHmbedmgfTx0GzuE7JlE7VE4uk9xSNBvhwZrSaWbpP9q6XTXQ== 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=WPRbP9SnyXA3j30lR4MCQtU/U2gZgUD1O74jrw3ChAU=; b=S6/xWbxRC/AXnns8+gK7oGUzHypIQ55U7tsrrUVVKwfdFqAdLGRWc0AVkb19H8cd2HSRYugW8W0ByI6DhbhS+dv17ZD7M3QCFTPu+M7JGWlM8A0HdnZ+ApSg9MTHr/LI88FtHTGqR4KjSynq9fvUGgLENAauBJ7DUdVYkreK+T5usN530u3u4HJYA0pv2sCODc+cvLWQcboPqibpGQd/bBX2qcsHysiRqkOXa5rqTtqWdhk0x2n53TJ0IIra+/XxH7jfq5WyvziH886zmd3nR3STQLdpCQE51baEgVxNa9Q8dne99Q/VAh2XyKe/LR9+xVxCJqn9+2jnExlZsSTtTg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=WPRbP9SnyXA3j30lR4MCQtU/U2gZgUD1O74jrw3ChAU=; b=UFnxKFIrZPKfnebdkIDzjpB4miTzzF/BRS9NLln+PvWrA4/cLgMN5aGHBGxLBqWWSzznVhYq4V08Un3G/Nqpi9VO1tFBDGfSIjkSxiN0y0lazausoM7SwlYKsdtGSipXuS8crYy+Ar/MdfJJM3XcNJHOrnKo2ipQt/FcfNYE9RuX5eTtdfgNCp1oTAnFsFLx22MUnbono5mtrkNelo/ZH0Qg4aRnBlklc02DPekEuvn3wrmSgt3M5od+xW6wHqgYlrcrogbUq4HitW1a6XPaUisnILO0fBInNeyOPX39gfMVaeYHJsc6mb6QaPWppS25iy/DLSrapiBoEDoBZ0TtdQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from DBBPR04MB7497.eurprd04.prod.outlook.com (2603:10a6:10:204::9) by PA4PR04MB7695.eurprd04.prod.outlook.com (2603:10a6:102:e3::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9343.10; Tue, 18 Nov 2025 19:05:55 +0000 Received: from DBBPR04MB7497.eurprd04.prod.outlook.com ([fe80::503f:b388:6d07:adff]) by DBBPR04MB7497.eurprd04.prod.outlook.com ([fe80::503f:b388:6d07:adff%4]) with mapi id 15.20.9343.009; Tue, 18 Nov 2025 19:05:55 +0000 From: Vladimir Oltean To: netdev@vger.kernel.org Cc: Andrew Lunn , Heiner Kallweit , Russell King , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , linux-kernel@vger.kernel.org, Lee Jones Subject: [PATCH net-next 07/15] mfd: core: add ability for cells to probe on a custom parent OF node Date: Tue, 18 Nov 2025 21:05:22 +0200 Message-Id: <20251118190530.580267-8-vladimir.oltean@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20251118190530.580267-1-vladimir.oltean@nxp.com> References: <20251118190530.580267-1-vladimir.oltean@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM0P190CA0022.EURP190.PROD.OUTLOOK.COM (2603:10a6:208:190::32) To DBBPR04MB7497.eurprd04.prod.outlook.com (2603:10a6:10:204::9) 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: DBBPR04MB7497:EE_|PA4PR04MB7695:EE_ X-MS-Office365-Filtering-Correlation-Id: 9a7a4bb3-eb77-4824-58be-08de26d58026 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|10070799003|366016|7416014|376014|52116014|19092799006; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?MaWOqz8u0JnXzcdDQHadouWdTXLburLatwjxkFFQ3AmQrUIfkUj7AIwMpPuG?= =?us-ascii?Q?Dn770fgN2JpJoiUDacbxRmhjiFQpAoZtdpH5EK9arnu5tBc7QszeMghXlxFE?= =?us-ascii?Q?9wHX1Ivwmhnn2E8Tp+E0c7QyI26QENupwD7a6yssEdvQecEgLG6Nbyo7gNeX?= =?us-ascii?Q?dEtJlnkjGhUQ4tQHh5fIlSj0atnebFVBVbsu8d2iYhGkcO/Fqy3OG059g/2k?= =?us-ascii?Q?Vg4cwS0/FlIbmYL0BvhSGwjPqyDHMvXal6KYwbByZ+vuVEkmDzuDCCTRso6A?= =?us-ascii?Q?TgJrT5sUlq22FhBRLYkTQhYJuW7I3YC5cjrT6hkh2U8j57mQ9ivCX8TAKOoM?= =?us-ascii?Q?HxjJZ/rdXmEoxfO6S9vLHJFIVkM1QKnGitD3B5XidAyG9WGXnMOgj50q369M?= =?us-ascii?Q?FJBr+9A81tXrpApmmoVCtzGW10xmQ2oGUgOG8zji6hFHfARdZJzGqRZbZwYX?= =?us-ascii?Q?Gt8X0bBMWthJMq2yn6xqs5hzb2gwxq/vtPEXnoHqATRRY4xb8yZyd0pZaJsD?= =?us-ascii?Q?WMrUzUGbySUeQvP/dxAMsoOTuVYXfCYdVzYrks4hH1gRKDwGhUrTtZ/r24QN?= =?us-ascii?Q?Jb/ItbzVr3t3M7oNw3biThzwuSQi8ibOCxQnuLM6Hf59VY8U3PVNkdA+E36v?= =?us-ascii?Q?W5mcuuJdMYI164Qr4u6tQvMs1cztjzEAs9hONYimaWwk5ElnMNuMEw0maRvp?= =?us-ascii?Q?3DqZFkIh/LzM5aQdewfqppb9pPC9yldDfz8bAkqRVKHNUuRaNcOG3qIQpHz7?= =?us-ascii?Q?15KgAMFIoKaLUPOkJM4rUihgHcgbvoR8V6QTRgP892N4ewB2mS0VkWLB+17v?= =?us-ascii?Q?14E8taiAwn9K28WcXkcGkNc2RqHrOze5YXlaloAWyPp2otkCPd3wfKeP9bUH?= =?us-ascii?Q?J6FPKp3ja9Mgt9/e8asxsbqMUgSWiY8QhbwjQmFfeXJu9s6vd7C9MwCFWrFX?= =?us-ascii?Q?0HfYA21GWZ8XHPBgBtFxWD8KPaS2cYcQddrjhpFXNyWy7cEmcbzaF8/bfj+u?= =?us-ascii?Q?tm22QPmhk0aEXUuQlLlSlI4YxWwPDXGH2QoLCzYWd5hT49W/DFQ0vU9Yjp0F?= =?us-ascii?Q?zjeVugL+9MeTHiVpIQK/c4hjUgCPxNFvKjsd3WmXhnbgnUxiiLU3FCe9QTo9?= =?us-ascii?Q?+7DH7y630JR18tfmHCYjLIsoQcBj5EnmOXigajByhSaFKBiaa4idfrlT2avl?= =?us-ascii?Q?t3LvefREjHE3r4wFUrxZD2e++bd7MJV6qFpVtQXbCT0r24jqvq04Y3sGIaxc?= =?us-ascii?Q?+SVsNV6+Cu7XhFsI9N/0ceUE6rH6Wi+++o8ktePM20qYTBDIRKeoT8KOObYX?= =?us-ascii?Q?CCSdYdv+SQ+ilDKb8mXCC7E+0mnoZ5B3EsrpacHTf5KlEoaUg3UEGfTgb2xh?= =?us-ascii?Q?P2lAcU3rTduyZzYGzbWQ4allxDVugyQzDyxud1v14a5nIIPhHVPZfcsiJ2XB?= =?us-ascii?Q?db4BouBqLy8qmRWg1zDB7e/ga/DhtKKS?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DBBPR04MB7497.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(10070799003)(366016)(7416014)(376014)(52116014)(19092799006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?qexyPurppVs82OuNeDGLV9vi6J5piYOYHqx7l1uHS/AXJIpscHMMiP4YL2eV?= =?us-ascii?Q?eF66n4s9ib4inTyM6BrLjUfZ83d8bILlpy0Cu1AvJnoinI+F6tN/73R9Vyy0?= =?us-ascii?Q?fiu3pPOqfkhg/RdrPB+zGHYUswlTDvfEkYnBDCY9lP2UQvUtoktqEjMMFx7i?= =?us-ascii?Q?si0VqkFULMWWZQ8dl5hOSZVv3BSL6ZOH+x5sv5ddNteI//nSTiku+Bm5Zo4k?= =?us-ascii?Q?xHBCHLAFjzhf8hlP1iBqMtDgQaO2Rg/K/x21dP38kjwAxaEhznc4IqTXJdMv?= =?us-ascii?Q?ZOHETwrtGexbEfJxzjg3vNc6AecvXCcNJybOWwuqdVAZwuBjo5WZl1Pf1jFp?= =?us-ascii?Q?Ag28Dr+q8HXHDLgqO1EvBUXykiwJLNJo4b6IF55K54AAv/EtGdhONaL2zz84?= =?us-ascii?Q?BGiSpz2090M3PvRO5lt3plXxzrzjlD2hqojhuxmOYE5jPk1RfPHBtYlq+Syf?= =?us-ascii?Q?GKgoyXD2wIl7tRiQpsFmF0j9P7GR2JLvaArG8IQRhWoxSE88NitALYmxGzv3?= =?us-ascii?Q?9XYeKUqdCFMs0rtjEjC+wMaKPPn3a1cJnGg4ekduwZGfzTv5IrzUKhtOpnFr?= =?us-ascii?Q?Gfm+XUs/lF+nVCY2VlP4bVaUCZnhodur5MRKp51tgE/InqRgHTsn+rXL/9zi?= =?us-ascii?Q?eE4w9vwdz06sJtT+XVJginolXYUTWrmkpdZhoRV2ohjSjSfAZ7G7tkJTttio?= =?us-ascii?Q?ms3HAsmKlFoXxeHm8S0d5szDsET9uE7udLxktfd5pCXJixo1vJZoMFR/Rbwj?= =?us-ascii?Q?JqxbbWUif1CM4UwtYhDFtUsPeeMLARSysDJbAAF76uPNS3WKn/YwjV5NBinP?= =?us-ascii?Q?h3IQnqugnmHIKNeszImtMvvKWcrhqGtWz1ttAFhDEaRp7wiatRVppzJ9MCW1?= =?us-ascii?Q?tb4XJ6relI0+FOKPl0yVRL+Oi9mWe4ExLo6OXUkQz1Fe63vIbGPgyvQv8dyG?= =?us-ascii?Q?McfLTHUBfaEMknfPkcmbb8hK3OHv5Ukg0H18O/BSuWvTmDsyfC17W9jyGF3o?= =?us-ascii?Q?OU8Z4AHz0mMKnbf1Kv3fDpmNkbZ/nCFSDuw1PFK1e7XKxdkWDKIr4abLI1HX?= =?us-ascii?Q?XKV67IA2rUQEML5ZhT9Gxsxn3QHB+hX8Sm1D5Q4XtQgjcvyZ8nUTOIPXCiUw?= =?us-ascii?Q?7+rZY5Hmag3zt1VGL7Nt+upx+zAJWvU1RTQhR/iNF4kMPe/XA2KRXh2tg/mk?= =?us-ascii?Q?GEa+zQpWRlWImQZqS9C8yOb7UJ1faPJgrZ7lJ25mujnZLk0cawJp1KaAHn+z?= =?us-ascii?Q?ES2HDeoFEmCkJrZ3EKZQPmP9QxzMD+tgr7GUjwEzGoiO1HP0Yd7qLzLz4Ag7?= =?us-ascii?Q?cmEzBFAkRUZMzDHvfLedEWPmTurfD395NIQQViHzV/hQ9Bmqi/qtaQGqEMao?= =?us-ascii?Q?WfxDJ8Wii1uGw913uxCCeyhF14lMR31T9kDx8MJ1mddhUjwxN8nRICdXEBSv?= =?us-ascii?Q?3R/cX7L6Dbw4yhJRoXmI1p0wcg3MZL5gsPKrtltacYfaZR4SX+J28/98EcjZ?= =?us-ascii?Q?D37z+/XOMD5EUzT3U0aOf3I4K/hgPk5n/UZ4RTXhGsGsR6nV9HtXWszbO192?= =?us-ascii?Q?0ZQ1dEBunz4QNqn05w+3NGTCbrfczTtg8YXhUo8vB8Fq5ai0uefS+LzRLQFu?= =?us-ascii?Q?sRMgmR9S3/FNOeGSnp0fH3s=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9a7a4bb3-eb77-4824-58be-08de26d58026 X-MS-Exchange-CrossTenant-AuthSource: DBBPR04MB7497.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Nov 2025 19:05:55.4299 (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: 4uJ2V8Bg1pMWJ+O8qRK/LJhcy5AkxaxwW/n+2vkaHh4airtYgL79BgC3O4PNeg71k8GFhZ7Q3zaor+DJq7U24w== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA4PR04MB7695 Content-Type: text/plain; charset="utf-8" I would like the "nxp,sja1110a" driver, in the configuration below, to be able to probe the drivers for "nxp,sja1110-base-t1-mdio" and for "nxp,sja1110-base-tx-mdio" via mfd_add_devices(): ethernet-switch@0 { compatible =3D "nxp,sja1110a"; mdios { mdio@0 { compatible =3D "nxp,sja1110-base-t1-mdio"; }; mdio@1 { compatible =3D "nxp,sja1110-base-tx-mdio"; }; }; }; This isn't currently possible, because mfd assumes that the parent OF node ("mdios") =3D=3D OF node of the parent ("ethernet-switch@0"), which in this case isn't true, and as it searches through the children of "ethernet-switch@0", it finds no MDIO bus to probe. Cc: Lee Jones Signed-off-by: Vladimir Oltean --- drivers/mfd/mfd-core.c | 11 +++++++++-- include/linux/mfd/core.h | 7 +++++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/drivers/mfd/mfd-core.c b/drivers/mfd/mfd-core.c index 7d14a1e7631e..e0b7f93a2654 100644 --- a/drivers/mfd/mfd-core.c +++ b/drivers/mfd/mfd-core.c @@ -181,8 +181,14 @@ static int mfd_add_device(struct device *parent, int i= d, if (ret < 0) goto fail_res; =20 - if (IS_ENABLED(CONFIG_OF) && parent->of_node && cell->of_compatible) { - for_each_child_of_node(parent->of_node, np) { + if (IS_ENABLED(CONFIG_OF)) { + const struct device_node *parent_of_node; + + parent_of_node =3D cell->parent_of_node ?: parent->of_node; + if (!parent_of_node || !cell->of_compatible) + goto skip_of; + + for_each_child_of_node(parent_of_node, np) { if (of_device_is_compatible(np, cell->of_compatible)) { /* Skip 'disabled' devices */ if (!of_device_is_available(np)) { @@ -213,6 +219,7 @@ static int mfd_add_device(struct device *parent, int id, cell->name, platform_id); } =20 +skip_of: mfd_acpi_add_device(cell, pdev); =20 if (cell->pdata_size) { diff --git a/include/linux/mfd/core.h b/include/linux/mfd/core.h index faeea7abd688..2e94ea376125 100644 --- a/include/linux/mfd/core.h +++ b/include/linux/mfd/core.h @@ -81,6 +81,13 @@ struct mfd_cell { /* Software node for the device. */ const struct software_node *swnode; =20 + /* + * Parent OF node of the device, if different from the OF node + * of the MFD parent (e.g. there is at least one more hierarchical + * level between them) + */ + const struct device_node *parent_of_node; + /* * Device Tree compatible string * See: Documentation/devicetree/usage-model.rst Chapter 2.2 for details --=20 2.34.1 From nobody Tue Dec 2 02:32:17 2025 Received: from PA4PR04CU001.outbound.protection.outlook.com (mail-francecentralazon11013035.outbound.protection.outlook.com [40.107.162.35]) (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 09AD9350A2C; Tue, 18 Nov 2025 19:06:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.162.35 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763492768; cv=fail; b=LGpOReHST08P2JOKxcF1xOFy37ORNAyWNFUuGmit/ssNtxTWdiDj+L5Cpz0Me/6qbYK6ZJHtCaUW0pOVFC2+E8imITLJFYqQwT1Ul+az8wrZp/qIkWIxjjWuPbmo3bOWizzMkRuPnq5jlOBh3AlDN8Q1fIal/GcH/rRIywZLORQ= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763492768; c=relaxed/simple; bh=0bQjPPkFoC1bZAqNNDdr+79sAx9j4DBJTkaeZOS2ds0=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=gu6QSfSIHfzjFATTKN1Qn8plfIDjFy3FaqZD0Kny+HtdfG3/W69yixg+YgDgkt54BnKZfzE0nJLkOaEMkYS7PqS5vgkNxHYimzmof/DyukEmPgynRMQcYMaeeSmtWKfLbunBEPHgZ7ckguPA91y5B/MQJFEVJrr6ryv3r2e0kY8= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=T9hYsU0C; arc=fail smtp.client-ip=40.107.162.35 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="T9hYsU0C" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=qSLRy6FIeUi+64tNguY1dM4KBaNHg/cp0yoAeQmvRkrgCwLjzlEGBhh9KLxMR4dmGAyYaPsZWcF4QvHOVGUp8mPEh3xWPWQuJ10M5Mpv1I0OT0I6eMIaLDPx9+J1NBIVTrV47onO8ySVFwJQRZAemupZle+j+8TeUNaobnIGmcud7u62F6t+q1cL1f4cg3gCjer7ROaAMBytAKuLVLQScDZNTl0NOHrSfvi+jypMLUDdADUYIizVFyjWgI+CEoTnVdZWMdzAQj7GIGUxkW+1j7n3PJZNwEPGT/Zk40D1ROov63CGDRvZstSCSMVTDQrtWBwwJY2bgd/dDNkmFXwmiA== 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=KGdyqB0LpOL6UN/DSl21Piu3Owz5FN2ThQcwdHG53c0=; b=COyNlxUlyFdliFGdIvs3K5xtLMCyTMnPlLFeDQBZKpW1QowHVViuSPOhVE3xLVVeQPAzqLH1RRvb0SAi046s8gicf/eGgmVSUogHNO5l5vylPg/dSnAj2m5KZJMG4qFO6zqFK3G0If1Kjecv+Z8YKblUvABsTadx7l5sMIJ47wGCUem9nz4QH/aTAa34N7LrsTqwiQqMsN0dY43wzYXCp5PY33JRkm7ST09722Q1wWJap/gwBH1qM/f5uV239CYGgc2XuY67z4dRkI9oEMbsfklv9oMCB+QYomXzKYadBROw3sn7xLJF6tGFirsPz5GVEIdplsRzeLoVTAlhMSmn7Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=KGdyqB0LpOL6UN/DSl21Piu3Owz5FN2ThQcwdHG53c0=; b=T9hYsU0CPm1YAGaKuGhy22Iihi/WA+wvPpYo83bgCiB+MSLt9nMYvRGY0co9gXwh5LKTgWVYGxXDHrftUFSwtB2/y5tlKWGaXaTOKlcYUKfgsCEvNjkiUU3JX4lv2OR2R43l8NV7GNXc8RBKGggoYsY9s1Q210gMooXknE+zK2r0ardCdS96fxqPltjzmL1K6GPCHBpU45VHZNk+wW/FIh1Qkzhfh3DdFMmTBerJNWoOtUxmrgtNmUsBw2Vpz3Lbt9lcwK8PX9KeLktNygoIrlIyKKIGcSRodd2scxnfn/+7aFxkCOnOrrJ+PoUWGWLzVah3MtGOSE2MdNAr3NL0Vg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from DBBPR04MB7497.eurprd04.prod.outlook.com (2603:10a6:10:204::9) by PA4PR04MB7695.eurprd04.prod.outlook.com (2603:10a6:102:e3::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9343.10; Tue, 18 Nov 2025 19:05:56 +0000 Received: from DBBPR04MB7497.eurprd04.prod.outlook.com ([fe80::503f:b388:6d07:adff]) by DBBPR04MB7497.eurprd04.prod.outlook.com ([fe80::503f:b388:6d07:adff%4]) with mapi id 15.20.9343.009; Tue, 18 Nov 2025 19:05:56 +0000 From: Vladimir Oltean To: netdev@vger.kernel.org Cc: Andrew Lunn , Heiner Kallweit , Russell King , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , linux-kernel@vger.kernel.org, Lee Jones Subject: [PATCH net-next 08/15] net: dsa: sja1105: transition OF-based MDIO drivers to standalone Date: Tue, 18 Nov 2025 21:05:23 +0200 Message-Id: <20251118190530.580267-9-vladimir.oltean@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20251118190530.580267-1-vladimir.oltean@nxp.com> References: <20251118190530.580267-1-vladimir.oltean@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM0P190CA0022.EURP190.PROD.OUTLOOK.COM (2603:10a6:208:190::32) To DBBPR04MB7497.eurprd04.prod.outlook.com (2603:10a6:10:204::9) 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: DBBPR04MB7497:EE_|PA4PR04MB7695:EE_ X-MS-Office365-Filtering-Correlation-Id: a4195225-fc38-4cdb-f9f0-08de26d580ca X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|10070799003|366016|7416014|376014|52116014|19092799006; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?0egjuXFt8VSuI6q7VUCzGUnX/xllI30JCesAafA/q2Q/cKtScLtpUDF99CXR?= =?us-ascii?Q?DOrjEAD3whvMDAZdnI0dWYyqUag8e8hw+AXj64KDM/fFBsoQpD7XYNcsMvds?= =?us-ascii?Q?hqhT4i7I5XudFw/WQkRA3rEVlBCP25/HYLsN9Z739DlukeyN3kTq/SPf8bxk?= =?us-ascii?Q?9qch7JHIO/EjX9Gfh1sFczeriEW71LRI09+LejeQ+zREO/OqRUDw6eT6Hoqj?= =?us-ascii?Q?kD94Md+eND+7hl4DYj95D/PlzzKeIQKje21MIzC7UZ1r5DLMMAaAeNo6i9tT?= =?us-ascii?Q?eqRKWz3ENY2zMg039QaRxhtk5ToAzocKNz9FadZ9Z5Ch3XE2FEmvjTl5TgfE?= =?us-ascii?Q?5VnjOyXur2JK/IOUaaAt+PtR0lTDmo3v4sqajrctYz1X/iP2DGwMssKjJ/NM?= =?us-ascii?Q?ApBxv6+p56NSihHZYhwrRert/Dx5/9OFrPD20vYbkUC5qrEGaeFbC6u7q5Rk?= =?us-ascii?Q?APfIvTn4GdU2/FvFlUhxgATQDbFQqmPaIcadSnbBpWhk/e/lEExX+4TOXdYZ?= =?us-ascii?Q?jKAd9SuYNZivEOEkA9prEnES8j2r6GI5mdWZSLftHpqwFMWA/p/mAxUD5JoF?= =?us-ascii?Q?TwaHqitTmHKtLQNHvmE1vt8SbpNDTUZ8Ly95Z74BwOP7oqRY3xVlZ3kXsXt/?= =?us-ascii?Q?quNSHh2UwplNKxqXzLFSCtIqou9NvO+Q89iAbopn32wacv0N4/G83u+0V+uK?= =?us-ascii?Q?c4BqeCNG7gU3JFMr14NUqCNIAo9KaveapOjOs4fMcXSeKj8YA0FVEbh2t7oF?= =?us-ascii?Q?OmFGk26BNvg1dLijpXYMg/xDLvEwNgSoypPIpUf33qd+nHICu1bfqa0ayHj7?= =?us-ascii?Q?9vul1e/EoZbdSK6IFVzJPBCnNq/KJK3C+PQqrM5aPD3ZCqU2cwyXLe+MBLyG?= =?us-ascii?Q?LUp+7eG2tZgkMxhtf7dS4x7RPyFWNGZ1MAxFYx7vsKhewgVTNjX1sWPaDWkj?= =?us-ascii?Q?terc1oPKL193jF4E63TSUo3BxQNi6crCaRyzs3mP3905rfjuvHDCfjglAPhT?= =?us-ascii?Q?YVRYDQDOqumQGPSvV7dGh0I0vyfjC1hLL6oCn6y3pwiCD1Ugg8Egma68oTx5?= =?us-ascii?Q?GsgM03ROmWmFpjWJl2LIIPi+IuT0MLg/OKP/xNWkjHiGDEVBAfe5rorZ1pAi?= =?us-ascii?Q?K2YpPz+rs28YLdOB5DtiOHk7Z2cNU+tYwsxd69rLba1zGXZ42FB2EKcS8Xy0?= =?us-ascii?Q?46aZpHHgh684BXORda7rdf7MOLnAP4DOKjOvl7lk6K25IvGk1/mQR/Hd3S2e?= =?us-ascii?Q?nKaFUMWmKqN36Dbe0EYJ/Mbm65DAmFX0/5Z/STRvwEaIaY3EQRt0lrZp+DO2?= =?us-ascii?Q?KGAEQKNogSIj6sOKwHRfWPDW83TtZTDQdXdGWQ9nyxjzEgjtLQI2E2PoueHC?= =?us-ascii?Q?1tfbnE8Je/9+iYZ057ICsp6maVE2Edm4UdU4CyGZ6EPHps1d6sr0cEkSSa6S?= =?us-ascii?Q?4bBrmWB8VD+fNeh99kq8MG3LY4Kx8aSN?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DBBPR04MB7497.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(10070799003)(366016)(7416014)(376014)(52116014)(19092799006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?RdAB8+4WFpAF2BPz9IXl1O+v6hXIOYf7eE30wY793w3uAiej4Srq2kJyyYXT?= =?us-ascii?Q?Zu15axvYBaISwjo3rfnCz8X1mKPu9mnk5YmYqYX9qhSKj1RhdyvA/Ws/LVr+?= =?us-ascii?Q?mBOAVyvzyYWim4VPofklja8fO8lepdzJqFa7SL7C7wZpmmd1UfHYPV6OxUN8?= =?us-ascii?Q?zZXP9oNtcz3ZUjW0r/l6I15SwMUuhxxI+ZyirTVXX0Tcn+Spt2E6e8ovDunx?= =?us-ascii?Q?FZKrkg9UAFl/PSyRJPOQSW8fWnVPqAUfk4cwi8aUMymAIyjc1LinQFl98fWE?= =?us-ascii?Q?yNg7CXiF2wAYSF2YkRBvMI9TbHstSuZcxYGDyOQyRL+WYV/qG30tX5kEAl/K?= =?us-ascii?Q?nDwkE4So2EOSLBBczI23E2zl4d6Foe4XPWZhas26hE38rylv7A/dxOWYFraU?= =?us-ascii?Q?g62dMiaZwjv7uNZCRLvTr/XHRzwIxlLtj8Hw16nRG7rTXPJNh855YOCLU0aH?= =?us-ascii?Q?0Zk1/XlwhyDEQtdSPyZx0HuuG+X4D8+MK9zg4nhZvpMP6owwiMuVcu/Su9zs?= =?us-ascii?Q?CMP16rHgPzs4jQzHcRuvDmcUCf5msArFurtsCO8ktmRt+UWF4qqoDzglfH9p?= =?us-ascii?Q?0vzq2LDhmfvtPNIBpbW/E+cowvV30t5sgmkSVfo/AEdtrhEC3/5MY/O8oAhy?= =?us-ascii?Q?v1i0d4Rz5tjSK2qv8n+ap2OaPxnDw10wOkdmj2+oDcmeIZchTXpybRr/hy/q?= =?us-ascii?Q?CVkb3QK+D0Hzr7jWTw7yn+ohc1ZY4zvo9aRVSWpgrhaSDTrH+jQ00EJnXUky?= =?us-ascii?Q?EI6HOtBBSaGTDwAELfsoA38ZAhmBFqAuOfyvICDLMT9FutLM7zk06VynKQDL?= =?us-ascii?Q?1g3j1ca1DOAWGtw9NyDxa3tEHBa6bUXBNj/1tQvvgqPMOc+24/GsUPzaxE5J?= =?us-ascii?Q?jGhkg4NVRrlMIgRm+tjALcoxvRDll6Sh9IjOTc11bOBW38heQClSkiXFVrG6?= =?us-ascii?Q?RoMzlZxC4iom9UHg6Ndzt2vNbTadOBR/ijwBU/8P0c8FrMkbkcD2hDJtd5w1?= =?us-ascii?Q?5DlZ+f/Z2TKYWKK2mFTSF5WdBxZp7x6ViJyAbHfVp1TZjzbKSmB0ZPls/QNg?= =?us-ascii?Q?7eSwuUAZPcMdMYW6GuH/c5gj05Fwx0gc/aHD4RdtOP56YFUQG+YGUXkt0hOD?= =?us-ascii?Q?I1p5d0GPcekmDSgnuAw9xXnuIuxiFR8ufuNTEhMvkmD968vgVs6/E4CX1URF?= =?us-ascii?Q?IJcKEGxQnipL4ZSeNsIolddPPRSHu21k4pI0YUxrm0NfemqNGJ8cM+n0kKV0?= =?us-ascii?Q?T88XaOu0Ormezl0yTEWa0oGi5lA1WqQYruHmSHc3EnZIW1X7jOLyTEqsBMHP?= =?us-ascii?Q?QP8WLr67n7ZooxLUQlSIZkWBYaGJR3Pdqplmi2BZ+aSvcPFiYD8eyhwXNm1H?= =?us-ascii?Q?Igrfnl8Fwr9o1JUvf7JPh6SThyhbI3EFjEJdXD8GjJ1TBgVAMCm7V8PIix+G?= =?us-ascii?Q?2m0nvkmDCizT3PgNZ4y9HjdVBv9NwEsUWky4hHeKPgxqR12YaE/LaLHW7bpo?= =?us-ascii?Q?6Ui5uMOGfm5dMpDyIJ1Pk51nU8KvXgTl6Qa8IvcivaQJZxn5TBEFL4fPD/v7?= =?us-ascii?Q?YxAL32THbkd1YvuUoHRiELP5XLLpoirBmSXRrLiwt8D5UW59c/cOtAWUsZXp?= =?us-ascii?Q?QGd1ke0lckFMU76xPsTQx/4=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: a4195225-fc38-4cdb-f9f0-08de26d580ca X-MS-Exchange-CrossTenant-AuthSource: DBBPR04MB7497.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Nov 2025 19:05:56.6138 (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: 8aHDvQwHigFj7WzMMULRrEgWf1xn2Hr8Yr7sSZzhQS9VfoO4gDdwVmujNwtEKjyNNqSXY5sGu27mxeA+u8TWsg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA4PR04MB7695 Content-Type: text/plain; charset="utf-8" Delete the duplicated drivers for 100base-T1 and 100base-TX from the DSA driver, and use devm_mfd_add_devices() to platform devices which probe on the dedicated drivers from drivers/net/mdio/. This makes the switch act as a sort of bus driver for devices in the "mdios" subnode. We can use mfd because the switch driver interacts with the PHYs from these MDIO buses exclusively using phylink, which follows "phy-handle" fwnode references to them. Cc: Lee Jones Signed-off-by: Vladimir Oltean --- drivers/net/dsa/sja1105/Kconfig | 1 + drivers/net/dsa/sja1105/Makefile | 1 + drivers/net/dsa/sja1105/sja1105.h | 4 - drivers/net/dsa/sja1105/sja1105_main.c | 13 ++ drivers/net/dsa/sja1105/sja1105_mdio.c | 270 +------------------------ drivers/net/dsa/sja1105/sja1105_mfd.c | 69 +++++++ drivers/net/dsa/sja1105/sja1105_mfd.h | 9 + drivers/net/dsa/sja1105/sja1105_spi.c | 6 - 8 files changed, 94 insertions(+), 279 deletions(-) create mode 100644 drivers/net/dsa/sja1105/sja1105_mfd.c create mode 100644 drivers/net/dsa/sja1105/sja1105_mfd.h diff --git a/drivers/net/dsa/sja1105/Kconfig b/drivers/net/dsa/sja1105/Kcon= fig index 1291bba3f3b6..932bca545d69 100644 --- a/drivers/net/dsa/sja1105/Kconfig +++ b/drivers/net/dsa/sja1105/Kconfig @@ -7,6 +7,7 @@ tristate "NXP SJA1105 Ethernet switch family support" select PCS_XPCS select PACKING select CRC32 + select MFD_CORE help This is the driver for the NXP SJA1105 (5-port) and SJA1110 (10-port) automotive Ethernet switch family. These are managed over an SPI diff --git a/drivers/net/dsa/sja1105/Makefile b/drivers/net/dsa/sja1105/Mak= efile index 40d69e6c0bae..3ac2d77dbe6c 100644 --- a/drivers/net/dsa/sja1105/Makefile +++ b/drivers/net/dsa/sja1105/Makefile @@ -5,6 +5,7 @@ sja1105-objs :=3D \ sja1105_spi.o \ sja1105_main.o \ sja1105_mdio.o \ + sja1105_mfd.o \ sja1105_flower.o \ sja1105_ethtool.o \ sja1105_devlink.o \ diff --git a/drivers/net/dsa/sja1105/sja1105.h b/drivers/net/dsa/sja1105/sj= a1105.h index 4fd6121bd07f..ff6b69663851 100644 --- a/drivers/net/dsa/sja1105/sja1105.h +++ b/drivers/net/dsa/sja1105/sja1105.h @@ -91,8 +91,6 @@ struct sja1105_regs { u64 rmii_ref_clk[SJA1105_MAX_NUM_PORTS]; u64 rmii_ext_tx_clk[SJA1105_MAX_NUM_PORTS]; u64 stats[__MAX_SJA1105_STATS_AREA][SJA1105_MAX_NUM_PORTS]; - u64 mdio_100base_tx; - u64 mdio_100base_t1; u64 pcs_base[SJA1105_MAX_NUM_PORTS]; }; =20 @@ -279,8 +277,6 @@ struct sja1105_private { struct regmap *regmap; struct devlink_region **regions; struct sja1105_cbs_entry *cbs; - struct mii_bus *mdio_base_t1; - struct mii_bus *mdio_base_tx; struct mii_bus *mdio_pcs; struct phylink_pcs *pcs[SJA1105_MAX_NUM_PORTS]; struct sja1105_ptp_data ptp_data; diff --git a/drivers/net/dsa/sja1105/sja1105_main.c b/drivers/net/dsa/sja11= 05/sja1105_main.c index 622264c13fdb..6da5c655dae7 100644 --- a/drivers/net/dsa/sja1105/sja1105_main.c +++ b/drivers/net/dsa/sja1105/sja1105_main.c @@ -23,6 +23,7 @@ #include =20 #include "sja1105.h" +#include "sja1105_mfd.h" #include "sja1105_tas.h" =20 #define SJA1105_UNKNOWN_MULTICAST 0x010000000000ull @@ -3316,6 +3317,11 @@ static int sja1105_probe(struct spi_device *spi) if (priv->max_xfer_len > max_msg - SJA1105_SIZE_SPI_MSG_HEADER) priv->max_xfer_len =3D max_msg - SJA1105_SIZE_SPI_MSG_HEADER; =20 + /* Explicitly advertise "no DMA" support, to suppress + * "DMA mask not set" warning in MFD children + */ + dev->dma_mask =3D &dev->coherent_dma_mask; + priv->info =3D of_device_get_match_data(dev); =20 rc =3D sja1105_create_regmap(priv); @@ -3356,6 +3362,13 @@ static int sja1105_probe(struct spi_device *spi) return rc; } =20 + rc =3D sja1105_mfd_add_devices(ds); + if (rc) { + dev_err(ds->dev, "Failed to create child devices: %pe\n", + ERR_PTR(rc)); + return rc; + } + if (IS_ENABLED(CONFIG_NET_SCH_CBS)) { priv->cbs =3D devm_kcalloc(dev, priv->info->num_cbs_shapers, sizeof(struct sja1105_cbs_entry), diff --git a/drivers/net/dsa/sja1105/sja1105_mdio.c b/drivers/net/dsa/sja11= 05/sja1105_mdio.c index 8d535c033cef..b803ce71f5cc 100644 --- a/drivers/net/dsa/sja1105/sja1105_mdio.c +++ b/drivers/net/dsa/sja1105/sja1105_mdio.c @@ -133,238 +133,6 @@ int sja1110_pcs_mdio_write_c45(struct mii_bus *bus, i= nt phy, int mmd, int reg, &tmp, NULL); } =20 -enum sja1105_mdio_opcode { - SJA1105_C45_ADDR =3D 0, - SJA1105_C22 =3D 1, - SJA1105_C45_DATA =3D 2, - SJA1105_C45_DATA_AUTOINC =3D 3, -}; - -static u64 sja1105_base_t1_encode_addr(struct sja1105_private *priv, - int phy, enum sja1105_mdio_opcode op, - int xad) -{ - const struct sja1105_regs *regs =3D priv->info->regs; - - return regs->mdio_100base_t1 | (phy << 7) | (op << 5) | (xad << 0); -} - -static int sja1105_base_t1_mdio_read_c22(struct mii_bus *bus, int phy, int= reg) -{ - struct sja1105_mdio_private *mdio_priv =3D bus->priv; - struct sja1105_private *priv =3D mdio_priv->priv; - u64 addr; - u32 tmp; - int rc; - - addr =3D sja1105_base_t1_encode_addr(priv, phy, SJA1105_C22, reg & 0x1f); - - rc =3D sja1105_xfer_u32(priv, SPI_READ, addr, &tmp, NULL); - if (rc < 0) - return rc; - - return tmp & 0xffff; -} - -static int sja1105_base_t1_mdio_read_c45(struct mii_bus *bus, int phy, - int mmd, int reg) -{ - struct sja1105_mdio_private *mdio_priv =3D bus->priv; - struct sja1105_private *priv =3D mdio_priv->priv; - u64 addr; - u32 tmp; - int rc; - - addr =3D sja1105_base_t1_encode_addr(priv, phy, SJA1105_C45_ADDR, mmd); - - rc =3D sja1105_xfer_u32(priv, SPI_WRITE, addr, ®, NULL); - if (rc < 0) - return rc; - - addr =3D sja1105_base_t1_encode_addr(priv, phy, SJA1105_C45_DATA, mmd); - - rc =3D sja1105_xfer_u32(priv, SPI_READ, addr, &tmp, NULL); - if (rc < 0) - return rc; - - return tmp & 0xffff; -} - -static int sja1105_base_t1_mdio_write_c22(struct mii_bus *bus, int phy, in= t reg, - u16 val) -{ - struct sja1105_mdio_private *mdio_priv =3D bus->priv; - struct sja1105_private *priv =3D mdio_priv->priv; - u64 addr; - u32 tmp; - - addr =3D sja1105_base_t1_encode_addr(priv, phy, SJA1105_C22, reg & 0x1f); - - tmp =3D val & 0xffff; - - return sja1105_xfer_u32(priv, SPI_WRITE, addr, &tmp, NULL); -} - -static int sja1105_base_t1_mdio_write_c45(struct mii_bus *bus, int phy, - int mmd, int reg, u16 val) -{ - struct sja1105_mdio_private *mdio_priv =3D bus->priv; - struct sja1105_private *priv =3D mdio_priv->priv; - u64 addr; - u32 tmp; - int rc; - - addr =3D sja1105_base_t1_encode_addr(priv, phy, SJA1105_C45_ADDR, mmd); - - rc =3D sja1105_xfer_u32(priv, SPI_WRITE, addr, ®, NULL); - if (rc < 0) - return rc; - - addr =3D sja1105_base_t1_encode_addr(priv, phy, SJA1105_C45_DATA, mmd); - - tmp =3D val & 0xffff; - - return sja1105_xfer_u32(priv, SPI_WRITE, addr, &tmp, NULL); -} - -static int sja1105_base_tx_mdio_read(struct mii_bus *bus, int phy, int reg) -{ - struct sja1105_mdio_private *mdio_priv =3D bus->priv; - struct sja1105_private *priv =3D mdio_priv->priv; - const struct sja1105_regs *regs =3D priv->info->regs; - u32 tmp; - int rc; - - rc =3D sja1105_xfer_u32(priv, SPI_READ, regs->mdio_100base_tx + reg, - &tmp, NULL); - if (rc < 0) - return rc; - - return tmp & 0xffff; -} - -static int sja1105_base_tx_mdio_write(struct mii_bus *bus, int phy, int re= g, - u16 val) -{ - struct sja1105_mdio_private *mdio_priv =3D bus->priv; - struct sja1105_private *priv =3D mdio_priv->priv; - const struct sja1105_regs *regs =3D priv->info->regs; - u32 tmp =3D val; - - return sja1105_xfer_u32(priv, SPI_WRITE, regs->mdio_100base_tx + reg, - &tmp, NULL); -} - -static int sja1105_mdiobus_base_tx_register(struct sja1105_private *priv, - struct device_node *mdio_node) -{ - struct sja1105_mdio_private *mdio_priv; - struct device_node *np; - struct mii_bus *bus; - int rc =3D 0; - - np =3D of_get_compatible_child(mdio_node, "nxp,sja1110-base-tx-mdio"); - if (!np) - return 0; - - if (!of_device_is_available(np)) - goto out_put_np; - - bus =3D mdiobus_alloc_size(sizeof(*mdio_priv)); - if (!bus) { - rc =3D -ENOMEM; - goto out_put_np; - } - - bus->name =3D "SJA1110 100base-TX MDIO bus"; - snprintf(bus->id, MII_BUS_ID_SIZE, "%s-base-tx", - dev_name(priv->ds->dev)); - bus->read =3D sja1105_base_tx_mdio_read; - bus->write =3D sja1105_base_tx_mdio_write; - bus->parent =3D priv->ds->dev; - mdio_priv =3D bus->priv; - mdio_priv->priv =3D priv; - - rc =3D of_mdiobus_register(bus, np); - if (rc) { - mdiobus_free(bus); - goto out_put_np; - } - - priv->mdio_base_tx =3D bus; - -out_put_np: - of_node_put(np); - - return rc; -} - -static void sja1105_mdiobus_base_tx_unregister(struct sja1105_private *pri= v) -{ - if (!priv->mdio_base_tx) - return; - - mdiobus_unregister(priv->mdio_base_tx); - mdiobus_free(priv->mdio_base_tx); - priv->mdio_base_tx =3D NULL; -} - -static int sja1105_mdiobus_base_t1_register(struct sja1105_private *priv, - struct device_node *mdio_node) -{ - struct sja1105_mdio_private *mdio_priv; - struct device_node *np; - struct mii_bus *bus; - int rc =3D 0; - - np =3D of_get_compatible_child(mdio_node, "nxp,sja1110-base-t1-mdio"); - if (!np) - return 0; - - if (!of_device_is_available(np)) - goto out_put_np; - - bus =3D mdiobus_alloc_size(sizeof(*mdio_priv)); - if (!bus) { - rc =3D -ENOMEM; - goto out_put_np; - } - - bus->name =3D "SJA1110 100base-T1 MDIO bus"; - snprintf(bus->id, MII_BUS_ID_SIZE, "%s-base-t1", - dev_name(priv->ds->dev)); - bus->read =3D sja1105_base_t1_mdio_read_c22; - bus->write =3D sja1105_base_t1_mdio_write_c22; - bus->read_c45 =3D sja1105_base_t1_mdio_read_c45; - bus->write_c45 =3D sja1105_base_t1_mdio_write_c45; - bus->parent =3D priv->ds->dev; - mdio_priv =3D bus->priv; - mdio_priv->priv =3D priv; - - rc =3D of_mdiobus_register(bus, np); - if (rc) { - mdiobus_free(bus); - goto out_put_np; - } - - priv->mdio_base_t1 =3D bus; - -out_put_np: - of_node_put(np); - - return rc; -} - -static void sja1105_mdiobus_base_t1_unregister(struct sja1105_private *pri= v) -{ - if (!priv->mdio_base_t1) - return; - - mdiobus_unregister(priv->mdio_base_t1); - mdiobus_free(priv->mdio_base_t1); - priv->mdio_base_t1 =3D NULL; -} - static int sja1105_mdiobus_pcs_register(struct sja1105_private *priv) { struct sja1105_mdio_private *mdio_priv; @@ -459,49 +227,13 @@ static void sja1105_mdiobus_pcs_unregister(struct sja= 1105_private *priv) int sja1105_mdiobus_register(struct dsa_switch *ds) { struct sja1105_private *priv =3D ds->priv; - const struct sja1105_regs *regs =3D priv->info->regs; - struct device_node *switch_node =3D ds->dev->of_node; - struct device_node *mdio_node; - int rc; - - rc =3D sja1105_mdiobus_pcs_register(priv); - if (rc) - return rc; - - mdio_node =3D of_get_available_child_by_name(switch_node, "mdios"); - if (!mdio_node) - return 0; =20 - if (regs->mdio_100base_tx !=3D SJA1105_RSV_ADDR) { - rc =3D sja1105_mdiobus_base_tx_register(priv, mdio_node); - if (rc) - goto err_put_mdio_node; - } - - if (regs->mdio_100base_t1 !=3D SJA1105_RSV_ADDR) { - rc =3D sja1105_mdiobus_base_t1_register(priv, mdio_node); - if (rc) - goto err_free_base_tx_mdiobus; - } - - of_node_put(mdio_node); - - return 0; - -err_free_base_tx_mdiobus: - sja1105_mdiobus_base_tx_unregister(priv); -err_put_mdio_node: - of_node_put(mdio_node); - sja1105_mdiobus_pcs_unregister(priv); - - return rc; + return sja1105_mdiobus_pcs_register(priv); } =20 void sja1105_mdiobus_unregister(struct dsa_switch *ds) { struct sja1105_private *priv =3D ds->priv; =20 - sja1105_mdiobus_base_t1_unregister(priv); - sja1105_mdiobus_base_tx_unregister(priv); sja1105_mdiobus_pcs_unregister(priv); } diff --git a/drivers/net/dsa/sja1105/sja1105_mfd.c b/drivers/net/dsa/sja110= 5/sja1105_mfd.c new file mode 100644 index 000000000000..9e60cd3b5d01 --- /dev/null +++ b/drivers/net/dsa/sja1105/sja1105_mfd.c @@ -0,0 +1,69 @@ +// SPDX-License-Identifier: GPL-2.0 +/* Copyright 2025 NXP + */ +#include +#include + +#include "sja1105.h" +#include "sja1105_mfd.h" + +static const struct resource sja1110_mdio_cbtx_res =3D + DEFINE_RES_REG_NAMED(0x709000, 0x1000, "mdio_cbtx"); + +static const struct resource sja1110_mdio_cbt1_res =3D + DEFINE_RES_REG_NAMED(0x704000, 0x4000, "mdio_cbt1"); + +static void sja1105_mfd_add_mdio_cells(struct sja1105_private *priv, + struct device_node *mdio_node, + struct mfd_cell *cells, + int *num_cells) +{ + struct device_node *np; + + np =3D of_get_compatible_child(mdio_node, "nxp,sja1110-base-tx-mdio"); + if (np && of_device_is_available(np)) { + cells[(*num_cells)++] =3D (struct mfd_cell) { + .name =3D "sja1110-base-tx-mdio", + .of_compatible =3D "nxp,sja1110-base-tx-mdio", + .resources =3D &sja1110_mdio_cbtx_res, + .num_resources =3D 1, + .parent_of_node =3D mdio_node, + }; + } + if (np) + of_node_put(np); + + np =3D of_get_compatible_child(mdio_node, "nxp,sja1110-base-t1-mdio"); + if (np && of_device_is_available(np)) { + cells[(*num_cells)++] =3D (struct mfd_cell) { + .name =3D "sja1110-base-t1-mdio", + .of_compatible =3D "nxp,sja1110-base-t1-mdio", + .resources =3D &sja1110_mdio_cbt1_res, + .num_resources =3D 1, + .parent_of_node =3D mdio_node, + }; + } + if (np) + of_node_put(np); +} + +int sja1105_mfd_add_devices(struct dsa_switch *ds) +{ + struct device_node *switch_node =3D dev_of_node(ds->dev); + struct sja1105_private *priv =3D ds->priv; + struct device_node *mdio_node; + struct mfd_cell cells[2] =3D {}; + int num_cells =3D 0; + int rc =3D 0; + + mdio_node =3D of_get_available_child_by_name(switch_node, "mdios"); + if (mdio_node) + sja1105_mfd_add_mdio_cells(priv, mdio_node, cells, &num_cells); + + if (num_cells > 0) + rc =3D devm_mfd_add_devices(ds->dev, PLATFORM_DEVID_AUTO, cells, + num_cells, NULL, 0, NULL); + + of_node_put(mdio_node); + return rc; +} diff --git a/drivers/net/dsa/sja1105/sja1105_mfd.h b/drivers/net/dsa/sja110= 5/sja1105_mfd.h new file mode 100644 index 000000000000..c33c8ff24e25 --- /dev/null +++ b/drivers/net/dsa/sja1105/sja1105_mfd.h @@ -0,0 +1,9 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* Copyright 2025 NXP + */ +#ifndef _SJA1105_MFD_H +#define _SJA1105_MFD_H + +int sja1105_mfd_add_devices(struct dsa_switch *ds); + +#endif diff --git a/drivers/net/dsa/sja1105/sja1105_spi.c b/drivers/net/dsa/sja110= 5/sja1105_spi.c index cfc76af8a65b..087acded7827 100644 --- a/drivers/net/dsa/sja1105/sja1105_spi.c +++ b/drivers/net/dsa/sja1105/sja1105_spi.c @@ -498,8 +498,6 @@ static const struct sja1105_regs sja1105et_regs =3D { .ptpclkval =3D 0x18, /* Spans 0x18 to 0x19 */ .ptpclkrate =3D 0x1A, .ptpclkcorp =3D 0x1D, - .mdio_100base_tx =3D SJA1105_RSV_ADDR, - .mdio_100base_t1 =3D SJA1105_RSV_ADDR, }; =20 static const struct sja1105_regs sja1105pqrs_regs =3D { @@ -537,8 +535,6 @@ static const struct sja1105_regs sja1105pqrs_regs =3D { .ptpclkrate =3D 0x1B, .ptpclkcorp =3D 0x1E, .ptpsyncts =3D 0x1F, - .mdio_100base_tx =3D SJA1105_RSV_ADDR, - .mdio_100base_t1 =3D SJA1105_RSV_ADDR, }; =20 static const struct sja1105_regs sja1110_regs =3D { @@ -621,8 +617,6 @@ static const struct sja1105_regs sja1110_regs =3D { .ptpclkrate =3D SJA1110_SPI_ADDR(0x74), .ptpclkcorp =3D SJA1110_SPI_ADDR(0x80), .ptpsyncts =3D SJA1110_SPI_ADDR(0x84), - .mdio_100base_tx =3D 0x1c2400, - .mdio_100base_t1 =3D 0x1c1000, .pcs_base =3D {SJA1105_RSV_ADDR, 0x1c1400, 0x1c1800, 0x1c1c00, 0x1c2000, SJA1105_RSV_ADDR, SJA1105_RSV_ADDR, SJA1105_RSV_ADDR, SJA1105_RSV_ADDR, SJA1105_RSV_ADDR, SJA1105_RSV_ADDR}, --=20 2.34.1 From nobody Tue Dec 2 02:32:17 2025 Received: from OSPPR02CU001.outbound.protection.outlook.com (mail-norwayeastazon11013015.outbound.protection.outlook.com [40.107.159.15]) (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 D40703612F9; Tue, 18 Nov 2025 19:06:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.159.15 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763492769; cv=fail; b=Qn75empENaahqzdzvECtXRXr+ZVBIeFqA0uV530Qapyy9ETucwEWo/lZcPxRZAAQu2SxUAHL2bkXYI24f7nadQmAmvDzWJphiGWCBFRaut9gGKDkS9BbDg1w2uvOOhfT9vhDbkGE6IBIKEXt8uOnLWVMhnzdRIsL/pcnw68z/h4= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763492769; c=relaxed/simple; bh=GPtXy4dxOff6XH37IOQJPeCgnmo27Q+9Xn2Ue0+fsFw=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=n+MEB1hxXhcDAS8C62fNKwxv9hzL3xB7i0i+MxNTuWpaWnRDHtisx4WInFmmC0T7KFmG34gcgVajlbUTG+d4Zf7nWCeq9wSNipR8lZZmBZdxjRo75JIHPnaQxPFiRdVODhwV2HhMPf9VH7Ew6q/s6i8H3wxPMtjWVD5d8UGxawo= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=AUlXBjRM; arc=fail smtp.client-ip=40.107.159.15 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="AUlXBjRM" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ao0s4fEx2KjMTdmr2n/CVUW14Q5KL3JuAq8gUJFtd1Gowwm1LIt3bGlPnrddHHhfMvWpdowutipPh8kl8wsKELN2u4AWrEOovDejCKu/8QJoE12wa2XdK163uHcFfQ/lYy6NHKc7HQcuiHtiKK51BoU5xYMVThGVnsk5TFYraoeopAJjTGcDqbiO1ZeJiYzBjdl5rt89Wr6n4BEvqwsi0V+E7vRECy/2cEAvX0TXpDqFY2XOfs4A8nJA2jOM9IT79AsuGB9uqeP2az6EU5gGM+FZmA9bPHnGFSOUd/CBj9jF5YXyjps/bIjFYqEb78fQ+AlfaF/sfxbZbqHr/R+xMw== 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=G6/zS6SPTIz7nOXYpQ4SdiNpGqZm1rlDpaA1luA6a90=; b=FxiSZHtL/DIGn8S7mUn8S4DkMTeRKxTX1P8XHINvHPDxWWZd05hmNl5H71SkuWPpD2es1Hj9138sbzjggL8Q0pgFTWLk8qHKaWHAsaht8Xa82kqubt9yrIBBjCKNdYOrIA/VE2J3wUkbsh2JKPtmH9BImVMOu2kY3WC4Y8+R092LqyxzSkSnLniuhqZINDwLYP4p1lRJWq8+SFNmOpCbeuLVYeofSFbzqMdr48Q+KONjegFajJBQ16tTpCpz/DYQ3SgP5rtX6RU4SeihftbJeKt78A45nhi5TOThicqNEtMfvcTWWfj+7+Z43gT6VrN2+wRHLr7xzYjUjSI/k+1fgA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=G6/zS6SPTIz7nOXYpQ4SdiNpGqZm1rlDpaA1luA6a90=; b=AUlXBjRM116q8/LmVvxVX10BBPKrBbSX4e83vSKVjAGZZd4bEZt8svazwtvLndtJA07sVXUzdIMlpPrfHWLl1wmtxOx3HBphggqHLo6LIFIWLA7IeewQHnagly06Mf2htJhnyIK12Dshh1oEoq/9TCe6HuIn7jrknUCDylxdFphvf/0Y2jRfmYFLmpQuxGytm9SpWmkkuG02csnBxgwcY5os9JDafZIPfy0b544HRykDwbAuPFT4sz3Z4MQso9oAZVaEgYEjgBhnhkHSbZH0g43QQccAapcDM0wcEp1k2kvsknZxtmFWOhP2zXUjHL4xleOtB3WYp5keS7P2oUmzBA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from DBBPR04MB7497.eurprd04.prod.outlook.com (2603:10a6:10:204::9) by PA4PR04MB7695.eurprd04.prod.outlook.com (2603:10a6:102:e3::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9343.10; Tue, 18 Nov 2025 19:05:57 +0000 Received: from DBBPR04MB7497.eurprd04.prod.outlook.com ([fe80::503f:b388:6d07:adff]) by DBBPR04MB7497.eurprd04.prod.outlook.com ([fe80::503f:b388:6d07:adff%4]) with mapi id 15.20.9343.009; Tue, 18 Nov 2025 19:05:57 +0000 From: Vladimir Oltean To: netdev@vger.kernel.org Cc: Andrew Lunn , Heiner Kallweit , Russell King , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , linux-kernel@vger.kernel.org Subject: [PATCH net-next 09/15] net: dsa: sja1105: remove sja1105_mdio_private Date: Tue, 18 Nov 2025 21:05:24 +0200 Message-Id: <20251118190530.580267-10-vladimir.oltean@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20251118190530.580267-1-vladimir.oltean@nxp.com> References: <20251118190530.580267-1-vladimir.oltean@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM0P190CA0022.EURP190.PROD.OUTLOOK.COM (2603:10a6:208:190::32) To DBBPR04MB7497.eurprd04.prod.outlook.com (2603:10a6:10:204::9) 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: DBBPR04MB7497:EE_|PA4PR04MB7695:EE_ X-MS-Office365-Filtering-Correlation-Id: 464c1d86-d224-421a-411e-08de26d58186 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|10070799003|366016|376014|52116014|19092799006; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?iFg0uuOmgmrX3OpOYZK1hs+Zmxv6xLcU4L8mHHWJaC8lqjfPqvMDvmpsJWTx?= =?us-ascii?Q?ecPO/hW9dEgAw0BFDZx1oYv3dRAzcJiyEdA7+JsiV5h5ugKtKwShmL2BCS/T?= =?us-ascii?Q?nS5besmqvXUDCh0Eqw5BxK+dy/bNaUbfPOFCup1pHmoh2o5LPQvb7a7+lk7z?= =?us-ascii?Q?Zt/e20AkLv6eQSIbr4EXQdhBcKExGGGMoaC8Sx19Kfx8iCI9sviqA9Cq7IqB?= =?us-ascii?Q?9CigExJbP30TF08ndW/5pXS8w+Xr6i0Wj+oufrrXFBzQQ5Tr1jreuuJiGK/6?= =?us-ascii?Q?sA7Iv/KLURkIvGFlxU3469KvJrtF7Oq2gjCSOHKTW3Mf9kxGBpNgnEf41cqR?= =?us-ascii?Q?7pqyGYhWC+CNYkxCw2pNJKuxFUywcWWtsl1lelxAkRkRE8gCDkwuUkb5tS7k?= =?us-ascii?Q?TSNHXLYIqdpbm27EXbVg1ttRDWDR6IxUkDC4f5qgA7c6JQYW1Ht/3PWWmVYP?= =?us-ascii?Q?5vGoW+/b1/dVlUezTVTu+EIFu4aQGygSHXEuf+7fvtfxazkB1UPBGLxyVEXJ?= =?us-ascii?Q?Uzkr6nkowJQJruF3ayTRSdIH9VpEQCSZX8QOFh4RpJLLTTeZH8FII7vy8YXd?= =?us-ascii?Q?XBOhHxvoo82xGgD12doEzJQNr+Zxw6pZKC0VHKksiux0zQ96Hah/gaoa2DIn?= =?us-ascii?Q?NFp0leuXdPhryqVs/eGT5km+UePhyswyxDH6K6wIJ+j4L4/yipckwe5yIBal?= =?us-ascii?Q?MuH0eaVX4uPz+f0bTYG3hwBitgCNoSEWSUO5srbdlC5bBlNPRGKkgrFLSuqQ?= =?us-ascii?Q?CKoISDkXrHcyfehgoqKtgQJdOZshhe6+yd2xPNs87WddquxMMqTyym8iD5SJ?= =?us-ascii?Q?a+xZ/9NEPl/MDONyFVP8jaN2qdVUnpdSYA20S0WltfJ+rNneOqD+3aby88Cz?= =?us-ascii?Q?VAqSo7gZUHwcmrNcbU9/SWxEM6u7qNcejqXXV1jldSgz6GMnQixpwqc5SvYS?= =?us-ascii?Q?on39W0N5AXs8j7LExbjIu15Gn/MpOmnuJxIb4rwKSXJhsWO37SWXiWpM1FVh?= =?us-ascii?Q?DuFfoi9tyO8tSGg9+ho45jLP9xo7cyZhCtuec1SJErDQ3bqunfTiyIABKz+w?= =?us-ascii?Q?3gPF2gICj8N7rfNluDAwUVSzO/XSpjSJ/JdM05y69UUKMVwRMxJw8OhEItw0?= =?us-ascii?Q?bndr24RzxW4oBZTZM5mLPrsC+U/mweYXDhlnGkrcXTHUIcVski/6dWfjfUkN?= =?us-ascii?Q?F040agVABnBLYdHmfaS1cuMAItv1lZ/Qw0tfDHwFz2NsOsbS4x1EhEvnNm7q?= =?us-ascii?Q?txeT+B6sSWaulnw9/DM919m28EoxmoWVY39iAQffGYZZS7Jht9XUzvnly9Hd?= =?us-ascii?Q?5Pbsx9UOOBeNdAkk4Fm4ZyeBOd1Ik6pXPDbOjFjHnVGDgNREoSlG2rhvpdHl?= =?us-ascii?Q?MM1kt5ehaAtF4Wa72rRso4uSK7J2UA07OSX/nHfyC8eCx+mwJXGjNJAQhC3H?= =?us-ascii?Q?bofbgMOUyNgDfLJhnK9ZuiO/bNIBeEtq?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DBBPR04MB7497.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(10070799003)(366016)(376014)(52116014)(19092799006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?sOacyb2HMByr72zjmcOeo16ppNqjPoL5FdMRfwPt9avhmJVYEEVVRpkj45/E?= =?us-ascii?Q?WB5HtREx+j/EX4cn69ETffMOTZAdAAml+Hk2o2r+wg7e/YvtnYIKV5oWgKgB?= =?us-ascii?Q?MCWrqEqaDj4zBqcxotL1VqRv8be89qwf30u1+wRgZVRQ9oZxRYZWlnBkqLpE?= =?us-ascii?Q?AJDcKil7CjvIqjpWZkcMfkvLzBO4ND2fXYovOC51pbfrxP9hIkZMBfCQvnck?= =?us-ascii?Q?6wrCAP6EwQ3bjGFCcKwGSgUcLSEqnL+QfpVGUC0kq9p8PW/1bYK8moU/JLzA?= =?us-ascii?Q?HrJoIpyo4PUHz3mpdw4CafSO3KzjQ5lsc3tBQg77K4Dy6TxlW+0F3jKYcMyR?= =?us-ascii?Q?B1tZTNkvb6FtoUUIzWwTYhm1Vv40Au/VvyxfxNdBVwtxuFUVbMJ2QPsKZ5TB?= =?us-ascii?Q?eKM3Ye/zBQgLFJQtWf97jGOZHiphQYtIQllT8thwX8q/P/SbkhuhkwiF+Xc0?= =?us-ascii?Q?UOE1I9nAWf4tUSjmV9NG8Qcs/wnbT6l4RfgWt6li3Ef0vpoba7ZstP4JK0RA?= =?us-ascii?Q?l6je6beSKdr/0RUVbIS8diw6SqAMj9enO4J1GaPfSSHI3vaCClsms9KosbKa?= =?us-ascii?Q?eArwARDJxungYJ5n1jr0A/dVYRVOY0zXYaLcOfWDRcdqh5rFY4no33jwRbhQ?= =?us-ascii?Q?Z9IzOfCG+H+frUs2tA14fZNbp9U8wYMTv0XuWFqAb6LCAxNLwQi8jLw19UM4?= =?us-ascii?Q?YxCHE5imBRbtuuDRqilYPhOVT/DEI9h3zJYLyjUzT7/Ifo0bqcGUCgQGgm0S?= =?us-ascii?Q?OspCi3yzYnkFM1pavgmX/cVaWUU4fEBDFGUAQKtAZlUWzIOWYslugpfk5XNe?= =?us-ascii?Q?e+uIcx/JZ0/QVQ5hdaB3Kn7791TP5t2YQjeCGQ2ZXdIVGLjNHbnB/oDJhjrC?= =?us-ascii?Q?dC0+UGbzZNl3x6oJ6awojvIqXaKOc5J4QCrMSi96Vsp7BWFTk3SvzAFy6qZC?= =?us-ascii?Q?IMV/zRnWpEMSQpU9dgrxjl52ywk4kz+thn4V8xVJN3nxfsI5kEqo7/IXnisM?= =?us-ascii?Q?XZXp+csSiPmGmAAoKuO4YhRdKdQkT2wMPwAVV/70BNgrlY10RDj+d1Gjd8YE?= =?us-ascii?Q?8Yh+YhjcjRhhKrxttx0fGlkYEwxg8KifL4EerZdshjKP3VUp23cv3cARq+KA?= =?us-ascii?Q?2865q+UOx36tVvQn5eBaCxnv03WD8BCjpu9gwoKxUUVZYeY0ACyfSV2gHoUN?= =?us-ascii?Q?HgaVhiPNCsvYoIqPypm/CucWn2J8d6cNeC1hWHLeqs5t8k7WWEZezHd1LRAB?= =?us-ascii?Q?ZlNOT3gkJi6iUs4REWqyM0zhfRi4gm1pwq1PejrKi70tzXyuuSmxfn5obyBp?= =?us-ascii?Q?3c2V21rJB4b6CzrlAq5cQYWFD5r94aRgqe1pnYdQwi+IMuX+6mpUpbhamCD9?= =?us-ascii?Q?Kkhxj9cK4/jpwvV1x5flNOJBYZA4shIewnZ6AgIG3BKVgjIlAa7YzWd4NAY3?= =?us-ascii?Q?ofx5rN9W+hD9PZlDlQpp4GpJJbcMbtGhPKezLvXW9HqB8nzuQ7ngJWUHi/Wm?= =?us-ascii?Q?G79eWoC0B/5lwzmqUcPRpVK/oO1zXJV/u474PTtCqba+Hd0qpXg9ys+ABKek?= =?us-ascii?Q?xLiW4WjCEguYgimC2ppF4WPQAp+pTcN2gj9j9cYDF1uxcVyxWw+9x4sDpna5?= =?us-ascii?Q?pIoNnNnzxePuyIQ43Hkx1qQ=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 464c1d86-d224-421a-411e-08de26d58186 X-MS-Exchange-CrossTenant-AuthSource: DBBPR04MB7497.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Nov 2025 19:05:57.7852 (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: huBs5drBLSIBUplXrFLrOJaIqxKWTWhdQoKNF8VXsr4GNeJTZIGTnnshi8ATM92FZAzMRAmL7bDyNUkc0N51TQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA4PR04MB7695 Content-Type: text/plain; charset="utf-8" This structure is no longer used for anything. We can just set the bus->priv of the PCS MDIO bus to be struct sja1105_private. Signed-off-by: Vladimir Oltean --- drivers/net/dsa/sja1105/sja1105.h | 4 ---- drivers/net/dsa/sja1105/sja1105_mdio.c | 18 ++++++------------ 2 files changed, 6 insertions(+), 16 deletions(-) diff --git a/drivers/net/dsa/sja1105/sja1105.h b/drivers/net/dsa/sja1105/sj= a1105.h index ff6b69663851..22fce143cb76 100644 --- a/drivers/net/dsa/sja1105/sja1105.h +++ b/drivers/net/dsa/sja1105/sja1105.h @@ -94,10 +94,6 @@ struct sja1105_regs { u64 pcs_base[SJA1105_MAX_NUM_PORTS]; }; =20 -struct sja1105_mdio_private { - struct sja1105_private *priv; -}; - enum { SJA1105_SPEED_AUTO, SJA1105_SPEED_10MBPS, diff --git a/drivers/net/dsa/sja1105/sja1105_mdio.c b/drivers/net/dsa/sja11= 05/sja1105_mdio.c index b803ce71f5cc..d5577c702902 100644 --- a/drivers/net/dsa/sja1105/sja1105_mdio.c +++ b/drivers/net/dsa/sja1105/sja1105_mdio.c @@ -9,8 +9,7 @@ =20 int sja1105_pcs_mdio_read_c45(struct mii_bus *bus, int phy, int mmd, int r= eg) { - struct sja1105_mdio_private *mdio_priv =3D bus->priv; - struct sja1105_private *priv =3D mdio_priv->priv; + struct sja1105_private *priv =3D bus->priv; u64 addr; u32 tmp; int rc; @@ -35,8 +34,7 @@ int sja1105_pcs_mdio_read_c45(struct mii_bus *bus, int ph= y, int mmd, int reg) int sja1105_pcs_mdio_write_c45(struct mii_bus *bus, int phy, int mmd, int reg, u16 val) { - struct sja1105_mdio_private *mdio_priv =3D bus->priv; - struct sja1105_private *priv =3D mdio_priv->priv; + struct sja1105_private *priv =3D bus->priv; u64 addr; u32 tmp; =20 @@ -51,8 +49,7 @@ int sja1105_pcs_mdio_write_c45(struct mii_bus *bus, int p= hy, int mmd, =20 int sja1110_pcs_mdio_read_c45(struct mii_bus *bus, int phy, int mmd, int r= eg) { - struct sja1105_mdio_private *mdio_priv =3D bus->priv; - struct sja1105_private *priv =3D mdio_priv->priv; + struct sja1105_private *priv =3D bus->priv; const struct sja1105_regs *regs =3D priv->info->regs; int offset, bank; u64 addr; @@ -97,8 +94,7 @@ int sja1110_pcs_mdio_read_c45(struct mii_bus *bus, int ph= y, int mmd, int reg) int sja1110_pcs_mdio_write_c45(struct mii_bus *bus, int phy, int mmd, int = reg, u16 val) { - struct sja1105_mdio_private *mdio_priv =3D bus->priv; - struct sja1105_private *priv =3D mdio_priv->priv; + struct sja1105_private *priv =3D bus->priv; const struct sja1105_regs *regs =3D priv->info->regs; int offset, bank; u64 addr; @@ -135,7 +131,6 @@ int sja1110_pcs_mdio_write_c45(struct mii_bus *bus, int= phy, int mmd, int reg, =20 static int sja1105_mdiobus_pcs_register(struct sja1105_private *priv) { - struct sja1105_mdio_private *mdio_priv; struct dsa_switch *ds =3D priv->ds; struct mii_bus *bus; int rc =3D 0; @@ -144,7 +139,7 @@ static int sja1105_mdiobus_pcs_register(struct sja1105_= private *priv) if (!priv->info->pcs_mdio_read_c45 || !priv->info->pcs_mdio_write_c45) return 0; =20 - bus =3D mdiobus_alloc_size(sizeof(*mdio_priv)); + bus =3D mdiobus_alloc_size(0); if (!bus) return -ENOMEM; =20 @@ -158,8 +153,7 @@ static int sja1105_mdiobus_pcs_register(struct sja1105_= private *priv) * from auto probing. */ bus->phy_mask =3D ~0; - mdio_priv =3D bus->priv; - mdio_priv->priv =3D priv; + bus->priv =3D priv; =20 rc =3D mdiobus_register(bus); if (rc) { --=20 2.34.1 From nobody Tue Dec 2 02:32:17 2025 Received: from PA4PR04CU001.outbound.protection.outlook.com (mail-francecentralazon11013035.outbound.protection.outlook.com [40.107.162.35]) (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 472D8366544; Tue, 18 Nov 2025 19:06:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.162.35 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763492770; cv=fail; b=IzmccJKZOQJ2G6YHzxmiDvfbcesVK37ntBRcNjG0e976yZ4T+BUX+glnYIPSfL2iUN4Z1tzPIgYJV5DLI7apVKyMVbQ54bO8Ppqu4QLBu1lChyViw5IZkUjljBqEHgxtfHSx/PHq2fhHw7EG7xvyKAvbExNDdqgRo4AVQF4Gmuw= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763492770; c=relaxed/simple; bh=WnZajlIvWm2AF+zASSBQVUpMkaL5dUMVFRknuaFYMHU=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=dJtzl9ynVvqHS6vfYka0DD+2APwixHbouvwLn0ZnI1SQh3wJDE2G+hF0lGQwCdU0naNOBddAoysVOQ98GRU2Ia/fLHhjKa3hjbJEAWaxXaSFxtPguTEtn9WEcfxuQfKi346jTmljZiUMovhM2waZ2RjfwTAMxqGrOQvPgqlOzUA= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=D0mFeGJH; arc=fail smtp.client-ip=40.107.162.35 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="D0mFeGJH" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=khYXFtqmxTx/gGBqLue6KtkfnOGy9BmcY3d+YEtD3jqISxvMpsloqkPYcB3B8vAKwSlKOBPOUHE6P9iHFTTldVm5nSeDNEKGbJPvZfjun2Rm2N7mqhn1Sa6u7ZOGDsDIbbcwyLC3hNsC6+B00kUh/1sq/I3/3NsGf6/5xmwqWHjyI0vEKFSFdjtW6QBmJhIjiU4+G8t6NJAF2IlPSUrhexdZyJlGkyahbgTM784nK0VQVMwDN2WInU5jWVZgKLzW+xNxM2APlgKWBYXBL0jjUGd1tkKwnv0xr9KPcLJ0WsYTbR1mXjdw83/GauHQylvdJNqTQ23LkfVBrRbLds2HMg== 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=0sP7UPxyDJVGXZCSRIxtDQ7YL4LSF8sVpjb+knqDL7k=; b=FPBLuzPMwN8nl2WvEVqI/XM0xL9gFWvYLnFzMu+AVnmr2ZyDZBzwiDnFaUL3HOQqSTo97IoVHxfAuwM5+ytZLR3FrskHAVDODGcadkSdV1AcdhEzPMxGLaNA2GvRmgyDHjE+bvv7jqEHUztg7y3f6eN7npHbHBbjwpAd4JEe6Hk5OybrKtWmM3tkyTMbm0Cozg3MpVwdqLOaC1caf1jTH+Rd+3iRnoIHthO0dWQMaBeMETHplTUpFKsHLSCZY8lvar1zTtemF7iZm8Ry9hEVJO5E5fjZ5wakBxZsBywOCTdH2vzRURbIyDWUsO+H2/4UunXotSif3UQIjizQu8l17A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=0sP7UPxyDJVGXZCSRIxtDQ7YL4LSF8sVpjb+knqDL7k=; b=D0mFeGJH0whM+Xbb3WsTZajElxw2bTTwnjBaVXDr0uOzMUjiXSSjDi+PQsdfUAvij+xbDtGF4gtP0y8QVRQDtmbDeXRur9slCIqVlSxDi4bfJL89TOfOtUQk0EjCsOEdEmfapZSxViGU6RWaY3lrYTWfB7c4Uqkec5ni+sMVWVheEPGsXhuEzAkF3Cuc32y32NnYq6kEsQZXCNCfyJOTrHqIqdqm7byj0xmoVCcM1+Dyt5i164PzG3WzLP0p91JYzWBRLWgyKJbEfW8DxNpLEpoEo/pfA6PSX9ZO/0jDO//yZEsElNcS4yfdigRpga9AJc89E4eYalPDxTBnWu680w== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from DBBPR04MB7497.eurprd04.prod.outlook.com (2603:10a6:10:204::9) by PA4PR04MB7695.eurprd04.prod.outlook.com (2603:10a6:102:e3::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9343.10; Tue, 18 Nov 2025 19:05:58 +0000 Received: from DBBPR04MB7497.eurprd04.prod.outlook.com ([fe80::503f:b388:6d07:adff]) by DBBPR04MB7497.eurprd04.prod.outlook.com ([fe80::503f:b388:6d07:adff%4]) with mapi id 15.20.9343.009; Tue, 18 Nov 2025 19:05:58 +0000 From: Vladimir Oltean To: netdev@vger.kernel.org Cc: Andrew Lunn , Heiner Kallweit , Russell King , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , linux-kernel@vger.kernel.org Subject: [PATCH net-next 10/15] net: pcs: xpcs: introduce xpcs_create_pcs_fwnode() Date: Tue, 18 Nov 2025 21:05:25 +0200 Message-Id: <20251118190530.580267-11-vladimir.oltean@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20251118190530.580267-1-vladimir.oltean@nxp.com> References: <20251118190530.580267-1-vladimir.oltean@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM0P190CA0022.EURP190.PROD.OUTLOOK.COM (2603:10a6:208:190::32) To DBBPR04MB7497.eurprd04.prod.outlook.com (2603:10a6:10:204::9) 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: DBBPR04MB7497:EE_|PA4PR04MB7695:EE_ X-MS-Office365-Filtering-Correlation-Id: b46c3428-08bd-4148-01a2-08de26d58227 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|10070799003|366016|376014|52116014|19092799006; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?BOCCfATBkHU2fUGsUHUxQPm4jLn49hllobKjaYz3bjAX7Gq35TBgHVRpb7OQ?= =?us-ascii?Q?sOdJK+q4S3iwhigQXRU+nl8Aq/y2wtGzppuKFBU1EmsIVH/l+hDOqYtusgnX?= =?us-ascii?Q?Bgh3a9uahHNKIPfXCfhwbISa0bSd/0gyzlSZ68QeMgFKRL3NLr1U2W5v20l4?= =?us-ascii?Q?Him3dix7bfOKhT/DOEio0Fk2/MgFlOyuw7lKpWnaV62rHnt4Hr6SVL97oP5n?= =?us-ascii?Q?hdXjP20t43Srm+Eoxxs9Eo4RURVvR8OisJLnIdhUDcx02RBodVkYx+xpToTV?= =?us-ascii?Q?jdLxik2ZJsaw7Jxk2MyH6AHx36ZuVp16rjs0q75Yy1Ko4N4lsq1GhxurN5Ax?= =?us-ascii?Q?rjdoh2kPVPUx13SX0DM2wssz4DTS8vZMFfRRPEPl+TohECAc3tDlTpsMf6VH?= =?us-ascii?Q?le37RzEMSy7SwSVeLT384OBi6TQwd2GnDZFv8EzyQHPYtCss2TN2bGBn/bu2?= =?us-ascii?Q?+9s1H47fD30VHGFJLrH1reGs1gx2H5Gm/+Fub21DUFgZjX+DMGOnhs0M52NG?= =?us-ascii?Q?lCStCQD2j4aZMiNs7BJYDQqS4MigSIozvpBcPXPjt7JIAzIktM+A2d6IpvZn?= =?us-ascii?Q?4LDIm5EWOVnmjPX5M4UTMHTyY8/ecRrYk4ea+Gu761AS1LGgusleIfRHIq2/?= =?us-ascii?Q?IzXTVHQAUY7Il8aa/8r1Wh61817FWjfEJtN5ol0SFtyx5ZbpysYnal/L6LuR?= =?us-ascii?Q?GW8kHnRj6hZ9oyJRwdozFRoxqFI2ATnasHhqap5uGbSu0e03WdKirSVRpNt1?= =?us-ascii?Q?H12puMtgjlD06I3YQRzX0V/5cg/lPTG4R7Q9Pp341xjckYW6vhe7m4lW3Z8Y?= =?us-ascii?Q?vPm20wa/ftVm1UbydpohxL3NFcAWqlksC8NWXNkhisENfx8iqM3Sr5WLfyt2?= =?us-ascii?Q?Ii346aRqvvKJ0KZf9oPpJROy28f81qdc9jhHe1lsJNzj9Hdi6T3cCQcIWLFm?= =?us-ascii?Q?HCABGCb6UexxtkXlNgrB3tw3cZbZZa0mmIbbS58wAxco9UlhS+n3M2KjHX+4?= =?us-ascii?Q?MjM1miXP8Wdfl5j3nc1rBNrUkL4ILNTp++PXTAiMuXd55dwQzPOUbQw7XbUN?= =?us-ascii?Q?wLqXfjvz25UWHI7TyerNxIFqT4PmrZC2nIIcZ/4NhyU9cvVFB019cMv25MdJ?= =?us-ascii?Q?LolipjvHljsfgcLlsimYn/eYEaFk7vfq3XVPDpWC6/lEmE1rt4VATb+aOY+y?= =?us-ascii?Q?y3Fyk0qgtStuiwGnc4uxyDIBArzEBUgbgQgq3S/cNCRChEks9faPi5dH7tDC?= =?us-ascii?Q?05dvVgUm/Fr/j83/cDLGs9elxB5UUcKOBICzMTVownNtJleQAY2BAxSicD7D?= =?us-ascii?Q?1gWOg2j4fFd1ZXsoUzyAEyCeJYcztVACiAW2JlHTVoZx3sNW6nj2lJ3fYFBf?= =?us-ascii?Q?KChhjRt9uKtv11VY6xYzHGXzJxcyd2K46pWP3hNYrEDpsR85JtqYAOyjhefK?= =?us-ascii?Q?/KvD2YYpMQet5kZkZ0CHn9nBfbecRCGr?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DBBPR04MB7497.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(10070799003)(366016)(376014)(52116014)(19092799006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?mUpMO9n/W72+H9o19vhayyZF+dfh5pZxrWo6dKqDOYB+q2Hb25x9EmgEwv4K?= =?us-ascii?Q?Zxkg+2E7/oIQa+YMjMxxJU3nMo9FnbTCcsO9JCql6DODNdEss+iR46eTAvOK?= =?us-ascii?Q?El21UQWqqZ7rBlNDO20ytGzC949PTrx4yYTKZBpnxAnidAnaepw3Kj+Z7m6O?= =?us-ascii?Q?AHiFqKg1Pyd3iGXCgL9sgObwZZ/+LSWbamHwvJPGyaquD2BuWDlZC4WnuRA0?= =?us-ascii?Q?RuAo4y4EwzVbEL3uoY/wVRqmpbYBGFngq9W5s+3JHGUWgT1tO1bMKTE8jT1D?= =?us-ascii?Q?EeA508QmtZA6+r8wgGlLBmo1jl1T4m/pma/GqpHEKKEhjmPQqWtfy7E3XJOb?= =?us-ascii?Q?0gWQ9+TvdLZjqNa2oyE29axlEuQU6df2UW3d/8aXRPaom7iTZ5Stv5iQBIPz?= =?us-ascii?Q?6iWBUdfZa9pKKgSwp1u8doCNy3BygCyfMiKe+JEsy0yNlVNS7Mz68M5hi5Kq?= =?us-ascii?Q?wdesYDwaN5SqpBFnxZkDvSQxLqQoWID4hh445ysgmAocHQnLRgJMgdKPczcE?= =?us-ascii?Q?m3HUplBFCvRwwjCBycRxf8tzi/UX+x+VyuXwiQjRQlm5NG5NEX/NUv5TIS8t?= =?us-ascii?Q?QmuT27hgR3LddjzQRKhXbh6lAiJ1PrvH1KyJTJzWyghyQx2raN+Yh/VSvYQC?= =?us-ascii?Q?+tOz/ITUNiSb9SPFCoGo7oaid9isBKoAnusBZ93sbOmvASMQqJIMYQuJwONB?= =?us-ascii?Q?PdHiKGnMsoo3CifzLisbE4Agbjw6/FTNGHWokTPAq3MLx9WDlnTPZH9gubVw?= =?us-ascii?Q?dgD5DUnrTWrLLYQDz5jqzKuvPCckjAjUqDEwTubWSnkZwKaRcv9o0NQuUmdk?= =?us-ascii?Q?rLo+wQOgG5QVWthXiaHf4EmV4dDqouLrFzDUI3Q67u9iO26zaMG/2tHFKvQ5?= =?us-ascii?Q?cZrpSDfd3nOwINbCfkvDfb61KAiYHDzKoGVgiYUNDNR3tcJE4aGggknIydhL?= =?us-ascii?Q?zqtmCJQ1WOKYXGKSQMX0jGNlK/1tVRfmFgyYCFF3nOlAtivWpeEc4oc4Lk6I?= =?us-ascii?Q?+6J/88hvnHCi9P8k1L9L+jb2oczhukMgdtWYmVF/2UKMhK0IOYvzGYqLPswO?= =?us-ascii?Q?XUl3vTw+rLVAEEw03XxCAub4P0I2fuyYzToxeI5jFMAZbtlkddVrCKM6rXFE?= =?us-ascii?Q?mANBJP4yHsGXj61j1OKv16Mf8Z0pewsnCGwItnGQvVLgdrEKVdSdsAAg07ce?= =?us-ascii?Q?JpCY+jDd0zhOmplmIY5o0cIybmWNUB2ydDCg9SAFXq8UbLVAETtEXdZEKf15?= =?us-ascii?Q?sx4i8I9QmLu5QbX8BHmHlNYKih7/Nz0Pb6kyKG958Weh76QqPHC6swM4kADH?= =?us-ascii?Q?KHYnj+bKd2O7E5mkvfg0w6tCInDyIsq6pOUCtitcz8VpNG4JiRwPXMqSjtww?= =?us-ascii?Q?Gwz7cClIDsoQuNXVd5xH1ZrGqQQ+P6w2CiXSIMuLylv5IBbeGYJtlGQiotaG?= =?us-ascii?Q?Cp8Sv6UeT94yC65uW0NVB3/TxSnhFSCRyvMb8G4xSiLVjbXMlVfiiSpmqfOV?= =?us-ascii?Q?bw7DAEcrAsaAQ2cTpEEDc5VQtdgVipRj4CvoKrnYp1ERDhr+WCZv8CUYnKxe?= =?us-ascii?Q?4GUqXtF956Hhz9jn06uresI7fogvFM2HLLRNNgGu75woYXtX1cO84wBuu3ge?= =?us-ascii?Q?Xa++tAlWeJyWehUQChNHCmk=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: b46c3428-08bd-4148-01a2-08de26d58227 X-MS-Exchange-CrossTenant-AuthSource: DBBPR04MB7497.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Nov 2025 19:05:58.8306 (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: sfcmKuCCC2c6NPOlCJ5qWo9Qu0UOZV00ZFTelC6v/PqKa8s3bsrX7g/pt9V/VVe/hL2XTBv3TVxkis5Kkb8ocA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA4PR04MB7695 Content-Type: text/plain; charset="utf-8" Introduce a wrapper over xpcs_create_fwnode() that doesn't return the specific dw_xpcs pointer type, but the generic phylink_pcs pointer type. For example, the NXP SJA1105 driver might use this if it has a pcs-handle - it is already a user of xpcs_create_pcs_mdiodev(). Signed-off-by: Vladimir Oltean --- drivers/net/pcs/pcs-xpcs.c | 12 ++++++++++++ include/linux/pcs/pcs-xpcs.h | 1 + 2 files changed, 13 insertions(+) diff --git a/drivers/net/pcs/pcs-xpcs.c b/drivers/net/pcs/pcs-xpcs.c index 3d1bd5aac093..8f7c43a066c8 100644 --- a/drivers/net/pcs/pcs-xpcs.c +++ b/drivers/net/pcs/pcs-xpcs.c @@ -1591,6 +1591,18 @@ struct dw_xpcs *xpcs_create_fwnode(struct fwnode_han= dle *fwnode) } EXPORT_SYMBOL_GPL(xpcs_create_fwnode); =20 +struct phylink_pcs *xpcs_create_pcs_fwnode(struct fwnode_handle *fwnode) +{ + struct dw_xpcs *xpcs; + + xpcs =3D xpcs_create_fwnode(fwnode); + if (IS_ERR(xpcs)) + return ERR_CAST(xpcs); + + return &xpcs->pcs; +} +EXPORT_SYMBOL_GPL(xpcs_create_pcs_fwnode); + void xpcs_destroy(struct dw_xpcs *xpcs) { if (!xpcs) diff --git a/include/linux/pcs/pcs-xpcs.h b/include/linux/pcs/pcs-xpcs.h index e40f554ff717..1fcbcd419ede 100644 --- a/include/linux/pcs/pcs-xpcs.h +++ b/include/linux/pcs/pcs-xpcs.h @@ -56,6 +56,7 @@ struct dw_xpcs *xpcs_create_fwnode(struct fwnode_handle *= fwnode); void xpcs_destroy(struct dw_xpcs *xpcs); =20 struct phylink_pcs *xpcs_create_pcs_mdiodev(struct mii_bus *bus, int addr); +struct phylink_pcs *xpcs_create_pcs_fwnode(struct fwnode_handle *fwnode); void xpcs_destroy_pcs(struct phylink_pcs *pcs); =20 #endif /* __LINUX_PCS_XPCS_H */ --=20 2.34.1 From nobody Tue Dec 2 02:32:17 2025 Received: from PA4PR04CU001.outbound.protection.outlook.com (mail-francecentralazon11013035.outbound.protection.outlook.com [40.107.162.35]) (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 907FD36827C; Tue, 18 Nov 2025 19:06:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.162.35 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763492773; cv=fail; b=jQdfywHFd9nMdF1LjdMYeJx0U5lWOVdD6sqXyQlhtzeBhxhy2GvLiHJV9zU1SL4inZBjDBWYpVP3GW8Wfen8gpzzAPgeo2zd6m6TKNRVhYRZunOixqD/MwlMfa4QD68Pd4aVkHVcfmBo8FRf/2zVRka1y/xbwqKAJ8eXYxKjCVQ= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763492773; c=relaxed/simple; bh=gKuEqsLG3CNospalsrMA5YZ9fWswOfezWT948nwqec8=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=UYrpPNFE520rBC/auEWfhV+JgkLIlCeKVbY7P09h0qLbIGF4CQcijjEPUBiN4Toz2QEN/Eivs5BU/JtCkdW1J9byd1IhUojfOh3lnB7h/sYS5qmYe+sFOdb7WQbwleryQ770FBpjh4LVLcQ1Beg/kr95/Ruz4lucSZjubnYFZP4= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=DDD8o61X; arc=fail smtp.client-ip=40.107.162.35 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="DDD8o61X" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=oHDdUvAMAzbVZfjloQaQiMk229rqm0Vwc63tDS4ztZu0j6/4UTqTtGn6wpZtDKAQEuwa3N0AZzwfTOiXfb0UASfLYvFFRYnf6m+HHhU9yoMikuGBJwGP676siyTSB8DXL2joZk0YFwV7bYDE8AJQB+S9l4PNW8ckHVbuo+AQUshB7c6QUSQ+Oot9VKDzCHH9hdzdfN8GwDjZuuqZ8Xr434/D5SoxryoNvGUaCUBiUws22SpXNr+c7RyYyK/iW/irwMwmmTrcKVEJX0ZG89yCRGRE56a0ktVrqwig7w3xW7V3ntjpzfnxlJvDzQYPnXUv+5SuLeivzT/lOaOgi4NBgg== 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=fZPWNvmLEtc0ng7Rs4Ok+eVovfXw4+QCKnKcjcbdKe0=; b=e4apQAe8iRJvqRkGyGiW+knRKCby+TpnBhjSD7eyospJqOS+D571ujyU/Yr6E7kAAeNXSHB8Xa4eTRz97xb8R2xCOPi7/ILEfom8cyKVtuWE8OTcrHq/LuDf9Rt0EkXJVzMG1Qhn1imZLjY1xp45/vwQ33UgaxpqZSRu+7vgFPsh08/vRq67UWIZExfFc8rrycH+43+XCgaCtH3hajlnnPQNARArp1SA13ywMR0wMZkziB9NIIRPB0fjDPDsUVp0ybu8FSanBXBs7nhf/ZJUw7bPoNMMXdA0AO7cubnN4LlbBzVCoY0isAqU6lWpA1/hYRxklSVkSz+VwOt0jHjcAg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=fZPWNvmLEtc0ng7Rs4Ok+eVovfXw4+QCKnKcjcbdKe0=; b=DDD8o61XTp9RLowYK9DRz16sAOXy/jv4EXCRMCDT45lGjgA3pPGjZlR1EWhLwRPQ/4OcDvLDe0lJbdMiploSpUdRajbSWVwpryY7njr8w/sMNQ1Ct4SoKSEL5jBmaMLwtukEj+3FZy8SLLMeCFiNuhAE81ZzafZFAZoitZ0Az+XfPWQ+3+UGqaXmREIIbT4vhSCZQhkGpgNQVrcvTCPLrprTSqkRJvW008Hg6aTp739tMDB8/D5E9gPRUSUW0F6BFw8AHv1k0N4tFxMgk3qNwHmM9izdQLteCR3DGcp4n7c+Q8kcRjo6jhdsgTx/DI3neQPbnuvqoC+MvQmzjaawbw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from DBBPR04MB7497.eurprd04.prod.outlook.com (2603:10a6:10:204::9) by PA4PR04MB7695.eurprd04.prod.outlook.com (2603:10a6:102:e3::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9343.10; Tue, 18 Nov 2025 19:06:00 +0000 Received: from DBBPR04MB7497.eurprd04.prod.outlook.com ([fe80::503f:b388:6d07:adff]) by DBBPR04MB7497.eurprd04.prod.outlook.com ([fe80::503f:b388:6d07:adff%4]) with mapi id 15.20.9343.009; Tue, 18 Nov 2025 19:06:00 +0000 From: Vladimir Oltean To: netdev@vger.kernel.org Cc: Andrew Lunn , Heiner Kallweit , Russell King , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , linux-kernel@vger.kernel.org, Serge Semin Subject: [PATCH net-next 11/15] net: pcs: xpcs-plat: convert to regmap Date: Tue, 18 Nov 2025 21:05:26 +0200 Message-Id: <20251118190530.580267-12-vladimir.oltean@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20251118190530.580267-1-vladimir.oltean@nxp.com> References: <20251118190530.580267-1-vladimir.oltean@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM0P190CA0022.EURP190.PROD.OUTLOOK.COM (2603:10a6:208:190::32) To DBBPR04MB7497.eurprd04.prod.outlook.com (2603:10a6:10:204::9) 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: DBBPR04MB7497:EE_|PA4PR04MB7695:EE_ X-MS-Office365-Filtering-Correlation-Id: 287c3964-cc9d-4e94-397a-08de26d582d1 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|10070799003|366016|7416014|376014|52116014|19092799006; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?PPGlMvxU5d+F5g6UsUbGTodxNrcwRj+xu+AaOIafU9bbf9E7r+nDqPmq3NMZ?= =?us-ascii?Q?n3IWcJTIKlUXB4ri+9+XK0a6iwtPdPUnp3zPP9RZO8gyxtPe4E0NW7Gkwbfr?= =?us-ascii?Q?UGsYHtqvPHxmonmuoLSxC8djr3/jZQ2rluys0HbzSblp+AGTDYU9iRVUwR3n?= =?us-ascii?Q?3lca6MnkzW1rkKUZP28f/hAeXkkmH6+0BjgoT/pze3aen3Uftw0gGMcoIsoW?= =?us-ascii?Q?2LLiz4VFnNcGZqf/Qv9yLLfz+txTO3bE+XnPB8EglaxorGq6byYxcHn2LiP6?= =?us-ascii?Q?yoLG02L+jcA6DGgpVyIqGS6PiAKE/Cm8sShma0qTSxn3RkYdPOuUB9U2bdum?= =?us-ascii?Q?xlRpSIUfPQ02kcafHnyQRavyuobsF55TIs3V51h+z0HzExslzRrK7Hr6uHug?= =?us-ascii?Q?OZXs2AHANesQZhI0VQ8058Lku/UjcRfRFYtsKmkQND/W7p0oqeUZVQ6wwjP6?= =?us-ascii?Q?kZJyWoPwYKv6uvO08gNXiRS+DUo6qp3T74P/ND3CeSae3/d4yPgVOCex5D+K?= =?us-ascii?Q?yxjDxXiWOLnUbl+9m2R8KioIjfuyKtMAoYikPVh/UNLK40/ZDF3CuBKX6Oi+?= =?us-ascii?Q?P9I30PJcAJxpi8eEPhbmg+U55tizunFhwt2jVgJ0yhx52djTzMyOV7i46AN8?= =?us-ascii?Q?GeqXHE8Z1+KRotN5NuEKyIqz29M+1OyFkamgd8f6atkGm32uKL+BiOIjTyJn?= =?us-ascii?Q?02usCVNVP0RvwxBoYzjEpEZkHVml0qY21hlu5kgz0nxDQf8k2M/Tlode722q?= =?us-ascii?Q?WGTEdj7pn5TU7JQXVotNGTD0uHapaWa0H/sHW3FJFMwT0EOAy0wmj2j1qydS?= =?us-ascii?Q?yLfRmgTs4WUayw7opAg52/SdmD4Z44cVDfp/QdD8ar+f7QClnr5HfvAGcraq?= =?us-ascii?Q?sO7JfqWd3gy/juo+QX7fphJ0TDbH+tZuLuE6xq5mtfl487AV1ANtvqKFegNo?= =?us-ascii?Q?2skJArJVCGaUCOVAhxf1rtQuknvzRjZN9FocSLczfrLybskHYY2gE9u7g96s?= =?us-ascii?Q?TTkslg20eJvjZ4fzpSY3HbQPA+Q52yO8nme+sjmW4Plt99RSejB5sZLiuFny?= =?us-ascii?Q?GwfQsgnco7e8+Ufk0yJgXfz7hzg/H7/qzFGui0+YbMh1OooTcbtvjFf8qm//?= =?us-ascii?Q?dmxPgVGEcJDfH1JKIhSOP0cQpy3Qg31j8PfK9ZJ1S5LpphDY/jro5WjFVUHL?= =?us-ascii?Q?DusYRQkt/0aUjQ6OvV3YK+ZE3q+7h0WYGYCZ9UyRKmbWPD96B1TinTEcTd5C?= =?us-ascii?Q?qly+vBYvYx1oIzNMglVy1kQlJIhQ9+DBoI19nGLLA3gSMmFwZkgugNvUdrjh?= =?us-ascii?Q?wgwzJCUgBZeDRO/cFrVIjZGdDBKP8+jXHjT2Zxx3JLcya/gMQvebjd4Wbg6g?= =?us-ascii?Q?XzbCuIQuBJq4BJh8x6TwUfoIP6k6C7pkK8RSEvls1QFFUwpRCwPCoDD4Xbzz?= =?us-ascii?Q?uPg2NJS8dLnM4wgKUWWCPi2CfDzcmxmI?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DBBPR04MB7497.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(10070799003)(366016)(7416014)(376014)(52116014)(19092799006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?ihoODRFcgGXyJU39W2NX8VHMAnlTaY3IvyNtti8YniiCan87urLgaL9uwusS?= =?us-ascii?Q?nPKrlW9em0scGJo9GeQbh6gTqXnZzJcyy3kVfzsqBpa7qCp68zRSmy4on2DP?= =?us-ascii?Q?jRq3v+hzC7ABChw4Nx7Q5jrqDNP1Ja54fgLo6loxN0H2wHSN2TGXeIC5Rc7K?= =?us-ascii?Q?yiFNoHYjoBNwur1qil6uosRkYCBTrYSKgJ0hhC1MRbDc4MawTdS1ehXReNzU?= =?us-ascii?Q?wV+48vBii9hJpBwR54GllW3JkbXBnAZm8tocKkah8+cbKXBhFaOibFLSeNPP?= =?us-ascii?Q?u6zbuNvtt2PDFbslfOP5Fp/4xgfaTM7VgAoTbb6v3F222QLHosyhQhrGb77M?= =?us-ascii?Q?xJn00KmfFCrrk30KFm+rz31UiG604XQYv71JjBJf9MG2ccigfOmNMPuF2QxM?= =?us-ascii?Q?9aMqafs0s6nCkFmhvxu32EJyNKZcrfcmU59YYmxlbkS4yCbf/8RjieiiV/Gl?= =?us-ascii?Q?1NS9JiIm8ZSVezu6Iyr0bwZU7M2liBV9CfrbRGzHGOLZ0wZX7cqMZo3nMJdi?= =?us-ascii?Q?gb8+cWgCD03PkbSdZVIyi1HMaK5Jg4l94TlAg5EkGmbourcWOKsXRqpYJwMo?= =?us-ascii?Q?kTZCkCMqjHdC7TfMqhETlE81ziMVdnYwhqniQ6uQTV4PiyeI/2NmvubwtBz3?= =?us-ascii?Q?qrGUycyYz1fHhOkdRf/hu8D6gnB936Y+zTHedz8RIAaQP3waWcMnfs7qXXG7?= =?us-ascii?Q?js9QKvsVYWhcEcgMhntCDPhU7J2HdTUJyxwZ0+ppOURm2quvQQp1Uzg4exbo?= =?us-ascii?Q?qVlMtF5RcpfKYFegzAUs0DYAI2+63m/mORcuv07h7rNcbIZl4rWbLqiPU8Zz?= =?us-ascii?Q?R+DMBN3CN6KrX8nnRXM0TRxAiOM1nJe1Uu92Sk6KDAVofY6wfEedtmoGeQun?= =?us-ascii?Q?Mh9KZtmp27UGNREVo1+EDclywVOoJc2lH5ajLKAlNS8kOZIKlXacBz6Dj7DW?= =?us-ascii?Q?3lhX6pAE6NbO7cYwHGx34FgQQ7fPXrG6kVTkaf53klD7UEUIRxyPsNS5nBvU?= =?us-ascii?Q?qA03VZyLovdhP/RLqyfLVaZrhtq/zfVoPwwLIBYUQ/F+LiezCudR9XIHafX2?= =?us-ascii?Q?H+Ky747LbuVu+YSE7jFhQbAhxKgE6mje1uWy2aJ6JfAYLXBP9QpSC3dPksd1?= =?us-ascii?Q?QGxdRIhEzdUSTcRPfDBDn9OKGtd0cH+uQkFZPP1w5CldyR275X3DaORfKj1A?= =?us-ascii?Q?1BWdkXSV0g+NKiVrxLhiUMfYOM/FASdLmPLdhCmAxR4v2zC07FzcVoSVxmjR?= =?us-ascii?Q?zWx7rMrHt1zJJ/1qYtGbT1JA8+Q8PntJHZxARlZgm8DAcPNs+kiULMxRWdUN?= =?us-ascii?Q?NtFZ+b2MB5nshL/vh4SuQ3tVT8OMFK6eo2cYgsGaLLfhCu9oR4H67nCwJEKo?= =?us-ascii?Q?NLfd7Lb+cpyvpH+HP+2SszUn/MrEiWFzwJTrbMYGKcqGKAxA0qIjdb55UBSy?= =?us-ascii?Q?P31iTKZo34M9UMXRROn84JOwBLnD4M/KWIFZmj9cf9BensypMPypE4KlY2WD?= =?us-ascii?Q?mePqzc/O7VSQ7XjyilwVAvVV/Yawity/limh1KfwGBrzsYIBUN9F7mefwT/7?= =?us-ascii?Q?CAI4tSghWAHrgmT7QgdmT2NhyJ2TwDmCHlK7/Dnx82BQ4dZ+620ANECXMJoU?= =?us-ascii?Q?KldKhmAgQJHQrK5jnDVzWJA=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 287c3964-cc9d-4e94-397a-08de26d582d1 X-MS-Exchange-CrossTenant-AuthSource: DBBPR04MB7497.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Nov 2025 19:05:59.9307 (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: VUzrjUxTv3k3eublWIp/a/cN+URubNdBwK70wygW6fJmys0ycUxcjGIWV00nd7/Os1seq7kEpRb/dpnrhvcMmw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA4PR04MB7695 Content-Type: text/plain; charset="utf-8" Generalize the MDIO buses for accessing memory-mapped XPCS devices (through direct or indirect I/O) to also cover the case where the CSR is behind an SPI bus. This is the case when accessing the embedded XPCS from the NXP SJA1105/SJA1110 DSA switches. Cc: Serge Semin Signed-off-by: Vladimir Oltean --- drivers/net/pcs/pcs-xpcs-plat.c | 142 +++++++++++++++++++++----------- 1 file changed, 95 insertions(+), 47 deletions(-) diff --git a/drivers/net/pcs/pcs-xpcs-plat.c b/drivers/net/pcs/pcs-xpcs-pla= t.c index c422e8d8b89f..ea6482aa8431 100644 --- a/drivers/net/pcs/pcs-xpcs-plat.c +++ b/drivers/net/pcs/pcs-xpcs-plat.c @@ -17,6 +17,7 @@ #include #include #include +#include #include =20 #include "pcs-xpcs.h" @@ -29,7 +30,8 @@ struct dw_xpcs_plat { struct mii_bus *bus; bool reg_indir; int reg_width; - void __iomem *reg_base; + unsigned int base; + struct regmap *regmap; struct clk *cclk; }; =20 @@ -52,7 +54,9 @@ static int xpcs_mmio_read_reg_indirect(struct dw_xpcs_pla= t *pxpcs, int dev, int reg) { ptrdiff_t csr, ofs; + unsigned int addr; u16 page; + u32 val; int ret; =20 csr =3D xpcs_mmio_addr_format(dev, reg); @@ -63,19 +67,21 @@ static int xpcs_mmio_read_reg_indirect(struct dw_xpcs_p= lat *pxpcs, if (ret) return ret; =20 - switch (pxpcs->reg_width) { - case 4: - writel(page, pxpcs->reg_base + (DW_VR_CSR_VIEWPORT << 2)); - ret =3D readl(pxpcs->reg_base + (ofs << 2)) & 0xffff; - break; - default: - writew(page, pxpcs->reg_base + (DW_VR_CSR_VIEWPORT << 1)); - ret =3D readw(pxpcs->reg_base + (ofs << 1)); - break; - } + addr =3D pxpcs->base + (DW_VR_CSR_VIEWPORT * pxpcs->reg_width); + ret =3D regmap_write(pxpcs->regmap, addr, page); + if (ret) + goto err_put; + + addr =3D pxpcs->base + (ofs * pxpcs->reg_width); + ret =3D regmap_read(pxpcs->regmap, addr, &val); + if (ret) + goto err_put; =20 pm_runtime_put(&pxpcs->pdev->dev); + return val & 0xffff; =20 +err_put: + pm_runtime_put(&pxpcs->pdev->dev); return ret; } =20 @@ -83,6 +89,7 @@ static int xpcs_mmio_write_reg_indirect(struct dw_xpcs_pl= at *pxpcs, int dev, int reg, u16 val) { ptrdiff_t csr, ofs; + unsigned int addr; u16 page; int ret; =20 @@ -94,26 +101,25 @@ static int xpcs_mmio_write_reg_indirect(struct dw_xpcs= _plat *pxpcs, if (ret) return ret; =20 - switch (pxpcs->reg_width) { - case 4: - writel(page, pxpcs->reg_base + (DW_VR_CSR_VIEWPORT << 2)); - writel(val, pxpcs->reg_base + (ofs << 2)); - break; - default: - writew(page, pxpcs->reg_base + (DW_VR_CSR_VIEWPORT << 1)); - writew(val, pxpcs->reg_base + (ofs << 1)); - break; - } + addr =3D pxpcs->base + (DW_VR_CSR_VIEWPORT * pxpcs->reg_width); + ret =3D regmap_write(pxpcs->regmap, addr, page); + if (ret) + goto err_put; =20 - pm_runtime_put(&pxpcs->pdev->dev); + addr =3D pxpcs->base + (ofs * pxpcs->reg_width); + ret =3D regmap_write(pxpcs->regmap, addr, val); =20 - return 0; +err_put: + pm_runtime_put(&pxpcs->pdev->dev); + return ret; } =20 static int xpcs_mmio_read_reg_direct(struct dw_xpcs_plat *pxpcs, int dev, int reg) { + unsigned int addr; ptrdiff_t csr; + u32 val; int ret; =20 csr =3D xpcs_mmio_addr_format(dev, reg); @@ -122,23 +128,23 @@ static int xpcs_mmio_read_reg_direct(struct dw_xpcs_p= lat *pxpcs, if (ret) return ret; =20 - switch (pxpcs->reg_width) { - case 4: - ret =3D readl(pxpcs->reg_base + (csr << 2)) & 0xffff; - break; - default: - ret =3D readw(pxpcs->reg_base + (csr << 1)); - break; - } + addr =3D pxpcs->base + (csr * pxpcs->reg_width); + ret =3D regmap_read(pxpcs->regmap, addr, &val); + if (ret) + goto err_put; =20 pm_runtime_put(&pxpcs->pdev->dev); + return val & 0xffff; =20 +err_put: + pm_runtime_put(&pxpcs->pdev->dev); return ret; } =20 static int xpcs_mmio_write_reg_direct(struct dw_xpcs_plat *pxpcs, int dev, int reg, u16 val) { + unsigned int addr; ptrdiff_t csr; int ret; =20 @@ -148,18 +154,11 @@ static int xpcs_mmio_write_reg_direct(struct dw_xpcs_= plat *pxpcs, if (ret) return ret; =20 - switch (pxpcs->reg_width) { - case 4: - writel(val, pxpcs->reg_base + (csr << 2)); - break; - default: - writew(val, pxpcs->reg_base + (csr << 1)); - break; - } + addr =3D pxpcs->base + (csr * pxpcs->reg_width); + ret =3D regmap_write(pxpcs->regmap, addr, val); =20 pm_runtime_put(&pxpcs->pdev->dev); - - return 0; + return ret; } =20 static int xpcs_mmio_read_c22(struct mii_bus *bus, int addr, int reg) @@ -230,11 +229,48 @@ static struct dw_xpcs_plat *xpcs_plat_create_data(str= uct platform_device *pdev) return pxpcs; } =20 +static struct regmap *xpcs_plat_create_regmap(struct dw_xpcs_plat *pxpcs, + const struct resource *res) +{ + struct platform_device *pdev =3D pxpcs->pdev; + struct regmap_config config =3D {}; + struct device *dev =3D &pdev->dev; + void __iomem *reg_base; + + reg_base =3D devm_ioremap_resource(dev, res); + if (IS_ERR(reg_base)) { + dev_err(dev, "Failed to map reg-space\n"); + return ERR_CAST(reg_base); + } + + if (pxpcs->reg_width =3D=3D 2) { + config.reg_bits =3D 16; + config.val_bits =3D 16; + config.reg_stride =3D 2; + } else { + config.reg_bits =3D 32; + config.val_bits =3D 32; + config.reg_stride =3D 4; + } + + if (pxpcs->reg_indir) + config.max_register =3D 0xff * pxpcs->reg_width; + else + config.max_register =3D 0x1fffff * pxpcs->reg_width; + + config.reg_format_endian =3D REGMAP_ENDIAN_NATIVE; + config.val_format_endian =3D REGMAP_ENDIAN_NATIVE; + + return devm_regmap_init_mmio(dev, reg_base, &config); +} + static int xpcs_plat_init_res(struct dw_xpcs_plat *pxpcs) { struct platform_device *pdev =3D pxpcs->pdev; struct device *dev =3D &pdev->dev; + bool have_reg_resource =3D false; resource_size_t spc_size; + struct regmap *regmap; struct resource *res; =20 if (!device_property_read_u32(dev, "reg-io-width", &pxpcs->reg_width)) { @@ -246,8 +282,14 @@ static int xpcs_plat_init_res(struct dw_xpcs_plat *pxp= cs) pxpcs->reg_width =3D 2; } =20 - res =3D platform_get_resource_byname(pdev, IORESOURCE_MEM, "direct") ?: - platform_get_resource_byname(pdev, IORESOURCE_MEM, "indirect"); + res =3D platform_get_resource_byname(pdev, IORESOURCE_REG, "direct") ?: + platform_get_resource_byname(pdev, IORESOURCE_REG, "indirect"); + if (res) { + have_reg_resource =3D true; + } else { + res =3D platform_get_resource_byname(pdev, IORESOURCE_MEM, "direct") ?: + platform_get_resource_byname(pdev, IORESOURCE_MEM, "indirect"); + } if (!res) { dev_err(dev, "No reg-space found\n"); return -EINVAL; @@ -266,10 +308,16 @@ static int xpcs_plat_init_res(struct dw_xpcs_plat *px= pcs) return -EINVAL; } =20 - pxpcs->reg_base =3D devm_ioremap_resource(dev, res); - if (IS_ERR(pxpcs->reg_base)) { - dev_err(dev, "Failed to map reg-space\n"); - return PTR_ERR(pxpcs->reg_base); + if (have_reg_resource) { + regmap =3D dev_get_regmap(dev->parent, NULL); + pxpcs->base =3D res->start; + } else { + regmap =3D xpcs_plat_create_regmap(pxpcs, res); + } + pxpcs->regmap =3D regmap; + if (!pxpcs->regmap) { + dev_err(dev, "No regmap available\n"); + return -ENODEV; } =20 return 0; --=20 2.34.1 From nobody Tue Dec 2 02:32:17 2025 Received: from OSPPR02CU001.outbound.protection.outlook.com (mail-norwayeastazon11013015.outbound.protection.outlook.com [40.107.159.15]) (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 94610368284; Tue, 18 Nov 2025 19:06:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.159.15 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763492772; cv=fail; b=oMcPwCLO4FM2bivlBch1t0UfhHv6Azj/JBQ6+HJ8vuYxN1Np5XM4wf9hjWcSASPxpn+AdjrMS7LhyKqIrBc227qVNsNIyC9c9yhsx7+QDbh1Uak+6/FVgDlbdIYUFaSlIsiDbNgqihI8c4gggd1nhgL58Jj4Qc9WddaxxRxL3CA= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763492772; c=relaxed/simple; bh=yY0ymqON3QzhNB38qEXrOyfbegpqlNs7d/GSEZ57fh0=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=UIB7s0zg9LQkaeEK3wauHWhYXlS1woCyTZXeDYO+JP2YQ8dpihL+TAFtzb9F8tvbEeTOTnIBYQ+Hloh26MsmbzapvjCNcopdjCubACI4/tpLbRN6uKq8jn5DplGL/LXarcP1Llt+bBJv4i4//gV8Hmeil4LyEgvIsbOlzf881Ng= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=CW7rPD8T; arc=fail smtp.client-ip=40.107.159.15 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="CW7rPD8T" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=W3uKn8lhrU3tsxXYP5gDSwkTWEF65gBkwWFP4jCiaHbVIz6AnJKKyK+SPqAZIflWQvtqCZTzcQtQRuliLnsjeIOmBEBbYqK0RlsajH4pK8I1LLAaj2Nq9WF+TJ4LAIvwfvFEKqBG/Wo5mpd0sg/oXB6a9WsWZy0wc6f6nD6tcgEsFsg0EAUmD24O64ePrRxQTu1ts/Y1QjN4fMO8gy+knguJsyTDyGOqbaz0A/GGf53rTVJBbruHZp9OrQDai87ckTYdEjDO7sacxzvWbKs/EF+r7RPxgNQBVh3VNn6QGe0YRl7GNri/M7t+ApQW6UpOkSsIujZIk0CuUwGeURPcFQ== 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=FwwPzrcLMCRiN2tBB53pbaih3/XiM604PNiC35Pn5e8=; b=LRLgSQzdXQVua1jAtSsXGk+4koOUU+jGObpExi8zagd1D11U0kA0E17fo7603cSDXUjvzTKb0uuO2jXXk4RRBIw95b9cTbCJl+Q9WTc0XQ1u34q4YdPRmoQk9aSRRxm2XA8tjL14stgJC2/CmrB03pI2CkfsgVWUfuRVRNwJAQeWduRiAUnQ2qyxVIS+MCw/ece5LRNdsE3jBDBe3UB6Fv0ulTSjZg8sOujm4QnyfZg95TNPDNHqsHReP9MCtDx3F1Vn/qo2MP/tkKpyO8T7DPWf1CjGKSNO+hb3JN5ArzVnLOTm7P7VhQoZZwQsPOhqBMk5GfCc7EqedUeP7Yop7Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=FwwPzrcLMCRiN2tBB53pbaih3/XiM604PNiC35Pn5e8=; b=CW7rPD8TPtrQAXcz0xwdA4HHVQ25/6THXELmulRj3sOY3T4Tll6MK72kObVu9NMRW+4FpZagkqqvDOZHwu96tfogfZM6XjkY1V8efgorE5YMs0Fmy9q7VgHEZaeCdw+zrTfDXx7N3V/KDA0xzmhVRNO96dc0aLYK1S9VABYg/EfDZwUte5nqV78zpTQrn+TwOlqGj24aBfVG43qPgctCJyAgN0tSliWXxGfU+CqoiuX+4zkbT77xFSYBVLjWOf8X1DeBY2Dw80S37MSaDKXsLltfM1v63oY3VxrSpQtxdtntWTjBF2sDkmC1offJ/4n34PNjPEavwzHcX5qwUds7ew== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from DBBPR04MB7497.eurprd04.prod.outlook.com (2603:10a6:10:204::9) by PA4PR04MB7695.eurprd04.prod.outlook.com (2603:10a6:102:e3::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9343.10; Tue, 18 Nov 2025 19:06:01 +0000 Received: from DBBPR04MB7497.eurprd04.prod.outlook.com ([fe80::503f:b388:6d07:adff]) by DBBPR04MB7497.eurprd04.prod.outlook.com ([fe80::503f:b388:6d07:adff%4]) with mapi id 15.20.9343.009; Tue, 18 Nov 2025 19:06:01 +0000 From: Vladimir Oltean To: netdev@vger.kernel.org Cc: Andrew Lunn , Heiner Kallweit , Russell King , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , linux-kernel@vger.kernel.org, Rob Herring , Krzysztof Kozlowski , Conor Dooley , devicetree@vger.kernel.org Subject: [PATCH net-next 12/15] dt-bindings: net: dsa: sja1105: document the PCS nodes Date: Tue, 18 Nov 2025 21:05:27 +0200 Message-Id: <20251118190530.580267-13-vladimir.oltean@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20251118190530.580267-1-vladimir.oltean@nxp.com> References: <20251118190530.580267-1-vladimir.oltean@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM0P190CA0022.EURP190.PROD.OUTLOOK.COM (2603:10a6:208:190::32) To DBBPR04MB7497.eurprd04.prod.outlook.com (2603:10a6:10:204::9) 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: DBBPR04MB7497:EE_|PA4PR04MB7695:EE_ X-MS-Office365-Filtering-Correlation-Id: 4946a91e-f4b4-4ad8-1a1a-08de26d5839c X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|10070799003|366016|7416014|376014|52116014|19092799006; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?E8vD8awvGpFB8IharH34YmgqDmt6FcqLvu8/4omtZ/idGcp784QLXgu3PgOJ?= =?us-ascii?Q?hRO4QHIsjV++6Ibt3wUekZ9fw3cW2Zk/TEyUk50oAdVWV+nkQ3sjheCZ6pFg?= =?us-ascii?Q?+ThenzycZCtLhlpn1l7FSTma+Io8OcUWlJMUHQr9IbjX9mEsweFg9dTKs3/0?= =?us-ascii?Q?VofWrbsJY4gwE9EMbp4Yw43vF7oqP8lwPqgYZYvX1rhdWEcuESQBGA4g27rp?= =?us-ascii?Q?r/K68QmSzLKCN+KCGSm+BgeKXmnbSf1eEY80SVSAHGAyPieAV1DP6DC8fYJB?= =?us-ascii?Q?ZGWTz+KWo/k24VWsOLLuOhoYyUNt4uczDB4oJeP0lPRbryMhvcRVR4QazV50?= =?us-ascii?Q?HXE2wlPChZXkOD7gJ/SDVTnQF3y8UxwzSUD4S/tEiYuvwzN3+KE+s4YficcG?= =?us-ascii?Q?33KtXS3urZGNtNfkcYojCG39ll9+4I6T589AadcE6rnh+1CNAXCciNWIl7HJ?= =?us-ascii?Q?MaT0KJBXJP74gj0lif4IYXto5S5rKbjVZg7Cl5IszUan07Qq2d/IK6AWLS78?= =?us-ascii?Q?c9PBbA7oHYK+vH3Gr673WFsOx8FOjGruDdKd7LrLxSzoOFk3X07XxE99kZUQ?= =?us-ascii?Q?GRnU7xLEvZoAbNI/eSZUrWPsuHxS3KZ+m5oSaVup9Bz7tSu1J151SHXSlBya?= =?us-ascii?Q?ELSw2ixtPE7YV5LO7L3i6aZHfgvmWRtjXV+AO8FYrEFjUQ18GJLJnT/5YDTL?= =?us-ascii?Q?hoclAVssqtdykUP8k+fKF33BzagEeJZD/kIl67+PN6yUZR+XosDLFCzb/S0I?= =?us-ascii?Q?9lZ4rn6L9cbImkMPml9lsIph3qoTSuTLv+cOtYOq9IeXkcNxtxmb9suGQjml?= =?us-ascii?Q?4+ksxu0IMcMA75qIanLVQ9oTCBO13jiRHG52s8Xn8XGC2+O/2vR+CRbw6rJr?= =?us-ascii?Q?KIyNLXewbhgriuIld1c6vPADiQAz/Z+Tp4p0E3noI6QOjRFHPMegphhJqcgK?= =?us-ascii?Q?xoGoZ5dva4aQHqENV2XcWIiG7vdopZcm/pbisJviqug/7MJ38DZb+XGl7wYA?= =?us-ascii?Q?GJzC3uWwJantDbxXx7174hLEjuLfoNDXfTEmsacCKPhaLI15GfNMPh0whA7h?= =?us-ascii?Q?x8b28b9woEPCo7B5ZYKKjL679EA0uJ42b+UrHjr+x13186Npqt/85Vr90+fT?= =?us-ascii?Q?ZdDGO/MbtXj4VavZD/ebxTNO9UhGkWMNWLB0+U9JLf/erS3FNk+M8DFbPaK5?= =?us-ascii?Q?ElZDFuYl7kaBHW9zhQPY57MmJ/9Dm7sRJyGkHONXNZcA3uKk3DndjHHJfz5z?= =?us-ascii?Q?IYKVW/oJ7uZEwTmqbkN9gwcExJjBaGPUeNDladBbAvYYglpEo3USsp33KbuA?= =?us-ascii?Q?RbqU6h/aYJ/mT81wwey5Ji+T1w9sT662tWRQUZpqs8OMua2IY3z4xTclqgrq?= =?us-ascii?Q?a8aYx6zVs0aMPQ1mss7HGPR2k5LBi0ShW2JAaghdhuUb/cw6PVRLAYlrdeS5?= =?us-ascii?Q?C8clpDevibecdlDxST2o0kzIPdhLiFh0?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DBBPR04MB7497.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(10070799003)(366016)(7416014)(376014)(52116014)(19092799006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?vUL4D72AFTp5rI7Jqpmu5OOzV9AqhbPZud81NNDJRJ4sHWFS4ungThme6lMn?= =?us-ascii?Q?vY+ZKsL/1RZdLTw+NOtAVaoc90Fo57idy7au7tfMZFIOVqdNuT22Wa4HqYcB?= =?us-ascii?Q?aHzxyDAFC9W4jtbOn3zmPhsSiHdmxYPpM+X7jMX5hJO6Q1Xs+eocws2jmBOt?= =?us-ascii?Q?ierCVTXYinaFZO3vaQF3nM8UyRnF9LD8l6vyB0DIYnsSBZCFW4DeWO1C2l5n?= =?us-ascii?Q?8slJQ5091j8qe3fAnMtf8WRwYAm6WYFgLPRiyfTiVw3iYyM6y4/+f47Xn3GQ?= =?us-ascii?Q?X0Jui9ZCYg4w5qZDGtQv+EHCQNN30gO8F8+vCgSPkMHOA3ZYjvXI8IBq5yQJ?= =?us-ascii?Q?3Ko3Shp4szjVpT7XkTiDoLp9JWkGIaZD0hIh900m9Re5r6O9KfnmIY14mnIV?= =?us-ascii?Q?XKacI+ijygw47VI4XWkqJSLvm6fW9W4D7dSHZbBbJUXXbuFyMc8JQF4x9rAf?= =?us-ascii?Q?RmxIRYZ/18uKmV46MBGjTzloKb4HFeyvzwqFidheitfYxQecv2QgG3+58rg/?= =?us-ascii?Q?mknym6/TfJT7Z7fNDq37lXP8eXit6ocy0ssuEInxkcO/PwP3tHbujgoYdE4P?= =?us-ascii?Q?c7yZGBzlsr0956Al3vyN4wNQy5Kb5NACO1H6yx0EdAAe0kGC3UeM7ujFky/b?= =?us-ascii?Q?fHIeVGBR8skbA3wU/3iFZNdrglynDNxKovzxhicg8cZpXictCBDf4oi5PO8J?= =?us-ascii?Q?2PuVeQ0LNN9wP5nxsx9b7KxvdznHQu2icpvJVAMPjCbFL3avVoYfaQBBsygU?= =?us-ascii?Q?2J5gKBXXjvrJ3lUn++1ezGNV5hwSMsXtJconfgEnFIiSODvYgdgm98htzHar?= =?us-ascii?Q?auVTqd0wdydOC+N4eW/Ll1xkLSr6C7txV4Fl/UuBhAnGTW3cgOIK47OdIoiv?= =?us-ascii?Q?xApZ+N1K51eIDkvwNXPpVrnfQ1gW4o9T7LquBf9YuhCwy/58ZBAdcLz/KzF9?= =?us-ascii?Q?RuzQexpguP+uRNXOfADINbyRupItwv4WNFP5XZyH3t0tQe87cD4WuMiwvxBq?= =?us-ascii?Q?bHkPjwJMwrEYiAffBOYFLylKXydmz+B4+NvvEiw4AVT2evv6nSbsZcRbhyFE?= =?us-ascii?Q?vkpgIB1q+dJes4keCk0K4X4C+DdJGVddqQ73WMC/Vm/9h6llquKZ6KRxJDW7?= =?us-ascii?Q?v8yPx+K+wOVwj4/c8ROsVV2YUh3Wdt1Q/gkm5+McKJYCQF9d/XPNVDYu/s61?= =?us-ascii?Q?inE54X4i1VRQ6c7pFPzaOOE6ZmdhU5PmUkpaBsgbV0Gxx1995Ib4c0BZ0CIW?= =?us-ascii?Q?31cG7baS4FA0TPpH3qahEdivxdxtcIMLaPZK+6HSzJJKoxAb5EVTEzHEEROv?= =?us-ascii?Q?h9qpTwTkztqaviW1xcKujiK0WNj/qb6/LAWBTTWvZTP2x0DL1Ex+w72V/F23?= =?us-ascii?Q?pnMvVzb5/g1Wll0I4AmAlRkd4/C68V0SDDaXx+y4QiA+AUB+AuDH2fngf+9U?= =?us-ascii?Q?+B4wTOgwDizZBbmJ4PdKiCKXZEh77VNRbToShrfimUc26umiTKRhDlIgT6qG?= =?us-ascii?Q?VROOXsDXtWnQk7NVQRdWj4ptM0TMOshGiJWGjsY6rA9aQfgZxLKi0y5bgtXQ?= =?us-ascii?Q?BKpz/memCe09KZN/h7xlMq2j200MyCRDWHXVkH6Zyp3Y94xHdLDnAu7gOX/U?= =?us-ascii?Q?65DE81S8y3YOdX511jnk0eI=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4946a91e-f4b4-4ad8-1a1a-08de26d5839c X-MS-Exchange-CrossTenant-AuthSource: DBBPR04MB7497.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Nov 2025 19:06:01.2515 (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: KzAcs1H44P7YlHAkoM7KBxfDTl/pjFOUU5VDsT9SgjNSUnT/QZzHfq7fGJSvWjvaw9RFgtldRQW2OwV4MiCsIg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA4PR04MB7695 Content-Type: text/plain; charset="utf-8" The XPCS blocks in NXP SJA1105 and SJA1110 may be described in the device tree, and they follow the same bindings as the other instances which are memory-mapped using an APB3 or MCI interface. Document their compatible string, positioning in the switch's "regs" subnode, and the pcs-handle to them. The "type: object" addition in the ethernet-port node is to suppress a dt_binding_check warning that states "node schemas must have a type or $ref". This is fine, but I don't completely understand why it started being required just now (apparently, the presence of "properties" under the port node affects this). Cc: Rob Herring Cc: Krzysztof Kozlowski Cc: Conor Dooley Cc: devicetree@vger.kernel.org Signed-off-by: Vladimir Oltean --- .../bindings/net/dsa/nxp,sja1105.yaml | 28 +++++++++++++++++++ .../bindings/net/pcs/snps,dw-xpcs.yaml | 8 ++++++ 2 files changed, 36 insertions(+) diff --git a/Documentation/devicetree/bindings/net/dsa/nxp,sja1105.yaml b/D= ocumentation/devicetree/bindings/net/dsa/nxp,sja1105.yaml index 607b7fe8d28e..ee1a95d6b032 100644 --- a/Documentation/devicetree/bindings/net/dsa/nxp,sja1105.yaml +++ b/Documentation/devicetree/bindings/net/dsa/nxp,sja1105.yaml @@ -85,11 +85,31 @@ properties: - compatible - reg =20 + regs: + type: object + description: + Optional container node for peripherals in the switch address space = other + than the switching IP itself. This node and its children only need t= o be + described if board-specific properties need to be specified, like Se= rDes + lane polarity inversion. If absent, default descriptions are used. + additionalProperties: false + + properties: + '#address-cells': + const: 1 + '#size-cells': + const: 1 + + patternProperties: + "^ethernet-pcs@[0-9a-f]+$": + $ref: /schemas/net/pcs/snps,dw-xpcs.yaml# + patternProperties: "^(ethernet-)?ports$": additionalProperties: true patternProperties: "^(ethernet-)?port@[0-9]$": + type: object allOf: - if: properties: @@ -107,6 +127,14 @@ patternProperties: tx-internal-delay-ps: $ref: "#/$defs/internal-delay-ps" =20 + properties: + pcs-handle: + $ref: /schemas/types.yaml#/definitions/phandle + description: + Phandle to a PCS device node from the "regs" container. + Can be skipped if the PCS description is missing - in that c= ase, + the connection is implicit. + required: - compatible - reg diff --git a/Documentation/devicetree/bindings/net/pcs/snps,dw-xpcs.yaml b/= Documentation/devicetree/bindings/net/pcs/snps,dw-xpcs.yaml index e77eec9ac9ee..46e4f611f714 100644 --- a/Documentation/devicetree/bindings/net/pcs/snps,dw-xpcs.yaml +++ b/Documentation/devicetree/bindings/net/pcs/snps,dw-xpcs.yaml @@ -25,6 +25,14 @@ description: properties: compatible: oneOf: + - description: + Synopsys DesignWare XPCS in NXP SJA1105 switch (direct APB3 acce= ss + via SPI) with custom PMA + const: nxp,sja1105-pcs + - description: + Synopsys DesignWare XPCS in NXP SJA1110 switch (indirect APB3 ac= cess + via SPI) with custom PMA + const: nxp,sja1110-pcs - description: Synopsys DesignWare XPCS with none or unknown PMA const: snps,dw-xpcs - description: Synopsys DesignWare XPCS with Consumer Gen1 3G PMA --=20 2.34.1 From nobody Tue Dec 2 02:32:17 2025 Received: from OSPPR02CU001.outbound.protection.outlook.com (mail-norwayeastazon11013015.outbound.protection.outlook.com [40.107.159.15]) (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 282EA369235; Tue, 18 Nov 2025 19:06:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.159.15 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763492775; cv=fail; b=p2EahH+8ThFQrm4as0m/+Wgr0OkynlW95WTK+vzd+IU2h94MK1ukkXS8tKuJDV2kJierGPjGx3QS5ELdpTliYThCEr2F90s8OQ2br66nQyuC47+f9RJmGMmLAMqrMHdi5Fle88725Ksyr4W8bJKbKcDqDlX2shgkJqrkfEyP9a0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763492775; c=relaxed/simple; bh=34P3hedAYosMFnqvldOzgv2TDC87O3zyT4+73CE4h5I=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=WzlQIw4G9lXTkewV01vqbuUfmt/9sG13WLL4GE63QNiK4n8twby4PBDMpec0dkSUnjZO6E0KZCZMDmYATkHF0pccmNQCYhhyG8ODPuJFA1key3qWQ9MGNMD2O1weUeADhNTzcHRaeao4IUQiusb025sdGwuyogS6tlIyoP45BhE= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=e8O5bSxM; arc=fail smtp.client-ip=40.107.159.15 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="e8O5bSxM" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=T9C8+j+7cHWO8k/Nbi22cWnvbkHA7r4dKbt3QGX/f+wG/OP+pF/n8vIwsJTf/fD2MRhKnhfjxjDx1goQBUWevrGcQEtl5S5jkDwlEArN8EBgebeVIVIIQjM3SC/kXeJplx5JiWNzHp/CJ3E1ZzjrMtUFIwycmLYTC30TG5ec39w7eqll6O9OpdVlfM+6Pe1338Oy49Yhm70De/pKFyscP1x9ZHMIFi62w1nNQVwFfXmHk3t2+XVR90lpJzJBTjPvFb7BnCjEHlJI5w1Kaanc/aR3rRCRtlu7Wfe8tBjuP8SJH6o+2BuzGZiemSxbONJldx5mPcOJugRZxreXjacHYw== 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=o3B+XMChJg/noIM22BQ+u2d9GNypK8oOWiBiovPHd9g=; b=MSBAInzVL5Oub5rlgBFHiTfTLdMLYJ4m3AE8+EDR0GdCpdGNTo9W1rKjr7foU0XFU4FGHFuVD+/+Z2KTUS9ruECXoBFIYqAXQB6W73gNM5iPSWFPGa6ZYT4hrc34/lpsymqeTkMTmc0HE9ucHG3MSE3Dw/A0Xi8MKr+UCbKVjgD1I58OvG6kVgtIsuDL7rLgwG88xV1jgAoFODT5t0yG78XJ6wo6OcpbwJgzulaKGBrTY/eOM/x6OG/Lc+CJoAR2JmPrguoq0GSNQfYmWnAcfcYLii0teT9zx0vzzmYYtWglk1iKiFHmxkztRO+cFF6wU3Z33jn9RnulSXeJvRCNeA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=o3B+XMChJg/noIM22BQ+u2d9GNypK8oOWiBiovPHd9g=; b=e8O5bSxMLrHFH+mTtMKJjqAbhIqXjZGd3JnxH/DXPPvFTXKk/M2q6pTILghDJdp4tkdUcBRAiY0npvblLzCq4sguC/ZKV3iaW4G9knSe/hUFDmIA2NxwNy2hT78BPaYbWsbqtu7g472yXFxMpB0X9xzje++TX1a7lR9QhmcVOJO16pcKRFXGpgaQ8b2QEHrfh5KCQuftdsup5EryUxVk7s3N5pka0FVakJX5Y4x3opJA3Cah7sMN1VMCUbajmvihhtGGWuqgSCU/ztCNBsWDdlpmv1ChIvLlaYEQejYD6e7eyL52f1KHxg3ty767UQtuYwFnvT9CPHtRPxK1QflC4Q== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from DBBPR04MB7497.eurprd04.prod.outlook.com (2603:10a6:10:204::9) by PA4PR04MB7695.eurprd04.prod.outlook.com (2603:10a6:102:e3::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9343.10; Tue, 18 Nov 2025 19:06:02 +0000 Received: from DBBPR04MB7497.eurprd04.prod.outlook.com ([fe80::503f:b388:6d07:adff]) by DBBPR04MB7497.eurprd04.prod.outlook.com ([fe80::503f:b388:6d07:adff%4]) with mapi id 15.20.9343.009; Tue, 18 Nov 2025 19:06:02 +0000 From: Vladimir Oltean To: netdev@vger.kernel.org Cc: Andrew Lunn , Heiner Kallweit , Russell King , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , linux-kernel@vger.kernel.org, Serge Semin , Rob Herring , Krzysztof Kozlowski , Conor Dooley , devicetree@vger.kernel.org Subject: [PATCH net-next 13/15] net: pcs: xpcs-plat: add NXP SJA1105/SJA1110 support Date: Tue, 18 Nov 2025 21:05:28 +0200 Message-Id: <20251118190530.580267-14-vladimir.oltean@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20251118190530.580267-1-vladimir.oltean@nxp.com> References: <20251118190530.580267-1-vladimir.oltean@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM0P190CA0022.EURP190.PROD.OUTLOOK.COM (2603:10a6:208:190::32) To DBBPR04MB7497.eurprd04.prod.outlook.com (2603:10a6:10:204::9) 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: DBBPR04MB7497:EE_|PA4PR04MB7695:EE_ X-MS-Office365-Filtering-Correlation-Id: e36069f1-2893-4b54-235c-08de26d5846c X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|10070799003|366016|7416014|376014|52116014|19092799006; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?89FoYVfcdxZpiIaTHzRwtj/e7OL8fc5hqU+RF3k5dxCmSPaS4iCAk/gu2VKY?= =?us-ascii?Q?NNZGV+7uH7T0PdL80lorFk8McjsIK6gGotnPMCLzT0sYzg6F6IM1xiqzJZpk?= =?us-ascii?Q?qRbYix+dcELDdoBqtNCClc+UNd70oRLPQbCFNAu/nIUFLpIL2xRB5nbUaPU9?= =?us-ascii?Q?xmg8Jax7xSber2a3D3bmizrBCEcANd5Yri3Xb4cVtjiNLTYPwaivDRkdEI5L?= =?us-ascii?Q?fEHPM/Ni4zxKpLfPzXlXNfTDnS4KszwaYG0gNd+Vz2bK5ADu1qr9x6wcVAgU?= =?us-ascii?Q?Gzn8ODS9vtpOgwmOuUFhmcJTvEO28PmL17hSn/j0AMr6RzI1FxdT7fcm94gf?= =?us-ascii?Q?KY7peOeVpg26JWxtM7VbVnAjxBlvk+xYTZdA073QhovRpVMSwlY6qt5a/ABg?= =?us-ascii?Q?grUz6/JnwwDGnzvsRQ2fz34EYHLh4TWGCSZNuu2pVjzfxKr/lD0jx8oxlb1/?= =?us-ascii?Q?1aVDxnLwL+qm5wofjqs+OHasxuWZKKA8gif4DqPOAH+74jkIlNMG+N5wOtcc?= =?us-ascii?Q?P7+iwQylPXgt1KGv/YIuCg9HnCZOk7KRLQfU3KwX7Bfk0+kREpqi6HY4aJpl?= =?us-ascii?Q?/7+3HZGFfH/VObpZRAqXhiFGtf3m76lQdP0UrBStzh5XIR2zEJds8rJ2EuoE?= =?us-ascii?Q?IcPR22Cc8QsuQH4dXN7zFyuG6DL7H3WpxzLNa0XpqOSo+jCvfiJcYgR/MQJo?= =?us-ascii?Q?mIHlhmdmxvqr9LjzdwdkBLF5YpKnMGvnosh415oqliWcUTrCn5ruBakTUSDP?= =?us-ascii?Q?0gbosPHhwKI5WQMuSBW6oD/VYMWxEPH/OU+ibSCJViSU0Glxsvt6cokiJZAv?= =?us-ascii?Q?2RmydPyV+c1yiwOND2BxZjsYPakLIDxS6Rllbk10viw1LErgBz/mZZXnOxXV?= =?us-ascii?Q?SIBJDLeTUTArax+ISOW9eDqLEINozqVnC24G9M9QLE0yZaHFzEvgjaC2T5UT?= =?us-ascii?Q?u5cR8PGhglbVDJBozMzXLqtZrWM2t8k8a41udqcOdVmT223T39Xsh+7EHh8u?= =?us-ascii?Q?dJft41MP/eaNgZHTHQYyZLzw0JR9cuI4NtAeYRFxe12jukQj+lZmJ+0X+7rM?= =?us-ascii?Q?oXsxhRZefmT842ImrExGjmERPmZ5AAcPJM6GtAyX8XalXzh8O3Q7iQykH01+?= =?us-ascii?Q?ItKDpUcROb7CCrAesdyFGqwzBIiSn893gfOC/TZoMNxqorTZMYHiqfX1dSPA?= =?us-ascii?Q?x4gelOBKkhA5sIGdXhWr/CUlD7bNQXirSWhTgVzqKIQGBhcL5G9h0UmSGaWN?= =?us-ascii?Q?JU6FYBEO4tZoz6+nvCAkrQQHP6G9BY+LhI7dR27xxtNRhZLxM4lGTM+2uFYZ?= =?us-ascii?Q?unE4Q7WKbybBTadjKkA3YwGyvs0yR/5ABawa04PvnJq0cCCza+YaYxb+hS39?= =?us-ascii?Q?o2HHdaT9WZl4YwmxaiBqaDYD2ibrPN3W/39CneX6CdRvtzR3Gt9LfDju2/Dq?= =?us-ascii?Q?7hnxZCFYgVyRN+eQiakEI/3OeG42Trf7?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DBBPR04MB7497.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(10070799003)(366016)(7416014)(376014)(52116014)(19092799006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?kzhcgn9LHIozxW8WatLbxohJHolrLrmJ/fjWrpjYggwvnGjiz94B50mLHNnM?= =?us-ascii?Q?wZMM2yUr0cGR8pU6l0/vDu54e56Q7H/yVO4Huj32wCJNN4oDN2GPmA6KObhO?= =?us-ascii?Q?Mec2hXhX0feb1uBMAT+CGtzNHef5Pcp5sqapLI1t8OnlaYOUDkdOa6cigB9D?= =?us-ascii?Q?Zfswo6t6Hk5KJTEN3ReYNuKHp2+Vx2inPK3YNSt7spympKI30HnJ+uBsO0+D?= =?us-ascii?Q?YpbazeMudmsPvMtazzfG0jhDZ51MCeSwrDvBv6pH194gxadd4vX1mbbmnQOR?= =?us-ascii?Q?1woNNTmNJOsZeTroW/84mnmy9hUjBisqdWM0n9i/itsyWOv2nEK89smoxusi?= =?us-ascii?Q?K6Gk5kEwwIMGv+0FY7wYNcXT+8zUu+Z6l5zRXBC1t8vDAGCbCObPhsWhicyb?= =?us-ascii?Q?ZxogVXCBkgDxZGNvqfSElxK2tJIuvqkSY/2/pecPRJeyb+HsZKnfT88g5Tgv?= =?us-ascii?Q?Y+q7+oW99D03G0hrSodJHnXcUkcW+Kb7uivkbplkKCJARnoi9Ix9I9lIkBtH?= =?us-ascii?Q?oxx80Wx8K/+wENfPPQZ3Ur7wjcwLulzc1QpDXWl0xp9wgrmZljI+W52x7oAd?= =?us-ascii?Q?1gfQF2EBJIueI6CC+Sc/+nYO67zc5cj98AoCIMBELB2etztmhrxTL03b0/y7?= =?us-ascii?Q?pwgj9XqCpxikIg9cGO2EIcREmIvJesAlp9m8Hl/h0y6AceXesmJBz8Iy1pxR?= =?us-ascii?Q?di18aLAgykYZRJtlO7sNkBVU525JYTlWhiSiU6FyB1ToW50lqn7l/h8RgksK?= =?us-ascii?Q?0FWIDhPpJTspr15ccsDUck696G3/ppWjweV7O9OEfFRnx5q8fYKDkFWB0dLK?= =?us-ascii?Q?z+8BEmxjHmxgWPzenZ6tAD1cqCSXzYHPrCuRTwJdowIpSS5+WkGgAidOANjw?= =?us-ascii?Q?WCa7EeENfckTualuQSXTLXYI1p96hHGIovrkhrHUBjgF1LJ7SfgkHuyqYL61?= =?us-ascii?Q?vCgJEbwq3tTTLwkQ2mKCCKY93dgSSBcBekXVeY1F/3kwoRw3MDh61HlITy+i?= =?us-ascii?Q?5tqejfbKR6vchTvkP7cWtMolyr4PV5WC55/lKgH5oH/fASrLZernCZ1C06kk?= =?us-ascii?Q?4o0MCOxkCW6FiY3SfUbKisybtdInhRTBpUANGZqD8L/HwM4Nh3CIIAbVqrA0?= =?us-ascii?Q?hkf/KJiyAeJvMKaMNpE9Mi10ce5btMZKr1bJG8GQUYZU9n5KG2WFZxGZpzDn?= =?us-ascii?Q?Fp++ZCMW1IkuMqi5o/U+mBRt4DgBzcTCrcn1wXGYqnpaMdLWVJOQCKeblaYx?= =?us-ascii?Q?pNd8Y4jD67ioAXzRGsI5Q/jZlGQrxotlOKN45ubAZ5cCL6mJv/diXsnHnhgN?= =?us-ascii?Q?PvuT7AgKUf2mWKVweObY0yZu1Kb4JwTdLhjRlbHleFzcQUeFCK02iLHnEPRm?= =?us-ascii?Q?v52lrSWR+qVWpd6mlnn3bH9rrhNvkawuiEvWhok0Apwi5YgUQyZaUasJIcdc?= =?us-ascii?Q?pxqN2yoXr4pBjx0N9XnjVSYiQBzI5WVWv28Z4zpe9X/TKALKfN1DP2dynpXc?= =?us-ascii?Q?CSWyhkzKcM08zTiMGC9dLfTC8cGdAOD6uVnwvdoYlRDEpQbVjd1B49fV6DDP?= =?us-ascii?Q?zD5YixIA5JfxG79iG2VA7NKffwy/Mnv9QOg+bE93Lw3FtNvS7ftXfbZrJMoA?= =?us-ascii?Q?0hhJz9Nt9MT/7un4uNf1Wgs=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: e36069f1-2893-4b54-235c-08de26d5846c X-MS-Exchange-CrossTenant-AuthSource: DBBPR04MB7497.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Nov 2025 19:06:02.6305 (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: Z3CVo/yx/G9orGUFPsbC50mBUNr6j+EvwbcTDKAifjWcdVun76qI3MJGMTpR4+xWunRbe5lhpcSemUVbD1pZ0Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA4PR04MB7695 Content-Type: text/plain; charset="utf-8" The XPCS in these NXP switches returns 0 when reading the ID registers, and is integrated with a custom PMA. The current way to support it is with hijacked PHYID register reads in sja1105_pcs_mdio_read_c45(), to fake that it returns NXP_SJA1105_XPCS_ID. The new way to support it is with a specific compatible string. This makes the platform XPCS driver use a specific struct dw_xpcs_info which it assigns to mdiodev->dev.platform_data, and from there, xpcs_init_id() picks it up and uses it. Later, xpcs_identify() doesn't overwrite the xpcs->info.pcs and xpcs->info.pma unless they are set to DW_XPCS_ID_NATIVE and DW_XPCS_PMA_ID_NATIVE, aka zeroes. Since what is custom is the PMA and not the PCS, a later patch will probably have to move the NXP constants around. But that should be done only after this becomes strictly XPCS internal business. Cc: Serge Semin Cc: Rob Herring Cc: Krzysztof Kozlowski Cc: Conor Dooley Cc: devicetree@vger.kernel.org Signed-off-by: Vladimir Oltean --- drivers/net/pcs/pcs-xpcs-plat.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/net/pcs/pcs-xpcs-plat.c b/drivers/net/pcs/pcs-xpcs-pla= t.c index ea6482aa8431..f96eaafb6376 100644 --- a/drivers/net/pcs/pcs-xpcs-plat.c +++ b/drivers/net/pcs/pcs-xpcs-plat.c @@ -479,6 +479,8 @@ DW_XPCS_INFO_DECLARE(xpcs_pma_gen4_3g, DW_XPCS_ID_NATIV= E, DW_XPCS_PMA_GEN4_3G_ID DW_XPCS_INFO_DECLARE(xpcs_pma_gen4_6g, DW_XPCS_ID_NATIVE, DW_XPCS_PMA_GEN4= _6G_ID); DW_XPCS_INFO_DECLARE(xpcs_pma_gen5_10g, DW_XPCS_ID_NATIVE, DW_XPCS_PMA_GEN= 5_10G_ID); DW_XPCS_INFO_DECLARE(xpcs_pma_gen5_12g, DW_XPCS_ID_NATIVE, DW_XPCS_PMA_GEN= 5_12G_ID); +DW_XPCS_INFO_DECLARE(xpcs_sja1105, NXP_SJA1105_XPCS_ID, DW_XPCS_PMA_ID_NAT= IVE); +DW_XPCS_INFO_DECLARE(xpcs_sja1110, NXP_SJA1110_XPCS_ID, DW_XPCS_PMA_ID_NAT= IVE); =20 static const struct of_device_id xpcs_of_ids[] =3D { { .compatible =3D "snps,dw-xpcs", .data =3D &xpcs_generic }, @@ -489,6 +491,8 @@ static const struct of_device_id xpcs_of_ids[] =3D { { .compatible =3D "snps,dw-xpcs-gen4-6g", .data =3D &xpcs_pma_gen4_6g }, { .compatible =3D "snps,dw-xpcs-gen5-10g", .data =3D &xpcs_pma_gen5_10g }, { .compatible =3D "snps,dw-xpcs-gen5-12g", .data =3D &xpcs_pma_gen5_12g }, + { .compatible =3D "nxp,sja1105-pcs", .data =3D &xpcs_sja1105 }, + { .compatible =3D "nxp,sja1110-pcs", .data =3D &xpcs_sja1110 }, { /* sentinel */ }, }; MODULE_DEVICE_TABLE(of, xpcs_of_ids); --=20 2.34.1 From nobody Tue Dec 2 02:32:17 2025 Received: from PA4PR04CU001.outbound.protection.outlook.com (mail-francecentralazon11013035.outbound.protection.outlook.com [40.107.162.35]) (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 4C25236923C; Tue, 18 Nov 2025 19:06:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.162.35 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763492776; cv=fail; b=p43stqXpFyAhK0WKxfAo3XvOiq2Tltk/8V0gfIt2sO+BEdCPDQIUkjYKQS8o38qEcz03JDLNTQt34Zp/hLQZhwDbuLp/6tC+Ou9yTZtk3iPoKeE7nWFBwzaHLGS/tJJD4AdrAb6kVrdRk2FaXCormgDf+WJOQ0DSJqaTuXN/TCE= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763492776; c=relaxed/simple; bh=ZoZR35FolYkqVTwplfFngZgYpaY3nPEjrnWSC2f5/xk=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=ZA6BIR2+Cv2oa8qQM2BEKsTzKywJ6M3Z7dISYfD9Jw6P6f6l+diuUfAxhJCQhadbGiT4/ADCQPGI/TswSXjvRGCaF4YccLO467e20KbeEbn9a9627c+ZYQOAMfHdYj60EH8QYtabeV8ZTMJJzcVjsJylTAuTHqbjISffsxLRwnE= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=fpg/a+6b; arc=fail smtp.client-ip=40.107.162.35 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="fpg/a+6b" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=T3xYaAg7KaUWdgd990FgQKrbABSd+/jAJkItkgaM8yWUP0mCi7v07UxOimbYWLwwXh/jjHLk3fpsrjR1k7l5snQ5Vv6jnMnsc5n1m6l0JyF7xpLW87oLUPVEAXFEdS8hfAQCtXJZcu4s00LrfuFJjOr0wQeK7F2PKAgLTwNv9eY2gmPcZD/U/imY1/sZYS6TYkYPbCP6XMlHxaMRfKnwuz4kMR5rn8//p8oLYeT6bQiIdzeGCDsrL279Ps3swXi/+uVjMksF1fWwfgVM2AxnNSqRIwRkPUbg+w6y+NTZR2ialPQkpvk+YwfYgFMXGOXPHdbmQC8khwe+R/EwQDwzoQ== 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=9VFQOH0eMXaWvL2Ur0YEJT57xr4U1DfA5ICkoaN0/Ts=; b=mT45TDVjRGVYnqk/Vhqq7/nvBOzp5uyOjW2wtq28JoP3aVY/2zgfw169fpC4mtaoE3nOwf0fYKCOCRQa98rgotQHeEvA6TJD0dpBjpoNjZD6DDWsgIsCMVsDBtFXDC8dz+tyJNkE7w01hkQsgElUDPrrNU/h/+fyoj1am7ii25S0/cJgLcQr8NOS9SMEAJlXds90mVe5qZZOnPYQ5J5liHX/huSO+dCdgeOq/ePhCqOrcqUdTFCOoLvcrs6tsXk8Rn+Pyhi/6GPggyZM6ImvskZYhySRH75fcOJVSAIrD6zK9oJWgAL9bcpoSY7SQEV/oQDvyj2fOFD2ZhcKe9xoDg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=9VFQOH0eMXaWvL2Ur0YEJT57xr4U1DfA5ICkoaN0/Ts=; b=fpg/a+6bjYmpQ31yAPDD9mMDhQShEWOSfhvUxnhnZTB/M+17mLN7pFOc+yNOJwWAuXAdtHXOmGDhzNkvvnSHOVpQYLFIjjABK6MLrDxe50RYurMnz+4xJak2yC9DN4xl/hGdjp9m3PGiLDveBTuLuMhNyTk+MyodpoE9A+fBw5U+7iyweKouo+1gcqHzqAv32a4FI+tUPJsIAQcn7MRCct48+3s7RSKQP4RrczvMefJCEYUlOTq7TFMtPcZTJk6nrGMqt1+LYwiUD7arBGMCY0jncoCrHcaV+szGnYXHby/Ij6iX+/PiUOEn2yHlmjwaEPmF11Cc27a6yiySTRuDTg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from DBBPR04MB7497.eurprd04.prod.outlook.com (2603:10a6:10:204::9) by PA4PR04MB7695.eurprd04.prod.outlook.com (2603:10a6:102:e3::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9343.10; Tue, 18 Nov 2025 19:06:04 +0000 Received: from DBBPR04MB7497.eurprd04.prod.outlook.com ([fe80::503f:b388:6d07:adff]) by DBBPR04MB7497.eurprd04.prod.outlook.com ([fe80::503f:b388:6d07:adff%4]) with mapi id 15.20.9343.009; Tue, 18 Nov 2025 19:06:04 +0000 From: Vladimir Oltean To: netdev@vger.kernel.org Cc: Andrew Lunn , Heiner Kallweit , Russell King , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , linux-kernel@vger.kernel.org, Serge Semin , Andy Shevchenko , Herve Codina , Rob Herring , Krzysztof Kozlowski , Conor Dooley , devicetree@vger.kernel.org Subject: [PATCH net-next 14/15] net: dsa: sja1105: replace mdiobus-pcs with xpcs-plat driver Date: Tue, 18 Nov 2025 21:05:29 +0200 Message-Id: <20251118190530.580267-15-vladimir.oltean@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20251118190530.580267-1-vladimir.oltean@nxp.com> References: <20251118190530.580267-1-vladimir.oltean@nxp.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM0P190CA0022.EURP190.PROD.OUTLOOK.COM (2603:10a6:208:190::32) To DBBPR04MB7497.eurprd04.prod.outlook.com (2603:10a6:10:204::9) 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: DBBPR04MB7497:EE_|PA4PR04MB7695:EE_ X-MS-Office365-Filtering-Correlation-Id: 60b6d738-e415-4e8d-3b73-08de26d58555 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|10070799003|366016|7416014|376014|52116014|19092799006; X-Microsoft-Antispam-Message-Info: =?utf-8?B?dzhkSkc4OTdDdkRlZERRamQzZDZERHg2RHZOcGN4SjVEREMrSkpoVEJGVWFF?= =?utf-8?B?VlAzYWR4d1EyQi9sQUxpYUdWeHY0Y1RHTVUwMUNuN3QyNyt0ZC9IeEcyYXgw?= =?utf-8?B?REdCeE93NlhlNjdoMlRUaUNhN3NibkRtcURJc21LcE03L2cwb3lNY3V2ZlZ6?= =?utf-8?B?N2VyTW1XcEgzeXU1OUJLRk9vWHp1NllySjhUcnBtZUpGZmpyaGZEY3BhcDhn?= =?utf-8?B?Rm5tam9uWXJZN0dOSVRYMXVzaEEveUd3UE16Z3BBa2xPSjZ1VFdrTFpLczAw?= =?utf-8?B?SkVjTWF2cGNDc0VNUUFmOHRlVWFQV2VnaXd5QmlCbDVKZElwSmdPSlE3SGMy?= =?utf-8?B?MVVEZVpYWmtOZmdxL0s1NGhjN3duS0h3YVpzOHBJWVBGT1IxanhoblViS2Yr?= =?utf-8?B?UjhkL1JwT0Z4bi8xNHpNUXRLUDlVTzE4bEJiRndiYnBzd2hzUkZCVDZXKzZB?= =?utf-8?B?WTBSOHdqTitadHhBdytmcnhSNUxnblJqaGNSTDZZMndWOGdlZXhuS1JTVTI5?= =?utf-8?B?a2gvcVZPdDhIUzFzOGNuWXhxRUVwNjhZM21pb0hKMHhtZ1lkMTZZUjhkQStR?= =?utf-8?B?aXRFcnZsL2JxQVpoRURzTHFJL1NydXdWUGtVRUI4V0VsZjI3bnBqSUJDVE5m?= =?utf-8?B?UTJUNzV1ZWxTc3RNOS9zQmcxZ3VraEdmNzJTSHlVTndNVlpteGo3SE40OUZy?= =?utf-8?B?UFBMcllFbE9ablhTanBlK1MwZEZ1UUlPcnNzSGhaQWxUVkpTZ2h0VUxaMVhB?= =?utf-8?B?RVBoSDZlUnNJUnBDcDRQQnpUc3NwNXhMS2VyYldmdlhOYkZYVzVjVFdPZVlr?= =?utf-8?B?cmlZRk80QWFPNUQxb0VlYkV1dnh1Q25tQkQzMVdrbVJSNTJQTzZLU1YyRkhO?= =?utf-8?B?eXh3aVRyTmpUZjA0YTBPeSt5djN0QktOa2s5clpwbkVaMk9oY3dnR1N1N2RN?= =?utf-8?B?RkVocG5zd2w2d2xrNVkvTGtnMSt2Uy9MSEg4TzNneVBlTGJRdmU2ZHdrdTlM?= =?utf-8?B?cFNpM2FNbVFsS2tYRGl4YVpaNUpMZm45MUJNZkYyRndCUFZQQ01FT3pDVUtD?= =?utf-8?B?L3pvbkR0VlBjaWFiTFdpdFoxZndwVEtuKzBGRnVSNVBnZ3graHYyM0o2TFNO?= =?utf-8?B?ODZNV3FWNkNaeDg4aUVtVXhIWkF0T3ZybFNKQXkxa1dESFJaQVZJWWNWS1lx?= =?utf-8?B?RU9TWEpxVTh6V1Z3RGU3SEhMMUZOQkZmeTFYVy82MmdHNERRdXpQN0k2SXht?= =?utf-8?B?ZGNmcmR2TjNCcDROWWhTWE9iUjE3c2JURE9wdFhBYUZYZEdoMm5Od2UvWjlo?= =?utf-8?B?eXpjQnJLYlplYWZ1bHZBRlVxNTd4V09sV2ZFUFNUUDIyYnJYN1BlblVDdXlx?= =?utf-8?B?NWwrbEY3Tktjb1RacHA2d29zSDIwTFUzU3lBYXhwTVNHWTlNcVFieHZsY2VS?= =?utf-8?B?MTN5dHF4WVFXeXJoT3cyQ0N5RTdvQXZ4Sm9iQWhUZGlTL2dYV2JPREZHSXky?= =?utf-8?B?c09yb2I0OVcwaWtON1ZBK0JzaEhoQXQ1SXBhZVZaN2duR2UyMCt6WjdMVnBU?= =?utf-8?B?WEJpQUJDQVRoWW15aEd2bVdSdjU2YUYvQm8rUGxrMFFLVElJQStkZ1V6dytS?= =?utf-8?B?VGxVOEdHS0lSUnJ0eHR0b3JGOUF6OEZaTTV0L0d6ZFVFSHBDNnc1cnU5QzFh?= =?utf-8?B?bmRNZGZCNG1LVU1jdzZudkZKcFVTL1ZDbllxL090RlY5WkZhaDlicGRGZjN0?= =?utf-8?B?ZlpRbFU2ZXZSc0RkRmRUZy9xSHRDQkl3T01yY0JKY25iK1IrWnRuWXVULy9J?= =?utf-8?B?MXFkMzF0cnZXcGVjWlBBUSswcWlmOXBvZkwxUGRQeDkxdDhDdmwyRHhpanlo?= =?utf-8?B?aE1Uc0Z5WUFGOFlFb3dKeGRFcVZ5RlVtNE9XU09jSjJjdEtJdXhHYmtReWt2?= =?utf-8?Q?8OyNsbQHX1d2vSGxDQZNhgSQ2EkcLjUq?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DBBPR04MB7497.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(10070799003)(366016)(7416014)(376014)(52116014)(19092799006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?UGVWcDJmU2JFWnRKYkFudkMwcHo2SUUwRTRrcXBXRzQ4QlJySllQUjA0SGp5?= =?utf-8?B?eDB6MjlTVHoxM0NJNmE3V24wQVRFTXVjblRDbDJrNHZuSkZRYmRlSnN3K2RH?= =?utf-8?B?bUEyeUZMZGRzcnI4RkZ2L0prakJtMWdsaUdjSVUwU3lZYklBbDZRdjZ6ZlVZ?= =?utf-8?B?NlN4TzlVUlVQVnpXZVc2MURFcThOYVJ2eE51aVpSTG5iM3BGSFBubTBNSi9P?= =?utf-8?B?Wm1DNFV5MHRkMjVmdzYwak5Vc2JxZEFxZk5LbEQxa0RWS3BGQTFrYTFkMlF0?= =?utf-8?B?UkIrTmhGVS92RXhFNi90QUJWR1NMOExMelVQS2x5bEc4cGZtUjlFVFFhdlc2?= =?utf-8?B?MWdTWUI0SSsxTENoZ2ZXLzdaRGkxWGFDNjBNVFRUZ3NKYU1yakRLMGwxOGxo?= =?utf-8?B?NEE3VXFnWE8xSlFmZ2w1R0Zzc0NhNVhEWExuWjh3TnRzVEVJT3kxU3BKUTRo?= =?utf-8?B?ZnZGOXBOYTZVS0M2RXZZSXRSM3haUGZ1MlRpbXRSdmRnS2dDQU4yOFJwR3FH?= =?utf-8?B?azAxMW80SXVrN05ESzRxZCtkMm1GQmtVSTBwcnMxV3hlZXJIN2RWYkJxY3dp?= =?utf-8?B?WTlSU1ppU1h1cE5MODQ2LzZ6b3JLNFRBbzROd0lsall3ZnlRbzNZTzZFVU56?= =?utf-8?B?RFhSNmxMM2orU3hodHZCdWhvUmZtMDlnT3RoZ1pKeVE2bUxIbGkxRFpoWHda?= =?utf-8?B?aDhqRTJzUzFsa1RLSCtCcnl0VE5URG00MlZLaExUcVQ1US9nYlpvcWxmbGsr?= =?utf-8?B?WElMQno2OFVRZDk2dnBibjBDZkt1MFErK2ZmT3Q4b2MrWUpEQ1JNdks4clVv?= =?utf-8?B?YmRhWWFheWd4UHdUalkyRUluMWZCN2djYVEzTU1HRStJNXRzZGxabkRwaXhy?= =?utf-8?B?eGRDS2dNL2pZRUtENjhNb1RTa2kxaitaMGNaNmEzWmFKS1J5L0lZcTI2Vzd2?= =?utf-8?B?MTd6c1Bhdzl3clpBcjhONm9obXJKV2hyOFJEY1RiWHVJb0wyMDRwZWRTelVr?= =?utf-8?B?MVB4QUROeW1yMmRNN0VpZ3A2MkZOYVNzYUVGUlJDL1MvU1ZLd3k5Zk9senBL?= =?utf-8?B?Q0xDdmthS0tCSW9Db0dsL28xa25GZEZXZlpQVk4xZENieFJ1dkpZOVJ1d3hG?= =?utf-8?B?UFVNeklvUEp0VmF0Q2JIOU5yVENrWWxLU2d1M2JMZ0RkZGxKeFVCYnFnVFQx?= =?utf-8?B?NVE1dFpNeUt6MmtCbU0rVzNZWVdGSFB1aWlPUGxZVnREWHpaOFdkMDVJaHB0?= =?utf-8?B?ZERZSzBlYjRLeTVnZzVyc29DRkhtaThsMEtQdHNSZVpZL1BCSjZCV2xTQTJP?= =?utf-8?B?RDUrdUlWam5tOFdVNTZ5d1VFWVNuZWRuSUdlZjlCUGVBdkJjTTZMS0RzQnQ0?= =?utf-8?B?Z0owOXlkZ2RNR1BrQ29ubzI4MUc1ajMrODhtZit5MkhGWkZ0clJtMGV1blhn?= =?utf-8?B?VnliUS80NnpOWE55WHBld0x5cEp1SUExUVNIc1Jzajl3b3IzWUE5TExZV1Rr?= =?utf-8?B?ZEFycVAxbDQrREhoZ1JzNjJKS2pJWHBSOVZrVU9HUnVzMFI0UW8zc1Z6d2ZG?= =?utf-8?B?MGorME1odDFVMGJPczlrVENqa3hTL2ZUNlNPUTlrMmRybmZpWFdrL3hFTHJ4?= =?utf-8?B?WTNWcWpxN3BsMWJHalVJSEVqZlRpWi9DWnAvbW5GbU14ZmUySVVENGdKVTlo?= =?utf-8?B?TldyRlZXNDRMUC9id0Q0cDVJSmFuYlIxc0lMN2h6QlRSQ1h4M0ljbWFTQm1n?= =?utf-8?B?cGQ0SzdXZWNQT2hkYm9YSHh3YWppcFg2OUZQUnVvZXhJZnJyQXB1ckZxMUtu?= =?utf-8?B?M0tiZWx0SEZsY0g0UmtLY0h5R0c0TDhvdEFBc0w3c0hXVjNVa3oyN0hWakxJ?= =?utf-8?B?UGU1U1NNRjJJa2lOVUJGT0pRWXg4UTFPN0NLai9tSWxCWmgybzU1elh3WWEv?= =?utf-8?B?VkliWmdKdi93V092TW0vT01ZU3EzU3dPenluTVhRaEtnNjh4NUJrVXRlU3hv?= =?utf-8?B?Snl6U2NyTDNiZGFpSkdpam5CeUVRc3ByMEMwUlRObWpzY1dsaW9NMVF6blQz?= =?utf-8?B?KzhydU1PTWRoaWUxQmdEVGVJNXc1RzBZcWRUM3JORERZcnVtUUhuQjJnbDNM?= =?utf-8?B?SEFnSjJxY1U2Sm5RalJiQi9MZ0FpQ3hCeENZdXEwU2ZIZ1orZVFNTjdVL3Ji?= =?utf-8?Q?ldQ7YDGc7SOjZ7d/77+VzfI=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 60b6d738-e415-4e8d-3b73-08de26d58555 X-MS-Exchange-CrossTenant-AuthSource: DBBPR04MB7497.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Nov 2025 19:06:04.5852 (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: 3CDiPf3Ww5GfswU1AhMyfl7JSOzkargBFxjOwtfz9Rgu8WbA2TUbOos7tySOfz8nVWZWTFKp0/YRECi3iEbhlg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA4PR04MB7695 The code in sja1105_mdio.c does the same thing as the one added by Serge Semin in drivers/net/pcs/pcs-xpcs-plat.c (implements a virtual MDIO bus, backed by either a direct or an indirect register access method), except the latter is generic after the conversion to regmap. Except for just one problem: pcs-xpcs-plat.c expects to probe on a device tree node, and the SJA1105 and SJA1110 doesn't describe its XPCS on the SGMII ports in the device tree. This is both a problem and a design intention. I've long held the view that for SPI devices which don't have a common .dtsi but whose bindings have to be written many times by many people for many boards, less is more, and all the details like internal subdevices can probably stay hidden even if those devices are being configured by the kernel. I've also held the view that DSA should delegate its responsibility for configuring non-essential subdevices to other drivers in their respective subsystems, and that the switching IP core (the one with the DSA driver) should merely be one of the MFD children of a MFD parent that is in charge of the spi_device. This would mean something like the "mscc,vsc7512" example from Documentation/devicetree/bindings/mfd/mscc,ocelot.yaml, but: - retrofitting that model onto the SJA1105 bindings (and any other switch on a non-MMIO bus, where the ethernet-switch node coincides with the SPI/I2C bus device node) is a huge pain for backwards and especially forward compatibility, as it implies that the switch can be either a spi_device or a platform_device after the conversion - if it sounds like it is conflicting with the first requirement of "less is more", yes it is I've tried various ways of using the xpcs-plat driver while avoiding major DT bindings changes for this switch, like fwnode_create_software_node() and custom platform data. Platform data was ugly and software nodes didn't work at all, for reasons explained here: https://lore.kernel.org/lkml/20230223203713.hcse3mkbq3m6sogb@skbuf/ I have to give huge credits to Andy Shevchenko, who after more than one year remembered the discussion and referenced Herv=C3=A9 Codina's work on P= CI DT overlays, as well as a presentation from Lizhi Hou and Rob Herring. I think I found the compromise solution that allows me to make progress, which is to create a dynamic OF changeset that attaches the PCS node to the live device tree, if it wasn't described already in the DTS, or use the one from the DTS if it's already there. With a proper OF node, the xpcs-plat driver probes just fine. As for where to attach the XPCS node? Memory-mapped devices (in the SPI address space, mind you) don't naturally sit well in the "ethernet-switch" node, because that has #address-cells =3D <0> and #size-cells =3D <0>. We can't modify #address-cells and #size-cells, because "ethernet-switch" has a reg-less "ethernet-ports" child node as per dsa.yaml, and the PCS would sit on the same hierarchical level as that. Essentially this is another angle of the argument that the DSA OF node shouldn't coincide with the SPI bus device node, as this implies it is in control of the entire address space. The compromise, retrofit-ready solution here is to create a "regs" container node which is a child of the ethernet-switch and has #address-cells =3D <1> and #size-cells =3D <1>, then attach the XPCS to that. There also exists a use case where the XPCS is manually described in the device tree, and that is when we need to describe SGMII lane polarity inversion (not yet supported, TBD). In that case, sja1105_fill_device_tree() simply backs off for the already present PCS nodes, and sja1105_mfd_add_pcs_cells() works all the same. A small implementation note in sja1105_create_pcs(): xpcs_create_fwnode() is NULL-tolerant via fwnode_device_is_available(), so we don't need to explicitly handle the case where priv->pcs_fwnode[port] wasn't assigned by sja1105_create_pcs_nodes() (because the OF node exists in the DTS). This case currently returns -ENODEV and will be handled by the next change. Cc: Serge Semin Cc: Andy Shevchenko Cc: Herve Codina Cc: Rob Herring Cc: Krzysztof Kozlowski Cc: Conor Dooley Cc: devicetree@vger.kernel.org Signed-off-by: Vladimir Oltean --- drivers/net/dsa/sja1105/Kconfig | 1 + drivers/net/dsa/sja1105/Makefile | 1 - drivers/net/dsa/sja1105/sja1105.h | 29 ++- drivers/net/dsa/sja1105/sja1105_main.c | 82 +++++++-- drivers/net/dsa/sja1105/sja1105_mdio.c | 233 ------------------------- drivers/net/dsa/sja1105/sja1105_mfd.c | 228 +++++++++++++++++++++++- drivers/net/dsa/sja1105/sja1105_mfd.h | 2 + drivers/net/dsa/sja1105/sja1105_spi.c | 49 ++++-- 8 files changed, 342 insertions(+), 283 deletions(-) delete mode 100644 drivers/net/dsa/sja1105/sja1105_mdio.c diff --git a/drivers/net/dsa/sja1105/Kconfig b/drivers/net/dsa/sja1105/Kcon= fig index 932bca545d69..eef06e419559 100644 --- a/drivers/net/dsa/sja1105/Kconfig +++ b/drivers/net/dsa/sja1105/Kconfig @@ -8,6 +8,7 @@ tristate "NXP SJA1105 Ethernet switch family support" select PACKING select CRC32 select MFD_CORE + select OF_DYNAMIC help This is the driver for the NXP SJA1105 (5-port) and SJA1110 (10-port) automotive Ethernet switch family. These are managed over an SPI diff --git a/drivers/net/dsa/sja1105/Makefile b/drivers/net/dsa/sja1105/Mak= efile index 3ac2d77dbe6c..94907116c1cc 100644 --- a/drivers/net/dsa/sja1105/Makefile +++ b/drivers/net/dsa/sja1105/Makefile @@ -4,7 +4,6 @@ obj-$(CONFIG_NET_DSA_SJA1105) +=3D sja1105.o sja1105-objs :=3D \ sja1105_spi.o \ sja1105_main.o \ - sja1105_mdio.o \ sja1105_mfd.o \ sja1105_flower.o \ sja1105_ethtool.o \ diff --git a/drivers/net/dsa/sja1105/sja1105.h b/drivers/net/dsa/sja1105/sj= a1105.h index 22fce143cb76..96954f1f5bcf 100644 --- a/drivers/net/dsa/sja1105/sja1105.h +++ b/drivers/net/dsa/sja1105/sja1105.h @@ -44,6 +44,8 @@ #define SJA1105_RGMII_DELAY_MAX_PS \ SJA1105_RGMII_DELAY_PHASE_TO_PS(1017) =20 +#define SJA1105_SGMII_PORT 4 + typedef enum { SPI_READ =3D 0, SPI_WRITE =3D 1, @@ -91,7 +93,6 @@ struct sja1105_regs { u64 rmii_ref_clk[SJA1105_MAX_NUM_PORTS]; u64 rmii_ext_tx_clk[SJA1105_MAX_NUM_PORTS]; u64 stats[__MAX_SJA1105_STATS_AREA][SJA1105_MAX_NUM_PORTS]; - u64 pcs_base[SJA1105_MAX_NUM_PORTS]; }; =20 enum { @@ -109,6 +110,13 @@ enum sja1105_internal_phy_t { SJA1105_PHY_BASE_T1, }; =20 +struct sja1105_pcs_resource { + struct resource res; + int port; + const char *cell_name; + const char *compatible; +}; + struct sja1105_info { u64 device_id; /* Needed for distinction between P and R, and between Q and S @@ -148,10 +156,6 @@ struct sja1105_info { bool (*rxtstamp)(struct dsa_switch *ds, int port, struct sk_buff *skb); void (*txtstamp)(struct dsa_switch *ds, int port, struct sk_buff *skb); int (*clocking_setup)(struct sja1105_private *priv); - int (*pcs_mdio_read_c45)(struct mii_bus *bus, int phy, int mmd, - int reg); - int (*pcs_mdio_write_c45)(struct mii_bus *bus, int phy, int mmd, - int reg, u16 val); int (*disable_microcontroller)(struct sja1105_private *priv); const char *name; bool supports_mii[SJA1105_MAX_NUM_PORTS]; @@ -161,6 +165,8 @@ struct sja1105_info { bool supports_2500basex[SJA1105_MAX_NUM_PORTS]; enum sja1105_internal_phy_t internal_phy[SJA1105_MAX_NUM_PORTS]; const u64 port_speed[SJA1105_SPEED_MAX]; + const struct sja1105_pcs_resource *pcs_resources; + size_t num_pcs_resources; }; =20 enum sja1105_key_type { @@ -273,8 +279,9 @@ struct sja1105_private { struct regmap *regmap; struct devlink_region **regions; struct sja1105_cbs_entry *cbs; - struct mii_bus *mdio_pcs; struct phylink_pcs *pcs[SJA1105_MAX_NUM_PORTS]; + struct fwnode_handle *pcs_fwnode[SJA1105_MAX_NUM_PORTS]; + struct of_changeset of_cs; struct sja1105_ptp_data ptp_data; struct sja1105_tas_data tas_data; }; @@ -302,16 +309,6 @@ int sja1105_vlan_filtering(struct dsa_switch *ds, int = port, bool enabled, struct netlink_ext_ack *extack); void sja1105_frame_memory_partitioning(struct sja1105_private *priv); =20 -/* From sja1105_mdio.c */ -int sja1105_mdiobus_register(struct dsa_switch *ds); -void sja1105_mdiobus_unregister(struct dsa_switch *ds); -int sja1105_pcs_mdio_read_c45(struct mii_bus *bus, int phy, int mmd, int r= eg); -int sja1105_pcs_mdio_write_c45(struct mii_bus *bus, int phy, int mmd, int = reg, - u16 val); -int sja1110_pcs_mdio_read_c45(struct mii_bus *bus, int phy, int mmd, int r= eg); -int sja1110_pcs_mdio_write_c45(struct mii_bus *bus, int phy, int mmd, int = reg, - u16 val); - /* From sja1105_devlink.c */ int sja1105_devlink_setup(struct dsa_switch *ds); void sja1105_devlink_teardown(struct dsa_switch *ds); diff --git a/drivers/net/dsa/sja1105/sja1105_main.c b/drivers/net/dsa/sja11= 05/sja1105_main.c index 6da5c655dae7..70aecdf9fd0e 100644 --- a/drivers/net/dsa/sja1105/sja1105_main.c +++ b/drivers/net/dsa/sja1105/sja1105_main.c @@ -15,6 +15,7 @@ #include #include #include +#include #include #include #include @@ -3032,6 +3033,44 @@ static int sja1105_port_bridge_flags(struct dsa_swit= ch *ds, int port, return 0; } =20 +static int sja1105_create_pcs(struct dsa_switch *ds, int port) +{ + struct sja1105_private *priv =3D ds->priv; + struct phylink_pcs *pcs; + + if (priv->phy_mode[port] !=3D PHY_INTERFACE_MODE_SGMII && + priv->phy_mode[port] !=3D PHY_INTERFACE_MODE_2500BASEX) + return 0; + + pcs =3D xpcs_create_pcs_fwnode(priv->pcs_fwnode[port]); + if (IS_ERR(pcs)) + return PTR_ERR(pcs); + + priv->pcs[port] =3D pcs; + + return 0; +} + +static void sja1105_destroy_pcs(struct dsa_switch *ds, int port) +{ + struct sja1105_private *priv =3D ds->priv; + + if (priv->pcs[port]) { + xpcs_destroy_pcs(priv->pcs[port]); + priv->pcs[port] =3D NULL; + } +} + +static int sja1105_port_setup(struct dsa_switch *ds, int port) +{ + return sja1105_create_pcs(ds, port); +} + +static void sja1105_port_teardown(struct dsa_switch *ds, int port) +{ + sja1105_destroy_pcs(ds, port); +} + /* The programming model for the SJA1105 switch is "all-at-once" via static * configuration tables. Some of these can be dynamically modified at runt= ime, * but not the xMII mode parameters table. @@ -3086,16 +3125,9 @@ static int sja1105_setup(struct dsa_switch *ds) goto out_flower_teardown; } =20 - rc =3D sja1105_mdiobus_register(ds); - if (rc < 0) { - dev_err(ds->dev, "Failed to register MDIO bus: %pe\n", - ERR_PTR(rc)); - goto out_ptp_clock_unregister; - } - rc =3D sja1105_devlink_setup(ds); if (rc < 0) - goto out_mdiobus_unregister; + goto out_ptp_clock_unregister; =20 rtnl_lock(); rc =3D dsa_tag_8021q_register(ds, htons(ETH_P_8021Q)); @@ -3125,8 +3157,6 @@ static int sja1105_setup(struct dsa_switch *ds) =20 out_devlink_teardown: sja1105_devlink_teardown(ds); -out_mdiobus_unregister: - sja1105_mdiobus_unregister(ds); out_ptp_clock_unregister: sja1105_ptp_clock_unregister(ds); out_flower_teardown: @@ -3147,7 +3177,6 @@ static void sja1105_teardown(struct dsa_switch *ds) rtnl_unlock(); =20 sja1105_devlink_teardown(ds); - sja1105_mdiobus_unregister(ds); sja1105_ptp_clock_unregister(ds); sja1105_flower_teardown(ds); sja1105_tas_teardown(ds); @@ -3166,6 +3195,8 @@ static const struct dsa_switch_ops sja1105_switch_ops= =3D { .connect_tag_protocol =3D sja1105_connect_tag_protocol, .setup =3D sja1105_setup, .teardown =3D sja1105_teardown, + .port_setup =3D sja1105_port_setup, + .port_teardown =3D sja1105_port_teardown, .set_ageing_time =3D sja1105_set_ageing_time, .port_change_mtu =3D sja1105_change_mtu, .port_max_mtu =3D sja1105_get_max_mtu, @@ -3362,32 +3393,51 @@ static int sja1105_probe(struct spi_device *spi) return rc; } =20 + rc =3D sja1105_fill_device_tree(ds); + if (rc) { + dev_err(ds->dev, "Failed to fill device tree: %pe\n", + ERR_PTR(rc)); + return rc; + } + rc =3D sja1105_mfd_add_devices(ds); if (rc) { dev_err(ds->dev, "Failed to create child devices: %pe\n", ERR_PTR(rc)); - return rc; + goto restore_device_tree; } =20 if (IS_ENABLED(CONFIG_NET_SCH_CBS)) { priv->cbs =3D devm_kcalloc(dev, priv->info->num_cbs_shapers, sizeof(struct sja1105_cbs_entry), GFP_KERNEL); - if (!priv->cbs) - return -ENOMEM; + if (!priv->cbs) { + rc =3D -ENOMEM; + goto restore_device_tree; + } } =20 - return dsa_register_switch(priv->ds); + rc =3D dsa_register_switch(priv->ds); + if (rc) + goto restore_device_tree; + + return 0; + +restore_device_tree: + sja1105_restore_device_tree(ds); + return rc; } =20 static void sja1105_remove(struct spi_device *spi) { struct sja1105_private *priv =3D spi_get_drvdata(spi); + struct dsa_switch *ds =3D priv->ds; =20 if (!priv) return; =20 - dsa_unregister_switch(priv->ds); + dsa_unregister_switch(ds); + sja1105_restore_device_tree(ds); } =20 static void sja1105_shutdown(struct spi_device *spi) diff --git a/drivers/net/dsa/sja1105/sja1105_mdio.c b/drivers/net/dsa/sja11= 05/sja1105_mdio.c deleted file mode 100644 index d5577c702902..000000000000 --- a/drivers/net/dsa/sja1105/sja1105_mdio.c +++ /dev/null @@ -1,233 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0 -/* Copyright 2021 NXP - */ -#include -#include -#include "sja1105.h" - -#define SJA1110_PCS_BANK_REG SJA1110_SPI_ADDR(0x3fc) - -int sja1105_pcs_mdio_read_c45(struct mii_bus *bus, int phy, int mmd, int r= eg) -{ - struct sja1105_private *priv =3D bus->priv; - u64 addr; - u32 tmp; - int rc; - - addr =3D (mmd << 16) | reg; - - if (mmd !=3D MDIO_MMD_VEND1 && mmd !=3D MDIO_MMD_VEND2) - return 0xffff; - - if (mmd =3D=3D MDIO_MMD_VEND2 && (reg & GENMASK(15, 0)) =3D=3D MII_PHYSID= 1) - return NXP_SJA1105_XPCS_ID >> 16; - if (mmd =3D=3D MDIO_MMD_VEND2 && (reg & GENMASK(15, 0)) =3D=3D MII_PHYSID= 2) - return NXP_SJA1105_XPCS_ID & GENMASK(15, 0); - - rc =3D sja1105_xfer_u32(priv, SPI_READ, addr, &tmp, NULL); - if (rc < 0) - return rc; - - return tmp & 0xffff; -} - -int sja1105_pcs_mdio_write_c45(struct mii_bus *bus, int phy, int mmd, - int reg, u16 val) -{ - struct sja1105_private *priv =3D bus->priv; - u64 addr; - u32 tmp; - - addr =3D (mmd << 16) | reg; - tmp =3D val; - - if (mmd !=3D MDIO_MMD_VEND1 && mmd !=3D MDIO_MMD_VEND2) - return -EINVAL; - - return sja1105_xfer_u32(priv, SPI_WRITE, addr, &tmp, NULL); -} - -int sja1110_pcs_mdio_read_c45(struct mii_bus *bus, int phy, int mmd, int r= eg) -{ - struct sja1105_private *priv =3D bus->priv; - const struct sja1105_regs *regs =3D priv->info->regs; - int offset, bank; - u64 addr; - u32 tmp; - int rc; - - if (regs->pcs_base[phy] =3D=3D SJA1105_RSV_ADDR) - return -ENODEV; - - addr =3D (mmd << 16) | reg; - - if (mmd =3D=3D MDIO_MMD_VEND2 && (reg & GENMASK(15, 0)) =3D=3D MII_PHYSID= 1) - return NXP_SJA1110_XPCS_ID >> 16; - if (mmd =3D=3D MDIO_MMD_VEND2 && (reg & GENMASK(15, 0)) =3D=3D MII_PHYSID= 2) - return NXP_SJA1110_XPCS_ID & GENMASK(15, 0); - - bank =3D addr >> 8; - offset =3D addr & GENMASK(7, 0); - - /* This addressing scheme reserves register 0xff for the bank address - * register, so that can never be addressed. - */ - if (WARN_ON(offset =3D=3D 0xff)) - return -ENODEV; - - tmp =3D bank; - - rc =3D sja1105_xfer_u32(priv, SPI_WRITE, - regs->pcs_base[phy] + SJA1110_PCS_BANK_REG, - &tmp, NULL); - if (rc < 0) - return rc; - - rc =3D sja1105_xfer_u32(priv, SPI_READ, regs->pcs_base[phy] + offset, - &tmp, NULL); - if (rc < 0) - return rc; - - return tmp & 0xffff; -} - -int sja1110_pcs_mdio_write_c45(struct mii_bus *bus, int phy, int mmd, int = reg, - u16 val) -{ - struct sja1105_private *priv =3D bus->priv; - const struct sja1105_regs *regs =3D priv->info->regs; - int offset, bank; - u64 addr; - u32 tmp; - int rc; - - if (regs->pcs_base[phy] =3D=3D SJA1105_RSV_ADDR) - return -ENODEV; - - addr =3D (mmd << 16) | reg; - - bank =3D addr >> 8; - offset =3D addr & GENMASK(7, 0); - - /* This addressing scheme reserves register 0xff for the bank address - * register, so that can never be addressed. - */ - if (WARN_ON(offset =3D=3D 0xff)) - return -ENODEV; - - tmp =3D bank; - - rc =3D sja1105_xfer_u32(priv, SPI_WRITE, - regs->pcs_base[phy] + SJA1110_PCS_BANK_REG, - &tmp, NULL); - if (rc < 0) - return rc; - - tmp =3D val; - - return sja1105_xfer_u32(priv, SPI_WRITE, regs->pcs_base[phy] + offset, - &tmp, NULL); -} - -static int sja1105_mdiobus_pcs_register(struct sja1105_private *priv) -{ - struct dsa_switch *ds =3D priv->ds; - struct mii_bus *bus; - int rc =3D 0; - int port; - - if (!priv->info->pcs_mdio_read_c45 || !priv->info->pcs_mdio_write_c45) - return 0; - - bus =3D mdiobus_alloc_size(0); - if (!bus) - return -ENOMEM; - - bus->name =3D "SJA1105 PCS MDIO bus"; - snprintf(bus->id, MII_BUS_ID_SIZE, "%s-pcs", - dev_name(ds->dev)); - bus->read_c45 =3D priv->info->pcs_mdio_read_c45; - bus->write_c45 =3D priv->info->pcs_mdio_write_c45; - bus->parent =3D ds->dev; - /* There is no PHY on this MDIO bus =3D> mask out all PHY addresses - * from auto probing. - */ - bus->phy_mask =3D ~0; - bus->priv =3D priv; - - rc =3D mdiobus_register(bus); - if (rc) { - mdiobus_free(bus); - return rc; - } - - for (port =3D 0; port < ds->num_ports; port++) { - struct phylink_pcs *pcs; - - if (dsa_is_unused_port(ds, port)) - continue; - - if (priv->phy_mode[port] !=3D PHY_INTERFACE_MODE_SGMII && - priv->phy_mode[port] !=3D PHY_INTERFACE_MODE_2500BASEX) - continue; - - pcs =3D xpcs_create_pcs_mdiodev(bus, port); - if (IS_ERR(pcs)) { - rc =3D PTR_ERR(pcs); - goto out_pcs_free; - } - - priv->pcs[port] =3D pcs; - } - - priv->mdio_pcs =3D bus; - - return 0; - -out_pcs_free: - for (port =3D 0; port < ds->num_ports; port++) { - if (priv->pcs[port]) { - xpcs_destroy_pcs(priv->pcs[port]); - priv->pcs[port] =3D NULL; - } - } - - mdiobus_unregister(bus); - mdiobus_free(bus); - - return rc; -} - -static void sja1105_mdiobus_pcs_unregister(struct sja1105_private *priv) -{ - struct dsa_switch *ds =3D priv->ds; - int port; - - if (!priv->mdio_pcs) - return; - - for (port =3D 0; port < ds->num_ports; port++) { - if (priv->pcs[port]) { - xpcs_destroy_pcs(priv->pcs[port]); - priv->pcs[port] =3D NULL; - } - } - - mdiobus_unregister(priv->mdio_pcs); - mdiobus_free(priv->mdio_pcs); - priv->mdio_pcs =3D NULL; -} - -int sja1105_mdiobus_register(struct dsa_switch *ds) -{ - struct sja1105_private *priv =3D ds->priv; - - return sja1105_mdiobus_pcs_register(priv); -} - -void sja1105_mdiobus_unregister(struct dsa_switch *ds) -{ - struct sja1105_private *priv =3D ds->priv; - - sja1105_mdiobus_pcs_unregister(priv); -} diff --git a/drivers/net/dsa/sja1105/sja1105_mfd.c b/drivers/net/dsa/sja110= 5/sja1105_mfd.c index 9e60cd3b5d01..7785e7d33c3d 100644 --- a/drivers/net/dsa/sja1105/sja1105_mfd.c +++ b/drivers/net/dsa/sja1105/sja1105_mfd.c @@ -7,12 +7,40 @@ #include "sja1105.h" #include "sja1105_mfd.h" =20 +#define SJA1105_MAX_NUM_MDIOS 2 +#define SJA1105_MAX_NUM_PCS 4 +#define SJA1105_MAX_NUM_CELLS (SJA1105_MAX_NUM_MDIOS + \ + SJA1105_MAX_NUM_PCS + \ + 1) /* sentinel */ + static const struct resource sja1110_mdio_cbtx_res =3D DEFINE_RES_REG_NAMED(0x709000, 0x1000, "mdio_cbtx"); =20 static const struct resource sja1110_mdio_cbt1_res =3D DEFINE_RES_REG_NAMED(0x704000, 0x4000, "mdio_cbt1"); =20 +static void sja1105_mfd_add_pcs_cells(struct sja1105_private *priv, + struct device_node *regs_node, + struct mfd_cell *cells, + int *num_cells) +{ + for (int i =3D 0; i < priv->info->num_pcs_resources; i++) { + const struct sja1105_pcs_resource *pcs_res; + + pcs_res =3D &priv->info->pcs_resources[i]; + + cells[(*num_cells)++] =3D (struct mfd_cell) { + .name =3D pcs_res->cell_name, + .of_compatible =3D pcs_res->compatible, + .of_reg =3D pcs_res->res.start, + .use_of_reg =3D true, + .resources =3D &pcs_res->res, + .num_resources =3D 1, + .parent_of_node =3D regs_node, + }; + } +} + static void sja1105_mfd_add_mdio_cells(struct sja1105_private *priv, struct device_node *mdio_node, struct mfd_cell *cells, @@ -50,12 +78,16 @@ static void sja1105_mfd_add_mdio_cells(struct sja1105_p= rivate *priv, int sja1105_mfd_add_devices(struct dsa_switch *ds) { struct device_node *switch_node =3D dev_of_node(ds->dev); + struct mfd_cell cells[SJA1105_MAX_NUM_CELLS] =3D {}; + struct device_node *regs_node, *mdio_node; struct sja1105_private *priv =3D ds->priv; - struct device_node *mdio_node; - struct mfd_cell cells[2] =3D {}; int num_cells =3D 0; int rc =3D 0; =20 + regs_node =3D of_get_available_child_by_name(switch_node, "regs"); + if (regs_node) + sja1105_mfd_add_pcs_cells(priv, regs_node, cells, &num_cells); + mdio_node =3D of_get_available_child_by_name(switch_node, "mdios"); if (mdio_node) sja1105_mfd_add_mdio_cells(priv, mdio_node, cells, &num_cells); @@ -64,6 +96,198 @@ int sja1105_mfd_add_devices(struct dsa_switch *ds) rc =3D devm_mfd_add_devices(ds->dev, PLATFORM_DEVID_AUTO, cells, num_cells, NULL, 0, NULL); =20 + of_node_put(regs_node); of_node_put(mdio_node); return rc; } + +static bool sja1105_child_node_exists(struct device_node *node, + const char *name, + const struct resource *res) +{ + struct device_node *child =3D of_get_child_by_name(node, name); + u32 reg[2]; + + for_each_child_of_node(node, child) { + if (!of_node_name_eq(child, name)) + continue; + + if (of_property_read_u32_array(child, "reg", reg, ARRAY_SIZE(reg))) + continue; + + if (reg[0] =3D=3D res->start && reg[1] =3D=3D resource_size(res)) + return true; + } + + return false; +} + +static int sja1105_create_pcs_nodes(struct sja1105_private *priv, + struct device_node *regs_node) +{ + struct dsa_switch *ds =3D priv->ds; + struct device *dev =3D ds->dev; + struct device_node *pcs_node; + const u32 reg_io_width =3D 4; + char node_name[32]; + u32 reg_props[2]; + int rc; + + for (int i =3D 0; i < priv->info->num_pcs_resources; i++) { + const struct sja1105_pcs_resource *pcs_res; + + pcs_res =3D &priv->info->pcs_resources[i]; + + if (sja1105_child_node_exists(regs_node, "ethernet-pcs", + &pcs_res->res)) + continue; + + snprintf(node_name, sizeof(node_name), "ethernet-pcs@%llx", + pcs_res->res.start); + + pcs_node =3D of_changeset_create_node(&priv->of_cs, regs_node, + node_name); + if (!pcs_node) { + dev_err(dev, "Failed to create PCS node %s\n", node_name); + return -ENOMEM; + } + + rc =3D of_changeset_add_prop_string(&priv->of_cs, pcs_node, + "compatible", + pcs_res->compatible); + if (rc) { + dev_err(dev, "Failed to add compatible property to %s: %pe\n", + node_name, ERR_PTR(rc)); + return rc; + } + + reg_props[0] =3D pcs_res->res.start; + reg_props[1] =3D resource_size(&pcs_res->res); + rc =3D of_changeset_add_prop_u32_array(&priv->of_cs, pcs_node, + "reg", reg_props, 2); + if (rc) { + dev_err(dev, "Failed to add reg property to %s: %pe\n", + node_name, ERR_PTR(rc)); + return rc; + } + + rc =3D of_changeset_add_prop_string(&priv->of_cs, pcs_node, + "reg-names", + pcs_res->res.name); + if (rc) { + dev_err(dev, "Failed to add reg-names property to %s: %pe\n", + node_name, ERR_PTR(rc)); + return rc; + } + + rc =3D of_changeset_add_prop_u32_array(&priv->of_cs, pcs_node, + "reg-io-width", + ®_io_width, 1); + if (rc) { + dev_err(dev, "Failed to add reg-io-width property to %s: %pe\n", + node_name, ERR_PTR(rc)); + return rc; + } + + dev_dbg(dev, "Created OF node %pOF\n", pcs_node); + priv->pcs_fwnode[pcs_res->port] =3D of_fwnode_handle(pcs_node); + } + + return 0; +} + +static struct device_node *sja1105_create_regs_node(struct sja1105_private= *priv, + struct device_node *switch_node) +{ + struct device *dev =3D priv->ds->dev; + struct device_node *regs_node; + const u32 addr_size_cells =3D 1; + int rc; + + regs_node =3D of_changeset_create_node(&priv->of_cs, switch_node, "regs"); + if (!regs_node) { + dev_err(dev, "Failed to create 'regs' device tree node\n"); + return ERR_PTR(-ENOMEM); + } + + rc =3D of_changeset_add_prop_u32_array(&priv->of_cs, regs_node, + "#address-cells", + &addr_size_cells, 1); + if (rc) { + dev_err(dev, "Failed to add #address-cells property: %pe\n", + ERR_PTR(rc)); + return ERR_PTR(rc); + } + + rc =3D of_changeset_add_prop_u32_array(&priv->of_cs, regs_node, + "#size-cells", + &addr_size_cells, 1); + if (rc) { + dev_err(dev, "Failed to add #size-cells property: %pe\n", + ERR_PTR(rc)); + return ERR_PTR(rc); + } + + return regs_node; +} + +int sja1105_fill_device_tree(struct dsa_switch *ds) +{ + struct device_node *switch_node, *regs_node; + struct sja1105_private *priv =3D ds->priv; + bool regs_node_created =3D false; + struct device *dev =3D ds->dev; + int rc; + + switch_node =3D dev_of_node(dev); + of_changeset_init(&priv->of_cs); + + regs_node =3D of_get_child_by_name(switch_node, "regs"); + if (!regs_node) { + regs_node =3D sja1105_create_regs_node(priv, switch_node); + if (IS_ERR(regs_node)) { + rc =3D PTR_ERR(regs_node); + goto out_destroy_changeset; + } + + regs_node_created =3D true; + dev_dbg(dev, "Created OF node %pOF\n", regs_node); + } + + rc =3D sja1105_create_pcs_nodes(priv, regs_node); + if (rc) + goto out_destroy_changeset; + + rc =3D of_changeset_apply(&priv->of_cs); + if (rc) { + dev_err(dev, "Failed to apply device tree changeset: %pe\n", + ERR_PTR(rc)); + goto out_destroy_changeset; + } + + /* Don't destroy the changeset - we need it for reverting later */ + goto out_put_regs_node; + +out_destroy_changeset: + of_changeset_destroy(&priv->of_cs); +out_put_regs_node: + if (!regs_node_created) + of_node_put(regs_node); + + return rc; +} + +void sja1105_restore_device_tree(struct dsa_switch *ds) +{ + struct sja1105_private *priv =3D ds->priv; + struct device *dev =3D ds->dev; + int rc; + + rc =3D of_changeset_revert(&priv->of_cs); + if (rc) { + dev_err(dev, "Failed to revert device tree changeset: %pe\n", + ERR_PTR(rc)); + } + + of_changeset_destroy(&priv->of_cs); +} diff --git a/drivers/net/dsa/sja1105/sja1105_mfd.h b/drivers/net/dsa/sja110= 5/sja1105_mfd.h index c33c8ff24e25..7195c3aa1437 100644 --- a/drivers/net/dsa/sja1105/sja1105_mfd.h +++ b/drivers/net/dsa/sja1105/sja1105_mfd.h @@ -5,5 +5,7 @@ #define _SJA1105_MFD_H =20 int sja1105_mfd_add_devices(struct dsa_switch *ds); +int sja1105_fill_device_tree(struct dsa_switch *ds); +void sja1105_restore_device_tree(struct dsa_switch *ds); =20 #endif diff --git a/drivers/net/dsa/sja1105/sja1105_spi.c b/drivers/net/dsa/sja110= 5/sja1105_spi.c index 087acded7827..8af3d01d0f5c 100644 --- a/drivers/net/dsa/sja1105/sja1105_spi.c +++ b/drivers/net/dsa/sja1105/sja1105_spi.c @@ -617,9 +617,28 @@ static const struct sja1105_regs sja1110_regs =3D { .ptpclkrate =3D SJA1110_SPI_ADDR(0x74), .ptpclkcorp =3D SJA1110_SPI_ADDR(0x80), .ptpsyncts =3D SJA1110_SPI_ADDR(0x84), - .pcs_base =3D {SJA1105_RSV_ADDR, 0x1c1400, 0x1c1800, 0x1c1c00, 0x1c2000, - SJA1105_RSV_ADDR, SJA1105_RSV_ADDR, SJA1105_RSV_ADDR, - SJA1105_RSV_ADDR, SJA1105_RSV_ADDR, SJA1105_RSV_ADDR}, +}; + +/* See port compatibility matrix in Documentation/networking/dsa/sja1105.r= st */ +static const struct sja1105_pcs_resource sja1105rs_pcs_resources[] =3D { + { DEFINE_RES_REG_NAMED(0x0, 0x800000, "direct"), + SJA1105_SGMII_PORT, "sja1105-pcs", "nxp,sja1105-pcs" + }, +}; + +static const struct sja1105_pcs_resource sja1110_pcs_resources[] =3D { + { DEFINE_RES_REG_NAMED(0x705000, 0x1000, "indirect"), + 1, "sja1110-pcs", "nxp,sja1110-pcs" + }, + { DEFINE_RES_REG_NAMED(0x706000, 0x1000, "indirect"), + 2, "sja1110-pcs", "nxp,sja1110-pcs" + }, + { DEFINE_RES_REG_NAMED(0x707000, 0x1000, "indirect"), + 3, "sja1110-pcs", "nxp,sja1110-pcs" + }, + { DEFINE_RES_REG_NAMED(0x708000, 0x1000, "indirect"), + 4, "sja1110-pcs", "nxp,sja1110-pcs" + }, }; =20 const struct sja1105_info sja1105e_info =3D { @@ -771,8 +790,6 @@ const struct sja1105_info sja1105r_info =3D { .ptp_cmd_packing =3D sja1105pqrs_ptp_cmd_packing, .rxtstamp =3D sja1105_rxtstamp, .clocking_setup =3D sja1105_clocking_setup, - .pcs_mdio_read_c45 =3D sja1105_pcs_mdio_read_c45, - .pcs_mdio_write_c45 =3D sja1105_pcs_mdio_write_c45, .regs =3D &sja1105pqrs_regs, .port_speed =3D { [SJA1105_SPEED_AUTO] =3D 0, @@ -785,6 +802,8 @@ const struct sja1105_info sja1105r_info =3D { .supports_rmii =3D {true, true, true, true, true}, .supports_rgmii =3D {true, true, true, true, true}, .supports_sgmii =3D {false, false, false, false, true}, + .pcs_resources =3D sja1105rs_pcs_resources, + .num_pcs_resources =3D ARRAY_SIZE(sja1105rs_pcs_resources), .name =3D "SJA1105R", }; =20 @@ -808,8 +827,6 @@ const struct sja1105_info sja1105s_info =3D { .ptp_cmd_packing =3D sja1105pqrs_ptp_cmd_packing, .rxtstamp =3D sja1105_rxtstamp, .clocking_setup =3D sja1105_clocking_setup, - .pcs_mdio_read_c45 =3D sja1105_pcs_mdio_read_c45, - .pcs_mdio_write_c45 =3D sja1105_pcs_mdio_write_c45, .port_speed =3D { [SJA1105_SPEED_AUTO] =3D 0, [SJA1105_SPEED_10MBPS] =3D 3, @@ -821,6 +838,8 @@ const struct sja1105_info sja1105s_info =3D { .supports_rmii =3D {true, true, true, true, true}, .supports_rgmii =3D {true, true, true, true, true}, .supports_sgmii =3D {false, false, false, false, true}, + .pcs_resources =3D sja1105rs_pcs_resources, + .num_pcs_resources =3D ARRAY_SIZE(sja1105rs_pcs_resources), .name =3D "SJA1105S", }; =20 @@ -847,8 +866,6 @@ const struct sja1105_info sja1110a_info =3D { .rxtstamp =3D sja1110_rxtstamp, .txtstamp =3D sja1110_txtstamp, .disable_microcontroller =3D sja1110_disable_microcontroller, - .pcs_mdio_read_c45 =3D sja1110_pcs_mdio_read_c45, - .pcs_mdio_write_c45 =3D sja1110_pcs_mdio_write_c45, .port_speed =3D { [SJA1105_SPEED_AUTO] =3D 0, [SJA1105_SPEED_10MBPS] =3D 4, @@ -872,6 +889,8 @@ const struct sja1105_info sja1110a_info =3D { SJA1105_PHY_BASE_T1, SJA1105_PHY_BASE_T1, SJA1105_PHY_BASE_T1, SJA1105_PHY_BASE_T1, SJA1105_PHY_BASE_T1}, + .pcs_resources =3D sja1110_pcs_resources, + .num_pcs_resources =3D ARRAY_SIZE(sja1110_pcs_resources), .name =3D "SJA1110A", }; =20 @@ -898,8 +917,6 @@ const struct sja1105_info sja1110b_info =3D { .rxtstamp =3D sja1110_rxtstamp, .txtstamp =3D sja1110_txtstamp, .disable_microcontroller =3D sja1110_disable_microcontroller, - .pcs_mdio_read_c45 =3D sja1110_pcs_mdio_read_c45, - .pcs_mdio_write_c45 =3D sja1110_pcs_mdio_write_c45, .port_speed =3D { [SJA1105_SPEED_AUTO] =3D 0, [SJA1105_SPEED_10MBPS] =3D 4, @@ -923,6 +940,8 @@ const struct sja1105_info sja1110b_info =3D { SJA1105_PHY_BASE_T1, SJA1105_PHY_BASE_T1, SJA1105_PHY_BASE_T1, SJA1105_PHY_BASE_T1, SJA1105_NO_PHY}, + .pcs_resources =3D &sja1110_pcs_resources[2], /* ports 3 and 4 */ + .num_pcs_resources =3D ARRAY_SIZE(sja1110_pcs_resources) - 2, .name =3D "SJA1110B", }; =20 @@ -949,8 +968,6 @@ const struct sja1105_info sja1110c_info =3D { .rxtstamp =3D sja1110_rxtstamp, .txtstamp =3D sja1110_txtstamp, .disable_microcontroller =3D sja1110_disable_microcontroller, - .pcs_mdio_read_c45 =3D sja1110_pcs_mdio_read_c45, - .pcs_mdio_write_c45 =3D sja1110_pcs_mdio_write_c45, .port_speed =3D { [SJA1105_SPEED_AUTO] =3D 0, [SJA1105_SPEED_10MBPS] =3D 4, @@ -974,6 +991,8 @@ const struct sja1105_info sja1110c_info =3D { SJA1105_PHY_BASE_T1, SJA1105_PHY_BASE_T1, SJA1105_NO_PHY, SJA1105_NO_PHY, SJA1105_NO_PHY}, + .pcs_resources =3D &sja1110_pcs_resources[3], /* port 4 */ + .num_pcs_resources =3D ARRAY_SIZE(sja1110_pcs_resources) - 3, .name =3D "SJA1110C", }; =20 @@ -1000,8 +1019,6 @@ const struct sja1105_info sja1110d_info =3D { .rxtstamp =3D sja1110_rxtstamp, .txtstamp =3D sja1110_txtstamp, .disable_microcontroller =3D sja1110_disable_microcontroller, - .pcs_mdio_read_c45 =3D sja1110_pcs_mdio_read_c45, - .pcs_mdio_write_c45 =3D sja1110_pcs_mdio_write_c45, .port_speed =3D { [SJA1105_SPEED_AUTO] =3D 0, [SJA1105_SPEED_10MBPS] =3D 4, @@ -1025,5 +1042,7 @@ const struct sja1105_info sja1110d_info =3D { SJA1105_PHY_BASE_T1, SJA1105_PHY_BASE_T1, SJA1105_NO_PHY, SJA1105_NO_PHY, SJA1105_NO_PHY}, + .pcs_resources =3D sja1110_pcs_resources, + .num_pcs_resources =3D ARRAY_SIZE(sja1110_pcs_resources), .name =3D "SJA1110D", }; --=20 2.34.1 From nobody Tue Dec 2 02:32:17 2025 Received: from OSPPR02CU001.outbound.protection.outlook.com (mail-norwayeastazon11013015.outbound.protection.outlook.com [40.107.159.15]) (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 7BA2036CDF5; Tue, 18 Nov 2025 19:06:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.159.15 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763492777; cv=fail; b=cIjK1fRlMAu+A80TOe+60ISN4a7kDEIutU8/Zj3h+Yu562zJ4qZznCXBHcuinPC4Z5NHzg+tnYpIiQtz4f8O2rmahm1AONP8OJ13vXodor1AecxCgyZ0B2oE1Upw51BsF4ePhNXsBGGFgmtQ/7iC4wP2XncYaJ0ieN+zpB+caJ0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763492777; c=relaxed/simple; bh=vk1Ws0OUmtb1Q9eJT6SykYuD6to5A8VNppR2oJAlMAk=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=NaxAY5AnwtIUmqgptZSgIXntuCq2v+Q38pmIqxmt2JFZmGHUUYv6912+zet5GqBKIutiX5uPNxzilb0koZsO4EW6JfIm2OKcfsbczkzaek8wG5BRvKo5gLyNkhmSw705W3iPvfSJas78oTR+0jtkuDtBAdwd+GEYY4lX3yj7mYk= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=Ei5EQSA8; arc=fail smtp.client-ip=40.107.159.15 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="Ei5EQSA8" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=KwGxSTurjRMJxGloEyN/EcGwhpcHDWwMoz0oS+xAwAmGwS+HYBIRo3L5G7yPv8biJCJ/+Xac5PzdPkH5TDP7CA3ZK2xOSwDJXU6a/oCOHzWsJmZ42W3BRr5nE70qwGSrq0Gc1EuR1SJl5fYxprazg66IwbXrooc8SEKfXXk3A1NYEGkGI1Tukc711pQ2XIKF1XimNx6qVl5Ls0mFnNUYc93tvnI6uWDKK7sYRalcPAGUpylbz75G80bViMsc4FUowGzRXvD0u1Bn4uD7hS5mfWhndOiLtxz6NvREe/DbCedFW5UcV5GfsYNhzs1n5Lr10JyrXUrofAIgNoN9foUItA== 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=NxbPVgq9kEY6Gba2+9d3krkYFukEfZM5IPPZ8l7VOaw=; b=S0M0mG4X3l9uHqDr8xzPpZF4U2VgXui4uc3QS32RXQD6ILYq8yem6mhIktVQZ1EC5YdKX5rDSpA2IhzJ1W4briOif3XR98SSKAXk4m+LZn94ZVtx4e9G5ajz6LeQjt4pGEB82R+q0+G2bfmJ/NqTr8fzqAqt6AtnIDZAhJRMLF8/X8nEQqK3M7NNUu2jknIggJN5rm8YV3sjGBnR6yyLpHnW1E8qeFL550lxjPgiv/JJGvHgSUmVqsZ29TfD+XbJMIQuFWY+nNh2S9IHJtesvqW7Lzf8OOQBmxh+bhqWeNqIvxP0XUqllWtez2Q9+B78STx6V8ywbXGsQnhukNSLsA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=NxbPVgq9kEY6Gba2+9d3krkYFukEfZM5IPPZ8l7VOaw=; b=Ei5EQSA8Bt8hWX/PVILxYf7ayNJIluVThYRGrQ7ZlfW9q2zx/ejLbS5/oPN4779enXIRvA6TJhM3BXB6QIiu5n0n2kvejKlEM36yieRJsEIlNWTnT+niCUAuLPUxA2nDCwKt7CmpMgV6LgnAyUR+1c+cNjRO32FIi2PsiKctTc9S01P3kwRutMwK/XPtrVlBkBtqzEB9nUORTx8x5i2rEEx1XbRtyU0/NXu07BKwHxXUGqQZ2neazhEjJsN6kuldrB7SGkKpcQw3/RWu2JZA3ywhyd6kzaCg63UPP7iImGWimmWTwKOCVp7quZqK/v3j1e0lx04me0bxcu2hDny3cg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from DBBPR04MB7497.eurprd04.prod.outlook.com (2603:10a6:10:204::9) by PA4PR04MB7695.eurprd04.prod.outlook.com (2603:10a6:102:e3::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9343.10; Tue, 18 Nov 2025 19:06:05 +0000 Received: from DBBPR04MB7497.eurprd04.prod.outlook.com ([fe80::503f:b388:6d07:adff]) by DBBPR04MB7497.eurprd04.prod.outlook.com ([fe80::503f:b388:6d07:adff%4]) with mapi id 15.20.9343.009; Tue, 18 Nov 2025 19:06:05 +0000 From: Vladimir Oltean To: netdev@vger.kernel.org Cc: Andrew Lunn , Heiner Kallweit , Russell King , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , linux-kernel@vger.kernel.org, Rob Herring , Krzysztof Kozlowski , Conor Dooley , devicetree@vger.kernel.org Subject: [PATCH net-next 15/15] net: dsa: sja1105: permit finding the XPCS via pcs-handle Date: Tue, 18 Nov 2025 21:05:30 +0200 Message-Id: <20251118190530.580267-16-vladimir.oltean@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20251118190530.580267-1-vladimir.oltean@nxp.com> References: <20251118190530.580267-1-vladimir.oltean@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM0P190CA0022.EURP190.PROD.OUTLOOK.COM (2603:10a6:208:190::32) To DBBPR04MB7497.eurprd04.prod.outlook.com (2603:10a6:10:204::9) 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: DBBPR04MB7497:EE_|PA4PR04MB7695:EE_ X-MS-Office365-Filtering-Correlation-Id: 6e30d250-dff4-4026-bbeb-08de26d5865d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|10070799003|366016|7416014|376014|52116014|19092799006; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?S1uOIi0F6U44ftlWOIS7A7sKX46ujJdfxCV5+XBN23IWm61c9u560MWpYNPf?= =?us-ascii?Q?dodlTkb73AfZIVuINnIi+zyZeqybz6prV2ThbwubCu/qvpb9FfSLaRmpkB9P?= =?us-ascii?Q?c0b8qC5pvmJQudRq7wgBW4/k82loz8BGB2M70S9goTw3yZFqMsgTySnXRpRo?= =?us-ascii?Q?Hiz2nml6K6ogoxJFGNy+MuGiSe29mXdwHkyG7ugK4RCUHzKj2nYcHNmxbzUu?= =?us-ascii?Q?xdC4LsyXkxtBL1SbtJwOm3IGBePyRvjSAnk2sviRFW98CPz8mFKA27YcZoZk?= =?us-ascii?Q?Cu6Z6x2Aty0UAYXjGepIkTCMr+/El40jubt0JKmksZgzGTwrCFFobcQcwQ8X?= =?us-ascii?Q?B8fz7zCzFjK9PpRm/pDbL2VPyu0zKcQAq7S7r9F3AHW/EKv+H6MJTW8jg0wO?= =?us-ascii?Q?fa/tg2hGtuSi9Ng+dNPRCOHpdBscG3ImniL/uGEbZm9zxHLSCUk0PlPKkeiC?= =?us-ascii?Q?y5+5+F9LY9+C/+t16072hL6Cdrin2Q3xdBE8PYXXYruAteP+DvW7RTPaBP+L?= =?us-ascii?Q?e16ktzsELn0VjjqdmteXtCtAuWkixgPcW8GqWaFNkzdRdfNCDE6gSeMOY92k?= =?us-ascii?Q?H4p6TR5OwRJdCNIN4Vlq5w2ZyJ+9sl2RxDXccr0aphQ6MU6Vb4WhixOvzddE?= =?us-ascii?Q?LzQmOuu7DLmNk/qeCptWGrzUzKpyC12Kdl0Gz9ciE45oTnLBmGnNij9MEOp6?= =?us-ascii?Q?K65WzwBhk/rQIDT9xvYy8digRMaXcwLEd2fy1iKLjLnvWr5wiyAETTxbIxWK?= =?us-ascii?Q?HbOf8nDKCkxBIdwe8+rjVKAUKGJ1h/t1F/zQ/yoVeFMTgCcZ/QXqN8WkaL9T?= =?us-ascii?Q?ncz1YQ9wk2PJOnBkCEmyRnHeIJlwelAnPDmsLcSumBl+pSIFyIUcM/SXa81N?= =?us-ascii?Q?Lic6O82959o0x9r2RpTgE06ytCN8r6ncRANZlbzyfihSTq+RddRKLWO8mmrt?= =?us-ascii?Q?bD/PVkfeU0iOGRHow5UXVZaiZVks7AwSnhpk8EOS08pXhcaDEH63Ev/2wVlt?= =?us-ascii?Q?QdIcyije2uUVKSPmVVMLaQCjn4XMEE7AE+vNkubW+HW5QnAkbR7q8iul0YSJ?= =?us-ascii?Q?/bLrKlAqpYmXzwORGYJ/VXFfLsVf8T72Ayx/8yzg4pfDLyFbmfcTW8UI/vDq?= =?us-ascii?Q?q/MeVQxw7kvvHBuEO/DjCAnffTS0DuQe5QFM8VDW872YFtbhP9D8xIdoha1e?= =?us-ascii?Q?9pJB9JOX7jeREbOIPZh/laFhat8OWplIVLtfulc1gWp4NaPl2Xjhyxhx1Q2J?= =?us-ascii?Q?goUBHmtgebowFtIyFIAK6oAqt7ULglm1qDBUTbiKRBImTXMo9qMTUQaLWZtx?= =?us-ascii?Q?b6Uu7S9Y36FYCLNgOTXAjKVd8RshRthwvMGE9/Gjrbouf+f0ySHeOTC9TAWY?= =?us-ascii?Q?vaD+IfCJYF6+K48fat4npfPHT7LCwj19FgJCy2t+LtL/+Ie2/FVIppgUC+HF?= =?us-ascii?Q?a4q2+IraRjZSC8Bxwlodp7dnPp8C819d?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DBBPR04MB7497.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(10070799003)(366016)(7416014)(376014)(52116014)(19092799006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?tTA0OxYCC1+bvQdAkAFPOvVFTspPqjSITb+JkIrdgzLMBSnPc9KxqOgs1ItJ?= =?us-ascii?Q?zotUPaaa8w0FoY5HcehyVr5iaU+a2y7k7Xz0GTqIM3Ea3Cuv1XB97xy9HzQ4?= =?us-ascii?Q?9ddX2ZbsV9VLjMN+FOz4mxzbqx0VDjeqvP4FOFEDDTvpqbjd5ClbPsjEqWHi?= =?us-ascii?Q?xn9XgQjCQOTae6QxpPUKiDoK2jfIeMawJ6NCf/eW5GNy3WsDUMVslnn+JW+4?= =?us-ascii?Q?N9S8HdoUwRnepcBLj9/G1E27OuL6tPsGQqlaqr9MkwixDru5oT0Yk/FHZGh/?= =?us-ascii?Q?Mnx1RMuTP5EXaMmQpPKPUmxGempgYZBAf5wL9yra3fHd5Y/BrJ5rKSDPXXD7?= =?us-ascii?Q?2UtVcTvIqqJ6NXAUkSh1zmhEdYXWHgrK2cqJBDvNTGfqwFJoqqIeTKnYf1Tq?= =?us-ascii?Q?JniSbiQQWNFw2noXMPK+h4QP4YgwzzMNVbH53zE0CxBhCYDYMPRcaEq39Muw?= =?us-ascii?Q?87bS3cpn47Ls9vPCWu4P027gezzwbUL6deznhldjDRArf1VN4U4pp2TbRl3d?= =?us-ascii?Q?es0XMEBVDMEJ80l32xWQk8NPpJMq0p4kS6DKIXkI0JNMUp+dVOaAkcoksM/X?= =?us-ascii?Q?jVppnbv3YpxnrFj6NJAXE7rmkKbiNP45gTp+hFoKs1bCfNnkx1jhJ8Tx6cDu?= =?us-ascii?Q?9QXHDoL5vcE1Q3+mYHPiJhwMXiqamF/0z8QjBqhVSVIkVDl1hdrs54e+gx6s?= =?us-ascii?Q?zAxHRkalNaPkPuWrRvozF9//bY4tYO8ONzcq1Qg62LbMssCTqU8VJGuMNSgA?= =?us-ascii?Q?YFHiqbwtMoClQYiDtr9QRovs9vqdeAhlPqu1jZtDU4yOFZbCco6E9Jvkuow+?= =?us-ascii?Q?xHAwQV4A242ivaG5aKdJbYDlwaCXRzR4MPHCMsciFxhHsdlQf1wZ05IrAQK4?= =?us-ascii?Q?1fBeFcJoVs2/vfwvonH+rlmHFQmTyzpEkPKhw6vD+iI8XnFiysPc8TkrpzjR?= =?us-ascii?Q?Vo+keO+DHsWdeD3JjY+V4RZPPcNWbLiGW/5VYxk+yTKQ3ATKfAC3PY2uhctQ?= =?us-ascii?Q?DZbJbzmY+Ws0t0p9dcNWZStaDl68wPFyV1iCpCGYDv+kOPtc1cVGuf10iVhu?= =?us-ascii?Q?YNSKLtUsCHn70eQNAJZ/dHpTQz3CKMnuxNRbY8oPTfTCkzSUuGJU6w+SQNs5?= =?us-ascii?Q?hkoHhhEpz1Q8UJUtasCeD5tjWbEPSXK+znj/bcJZHQon90BLYwr7O9rgQCQn?= =?us-ascii?Q?5lhQIlgnPMaSQdHq0ZR0JVJPp5kkRALHyKZTjpUnMZkF0GXTPvAvJDWw43UF?= =?us-ascii?Q?7zz3rHxQZNZJ6mT+OVgo6e7JTmUFKYsDb+vwibaMJYvXCOLiYsuUMlH5CEX/?= =?us-ascii?Q?fCaJeIgY7tJgG/ruMwK/uA9NmAgWkbrNrR6ZRsWkFGa7R7NJfuvBpDlYTjxc?= =?us-ascii?Q?+3pwN188vdWsfyLk3stmXzK/0xvl3iT1T50RlW5/Xlf2VcFF5WZ1MtICDGR1?= =?us-ascii?Q?klq1oUKQKBOsY4iGXK2GhYGduN780htmDEeLDr6znk8MytoO5+X6qeTS27ZJ?= =?us-ascii?Q?CzBsA05GzwLwKKi81yY94u/GqUxZ1y6+dYtHJTSwXS2bGy0P/48VRAD6tZ4q?= =?us-ascii?Q?6FBf2KxJrLItmJT9VhHF200PjdoGx7zNqvQp9cR6H98bUhU/YIIblyTgYmrR?= =?us-ascii?Q?POmjMsPzv1oOJoGNd8hG8fI=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6e30d250-dff4-4026-bbeb-08de26d5865d X-MS-Exchange-CrossTenant-AuthSource: DBBPR04MB7497.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Nov 2025 19:06:05.9223 (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: h4eIh7dicXhsyFmi5XYJSFiVbO62+baGO6xvwZPGbS4IDQ9XlwdxYBbtuqkaHirzgv+91nlteZz+mJNwoeUqVw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA4PR04MB7695 Content-Type: text/plain; charset="utf-8" This completes support for describing the XPCS in the device tree, rather than just the case where sja1105_fill_device_tree() populates it. Having it in the device tree is necessary when configuring lane polarity. Cc: Rob Herring Cc: Krzysztof Kozlowski Cc: Conor Dooley Cc: devicetree@vger.kernel.org Signed-off-by: Vladimir Oltean --- drivers/net/dsa/sja1105/sja1105_main.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/drivers/net/dsa/sja1105/sja1105_main.c b/drivers/net/dsa/sja11= 05/sja1105_main.c index 70aecdf9fd0e..e62b2facc1be 100644 --- a/drivers/net/dsa/sja1105/sja1105_main.c +++ b/drivers/net/dsa/sja1105/sja1105_main.c @@ -3035,14 +3035,26 @@ static int sja1105_port_bridge_flags(struct dsa_swi= tch *ds, int port, =20 static int sja1105_create_pcs(struct dsa_switch *ds, int port) { + struct dsa_port *dp =3D dsa_to_port(ds, port); struct sja1105_private *priv =3D ds->priv; + struct fwnode_handle *pcs_fwnode; struct phylink_pcs *pcs; =20 if (priv->phy_mode[port] !=3D PHY_INTERFACE_MODE_SGMII && priv->phy_mode[port] !=3D PHY_INTERFACE_MODE_2500BASEX) return 0; =20 - pcs =3D xpcs_create_pcs_fwnode(priv->pcs_fwnode[port]); + pcs_fwnode =3D fwnode_handle_get(priv->pcs_fwnode[port]); + /* priv->pcs_fwnode[port] is only set if the PCS is absent + * from the device tree source. If present, there needs to + * be a pcs-handle to it. + */ + if (!pcs_fwnode) + pcs_fwnode =3D fwnode_find_reference(of_fwnode_handle(dp->dn), + "pcs-handle", 0); + + pcs =3D xpcs_create_pcs_fwnode(pcs_fwnode); + fwnode_handle_put(pcs_fwnode); if (IS_ERR(pcs)) return PTR_ERR(pcs); =20 --=20 2.34.1