From nobody Tue Dec 2 00:03:21 2025 Received: from AM0PR83CU005.outbound.protection.outlook.com (mail-westeuropeazon11010040.outbound.protection.outlook.com [52.101.69.40]) (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 B1AD7315D33; Tue, 25 Nov 2025 11:49:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.69.40 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764071384; cv=fail; b=sLOFo4oPtIaXAqvh0htG/l3P3N7sz7ECArlGJKFymSzeVR2Y+CVqeqxqWyto6KiSp0ykhpCdJ9TR3cMrlVF8e4fPL+Cm2MXR2qHMsZLFIGsLA90mumXRPy/mTrvEGzkmA7lH1MOTj50MuZa1z10owgeWD5CQNEIi4L7A6T76AF8= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764071384; c=relaxed/simple; bh=tgVV3zeVoP1THUUHy5zN/rfzE3JcUjnOObacQ11RKTU=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=Xqc40aeSzEU1KF2YnusbG4b9PTkXCJVlQJHLefhXk/mYKAh/ansckI/7kv4CFeDbr4dkwp6zTR69OiZp90/xNQoqX07GpboHgSv8Y9Bpjg9dX1CColuxFJogH0FrTHtk7jxUlueIiqCYQBCY5o/fOs276WiS3DTCuJyZpyvBHas= 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=UFUw4RXU; arc=fail smtp.client-ip=52.101.69.40 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="UFUw4RXU" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=eVpwZV20ZcE/SNL5NruLlU32BNWppOL1VjGuxuZbFbD74Ok+r9f+71j9bgMwLPgOhcspF0LD1eAP35LznD0ytm76tpj2lz3NE2W7geiPXsyoDOtqGv1ggNz+GowWNmfysWqk5ed1ADgEm3oVvpp7LdgF8zASoCMgPJsZmKsyOxbzeSscBctqXV9gTTXiv6S0+fHFgE1CycZ/qA1BUQ87OTnXVt+kobwIYTFcT52sqX213gpfWg+L+lmSaYzdEYv/A+TrQw6MTxOkEpNkBBn/Mzo4ME5KyFgF4mBiWbCqihVCKhC5WLgJ4c5rholgUWjH8bFXx7HVwil1oxx4cAscSw== 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=eZqyDNRPvijF29ZQ0LWT7+z8xM+8ybBsSxSZwzKlCrc=; b=i+F8tT3xTsksXfeZ0lHJ2b41CGLf2dN/srnvericZnCdJKSN5XEA0Ee0Vqa8cuW9ADthrZDj2awbTDKWKYz+3L3464mb2cDnWLVZ3kf8TSvaM2iwh4r4bf9PJc7BLgh6yfSYp38RptEngKfxnkSqR5nasKiKfOPXPmw/hYq/bP/8EL/52yLPKcTA9x84eKe9CdEVyyWAKBuQzMo23BbvQ+8GK//bgwlkFMU/yq+/C0uqZUJGiNgMV+K9jxCud/G6VqmtCDiALnuk3bOyPLjXQ2bLmhEkdO0iR8GY3hpwp5oNHFTo7ad09BxNE5/TUyBb93H+lEaAQfIIIO5OelKypg== 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=eZqyDNRPvijF29ZQ0LWT7+z8xM+8ybBsSxSZwzKlCrc=; b=UFUw4RXUnN/fzCRNlSDCisw12EPdaIHlR3Cn5AGEiVgUPwPchzviBcaBUoer/NQvkFFWkcwPBfu2Qpg2gaIXz9cdWsIW29Tr7yJHuVAjOzTJCbEet/QvFS/54mxuwxEnpm3GUD+6tX/Gm0Wa/iChGTxi44aNwZvaEB9yOWZzdtRclYOU/L1QgJFYA9hPB13hiJHOkNxmvzb6zxnMzywcsT3v7nMu/guw4gKGt6lcCKmdLzUV96JWPiMr5/hryNgiLOZXNT83/Ki8rZv9tVChJUF3qQmFyJX7KJUhxAg5BeDXC/4CBYgdvSUhBH+N8/G6TJV9IeVwtbEPU0LuyQ9Qfg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from AM9PR04MB8585.eurprd04.prod.outlook.com (2603:10a6:20b:438::13) by PAXPR04MB8271.eurprd04.prod.outlook.com (2603:10a6:102:1ca::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9366.11; Tue, 25 Nov 2025 11:49:37 +0000 Received: from AM9PR04MB8585.eurprd04.prod.outlook.com ([fe80::8063:666f:9a2e:1dab]) by AM9PR04MB8585.eurprd04.prod.outlook.com ([fe80::8063:666f:9a2e:1dab%5]) with mapi id 15.20.9343.016; Tue, 25 Nov 2025 11:49:37 +0000 From: Vladimir Oltean To: linux-phy@lists.infradead.org Cc: Ioana Ciornei , Vinod Koul , Kishon Vijay Abraham I , Neil Armstrong , Josua Mayer , linux-kernel@vger.kernel.org, Rob Herring , Krzysztof Kozlowski , Conor Dooley , devicetree@vger.kernel.org Subject: [PATCH v5 phy 01/15] dt-bindings: phy: lynx-28g: permit lane OF PHY providers Date: Tue, 25 Nov 2025 13:48:33 +0200 Message-Id: <20251125114847.804961-2-vladimir.oltean@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20251125114847.804961-1-vladimir.oltean@nxp.com> References: <20251125114847.804961-1-vladimir.oltean@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AS4P189CA0047.EURP189.PROD.OUTLOOK.COM (2603:10a6:20b:659::19) To AM9PR04MB8585.eurprd04.prod.outlook.com (2603:10a6:20b:438::13) 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: AM9PR04MB8585:EE_|PAXPR04MB8271:EE_ X-MS-Office365-Filtering-Correlation-Id: 4d187f85-08cb-4cb7-637d-08de2c18b589 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|52116014|376014|7416014|19092799006|10070799003|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?HafEjWcGYCXyhIaQlEaqiuHd58Xq2lELu+ccECbKwMtbp0OKMZVsHO06WsAL?= =?us-ascii?Q?GuXI3vAqGhtK/F2B2iMboxN64+5zyPSGhw83aB9sLTQksGIkgXnzHhbPvI9r?= =?us-ascii?Q?R0guyzOpvGLrGFL5aZsyIIuqEU+6KLzZb8n4rmH0O0ASJGkFFOvuZbpHCZ/M?= =?us-ascii?Q?Chnw+4f6HMytp1oAnuis6jfFsBl48xlkLVz6xhZp5vKffMIAxLu/++3tGF8J?= =?us-ascii?Q?qpItcBUNGwKxcvZg2UbT5K8w9CKh4gi/cg9wpmOVSE3FVNkOX7rYSk6hCs+d?= =?us-ascii?Q?GNGymH8aCdOZb1h3S0alYDljiHJvYowzV+k7vUXaTgxutHzIXoZ3iyrEbRFO?= =?us-ascii?Q?bGf4n5KMFxLYMCJ9u9PSTNON0gipxWZshlXXZ1xROHSgNJZDIJjQdMqEQKr5?= =?us-ascii?Q?z8TWOluXJS2tw0YnaqtgPmp3NMlTGYQyeZBdHq/QkLtOlffG7FnBMpIfAY/0?= =?us-ascii?Q?3IAC9JmWpdH4sqXUVZGRhzAHhWWxVZ8iuTA+1ys0Qa2n/EQSeoXglB/KV5Lf?= =?us-ascii?Q?6Fpda5PZZ8abg4Xj2NwnkizrA/HLDYxZ66xg0bUx+XDwnUrWpwY0EBICoDm1?= =?us-ascii?Q?/qX1R3NixkUb7jLGZol0+dm0+kMkGQQ8utAIqIICMAYChmOwxEo6THVutHqn?= =?us-ascii?Q?TdPq8d5Kiz9D2DWNmBeEQ12Z6wCE4EUJ9uwj5xHw2dwqT+n3ij77xIsgq9YM?= =?us-ascii?Q?aidxg5i/VQLcFtikQ1eRL5k/ss/3XrmfUp31jArX+0WvSfaByMKhDEwfW6Gk?= =?us-ascii?Q?Js99GRVOPl3SS+2SduOr21QvZqRh1Xbb6MofvHf7olbZTlSVwOvyu6AC3NCD?= =?us-ascii?Q?tF1IdKNfCNCtPJpEuwgflfm7XGWeNsZiGRyK9Ox9acxWtRUZViQOHNxd1eOh?= =?us-ascii?Q?duLd+LTbk08xjM95UmEMvBXy73ICr2wesY2LKzqpoUxZf0UjCUYG+xA6AC+r?= =?us-ascii?Q?wzyZCDTnfnwKnI9TytRM0LWlqGFiNZFv79x29h26y6T+7wHxGceQMtd4JUad?= =?us-ascii?Q?EL6HyNSC7OoQVLdo6wncexp5DpF3aFi1P5J/NysGWPKRUFOimxk3AlUKmYS5?= =?us-ascii?Q?PB6kcCUpzzzViPyNBhF9p4Xs+244QNpKCKMWBawJVQ9mj+0GhC1j+qG+7xji?= =?us-ascii?Q?JuD/fwQgxdygfjhSmniV5B9wd1jO9y7CJlSUWWZ4hWOKXJLofqRE6jRdcBW7?= =?us-ascii?Q?qbzXV0AfFZcYWWegndwoHxqge/WgiHB5I1oYCnxtiiiWcAPGCDBCBvMovUiH?= =?us-ascii?Q?kjKL/aCNCR32iWytvN+L8b0LXCN13O3CsFmdgG/IiaaW39CYqmlQ7ZB4ad/G?= =?us-ascii?Q?ZWVETeJ9MoX1OxEjoD+CmTIqFH40qhYBSvfScnkzWHc6lBJckoaKDsT5tqXK?= =?us-ascii?Q?bqPqW9JQ5koKs9ZcVph4sI5+CSAYzA4dT4BR8no2/BK61jLxjrEA0w7Z8Xlq?= =?us-ascii?Q?xm9kCJL/qikkT5AYKX95Z/3cxn8Kh0U2?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM9PR04MB8585.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(52116014)(376014)(7416014)(19092799006)(10070799003)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?Bx6tqDenTx3NT/SDZbFJ94Y7KYQiT6RBGzvE3dlT48NzYyGpEPPGBYLOdvG3?= =?us-ascii?Q?Y9cKTMqci8CrQrLnmY2mRJoE41mZJK3aGmNNl5vW9WnFTV1ke1o7c7MUlFY+?= =?us-ascii?Q?9jTXHlSqIj95BpCApAcTYfS3nNah9JbmVJkHcmUF2mVaKDjkhZLoPfBikaW4?= =?us-ascii?Q?SlsZybryamnCfkYVFUK73Uqmq0DZxG5mam7Q6bAD+np0pLdVm/SUUJXEtLQw?= =?us-ascii?Q?dKDikCGueoaMKUUvIIa31UAVfdb2+X6jggZvMfxlJCUlrVYdAe4TtD4TkJKq?= =?us-ascii?Q?9Nc2V/n0WBYZsWB0CAQa9KYmjAiUUW7Ifza2BF2Xlq+a3upmLjNlvRMa89MM?= =?us-ascii?Q?/nqU6Pc33NNHaZU/0PckWOJa9ID9ZgFP8tjvDoY/WqFi9vBQnDRfj23jQVG/?= =?us-ascii?Q?mwZPUvVV6MfhSXE1/9VmEcCfa5rn30xUtCDtAOvZAmaZRhxabiI6QdrGpa/8?= =?us-ascii?Q?vpyaAN/IFgdwyrNhyfHQCdYpJn8LsOIa+ta7raXimn9y5/f/YGVz5LfJlfOb?= =?us-ascii?Q?pYSN0hnb+vPQkFpL3Kg2cb82zcQlB1VgaJDqMzeUehSMzNUXmKGTn94VdSho?= =?us-ascii?Q?ju3NSXaETo52oTpK3MlHLpg/51UZpeN7a+ZryZYzCXsymuFtOy1WS3fm75GA?= =?us-ascii?Q?q0UfQCyqCFHb3y61GCDwh6TeLXXFBw2w020XraQcyyjXP8NGv7RlgqHkzPoG?= =?us-ascii?Q?ddkKAdV9V3pM4ldX6QNOR8vlUpK6S4Y+AmQGPPXJtpr6nrVn7TwIh2V2Ff6x?= =?us-ascii?Q?U8ojRG6X1cwb+qzf7ElkMmaOw4J+ce+4m2fuPkFz3ikIHUPGjraJQ1iIl10s?= =?us-ascii?Q?EfrQ2H0kszMTvw4lIamfhoraIcMal44BVvQOqPucK0j72tSnxCSP0fNGDfVv?= =?us-ascii?Q?oM7be/vDYJk4FryXtswUNKY4XtzOu6MOk4XDkQu3TCkb8zWu5W9gsbIYJxN8?= =?us-ascii?Q?LF87uuSm3hpidCyvaEi55hiTLrtCAGQ9YXCRqqnQXjd3uhFU5AufLA3ibjyG?= =?us-ascii?Q?qpohWdvh28T1gU/8Pf8r6bhqwnQJZ3vpDtjLECkdYPOrDdH4Sgv08nJpFaPT?= =?us-ascii?Q?TfacI2k6b1JqtaQid4c6W9BTD3SsrFCMiIAGIAlCMjnq3iWLiDe4TqNtiV0Y?= =?us-ascii?Q?52LcvT/njT50+rB4l7HB1+hhrc4eGpNP4YhJVLfW/3mOwG5QpbwuJlOA3Bs6?= =?us-ascii?Q?rRRm0NVcqygAbC+6CGaMrfEwbtfrlW4t5TT0WXziad8QDwbO8Upy/6sMxix9?= =?us-ascii?Q?dw/E7VWOhDBcTNrKZy1dh3vHL3bs5sz3/cBRsr+lHasXXSqeHJ/jPvcHoW3n?= =?us-ascii?Q?aLjf/1ZVpQZ+ze4XxN0jdIfo1+gQDfMQkD9k7zkJVIoVeLLZsDXfxEN2JieW?= =?us-ascii?Q?c0BjiHJE428ROqvX9WaKnyLNlqBdAG33bGnrF2NzWG20umKSVFqdbBXgE3yz?= =?us-ascii?Q?EDrfgrEQz8d/SYVHDSO6SU0KTLYLxtqIvUTTJSBVkwRWWw4B8RbVouFs77dz?= =?us-ascii?Q?X2831MXQwug85LAN2zcs6PogD0c73daJjygAt0qcs0IdLfMvYFg3cC614NKu?= =?us-ascii?Q?IJbhlQK+FsZNatsk3OEDfVPFXTDhn2ZZAvmCxhNMmPwpJsUV1ZQQmvQQRdGB?= =?us-ascii?Q?BVB4N51eKSSCCqJh6uZri6o=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4d187f85-08cb-4cb7-637d-08de2c18b589 X-MS-Exchange-CrossTenant-AuthSource: AM9PR04MB8585.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Nov 2025 11:49:37.1900 (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: WNCPU9cXnZoGiSwg7CTPcVFu+B/6HkP8IiHbb8U62H9NwdCg2zq/mgWwM7IuCw/YMdWs4tIr0woFqa/lYUTrRw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAXPR04MB8271 Content-Type: text/plain; charset="utf-8" Josua Mayer requested to have OF nodes for each lane, so that he (and other board developers) can further describe electrical parameters individually. For this use case, we need a container node to apply the already existing Documentation/devicetree/bindings/phy/transmit-amplitude.yaml, plus whatever other schemas might get standardized for TX equalization parameters, polarity inversion etc. When lane OF nodes exist, these are also PHY providers ("phys" phandles can point directly to them). Compare that to the existing binding, where the PHY provider is the top-level SerDes node, and the second cell in the "phys" phandle specifies the lane index. The new binding format overlaps over the old one without interfering, but there is a caveat: Existing device trees, which already have "phys =3D <&serdes1 0>" cannot be converted to "phys =3D <&serdes_1_lane_a>", because in doing so, we would break compatibility with old kernels which don't understand how to translate the latter phandle to a PHY. The transition to the new phandle format can be performed only after a reasonable amount of time has elapsed after this schema change and the corresponding driver change have been backported to stable kernels. However, the aforementioned transition is not strictly necessary, and the "hybrid" description (where individual lanes have their own OF node, but are not pointed to by the "phys" phandle) can remain for an indefinite amount of time, even if a little inelegant. For newly introduced device trees, where there are no compatibility concerns with old kernels to speak of, it is strongly recommended to use the "phys =3D <&serdes_1_lane_a>" format. The same holds for phandles towards lanes of LX2160A SerDes #3, which at the time of writing is not yet described in fsl-lx2160a.dtsi, so there is no legacy to maintain. To avoid the strange situation where we have a "phy" (SerDes node) -> "phy" (lane node) hierarchy, let's rename the expected name of the top-level node to "serdes", and update the example too. This has a theoretical chance of causing regressions if bootloaders search for hardcoded paths rather than using aliases, but to the best of my knowledge, for LX2160A/LX2162A this is not the case. Link: https://lore.kernel.org/lkml/02270f62-9334-400c-b7b9-7e6a44dbbfc9@sol= id-run.com/ Signed-off-by: Vladimir Oltean Reviewed-by: Rob Herring (Arm) --- Cc: Rob Herring Cc: Krzysztof Kozlowski Cc: Conor Dooley Cc: devicetree@vger.kernel.org v4->v5: none v3->v4: patch is new (broken out from previous "[PATCH v3 phy 12/17] dt-bindings: phy: lynx-28g: add compatible strings per SerDes and instantiation") to deal just with the lane OF nodes, in a backportable way .../devicetree/bindings/phy/fsl,lynx-28g.yaml | 71 ++++++++++++++++++- 1 file changed, 70 insertions(+), 1 deletion(-) diff --git a/Documentation/devicetree/bindings/phy/fsl,lynx-28g.yaml b/Docu= mentation/devicetree/bindings/phy/fsl,lynx-28g.yaml index ff9f9ca0f19c..e96229c2f8fb 100644 --- a/Documentation/devicetree/bindings/phy/fsl,lynx-28g.yaml +++ b/Documentation/devicetree/bindings/phy/fsl,lynx-28g.yaml @@ -20,6 +20,32 @@ properties: "#phy-cells": const: 1 =20 + "#address-cells": + const: 1 + + "#size-cells": + const: 0 + +patternProperties: + "^phy@[0-7]$": + type: object + description: SerDes lane (single RX/TX differential pair) + + properties: + reg: + minimum: 0 + maximum: 7 + description: Lane index as seen in register map + + "#phy-cells": + const: 0 + + required: + - reg + - "#phy-cells" + + additionalProperties: false + required: - compatible - reg @@ -32,9 +58,52 @@ examples: soc { #address-cells =3D <2>; #size-cells =3D <2>; - serdes_1: phy@1ea0000 { + + serdes@1ea0000 { compatible =3D "fsl,lynx-28g"; reg =3D <0x0 0x1ea0000 0x0 0x1e30>; + #address-cells =3D <1>; + #size-cells =3D <0>; #phy-cells =3D <1>; + + phy@0 { + reg =3D <0>; + #phy-cells =3D <0>; + }; + + phy@1 { + reg =3D <1>; + #phy-cells =3D <0>; + }; + + phy@2 { + reg =3D <2>; + #phy-cells =3D <0>; + }; + + phy@3 { + reg =3D <3>; + #phy-cells =3D <0>; + }; + + phy@4 { + reg =3D <4>; + #phy-cells =3D <0>; + }; + + phy@5 { + reg =3D <5>; + #phy-cells =3D <0>; + }; + + phy@6 { + reg =3D <6>; + #phy-cells =3D <0>; + }; + + phy@7 { + reg =3D <7>; + #phy-cells =3D <0>; + }; }; }; --=20 2.34.1 From nobody Tue Dec 2 00:03:21 2025 Received: from AM0PR83CU005.outbound.protection.outlook.com (mail-westeuropeazon11010040.outbound.protection.outlook.com [52.101.69.40]) (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 24615316900; Tue, 25 Nov 2025 11:49:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.69.40 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764071387; cv=fail; b=SaMGEakw+CCzOummu65bilmSQg0RLo5pb6bRjfhmlR84Lp9+pnc5qNpzLtuXUuT5rfj2Vgsh6X5lHmDpjIQ0gbc/74HGmbe16RFn5PkhJkYrXOlS6wVpuNBG0iNVkH3jEcAwZho5MuVw6iOmnC6aIIKHIJawokf8hsiLuLJllW4= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764071387; c=relaxed/simple; bh=ixf4ODb7MB9idrnJKuJ1Z974lg6L7oc65VYlxnuw/ng=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=C0kCfHmjZVcGTu90C+kw/pMpkZCfE8H49UTeaOLeJ13G2qq15GjTtLJK4F8P6E6/fBzbCvPwuG5OK8QGSJ5DD06PqSiWygwRZnb2L4MTwccJ9emI05COoBfIdIWsvv0m0Qls/4peHqUDBXED/JOmPi+TqLxJR1VG+6Rlk+HFg3E= 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=BTRAp/il; arc=fail smtp.client-ip=52.101.69.40 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="BTRAp/il" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=e2Qd1KlmjwjXWmFBXIJdXlbrhaoHJ+WYlm9FsMnyQA2m6GcM2b4Xd9QpPx7WeOoB9FgaiG/onNsUoETPBfCm/vW4jpy6f0sL6F/WuVEMn/XlAOtzmj/roimswAALqYi0Zo9Dgk2w5C/54BM3qRvL6ZFxTPFMw5Jl0Z4TuDLnzMi+86vGwfw6XOu8j3tQkfo8H6IDAJWr+6+1qadEcEX5FgmSnH6zqF/3yX0/zdJwp4en2ZhTHNCq78NEYl/D3mv2iCyZR+9B8O+6d5RCwQiIteTXp+V/FLJu6GVtPPYi0AeL9hlXUMV7yxEaccV0l9niO7T56ejj1wQlVrs/Sgs57A== 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=zTi47S5fT2VJU4MEQcynN2RNJEz6WIOUZ1MMi8jwHT0=; b=XUfWajABWtx19YS/IXNS5zgU7pd15WGu/PezSpXtWwpPq/6LkAga1wII3e7syNZC6kvmvaEf+/goc8jRRwB1kqVgiXfiT5wFk8Sh7uDbrp0S5wMy1gXz0AciwjYIZdj5F84C0NEMjWlvWCWk4RXQUeL7RD2RH85nzjR12HKmHoi5AstJF7twzwK3xEV28numLGiTQA9kHjQ7tc7FL1iB1SJL508N8puDklhIbLP8sNcjb/q8tdm01fAhj1p4vWF89RTxJx06gU42f1IMu/tfzdkibYN2WNFb+9MMh4OCA8md6P+uMKs7hBbODnJTzSjZxkCnK4qC22HNlcDTSK6YVA== 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=zTi47S5fT2VJU4MEQcynN2RNJEz6WIOUZ1MMi8jwHT0=; b=BTRAp/ili1+WcbGIBe+Wrlh3PG1kapPqExioIHexMXmW9OUrofF3uqN3DhcRUcUlJbGaID4lVH2RpCbN+IgQJYoK8liXhMkVFJuu6WFmD01sfyCu5ClPbthx+nB15EWDDGH04hUgEF4Kxteurdx5z9Fg0dqmd+tIex9eeTkSv91brg9RONtg0QhPCVYHaVgs6MPXZL26qzSZ9GhHmZ33OPJZAsRm3nZUmOBSKhaYYGr21hYMROGJbaBoB8LRPhcdc8gXi26dhKVMWtMJQyq9Sa818wslCn+fVcN20gbT4/JjgQ91pUs3Y+K/e9D1V6w2q/rDzw1Y4lJZwANc5b0rsA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from AM9PR04MB8585.eurprd04.prod.outlook.com (2603:10a6:20b:438::13) by PAXPR04MB8271.eurprd04.prod.outlook.com (2603:10a6:102:1ca::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9366.11; Tue, 25 Nov 2025 11:49:38 +0000 Received: from AM9PR04MB8585.eurprd04.prod.outlook.com ([fe80::8063:666f:9a2e:1dab]) by AM9PR04MB8585.eurprd04.prod.outlook.com ([fe80::8063:666f:9a2e:1dab%5]) with mapi id 15.20.9343.016; Tue, 25 Nov 2025 11:49:38 +0000 From: Vladimir Oltean To: linux-phy@lists.infradead.org Cc: Ioana Ciornei , Vinod Koul , Kishon Vijay Abraham I , Neil Armstrong , Josua Mayer , linux-kernel@vger.kernel.org, Rob Herring , Krzysztof Kozlowski , Conor Dooley , devicetree@vger.kernel.org Subject: [PATCH v5 phy 02/15] phy: lynx-28g: refactor lane probing to lynx_28g_probe_lane() Date: Tue, 25 Nov 2025 13:48:34 +0200 Message-Id: <20251125114847.804961-3-vladimir.oltean@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20251125114847.804961-1-vladimir.oltean@nxp.com> References: <20251125114847.804961-1-vladimir.oltean@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AS4P189CA0047.EURP189.PROD.OUTLOOK.COM (2603:10a6:20b:659::19) To AM9PR04MB8585.eurprd04.prod.outlook.com (2603:10a6:20b:438::13) 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: AM9PR04MB8585:EE_|PAXPR04MB8271:EE_ X-MS-Office365-Filtering-Correlation-Id: c7ed7438-0760-404c-9324-08de2c18b635 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|52116014|376014|7416014|19092799006|10070799003|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?BcSaD5eW8VUrU+nNceBa8aIxw0GRbp0C3NY72MTJUw4T8zFLEsnaDzYD+zo7?= =?us-ascii?Q?wAhRfW84RsH10UDaVICjOeQY7yLSOv7+o1HosJeYLXG+sK7Vy8BDF4p4uK5h?= =?us-ascii?Q?0h7WC52LAlAdrb2t2086GA71Z7DLruxE1ldnsyUXiJDyxpodHHHgxiTQlQom?= =?us-ascii?Q?xzro2tH31XdO9orXH3OC272WqRkPpnjuXnVExM29Fu9n6OAPqjqMk0vP3evY?= =?us-ascii?Q?kqz7aGY5nM904j7bK53OUbVxe2alh8qdbRLKdCEgNvAZIZn7nzsdoFAqFXGY?= =?us-ascii?Q?hZVzRMISZW1E9KsESQJ/kMOw/d7n9LWV4Oh+b9hXJXCwv1gZS6e/pvpex5sV?= =?us-ascii?Q?XYO0KSdu1mWn2LIrqDGRT/nWxZ5lp2asBUUJyX9X8zVDrX2ozklvfzlstfSI?= =?us-ascii?Q?X2qM9b59Fgx6nTmXzkTK/93GweEnEmtCn2ZvYpjhyVokG7eZM1gffyPPotp/?= =?us-ascii?Q?UzaiOtfFSdqhYTx/Mu8zGpcR7XcIZH6FxttjQN5c2UwHMsDbR0v7ZyBGICNt?= =?us-ascii?Q?RcBw11nkHaGHfJ2eQDlBFSFHmZCCQdtV02kYxWOSEKBv1/UfVA0uCNxFNypj?= =?us-ascii?Q?5hM2b2jB3q7SRGe64kswf7q2QsPI1ZMpa1cUGjgu0RUsdEn8HtDH3cWK2e7z?= =?us-ascii?Q?xEiIeTk6Qa8dccKoWGphHyD1HkPCVKoJhW3LhfKV/FhhZzKLfx8+PVs0He1U?= =?us-ascii?Q?4ZyO8G7KTBfgS6kdc9OWHXiYUnsyNwfeFuc3HBD5E/TsgYIDt6U8wCUOQxAH?= =?us-ascii?Q?Y8Go/cb2aJn2QFl4dm0ftUoNRHXfq16wpl4xx8GD+EaMC/YUM0RPIm7iVfGb?= =?us-ascii?Q?7/OHsNDc5uM5sT6v53s0+z5LXV1Y3P6YWfxvqjiyBbeIFAfpIsL3ZJsVCw5e?= =?us-ascii?Q?EokJQUMvOdQhx+ZqFOMr4z0dUbl/ovWhRXYdZZ44PT2gYSct6osHU871+Mbl?= =?us-ascii?Q?wX8DeUrol5y30KJ7oWT4Hv9fTppyNzOXoXLcCNZe6qicohKoEpI60ja7ZFtH?= =?us-ascii?Q?+I9av1ybU9KnsTS/9BXWZ4jQoHyLBIdZLjhKs4adEXmExHw5G9tUpUshK2lB?= =?us-ascii?Q?Sv845sWgFrUoA8xXCY38C9AhwCRj6vJMi2lVfriBKghvfWnEc/tOa5VOXX5B?= =?us-ascii?Q?ZNWq3SFTC7H5NLDkbgOWsRMSpcXco7t2oM1F1ONUjYASibx406gN+C9oEsot?= =?us-ascii?Q?RnJWBryknpZe1wQEAeRw1Owp7foqORFrwB87W6relPGXmfPtCwURWYRwMr8H?= =?us-ascii?Q?P0S/l7lZIWeW1fgZmu+rBMWppfIq4EyjhOSy5os/3HPXn++Gnll+XWO0fbbc?= =?us-ascii?Q?tJvqKczoyAd95aepgJVa+4bAkINsU8V0SSqbhZ8yESoQ2EZcECimSEQrYWS5?= =?us-ascii?Q?dPZdtPa6apHPXyIwcZBtcrDkjogjwsaNgpHx1S+e83Bh1N0FAMijLOI4SKxE?= =?us-ascii?Q?SNiqK8n9j0UAkJPvHFY557dkaJJlQ6Ye?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM9PR04MB8585.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(52116014)(376014)(7416014)(19092799006)(10070799003)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?lFEbF+30/whABlUVmLXHOxCqXHp0dB9egHFBUw2AFujgnD7WUqxuVww4TQun?= =?us-ascii?Q?lf3cNwuKz0QR1wETcCPixqMEi+qI6geN5VRKaduKhYddLLXnp0kon8HYPhnL?= =?us-ascii?Q?bijh9HRXk18XgR8uiq62UFUeCos7Vq5iRrVg88qj/V2LGj8soMvL02cfFnb1?= =?us-ascii?Q?8UudFvIGQWcopZyC9Fu12TZFzI3eX28WVsi9Z0bqbdLoT2KCZwWhJKYRiWS5?= =?us-ascii?Q?kEh0CC7WW/H9CkysdCDZUKOpCE0lFZc4Dqe5TSlW0ODb+D7WmvPU0Mf4MR5p?= =?us-ascii?Q?B6h4JvxApaW2Aqrdc9NV5pDkyLcl1Qk8enfmf/8+8pqIKzSHoGygSny6AfOE?= =?us-ascii?Q?RwtEFpeF1b/jwOrPTlqewtatXvVx0sWQoe3XueI2nlZ4J9TFnuEDV3/knXd9?= =?us-ascii?Q?h8p/6yGc5GNhLeShFf6ZwqLKi4myoT6OqhgQslWbQsASykeBsqMysit7fF4p?= =?us-ascii?Q?IOtQ3lTpEDXvEVTuCtNagk6WQ/BkqEwTb9T5dZad87Mr/75mq+W9Q0Jav40A?= =?us-ascii?Q?koxebLu1/Jmx+rFrqCiw+wpE2l1Og2Xcn+48CCVWFEZPG335xv8UL4V6VWgp?= =?us-ascii?Q?4lynUW7sBRUYSWpr0ww5+grjSJ9K6OJGz2Cpn+jeX7cZaWhtTtdjRL0mM6eQ?= =?us-ascii?Q?qDgNeP0tPnd8yGa9fhvSceyL8LYX3KFGwnWK7ZbV+FCrquZix1yb4q7XaVwD?= =?us-ascii?Q?GxVuLiUNHHvKga1UL+fjuB4Hs/IU16cTou2tWRUBxdzN70icbCGCAoDtkSti?= =?us-ascii?Q?UTGtKtmhYxD+LYlMNc7ot//QsUMf2xZEur5hmMxwwyCoCJCSBLl1qhf+YSYq?= =?us-ascii?Q?3El7BJx4M4FSHEAscThaMhXZVlcrizePWutfBN7hov9QAW/y6LZ3qBrcwVh2?= =?us-ascii?Q?kHPzUeaSPEVQpHgCNZwj1QyAdyd04+WPj+Q1k7NAeXxB4fCmIEkOvNhEEkXY?= =?us-ascii?Q?nBdKoO7LHHPoO/Y1GasYfOrwkL5rlPJqWGDQVloswq5hbVR3Ss2ziY7OEWpN?= =?us-ascii?Q?IzWmcMQTMGeISxwjM9gIXYan2ZfGdF44veUmqt0hbljHkcIg2NRy/ja7IBPx?= =?us-ascii?Q?XlDcta4FdAwTsKCXccXX24YqK6XfW8Mt7vw6CGqQDb+l1jeCrzMkebOkpGdC?= =?us-ascii?Q?LmKUyxOHig+LXQ+HxYubmnzRez0YLE6hmaxZJqfUpvBrgrBwLip2D3+XxkF0?= =?us-ascii?Q?LNUxbHE/+WOVSf8rW+flnGxGEs0nmAZyWq0vzZ8+KnnWdDMvvn9jMOrec3fE?= =?us-ascii?Q?4Xt/XQ+jPENUMGnKmwsoDLXyXu534fn/+9EyGq+Bs1WRwsceT1rgR2VOu1x3?= =?us-ascii?Q?M/n5dRSX4HTxDhcnLJpU3ExZMlVXawRoJhjYj5xNGC/p8pqCerprl4FoYUZ5?= =?us-ascii?Q?/1Esl4CjuL5J1rfEaJWI/P4eABLQX66IJvI68Nfm+JV8mgXU3CdCDhH0s9SP?= =?us-ascii?Q?iuef3O8hwgdi6GpFZyY4W8oXYnA1ohrgn0rTBDDVwGe0Tj/SznJiXqx33Ana?= =?us-ascii?Q?1N76ml7qpAGdJ+BLx3SusH9pP4cb5cxE3fwxsoIDBuylIg0UXNSqie6VkeUo?= =?us-ascii?Q?N/bjl9B/lFeLHi+u3gzGSqYHn3aojHMLwfkg79n1eBycfZfe0GajwbeH9wi8?= =?us-ascii?Q?hcfn5NQtu/QTKoxMEdS/Ciw=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: c7ed7438-0760-404c-9324-08de2c18b635 X-MS-Exchange-CrossTenant-AuthSource: AM9PR04MB8585.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Nov 2025 11:49:38.2670 (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: +EVvJBf1n7ez6EZ7DyY9GJT+cWo10dc6m1lUZcPHGPxljSxwUhaKS+OJko6fdo8BMWIZcSIGT47auG/zpmoQ8g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAXPR04MB8271 Content-Type: text/plain; charset="utf-8" This simplifies the main control flow a little bit and makes the logic reusable for probing the lanes with OF nodes if those exist. Signed-off-by: Vladimir Oltean --- Cc: Rob Herring Cc: Krzysztof Kozlowski Cc: Conor Dooley Cc: devicetree@vger.kernel.org v4->v5: remove Cc: stable; will handle it myself v3->v4: - patch is new, broken out from previous "[PATCH v3 phy 13/17] phy: lynx-28g: probe on per-SoC and per-instance compatible strings" to deal only with lane OF nodes, in a backportable way drivers/phy/freescale/phy-fsl-lynx-28g.c | 42 +++++++++++++++--------- 1 file changed, 26 insertions(+), 16 deletions(-) diff --git a/drivers/phy/freescale/phy-fsl-lynx-28g.c b/drivers/phy/freesca= le/phy-fsl-lynx-28g.c index c20d2636c5e9..901240bbcade 100644 --- a/drivers/phy/freescale/phy-fsl-lynx-28g.c +++ b/drivers/phy/freescale/phy-fsl-lynx-28g.c @@ -579,12 +579,33 @@ static struct phy *lynx_28g_xlate(struct device *dev, return priv->lane[idx].phy; } =20 +static int lynx_28g_probe_lane(struct lynx_28g_priv *priv, int id, + struct device_node *dn) +{ + struct lynx_28g_lane *lane =3D &priv->lane[id]; + struct phy *phy; + + memset(lane, 0, sizeof(*lane)); + + phy =3D devm_phy_create(priv->dev, dn, &lynx_28g_ops); + if (IS_ERR(phy)) + return PTR_ERR(phy); + + lane->priv =3D priv; + lane->phy =3D phy; + lane->id =3D id; + phy_set_drvdata(phy, lane); + lynx_28g_lane_read_configuration(lane); + + return 0; +} + static int lynx_28g_probe(struct platform_device *pdev) { struct device *dev =3D &pdev->dev; struct phy_provider *provider; struct lynx_28g_priv *priv; - int i; + int err; =20 priv =3D devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL); if (!priv) @@ -597,21 +618,10 @@ static int lynx_28g_probe(struct platform_device *pde= v) =20 lynx_28g_pll_read_configuration(priv); =20 - for (i =3D 0; i < LYNX_28G_NUM_LANE; i++) { - struct lynx_28g_lane *lane =3D &priv->lane[i]; - struct phy *phy; - - memset(lane, 0, sizeof(*lane)); - - phy =3D devm_phy_create(&pdev->dev, NULL, &lynx_28g_ops); - if (IS_ERR(phy)) - return PTR_ERR(phy); - - lane->priv =3D priv; - lane->phy =3D phy; - lane->id =3D i; - phy_set_drvdata(phy, lane); - lynx_28g_lane_read_configuration(lane); + for (int i =3D 0; i < LYNX_28G_NUM_LANE; i++) { + err =3D lynx_28g_probe_lane(priv, i, NULL); + if (err) + return err; } =20 dev_set_drvdata(dev, priv); --=20 2.34.1 From nobody Tue Dec 2 00:03:21 2025 Received: from AM0PR83CU005.outbound.protection.outlook.com (mail-westeuropeazon11010040.outbound.protection.outlook.com [52.101.69.40]) (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 80D283191A9; Tue, 25 Nov 2025 11:49:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.69.40 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764071389; cv=fail; b=l1kgs1OYo+yudort61OG7oLZio7gMIT45iVdiSLxHXcyFQUByxvNelNwh++Mfi1A9sdl20ALOTPSy2UjpUY8AWG+1Inyr0Y/8dKxB7PuO6Fx1/4Ui7MDr8jZcdmJru2BUTP/YNS2wha2E0GUY3r/GSIakxkMbdAOYcJns66ozKE= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764071389; c=relaxed/simple; bh=L1902uR37dznzAcEuN1lpdbD2xC8HR/vbq2E/1WvC3A=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=H8czPsl/RkCuCcjxhcW+58L8pp7oCqIXaEkEQT/ygRLyyUXNaUE7xyVgyunbYikSJsmA+vNwBLEWm5N9sBGoI4Avtd45tImPedv9aws6E2syZpk3TyzkTr2S/iBPJCt44hflQAqPYuyRgegEwvQd8NB1bwsfGHCfYBpe/zdrjEM= 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=WJAniFIr; arc=fail smtp.client-ip=52.101.69.40 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="WJAniFIr" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=yizrKCKlVSZig7sswVjAG8Op78GT2DmRy7ln5DYzGuHsHKJHuKpdcr4Q6cBO4F+9pPhB/CFr6jsTp/lVrAP489lw/EmlnjOZMCh1NTwQcD3j2sDPE/cUb05SGhkupx3WSh0H3J5Tg9j1YHHLyOpr6TQatXeWKZpSQqEh6sK/1FZsJbgi4QjzrYvl8oeMsZxfKK4zs96CUZZWaC6s0Ic6rxPcfUNnlArDyE1w1vkxcBhfQ+O6HEST5Uu4QdclSCOSklzfe/KvLdgN3NE6UQ7/4qFoiAiiNIDIzfJpLPBHa+dVS7ZRT7zlH5nu447o687gGsWi3nk7UgKDJZDU0hUI/A== 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=pkJ52oVMiDxPJ1u8/K9tg67CMxQz5wGncTreAYcNyNc=; b=mtk87xDglowU1Vm2uMs5j6dIIGDbb/j0/dWHLZkDQwK1tmFG0QB9fiBTWmIqNaN6ZO/ryCcM4xKh030ayMBYvMDUqyWuywtamV6q6DNIgn4Rhq3LB0rg04EFV1S4Ll4LDt6DGGjB19MgiyVAr8jY8OfGNeR/rWHegtapZZBMIc44k+rB59yQC1xiB17FRI1lPQTduBi8efx8Wb7OmI8FM/H+nIwLY9aQsMK/HaNOO5sNFAkStrP5bpcXNXwrUTCWHOPIZ6HzQSxPu8TCE2rR0b23cebRBpEl0Xi0X0fCZu0vfZApmV5qZL5Uuq1Sl9R1wr4bzCZz+zPRgNPmYwGIfA== 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=pkJ52oVMiDxPJ1u8/K9tg67CMxQz5wGncTreAYcNyNc=; b=WJAniFIrxOsqXqMWDDjYsWwCGFXn4VgFrI73mfx1D1PTdVRCDVV6bGf8uzJVhwsyALr3AvN81eUDkQ46q8JpwJJxeTwNbEF/ruFQ9XKsIdAtbFuJA4frA/ibLc8WpIzgxcrCX7hQHqTnDOm4RVpDRpk5Lmk8PwLUzNMK69ErlBqRmA7OnOKdZL3f3f0HGOQ2WHhdBgWEppyt5RdkhJpjSuUOeZ0Xt0/zO0CepB6fVUSZNmB2L/awGRnye36ChvwJgXnQVFSLn5bpn5oDFyLSN9QIqgLB6AzsdlCW00EfbBDuCIPFPUy/2QOi1qWxH+IB9vcp2499orwYz7oyGI89kA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from AM9PR04MB8585.eurprd04.prod.outlook.com (2603:10a6:20b:438::13) by PAXPR04MB8271.eurprd04.prod.outlook.com (2603:10a6:102:1ca::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9366.11; Tue, 25 Nov 2025 11:49:39 +0000 Received: from AM9PR04MB8585.eurprd04.prod.outlook.com ([fe80::8063:666f:9a2e:1dab]) by AM9PR04MB8585.eurprd04.prod.outlook.com ([fe80::8063:666f:9a2e:1dab%5]) with mapi id 15.20.9343.016; Tue, 25 Nov 2025 11:49:39 +0000 From: Vladimir Oltean To: linux-phy@lists.infradead.org Cc: Ioana Ciornei , Vinod Koul , Kishon Vijay Abraham I , Neil Armstrong , Josua Mayer , linux-kernel@vger.kernel.org, Rob Herring , Krzysztof Kozlowski , Conor Dooley , devicetree@vger.kernel.org Subject: [PATCH v5 phy 03/15] phy: lynx-28g: support individual lanes as OF PHY providers Date: Tue, 25 Nov 2025 13:48:35 +0200 Message-Id: <20251125114847.804961-4-vladimir.oltean@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20251125114847.804961-1-vladimir.oltean@nxp.com> References: <20251125114847.804961-1-vladimir.oltean@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AS4P189CA0047.EURP189.PROD.OUTLOOK.COM (2603:10a6:20b:659::19) To AM9PR04MB8585.eurprd04.prod.outlook.com (2603:10a6:20b:438::13) 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: AM9PR04MB8585:EE_|PAXPR04MB8271:EE_ X-MS-Office365-Filtering-Correlation-Id: 6089a776-a76b-428d-d297-08de2c18b6de X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|52116014|376014|7416014|19092799006|10070799003|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?yAeQNd09UPePIYRWLFHtZHos/FFNlWjhmN7IAPGGutWKGDGNubQCBvUfnTdr?= =?us-ascii?Q?f6YQvvmf/Xd8hvEE+X7oMJcB/7Jjc95HBBrpfKJy8AnGJyTTXIepBDDWDKuz?= =?us-ascii?Q?PnIgYBe+ehAj5KSX9q05VJIKhP9+NGeUru5T7rIWSzHUygrTpX4ft6CPbhw/?= =?us-ascii?Q?GZAmBH/MbhJiTnJI7wB+TRjBBjmmX+AmY1//iMyOzCBk9rfGiTTu/Gkj1nIi?= =?us-ascii?Q?0Su7uL2iCVEqUB6K1HFnRPS0x+vVrsdmZzgaH/0vp/jsezCPojV9AaiMSr8G?= =?us-ascii?Q?bMm9HrrHk6uCy6XHDDBNi5QOLCGCMORmyUQeRMsPe6v9nUvQn5PR3JhmoJKQ?= =?us-ascii?Q?aXngG+RDpT/LGGpWjt0rpecH7/I5VYUORpe2KGxNHDAq1NJv2l9I3w+8hBp8?= =?us-ascii?Q?u5lndHVtAXnD+8XjGDlEhyWQCKdmywWXh8N5T+N4GdzNwiAwrjfBsvTlpe10?= =?us-ascii?Q?KX1c5aFpPoYe5WUQAsuv8veMaLEMPgt6Qz6gGNEuV/5PT55os8BPXf4cIbMd?= =?us-ascii?Q?etITp+yTZO08PLilwpD1dqzTlulzeK7uEiFWjyFaaELf9GYOppxLvaNltIVf?= =?us-ascii?Q?yoI9PfESweBKgs32opTFo2+/MVOnxPQRgXo6aKALHl/nyu+redfbl1C/uZZ8?= =?us-ascii?Q?AGPe0wMJ+oGwyVAaAUJGXnHMTn8/K/QY98KQ/bHf4o4rHcuZkoY/n2ngYC1Z?= =?us-ascii?Q?RgJyoV7iBjJhAaQTTD6Y/hiha8EGjfpYfyS1vvevQuJ6dLK9lyoTEZrQUPTY?= =?us-ascii?Q?utV7q+yJgAECUgIRx4svowm/IBJ/AgBjd2PupAJ+qrCoBAILDcwlTB/POhjz?= =?us-ascii?Q?tI99I4yDc5ylHLZs03CTVGf8kE9q2SaBY+qa+PDJ5UtljegTrfcWhTpXmf5c?= =?us-ascii?Q?WBSl6hsAISDpRAbpIky6si5p7puUO/cE48nNlyypRimfZDZxpnxvz2NR1Kc2?= =?us-ascii?Q?z5+BE/8P8sJ0i/8mahZ45xSNogXv3ZJoBRiMcYL+29IplXFip8UffjlgtADK?= =?us-ascii?Q?SFoJOmh8qOkeSJIyB+YT5GyNdGkd1iTbSmgm/pRMlb+A9JRPkBq8E3ZmZ8ad?= =?us-ascii?Q?/58ufcIn1sObfedmvzBVJNzmM2uMmFMmCYwh8lI2UhT9yEmr12SfWTDgjOnE?= =?us-ascii?Q?C8fOlrez9B1+wikHQFsG/IaXqtompP0PzLJSnqttvle3GTqyN+SOC8/fq5k/?= =?us-ascii?Q?wwWySoQMuDzkrDnufJce5zgEAj/BzvaVvHtPii/qglIU0m8sQc9pgzlP12GP?= =?us-ascii?Q?ENq3TMo2ugIZCPyGpy5KwdC9bRpwyGZqEsq6GCMNiKf911QqbzBt671thhRy?= =?us-ascii?Q?5IYs35vX1PaXeVO5iMynnmtu1AETiu0hHDPGuMHoj2UY/QzV/iMsNRGlzPFx?= =?us-ascii?Q?jjZ/EqR2wEMg+jDV/obxAtv7wcf+Bwk0Fa8ChwlpKDOPbDWshhQjaI0hzN8K?= =?us-ascii?Q?PEqQEtpxC80tW1UyiWcBiZdzywtuGv/j?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM9PR04MB8585.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(52116014)(376014)(7416014)(19092799006)(10070799003)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?0qoE3ERyDM2lm0NDYFVyCyGVPloWejLMyLhL20qL8jCQFBDavMid9Cmk3Rlv?= =?us-ascii?Q?qms9jwu+rx5/cQJ1OPLvwqLUmWBXuhvETx4MsdTGJl4lu7DW1DfT1Zlk1owF?= =?us-ascii?Q?RwurDuYD5747Q7p07psWaAYgfItjpIcvOxrpXCySKEwg+rOmetrliUkrOd/m?= =?us-ascii?Q?0QOoQJj6xyfAnJkJrHZjZATAOEbqb1T68j8tq/Gxld9JdNRBQu7sW7CSPjD0?= =?us-ascii?Q?IlF3Sry0IlkSnaYkqwO9k6VnncQZpjPGBV+/sTDJaNj1YzHRX6SBbOXtFoNS?= =?us-ascii?Q?cVtcm+n1YSzFG/z6oUmL/x3hYr+zAuvhvmUnnHL3AvriDHjrL0oiq9VOfI+Q?= =?us-ascii?Q?/su6tgFIBofS45CoHY8sYrDQg4ueghZrwDHzx0nnu3A0cCBbjVNUIho999Yy?= =?us-ascii?Q?DuAJfgre6N3pZOtcohd6FQFW57xTF7myjXx1NRgmtcCLeq6tWCdZclAA3Z/T?= =?us-ascii?Q?gInEWgPQOU9ky6M1WawVQOQjDILes/2NptLHJvwxsnsSfepQek13bATAke70?= =?us-ascii?Q?uToBaweVuoVyTelldcMCArWJ3GoRw3BU9vmUxqUR4n58kMiuRXONlKNNi9J0?= =?us-ascii?Q?iZHnrIVSCaiS210rrtHh1lm7dga0NTOi5vKPfseCapShE9Nr5oHBt2oWPZsz?= =?us-ascii?Q?TYLs38dv9j9Vw4VPkSU0Bvl8augANA79ZavIcCa5lZiyRbyTHvGe54lp2LIJ?= =?us-ascii?Q?tq0xzMY914yrxcCjUh/D9r2y0S4YRBSLKfm7NDoqija4XSgIMAG/ulFpXrP0?= =?us-ascii?Q?+pEa74pUZMPh/IqESIKV9XZ/jGckULdpcA5SQi2VoweuwRjcPrKtx1dRdJey?= =?us-ascii?Q?trXxUiCtGyNIfDINtRf2wpFBrZK7rZj71RSD2woMpEybrzjWruT4Lm1p6e+T?= =?us-ascii?Q?peTG/R3eJPYst4CsrHnGA9ykRMOfuqSY3ck56REKiKae7v9Kh0RNh/8sv4lf?= =?us-ascii?Q?4bBUT//wIKtRApKhERVrBJ4vIyg0R6lOooZJlZBy+Wn6P1Kl+2f0WYqhAOe1?= =?us-ascii?Q?5HGw+34cIPJgfXQRvMO3/BMw+0LbE4YsySoUszy7gwRf3vnzERiC0/xOrBru?= =?us-ascii?Q?SLHAzEdG3FVujvH2VTT+QBqyidKJVuG47/PiIHWfsqAnIZ7N6DxfgSGZMl34?= =?us-ascii?Q?fuTz+2mBDVqVPf1wZwOMQ3a6Hudc+dzC9Es78NJiUdPuGNJ1+vHiCTIXEoM0?= =?us-ascii?Q?GKKF/cBNb2KvQOPmryOsGC5fcfkM9SR2P4BIdGwSIhX4GgHj69ESy0VSyKUs?= =?us-ascii?Q?kUP0ZW/PaRyz58+lvhgOw3MP+BKE7C+6ttGs/AEt6Ww1XKyU6i3TWXSM2Z2G?= =?us-ascii?Q?KznaDIPfWxlebag+trUgCIqvSqHULeXrK52RUAZyMu4tkL3RnBd4lfnA/SwL?= =?us-ascii?Q?gUiOghbPQcQvNS0H5Iiebw+roGt8lu7RACHcws3dmWzD16WxJ+wQghPP+mZ6?= =?us-ascii?Q?ykpv+vCQQy7y7vudpY/8Y/uHGVyuzuaOJNKBR7UO4r/FttgW1jymlfwWLiMh?= =?us-ascii?Q?O9pSUzobvEpVbypgXnF5SkTD+IOaBPnEU0vKzaFDk/jBCGoqmQGFYDL8RjWq?= =?us-ascii?Q?gCg52zKd2oS89w+SS9b/Eh4jv0Ql37Bw8UeaFdFJhue8d1I0kKfuwlkxcQwF?= =?us-ascii?Q?rz2HX+M+Vz6aKK1sTmkHkLo=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6089a776-a76b-428d-d297-08de2c18b6de X-MS-Exchange-CrossTenant-AuthSource: AM9PR04MB8585.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Nov 2025 11:49:39.3638 (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: Hi0I1FCQD7iqdR2KGsmwpJZ/slnA1BR2iekt27wLKOJ0Ssc5dinuKsSn9pO86F99/voEjuhxBZnSyAHvDuzGlA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAXPR04MB8271 Content-Type: text/plain; charset="utf-8" Currently, the bindings of this multi-lane SerDes are such that consumers specify the lane index in the PHY cell, and the lane itself is not described in the device tree. It is desirable to describe individual Lynx 28G SerDes lanes in the device tree, in order to be able to customize electrical properties such as those in Documentation/devicetree/bindings/phy/transmit-amplitude.yaml (or others). If each lane may have an OF node, it appears natural for consumers to have their "phys" phandle point to that OF node. The problem is that transitioning between one format and another is a breaking change. The bindings of the 28G Lynx SerDes can themselves be extended in a backward-compatible way, but the consumers cannot be modified without breaking them. Namely, if we have: &mac { phys =3D <&serdes1 0>; }; we cannot update the device tree to: &mac { phys =3D <&serdes1_lane_0>; }; because old kernels cannot resolve this phandle to a valid PHY. The proposal here is to keep tolerating existing device trees, which are not supposed to be changed, but modify lynx_28g_xlate() to also resolve the new format with #phy-cells =3D <0> in the lanes. This way we support 3 modes: - Legacy device trees, no OF nodes for lanes - New device trees, OF nodes for lanes and "phys" phandle points towards them - Hybrid device trees, OF nodes for lanes (to describe electrical parameters), but "phys" phandle points towards the SerDes top-level provider Signed-off-by: Vladimir Oltean --- Cc: Rob Herring Cc: Krzysztof Kozlowski Cc: Conor Dooley Cc: devicetree@vger.kernel.org v4->v5: remove Cc: stable; will handle it myself v3->v4: - patch is new, broken out from previous "[PATCH v3 phy 13/17] phy: lynx-28g: probe on per-SoC and per-instance compatible strings" to deal only with lane OF nodes, in a backportable way - contains a new idea to support phandles either to the SerDes or to lane nodes, via a single xlate function that redirects to of_phy_simple_xlate() if the phandle is to the lane, or is implemented as before if the phandle is to the SerDes. - Compared to v3 where we decided based on the compatible string whether to use lynx_28g_xlate() which expects the SerDes as PHY provider, or of_phy_simple_xlate() which expects the lanes as PHY provider, here we completely decouple those two concepts and patch lynx_28g_xlate() to support both cases. drivers/phy/freescale/phy-fsl-lynx-28g.c | 49 +++++++++++++++++++++--- 1 file changed, 44 insertions(+), 5 deletions(-) diff --git a/drivers/phy/freescale/phy-fsl-lynx-28g.c b/drivers/phy/freesca= le/phy-fsl-lynx-28g.c index 901240bbcade..61a992ff274f 100644 --- a/drivers/phy/freescale/phy-fsl-lynx-28g.c +++ b/drivers/phy/freescale/phy-fsl-lynx-28g.c @@ -571,7 +571,14 @@ static struct phy *lynx_28g_xlate(struct device *dev, const struct of_phandle_args *args) { struct lynx_28g_priv *priv =3D dev_get_drvdata(dev); - int idx =3D args->args[0]; + int idx; + + if (args->args_count =3D=3D 0) + return of_phy_simple_xlate(dev, args); + else if (args->args_count !=3D 1) + return ERR_PTR(-ENODEV); + + idx =3D args->args[0]; =20 if (WARN_ON(idx >=3D LYNX_28G_NUM_LANE)) return ERR_PTR(-EINVAL); @@ -605,6 +612,7 @@ static int lynx_28g_probe(struct platform_device *pdev) struct device *dev =3D &pdev->dev; struct phy_provider *provider; struct lynx_28g_priv *priv; + struct device_node *dn; int err; =20 priv =3D devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL); @@ -618,10 +626,41 @@ static int lynx_28g_probe(struct platform_device *pde= v) =20 lynx_28g_pll_read_configuration(priv); =20 - for (int i =3D 0; i < LYNX_28G_NUM_LANE; i++) { - err =3D lynx_28g_probe_lane(priv, i, NULL); - if (err) - return err; + dn =3D dev_of_node(dev); + if (of_get_child_count(dn)) { + struct device_node *child; + + for_each_available_child_of_node(dn, child) { + u32 reg; + + /* PHY subnode name must be 'phy'. */ + if (!(of_node_name_eq(child, "phy"))) + continue; + + if (of_property_read_u32(child, "reg", ®)) { + dev_err(dev, "No \"reg\" property for %pOF\n", child); + of_node_put(child); + return -EINVAL; + } + + if (reg >=3D LYNX_28G_NUM_LANE) { + dev_err(dev, "\"reg\" property out of range for %pOF\n", child); + of_node_put(child); + return -EINVAL; + } + + err =3D lynx_28g_probe_lane(priv, reg, child); + if (err) { + of_node_put(child); + return err; + } + } + } else { + for (int i =3D 0; i < LYNX_28G_NUM_LANE; i++) { + err =3D lynx_28g_probe_lane(priv, i, NULL); + if (err) + return err; + } } =20 dev_set_drvdata(dev, priv); --=20 2.34.1 From nobody Tue Dec 2 00:03:21 2025 Received: from OSPPR02CU001.outbound.protection.outlook.com (mail-norwayeastazon11013022.outbound.protection.outlook.com [40.107.159.22]) (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 8B09031A046 for ; Tue, 25 Nov 2025 11:49:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.159.22 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764071392; cv=fail; b=kdKbrp7EO9CMcgL8Ol8lzYxUAM5iaBSQktIF9fpW9MRG4NQ57uMS1Xb7vTZQJTjMPzsuinlPHQuC/p8U/JDdTKqRUEGSZmZyPlieF4tRmqzvke6wL2ppfFlxtfycwiQDSMMkxu3GVd3igyfvwRrNn9Q23N2MsPLDLPzyjmLrJ5w= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764071392; c=relaxed/simple; bh=wvrWxNpL/cJ72pwilVyWIaBhK1Xw4Ppa8faO+8zXUJo=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=CX45KlCpB8STkGy7zeQZm68jjFpAhj9UIxuMh2j3a7mXoImRRmaaQjHPzBYFBXsnO2sVvIpUbPFPaqArJHgwDMWlNuSa/RUhk8FA8nlo1VS+v2jDbR0Y/AKdOs7gKJ5aWaucym1UeRrYNkvIpQZ3SadilP8wxMrL5yRkerFw3VY= 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=HlqIfPVr; arc=fail smtp.client-ip=40.107.159.22 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="HlqIfPVr" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=w8JbAIafhqXRgJwH0f0ClKDu0zLzhTwb+CaXQjJFqo4aqRX9vgKwOF1pJKmx1+d3ElGkIGC/NaXxTeQB5pFCT5bLQuzhwIuAKhjy0mN+NcugGGzaul3Sr7cp+iuQyYbjerLxLqXChvtXbKhQg4m7L/9J9vCe6gyxc9M21hSpbhciqoLM20Qx7CxW7TasNTpYfoF9LbjnqccjhV/2gj0MWOt4th/VEpp7wk9X+bXsdn9uIG2eE34r2ZF604IVKOfMBhSioyC7kuXQ3VWx3iPh5BADgxqY+BhnSE/LkT16ZSduTFH1uxw5LyiCs5LDRfc3NtFO1t56aduDNgTAhIdzEQ== 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=15OA2yHM8ZG+FC91/+KeFH4r5xZO5NXyXmVN6KvyZ78=; b=LYPLZGQJXbiLoedIy8213hBLhlgDpXLc5mt5zbLo91gzojtzLBFpgt9HzvG1ueOVXDLINd6iaBI6l/XC+YF21/h6OVY5QNq/oZ/44e+DSoq7w9OaIOLUBSiDl4QigJXFkjvLhzS5NkJH9XzrvEqJQ1pDF8dJWJw6eT5wmIODLhDqlU4kMk6s345JScF53EQMb1GuOhr1qepfhJZiFTG9dSYzG6aJaNfP/QpFusMqNneP9b9E8E9CiucAg+YGTnL5U4k4pCEkft8GvF3anFkebV6QbgF057v10n+41RbQn1Zrf0yFFCtyesy9m6sCfhGu4vGUb3OFh2Fot+l4P2LIZQ== 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=15OA2yHM8ZG+FC91/+KeFH4r5xZO5NXyXmVN6KvyZ78=; b=HlqIfPVr65PTNZNr/uq/S47O2w0c8rn/ISjcVI/JyhvZHZ+q7qB8WKMpVty6jvU1XdyujXfPhADKB6BiDAqwYbvgtQbBjSK3SNtdh75pYpXmVJEcLJKeIcMTQy3LeSn+wVIZwOK9dmFfyuZInrSbBQTXJ+EFRHcUylyWD8pCByT3VvKgmK5OPNGDoyYpcUABPxBXRsFVWpzirDeXf75tGiFNOgEHCheztWQHFSU0ImxFKfQ7AXogS+cJ5ISj05d24vgoknjj7FHhw60CiVqhdXlYsK8NagKIZTm7nwgSTErwbX2rcoTZN4T7hzTscqfoJ7xN4g0cq1Cu8HeL+0hgYQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from AM9PR04MB8585.eurprd04.prod.outlook.com (2603:10a6:20b:438::13) by PAXPR04MB8271.eurprd04.prod.outlook.com (2603:10a6:102:1ca::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9366.11; Tue, 25 Nov 2025 11:49:40 +0000 Received: from AM9PR04MB8585.eurprd04.prod.outlook.com ([fe80::8063:666f:9a2e:1dab]) by AM9PR04MB8585.eurprd04.prod.outlook.com ([fe80::8063:666f:9a2e:1dab%5]) with mapi id 15.20.9343.016; Tue, 25 Nov 2025 11:49:40 +0000 From: Vladimir Oltean To: linux-phy@lists.infradead.org Cc: Ioana Ciornei , Vinod Koul , Kishon Vijay Abraham I , Neil Armstrong , Josua Mayer , linux-kernel@vger.kernel.org Subject: [PATCH v5 phy 04/15] phy: lynx-28g: avoid memsetting lane already allocated with kzalloc() Date: Tue, 25 Nov 2025 13:48:36 +0200 Message-Id: <20251125114847.804961-5-vladimir.oltean@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20251125114847.804961-1-vladimir.oltean@nxp.com> References: <20251125114847.804961-1-vladimir.oltean@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AS4P189CA0047.EURP189.PROD.OUTLOOK.COM (2603:10a6:20b:659::19) To AM9PR04MB8585.eurprd04.prod.outlook.com (2603:10a6:20b:438::13) 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: AM9PR04MB8585:EE_|PAXPR04MB8271:EE_ X-MS-Office365-Filtering-Correlation-Id: 8f77f93c-904b-4c49-2c93-08de2c18b76f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|52116014|376014|19092799006|10070799003|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?GfIFU7tYY0CQPsac1pcbqjNovuu3fhqALh1BKnW7F1ATK2ZRP6aHoeHSRwEF?= =?us-ascii?Q?0vvd8SZ/ta5KU7JEz8fODo1CC20rRylKmst/1U1vFNpeIUu7hGXRUxf0a88S?= =?us-ascii?Q?LWpXNDAWbk5YYBkRLyibthlOjIserUluZZk7byB9iYjhMs9WWmZ2EBgw2di8?= =?us-ascii?Q?l1SW8sh9B1CoejBZLvpSup6FECtcRrQ+r+Sg34I0a7DIimSutxe1SCOdWqjh?= =?us-ascii?Q?s/1/+8drFCld81GMMROvMLGG9gqkLkouX/oGaC0dsftxNmXdacYsd4b5fD+3?= =?us-ascii?Q?vlUjqMq1M5Kdz+mFUNS6XLteG9G7aKWpiNL8q03wA6NLef76KuRCfbabT5/2?= =?us-ascii?Q?2lIcsAG3DdngGBfjsbuD5+jpM1H28JIx3BiqtjUmXi2K06nOXuSgGQ7qIkp/?= =?us-ascii?Q?iEq/NXJ47IP9Z+juLcD9XS5LWQkiHjh2pnAzbmkdpMz0YPByJB69jur5VCI1?= =?us-ascii?Q?de6nNPuBAD54L9y+nOTWdESrr+QtcwHDHP79pxZJKm2dMw2l1Wqz0eD6uYt9?= =?us-ascii?Q?EU9wnPTqJ9c5x0S6Y7UGpucKc38iLZEoSNu6uGbN/05iendBletKydUvJ6Rd?= =?us-ascii?Q?f9CKiQmkLdlYExhr9Yj4piVvhs3PfovofdI4r5hQiw6jnwmdspFfLKYucE2v?= =?us-ascii?Q?yV1+VNGCu5gWBVhfU0GOnFM9P348wZyzB44U/YwOr/mJq45sOjKwhQBa1V7d?= =?us-ascii?Q?WUwwq9DE2ixtsLUZscMENJDMV9Ifw5dx9rGXNb6NvzMLG4dPLt8bfrF6b/wX?= =?us-ascii?Q?ZHxkWkeZLZ3L9+NM+uCy296ZwwUSzmUlgn+IF5cYJC10czoH3S3hUELHSahM?= =?us-ascii?Q?61YatYmrurK8QvoKSM27KtnaHwPcUuIkBnlBuPNiQhIkqouo7aEKLTP3lijd?= =?us-ascii?Q?cYiPryN/B6vQY8rRBZLClTSCdSqI2MKAuPY0w1Ilwx/BU3Nir6p4/H6HyhV+?= =?us-ascii?Q?RtAlhLrxmjK4qZmsK4Pslba+I+xDlchZ3Sw3+AbLs34+twqM3QAyFWeyP2BJ?= =?us-ascii?Q?iX5vFcvu7BtKlkCGlEiHxwl1CFrkzzU21e2hR5saiNKrD/Qjf+MfIOPPURdz?= =?us-ascii?Q?wcjLB25YSLNTtWCASv2LmxyG/mgp0KNRvwoyIOV/yxHg9zojNjvb1ZPfwMSf?= =?us-ascii?Q?ZD1JzzoykGTx94pvKdO4Pai/U74asXYdLzQDMD7oxLm4S81e9/P5iZ5s7pOd?= =?us-ascii?Q?USIq6uhBNwtrkGNMME9T5BHOuc75yAxEOlsSj7hWViR6GwDHmMCNHVhHi7JG?= =?us-ascii?Q?VcbxFbN+Hi9kd6Fwy0lknLHXcQN/4L/0qQO9ov7PRuEwTd9RQtdUhn6TG/6S?= =?us-ascii?Q?0oV4w0bisJ8b0I4KUNGp6cCNupJa7EEtAdVzCgIacF9fRqODCG1siDSyamPC?= =?us-ascii?Q?azsYZcKiacPlmlGeQsKQUGJ575llROP8cvjhcBROkWLvSZMRCtzjdt2XXaDs?= =?us-ascii?Q?YzA5WWLPferczJDjY+n2ToGdpHIw0pYLodsFp3E35xlhUmQTsRmenA=3D=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM9PR04MB8585.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(52116014)(376014)(19092799006)(10070799003)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?n+8INK9KJF4ldOwwdIUk6r+uY42Rs2OWFMEJstjNtkMzKBgbfqj5XODtSuvG?= =?us-ascii?Q?xpd9hZwuKeRhS5ZrAwVIkleJ9tNVTQO73pnR8BnAvaZ7Z4M5mIsQm4UvicUi?= =?us-ascii?Q?6XWJWyWNEYUziF39qpAm9MUbA9MMHu+Tb6PQhBcL2Di/rwKnVQM3e+5Zvugb?= =?us-ascii?Q?6QNamDMFzusTbPoNdCnjwoKyaDRwqKyctPwwWpEy4QPIgZ87JtTdSrkEZxyM?= =?us-ascii?Q?jJ9nnwujc0tQRaUH9nHPkFQL8adhFVs85jusKKTDhZ3Kw51w3kW4m1r3Eu5c?= =?us-ascii?Q?81IynyAsRaPbGvewN74IXLuXWmZjgOT3eCj0drJGY45W+RKaC6Ela/PKWIZt?= =?us-ascii?Q?RzpaB5Oa+bGDnSC+HuZi6nFurLAjsfPUropAjNvqHTJ+Jx+r5yG7d46s+TAo?= =?us-ascii?Q?yK1WmemZJnmsTkV+4ONQjKVLcBIuVdKzKwCqB0v9U6aQI2S9bHulqCbC2Te2?= =?us-ascii?Q?050QwVqkN4IbR8li4UzhbZ+evyhH7ce0gvT/cZ6yOJRXtokaGcxyN3GBH1qz?= =?us-ascii?Q?XBEzpCmcYG4/4qBuy72G7XSzkajbqdkADnK0lZez6gHm31gsmJ4q7M84arqR?= =?us-ascii?Q?ALHt+qWj7YfaMimAdDuXX7GHWOc6Oxay+4FEauZA9k3Lx8q8sJEGnjeCdzOh?= =?us-ascii?Q?7xzd2XKTM6o/uSEPr/3cXr2vMy1a99eFysPHRrVOFhj40JcrxbfpXdL+A36y?= =?us-ascii?Q?I53VLVWXI65zRjVSwhQtWc4dsbbrvkJdJJMZVyhLHe0cjQl+DxT5sz2TxUAR?= =?us-ascii?Q?fYLEXOP5QJjbiYUuz6ytv7lgoQcOswKSRLBiwu/4CL/tLWc++tB5buZ7y24W?= =?us-ascii?Q?Ca3H3Y+/WjZBaqlA3kw51eV8Qxh0fZCKUct1LNdd3hOfXlWbf8gb55mhtcf7?= =?us-ascii?Q?yxiFg1NpZ9nUaxXkTFRQ8+uBGhvPD/q2TLeiJiB4izbr5aB21rb17szpT5gu?= =?us-ascii?Q?wgWvF7ZJzq57fnwBMZFGQ9rKf0l0Di/7exgN9h/B3YhLqro00dwfP4KVRigr?= =?us-ascii?Q?SC/bLHj2VVrA4nQpQDIutEyBzgNLaywC7oTQCZWNkx+C0iTtlWB2J6Gff+WT?= =?us-ascii?Q?qanEkk6f1xHMrh2UsWxUYN7ROpPLeRqVFc76HkN+EAJOwIiMYyI3jOv2VohE?= =?us-ascii?Q?8QXnJgeSFudRjbiL7jkPTEcTz+kjLtmeaSnqfP1HDQHXQU6wNLcw98lqD5or?= =?us-ascii?Q?m7S9YlnUx/XU5O3BtfczJNIw9Y5dEV8movqWxupZiyC883XvQybksh9Swx9I?= =?us-ascii?Q?hApZGvzCtpOGQydRASO1Sf7Dih2VhazltbPXSeQ3J0QNPf+LRYzq89QIDAuN?= =?us-ascii?Q?XJfuzVbx9uKIAn+eegRZqQDDpI+AaImpYMleyuH6zT3VTF5fh+QnCGA+8SfJ?= =?us-ascii?Q?LOGbW0w9Y1t45FXzW8wF+BxZyWWU+4d19mV/OAOh40Pmz2KLGUxNSHLqsI3k?= =?us-ascii?Q?G49KV6HcsUY+FYu+uNGnsl5iQfy8nisSzuccetF/VOuDLKm+20GrzHIe3D1i?= =?us-ascii?Q?cm9ZzTNJg4kQ8RjJkF6eTDtyDRmEnpeWtwP0PY1ZUmA6KdR9GqTlx9fmWkw2?= =?us-ascii?Q?LdFGHnr3cEdQttPLDRlMJa+knd92UJahwLdsULdwu7P8L6Jh9XzGeJBuxPHw?= =?us-ascii?Q?JT+ZpLeymC3j7BAxc8cGWj8=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8f77f93c-904b-4c49-2c93-08de2c18b76f X-MS-Exchange-CrossTenant-AuthSource: AM9PR04MB8585.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Nov 2025 11:49:40.3639 (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: 8ot0nyk48LUdczbVFHvvsDQxGHoTW3FU6St9iP8TtFdTFZJfTYR3yrJ4WJfFQOayNjE+XTnUEapE2qeM0wtkUg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAXPR04MB8271 Content-Type: text/plain; charset="utf-8" "priv" is allocated by lynx_28g_probe() using devm_kzalloc(), and the lane is memory inside that structure (&priv->lane[id]). We don't have to zero-initialize it, it is already filled with zeroes. Suggested-by: Vinod Koul Link: https://lore.kernel.org/linux-phy/aRYMM3ZuyBYH8zEC@vaman/ Signed-off-by: Vladimir Oltean --- v4->v5: patch is new drivers/phy/freescale/phy-fsl-lynx-28g.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/drivers/phy/freescale/phy-fsl-lynx-28g.c b/drivers/phy/freesca= le/phy-fsl-lynx-28g.c index 61a992ff274f..f6e6ea1262bc 100644 --- a/drivers/phy/freescale/phy-fsl-lynx-28g.c +++ b/drivers/phy/freescale/phy-fsl-lynx-28g.c @@ -592,8 +592,6 @@ static int lynx_28g_probe_lane(struct lynx_28g_priv *pr= iv, int id, struct lynx_28g_lane *lane =3D &priv->lane[id]; struct phy *phy; =20 - memset(lane, 0, sizeof(*lane)); - phy =3D devm_phy_create(priv->dev, dn, &lynx_28g_ops); if (IS_ERR(phy)) return PTR_ERR(phy); --=20 2.34.1 From nobody Tue Dec 2 00:03:21 2025 Received: from AM0PR83CU005.outbound.protection.outlook.com (mail-westeuropeazon11010040.outbound.protection.outlook.com [52.101.69.40]) (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 D0A4A31961E for ; Tue, 25 Nov 2025 11:49:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.69.40 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764071392; cv=fail; b=h0kVSbLiK7XOVsrDkX5ElpwsctZ8eXAqPcMtcjJlzhlNK9IA49iE0nOCpwdOvi1oGgBLxk+Q6AhYB+wbkXeK7E/zLjZyPyuxCM14A8Mri84Yx07YC+Xn2vR3qb/QDWPqZJPGINGE2vx7OOZg8VjDn0td6Z23SAE0UWQPlL5KM5w= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764071392; c=relaxed/simple; bh=VdFgovgHP/J4C545n9k8ZWOBaAEgmVaefBpLasZLK2g=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=XOTLHnniXFnjBBh3o/v53PiyQTD8zSGD2oDdvu5Yj+OF4NMlE5h08pCPGfaSbQx0NZkreBWf9kPr9NUvWqEPN34OemnSMbM1rk08FoR0dKAj4I/JNDU/bcM4WJse6H49vcRGUDvZcPxVusTAAXTIDEPQOOj1yis6Nn4kPV5LpAA= 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=nWtoYZU/; arc=fail smtp.client-ip=52.101.69.40 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="nWtoYZU/" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=OxfLsZk6DaWPqn97U0Y2ZgInQom5gOLMOgbqTGddJpfwgrc3O4PqL4xxCjk9Fgr535WFZFxfF6NUZcJ9sPCyV979PVA7JpdGTidsK52XIJOu0i+nIQqabVx16VoAt1YHxItYCTB8RlmZDQ1tDdOkpxm877/VgLjSagAynFQaQPtbg5F0dsAt41KtULt738EFQqkuyV/9bpv+b03IrdOWi+HX0NFSDywPK41ahdboKT8KSI+GyMW08fXirK9HtTlyC1hoeMnzMItS1tMXHHdlOXd7ZYt0n8OnQY3MGjNcq/VyGZTNSS1nR0FdI9iD1lD4tYU9/4YIqS4i+CL45eyPDw== 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=oq3k87a4PYyLDENsk2qn5IKHN3p7LCJp+qu5Vt/BRnA=; b=kv1BSEsX0JjUpB4fkmZMhXhJbGR6F2gd5LYsNZdQew94jwDJN3JJ8uy25pMs58JVvLTaAtjqZnaqciszR8EYpMY0qZU7exbxvB0714M24y9KQyzrI3rpiFo/ClDtNLzvGPSXpyb0pPEnZblBQmWr97YlvtpXtc/BjJxo+DjnHT0OGKtoXPsWb3XBzLzcfW2T+AB7jeoILvHo4bLapZLxpAdN6AObWsT7ckvVybquHirON8nCciCKngl7RwCzroVvhjdwLd1/8eJ7XK61G1cCb6NkNapohREm3ENajoIybm9AcZ1CFOrPrzSTg7WJo49iPaIsfiVz8IyBp4EbAu7GHA== 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=oq3k87a4PYyLDENsk2qn5IKHN3p7LCJp+qu5Vt/BRnA=; b=nWtoYZU/Gml5QvBOqOoDBwDQ7Q0NdppehKKo5f9yiy/Ua0VK3XfWDLlJ1CmPbEpr2v9dm5xV4jNhjUQcdDEqUigpEb1YvqBUZ3w/dND8Qx/hxNypIE5hQ2hv1nONtoe4ZFDXC4c2OEk0KUaAHxr3rsRTE/Spu4ErQcSCuYDgr0AkzD5onpHI5wpW5NYRCjs0ciFySjEJPoFibkrPmvyyXrGO7NRWhycvo3Vzz3QBOqDdDF/bfijXuxvAk/gO6BO3Zrs86u/E5K1jay5rX3vFG27WaHvGG+jMKuvj23PqA2ZYvdtiDX3Vr4k4hc5mz0Qu5Ai5dyN3gpX/OUTyMkImfQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from AM9PR04MB8585.eurprd04.prod.outlook.com (2603:10a6:20b:438::13) by PAXPR04MB8271.eurprd04.prod.outlook.com (2603:10a6:102:1ca::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9366.11; Tue, 25 Nov 2025 11:49:41 +0000 Received: from AM9PR04MB8585.eurprd04.prod.outlook.com ([fe80::8063:666f:9a2e:1dab]) by AM9PR04MB8585.eurprd04.prod.outlook.com ([fe80::8063:666f:9a2e:1dab%5]) with mapi id 15.20.9343.016; Tue, 25 Nov 2025 11:49:41 +0000 From: Vladimir Oltean To: linux-phy@lists.infradead.org Cc: Ioana Ciornei , Vinod Koul , Kishon Vijay Abraham I , Neil Armstrong , Josua Mayer , linux-kernel@vger.kernel.org Subject: [PATCH v5 phy 05/15] phy: lynx-28g: remove LYNX_28G_ prefix from register names Date: Tue, 25 Nov 2025 13:48:37 +0200 Message-Id: <20251125114847.804961-6-vladimir.oltean@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20251125114847.804961-1-vladimir.oltean@nxp.com> References: <20251125114847.804961-1-vladimir.oltean@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AS4P189CA0047.EURP189.PROD.OUTLOOK.COM (2603:10a6:20b:659::19) To AM9PR04MB8585.eurprd04.prod.outlook.com (2603:10a6:20b:438::13) 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: AM9PR04MB8585:EE_|PAXPR04MB8271:EE_ X-MS-Office365-Filtering-Correlation-Id: fa6ee03f-8bda-46de-8eb4-08de2c18b7fa X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|52116014|376014|19092799006|10070799003|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?xj+TCdvrQ2sCgOtt+rZmAYNxVaQETwm0MiOQwD54Ikh7kLk0XkJU1q4syKQb?= =?us-ascii?Q?ycZjbfzHiUA2DIj2AkZTFL3R8qV+HwfsJ44Y3GYzSA8CSg1grllW+ZqoY8dd?= =?us-ascii?Q?zU2R13dL2E/c8Yrd3HEqGHugaxTRl7P93Gxpif1ufSf0s+CM0Y6UwFNh8d2j?= =?us-ascii?Q?zH5TMYcFWoGL4dpsnqyx2Xa9qjb+M7v7YOa+uilFWSnBuTsh5GTqTZ7gBPba?= =?us-ascii?Q?QpuQHWxsOGKWmZbGKPi3g4pn7he4YjUuOR2JXTiyaKArn+46HRcw8x8lh7wn?= =?us-ascii?Q?D9u4hZBLLEeaoGS8ykHJcv6nL4BFQ4JHt1oXr6meW2kp9D4xcH3qH1QRQW/x?= =?us-ascii?Q?K1tsT6Se2o3MZ7pEU77bU3fwAuLC1uQRhKo2Pe1Swws6eJWGL5uAz0lHHT8/?= =?us-ascii?Q?bjIsl3iBahoj/B6V68sArpwbioiylfnzAVyF+wvxQ29GwPB27dASWKINXFQ9?= =?us-ascii?Q?EVvcejs8P6fRcIaa1DckKfY1t5AkA2wxKCNjiAMeLozeFR050i29nwDdC+NV?= =?us-ascii?Q?tsvbXg+ulLudUkXLXKqXZ8LTH8RYhZgAZ6dvUYgqWbhzFUZ9MZcRQiVsOEf5?= =?us-ascii?Q?+zo+Ko7mVy6uYA6QtWIT1ENHR3mxbRzw6tLAGVRInAwJ0GZKUAOqYdnc4ASZ?= =?us-ascii?Q?3VOyTe3Co5mibbkM1+xjQ5UIIz1sCgoPikzgl9gywL7STUs168QOIJH2b5/x?= =?us-ascii?Q?bhF2lfruGCW28hp7SxUiVtaz6vzswPB+DjUEap11EK6IXjn+JR4lVz5hK5yP?= =?us-ascii?Q?a9LMmQctxUPA0Xae3VGT3UmsEYQgVF/1lWSxLKdjrSTnijS1kS0nR/Qwxd9A?= =?us-ascii?Q?JZ+tZyLTqF1nMYWTM/uWxBJZENA4j6tY/XaPCydP3rLvY1oDiqPRYEui/k4s?= =?us-ascii?Q?ca2daiqDmM9r/9tb0iPsOINB4NTriHj16f1XRcLPtDxehc8gW0z8c6uLc7AD?= =?us-ascii?Q?Av7npvxDOSrMJIufeQIiyX4OG0U3+EYce6+vKPcxZVol0VbmzI62yfv2UAJ7?= =?us-ascii?Q?DV2jaPq5ntuaRJGlQduIu4/HHfUIBmbAJXSv8vzIyFEu6DaHbpSfZknRm0pl?= =?us-ascii?Q?c0fUgAVVKkruxBbwT0rfNTSf96m4tNl4gz9MW0sft9gPhAcldwX2IeN0ppt1?= =?us-ascii?Q?rke50v5dm5PUlBIpld8u71t2f9IHx7B/WUZSqbdQQM0ZdBNv6wG/jkTXy1PA?= =?us-ascii?Q?DvqYK0MGgp8uA51e6tKpVj8XedPVFjf5Qhg1hxWGuutIPNZ4uoeaNixg9TNo?= =?us-ascii?Q?l0jmZ9SsWer3BxSbb3ofsShMD+LSPZYdepNLMq4jIZfGy80ujruntInqlL6m?= =?us-ascii?Q?TNDEbtU5oGHdSulTz8Kh+g+fK3mOdVO29Jpw/N7IbQJCaox30z8SvUdhlCEU?= =?us-ascii?Q?zq6Ztq5fFF4XB7KCmVHdHodv2pJZoi/9iNtSP8ciFPrRxmzznUKBw8F1hoiM?= =?us-ascii?Q?imzaZ4L+xOHAqfMnNKryvyr5dAVCSR4q?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM9PR04MB8585.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(52116014)(376014)(19092799006)(10070799003)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?aCsqQPM/m1vHhL5MBXpcxM5u6GDhX9X5TmQfbQqfNh3JDp8b10htsqy+Rops?= =?us-ascii?Q?HIVpelcT30Uyi+7638IYFxsDiW5byG4Lxn/LA6DAAyxfX75lW0jeUhyI02iC?= =?us-ascii?Q?iP2Si66FHSpKI1HVnZGSy4wy8RlQjUKKj4/o9e038e2uiIm3NBEXYAgns3fr?= =?us-ascii?Q?6ybhUhXVbF3WjEUo2vHQcnvdIVaT42ZSxVDh12ClzZrKmiVOE7gkkN06/9s5?= =?us-ascii?Q?t6y6W/ALtdKn0McK6ArKYzXqRgGTCossvALIUkNllqsjPv+SAb/cub/sGTys?= =?us-ascii?Q?EsqdV1hqWJEoitTL61QLM50HgSHiEbhhthOM2xfOsyDZR8Ug5KB3o74gVR8V?= =?us-ascii?Q?50f78t4SttdoPhaWYxjku34sYcyCO3gFWCuKSluMhRRwxtK3L+WF363aJ77c?= =?us-ascii?Q?jMwo9YjPbE8E0L4vblmBXaDYPYKBgdYT2lcZ+SIyBAmC55yCZPcoBoXMZU0t?= =?us-ascii?Q?P9NglDIy/vnf82fyvFk5cxSa3ttkMlWhsX6WZBM+xyFJAXcwJSzNhUGLypJh?= =?us-ascii?Q?kCN2SsKvBAISSH5d6sMrkuzlIFLsYdEUSiSFLp7XqcC0UX2mpyvnS05slg03?= =?us-ascii?Q?Em+PLWzIgT6bKLPSDHVsx4KZL2pLKvwJf7AgqSfcV1roRg9MJoAvu36Ml6aD?= =?us-ascii?Q?L180Lqyd3X4Gq6X9kPH16W/1nUkBMRUe6M18zJ+0tjngWRbXOSjkTp/bvNdC?= =?us-ascii?Q?L8hb0st55MV0ZYDT6AP6JsO+wrLH7IJ2jrqFhXCPpyYPlgm+EF8bc6G099Uh?= =?us-ascii?Q?L4R/eBjOsVrvHFNioOJ9M4L7QEvqSHIzSPMlFS0+F3hWamgmY9pSkVYR4SEs?= =?us-ascii?Q?kunI+CktOqvEJObtZJe4PdScg3s0TRLASzgXKu8+WTs91tMlnC4lPu7Lr/FI?= =?us-ascii?Q?quyLafvQkucO52gb7sbf4ijdrVlWcl6rp2ieZLxR/qhcR/RJIrRnJfEFpkK2?= =?us-ascii?Q?CvTS34yvYXerL21T2mnJbYL26ORTsKmv3be1k4SXQ5Y6rs8qEWWV2whp67Af?= =?us-ascii?Q?MOCgbpZ+W0KbdNkLsYneJx8gP0L4u2KHdVbsh/x3vENRVKLUFrQru0QAW5fz?= =?us-ascii?Q?96kVDwhPANjMlchlkqUvGJcSwOVGFeaikVKHlV1RZYeL7Nmye69kfGQQsGY7?= =?us-ascii?Q?k9iEdDw3QZ5cN8XL64hJJKxO2NNJZY/R5GgSDqxL+ZKOhHRlkP5sPXXR3b/S?= =?us-ascii?Q?E0QGYapjFm79gp+fjn4PWSe70TZMZXINMs/v4QbIM+JZMZRXPNP8zcGkCk3N?= =?us-ascii?Q?O5uROWxUUWtRSCDldi8/o9CVAXtRSS8S82LnZWYAvO2OhAWCUnqYqnnkuE35?= =?us-ascii?Q?VkKXHh51R1dwCknIsYgILKGWtM+jecWBSdL7tHHtTJgF9dDbcX5uZr1CcJN9?= =?us-ascii?Q?+BoXy7JvRhLWa9FEEu1p8oVk6NXPagltyrf6NFvNQxBCRk96+lMMFGFpRbCU?= =?us-ascii?Q?Y15TFmOUzl7OE9U7gCRG0zXfGeqMjdIQkWpc7+ZnDirWCke0VZO7nSRjuEAc?= =?us-ascii?Q?V1WPFcAMsiOsgdhWfECj90wMyqDbSun5P9zBAS8Io8gN1y08Kcsf5t/sS/5/?= =?us-ascii?Q?EXlFrDnpOlZEZByurAnQrHVbKmZltAJNZQmagf9j85f3BtqAAzGcDA1kSNxT?= =?us-ascii?Q?krMzx/EEjIpZ8GAC/30KXok=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: fa6ee03f-8bda-46de-8eb4-08de2c18b7fa X-MS-Exchange-CrossTenant-AuthSource: AM9PR04MB8585.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Nov 2025 11:49:41.4265 (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: HU4v+WD+lGsCCFozzqTPFxn3eYsSKVszh2mc9LCJVziP7xGDY4Rz9DUYOj3/lWJjdn9qsiHXJBGOZ6VYbR0ezg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAXPR04MB8271 Content-Type: text/plain; charset="utf-8" Currently, in macros such as lynx_28g_lane_rmw(), the driver has macros which concatenate the LYNX_28G_ prefix with the "val" and "mask" arguments. This is done to shorten function calls and not have to spell out LYNX_28G_ everywhere. But outside of lynx_28g_lane_rmw(), lynx_28g_lane_read() and lynx_28g_pll_read(), this is not done, leading to an inconsistency in the code. Also, the concatenation itself has the disadvantage that searching the arguments of these functions as full words (like N_RATE_QUARTER) leads us nowhere, since the real macro definition is LNaTGCR0_N_RATE_QUARTER. Some maintainers want register definitions in drivers to contain the driver name as a prefix, but here, this has the disadvantages listed above, so just remove that prefix. The only change made here is the removal of LYNX_28G_. Signed-off-by: Vladimir Oltean --- v1->v5: none drivers/phy/freescale/phy-fsl-lynx-28g.c | 248 +++++++++++------------ 1 file changed, 124 insertions(+), 124 deletions(-) diff --git a/drivers/phy/freescale/phy-fsl-lynx-28g.c b/drivers/phy/freesca= le/phy-fsl-lynx-28g.c index f6e6ea1262bc..3cd6cd817e11 100644 --- a/drivers/phy/freescale/phy-fsl-lynx-28g.c +++ b/drivers/phy/freescale/phy-fsl-lynx-28g.c @@ -12,99 +12,99 @@ #define LYNX_28G_NUM_PLL 2 =20 /* General registers per SerDes block */ -#define LYNX_28G_PCC8 0x10a0 -#define LYNX_28G_PCC8_SGMII 0x1 -#define LYNX_28G_PCC8_SGMII_DIS 0x0 +#define PCC8 0x10a0 +#define PCC8_SGMII 0x1 +#define PCC8_SGMII_DIS 0x0 =20 -#define LYNX_28G_PCCC 0x10b0 -#define LYNX_28G_PCCC_10GBASER 0x9 -#define LYNX_28G_PCCC_USXGMII 0x1 -#define LYNX_28G_PCCC_SXGMII_DIS 0x0 +#define PCCC 0x10b0 +#define PCCC_10GBASER 0x9 +#define PCCC_USXGMII 0x1 +#define PCCC_SXGMII_DIS 0x0 =20 -#define LYNX_28G_LNa_PCC_OFFSET(lane) (4 * (LYNX_28G_NUM_LANE - (lane->id= ) - 1)) +#define LNa_PCC_OFFSET(lane) (4 * (LYNX_28G_NUM_LANE - (lane->id) - 1)) =20 /* Per PLL registers */ -#define LYNX_28G_PLLnRSTCTL(pll) (0x400 + (pll) * 0x100 + 0x0) -#define LYNX_28G_PLLnRSTCTL_DIS(rstctl) (((rstctl) & BIT(24)) >> 24) -#define LYNX_28G_PLLnRSTCTL_LOCK(rstctl) (((rstctl) & BIT(23)) >> 23) - -#define LYNX_28G_PLLnCR0(pll) (0x400 + (pll) * 0x100 + 0x4) -#define LYNX_28G_PLLnCR0_REFCLK_SEL(cr0) (((cr0) & GENMASK(20, 16))) -#define LYNX_28G_PLLnCR0_REFCLK_SEL_100MHZ 0x0 -#define LYNX_28G_PLLnCR0_REFCLK_SEL_125MHZ 0x10000 -#define LYNX_28G_PLLnCR0_REFCLK_SEL_156MHZ 0x20000 -#define LYNX_28G_PLLnCR0_REFCLK_SEL_150MHZ 0x30000 -#define LYNX_28G_PLLnCR0_REFCLK_SEL_161MHZ 0x40000 - -#define LYNX_28G_PLLnCR1(pll) (0x400 + (pll) * 0x100 + 0x8) -#define LYNX_28G_PLLnCR1_FRATE_SEL(cr1) (((cr1) & GENMASK(28, 24))) -#define LYNX_28G_PLLnCR1_FRATE_5G_10GVCO 0x0 -#define LYNX_28G_PLLnCR1_FRATE_5G_25GVCO 0x10000000 -#define LYNX_28G_PLLnCR1_FRATE_10G_20GVCO 0x6000000 +#define PLLnRSTCTL(pll) (0x400 + (pll) * 0x100 + 0x0) +#define PLLnRSTCTL_DIS(rstctl) (((rstctl) & BIT(24)) >> 24) +#define PLLnRSTCTL_LOCK(rstctl) (((rstctl) & BIT(23)) >> 23) + +#define PLLnCR0(pll) (0x400 + (pll) * 0x100 + 0x4) +#define PLLnCR0_REFCLK_SEL(cr0) (((cr0) & GENMASK(20, 16))) +#define PLLnCR0_REFCLK_SEL_100MHZ 0x0 +#define PLLnCR0_REFCLK_SEL_125MHZ 0x10000 +#define PLLnCR0_REFCLK_SEL_156MHZ 0x20000 +#define PLLnCR0_REFCLK_SEL_150MHZ 0x30000 +#define PLLnCR0_REFCLK_SEL_161MHZ 0x40000 + +#define PLLnCR1(pll) (0x400 + (pll) * 0x100 + 0x8) +#define PLLnCR1_FRATE_SEL(cr1) (((cr1) & GENMASK(28, 24))) +#define PLLnCR1_FRATE_5G_10GVCO 0x0 +#define PLLnCR1_FRATE_5G_25GVCO 0x10000000 +#define PLLnCR1_FRATE_10G_20GVCO 0x6000000 =20 /* Per SerDes lane registers */ /* Lane a General Control Register */ -#define LYNX_28G_LNaGCR0(lane) (0x800 + (lane) * 0x100 + 0x0) -#define LYNX_28G_LNaGCR0_PROTO_SEL_MSK GENMASK(7, 3) -#define LYNX_28G_LNaGCR0_PROTO_SEL_SGMII 0x8 -#define LYNX_28G_LNaGCR0_PROTO_SEL_XFI 0x50 -#define LYNX_28G_LNaGCR0_IF_WIDTH_MSK GENMASK(2, 0) -#define LYNX_28G_LNaGCR0_IF_WIDTH_10_BIT 0x0 -#define LYNX_28G_LNaGCR0_IF_WIDTH_20_BIT 0x2 +#define LNaGCR0(lane) (0x800 + (lane) * 0x100 + 0x0) +#define LNaGCR0_PROTO_SEL_MSK GENMASK(7, 3) +#define LNaGCR0_PROTO_SEL_SGMII 0x8 +#define LNaGCR0_PROTO_SEL_XFI 0x50 +#define LNaGCR0_IF_WIDTH_MSK GENMASK(2, 0) +#define LNaGCR0_IF_WIDTH_10_BIT 0x0 +#define LNaGCR0_IF_WIDTH_20_BIT 0x2 =20 /* Lane a Tx Reset Control Register */ -#define LYNX_28G_LNaTRSTCTL(lane) (0x800 + (lane) * 0x100 + 0x20) -#define LYNX_28G_LNaTRSTCTL_HLT_REQ BIT(27) -#define LYNX_28G_LNaTRSTCTL_RST_DONE BIT(30) -#define LYNX_28G_LNaTRSTCTL_RST_REQ BIT(31) +#define LNaTRSTCTL(lane) (0x800 + (lane) * 0x100 + 0x20) +#define LNaTRSTCTL_HLT_REQ BIT(27) +#define LNaTRSTCTL_RST_DONE BIT(30) +#define LNaTRSTCTL_RST_REQ BIT(31) =20 /* Lane a Tx General Control Register */ -#define LYNX_28G_LNaTGCR0(lane) (0x800 + (lane) * 0x100 + 0x24) -#define LYNX_28G_LNaTGCR0_USE_PLLF 0x0 -#define LYNX_28G_LNaTGCR0_USE_PLLS BIT(28) -#define LYNX_28G_LNaTGCR0_USE_PLL_MSK BIT(28) -#define LYNX_28G_LNaTGCR0_N_RATE_FULL 0x0 -#define LYNX_28G_LNaTGCR0_N_RATE_HALF 0x1000000 -#define LYNX_28G_LNaTGCR0_N_RATE_QUARTER 0x2000000 -#define LYNX_28G_LNaTGCR0_N_RATE_MSK GENMASK(26, 24) +#define LNaTGCR0(lane) (0x800 + (lane) * 0x100 + 0x24) +#define LNaTGCR0_USE_PLLF 0x0 +#define LNaTGCR0_USE_PLLS BIT(28) +#define LNaTGCR0_USE_PLL_MSK BIT(28) +#define LNaTGCR0_N_RATE_FULL 0x0 +#define LNaTGCR0_N_RATE_HALF 0x1000000 +#define LNaTGCR0_N_RATE_QUARTER 0x2000000 +#define LNaTGCR0_N_RATE_MSK GENMASK(26, 24) =20 -#define LYNX_28G_LNaTECR0(lane) (0x800 + (lane) * 0x100 + 0x30) +#define LNaTECR0(lane) (0x800 + (lane) * 0x100 + 0x30) =20 /* Lane a Rx Reset Control Register */ -#define LYNX_28G_LNaRRSTCTL(lane) (0x800 + (lane) * 0x100 + 0x40) -#define LYNX_28G_LNaRRSTCTL_HLT_REQ BIT(27) -#define LYNX_28G_LNaRRSTCTL_RST_DONE BIT(30) -#define LYNX_28G_LNaRRSTCTL_RST_REQ BIT(31) -#define LYNX_28G_LNaRRSTCTL_CDR_LOCK BIT(12) +#define LNaRRSTCTL(lane) (0x800 + (lane) * 0x100 + 0x40) +#define LNaRRSTCTL_HLT_REQ BIT(27) +#define LNaRRSTCTL_RST_DONE BIT(30) +#define LNaRRSTCTL_RST_REQ BIT(31) +#define LNaRRSTCTL_CDR_LOCK BIT(12) =20 /* Lane a Rx General Control Register */ -#define LYNX_28G_LNaRGCR0(lane) (0x800 + (lane) * 0x100 + 0x44) -#define LYNX_28G_LNaRGCR0_USE_PLLF 0x0 -#define LYNX_28G_LNaRGCR0_USE_PLLS BIT(28) -#define LYNX_28G_LNaRGCR0_USE_PLL_MSK BIT(28) -#define LYNX_28G_LNaRGCR0_N_RATE_MSK GENMASK(26, 24) -#define LYNX_28G_LNaRGCR0_N_RATE_FULL 0x0 -#define LYNX_28G_LNaRGCR0_N_RATE_HALF 0x1000000 -#define LYNX_28G_LNaRGCR0_N_RATE_QUARTER 0x2000000 -#define LYNX_28G_LNaRGCR0_N_RATE_MSK GENMASK(26, 24) - -#define LYNX_28G_LNaRGCR1(lane) (0x800 + (lane) * 0x100 + 0x48) - -#define LYNX_28G_LNaRECR0(lane) (0x800 + (lane) * 0x100 + 0x50) -#define LYNX_28G_LNaRECR1(lane) (0x800 + (lane) * 0x100 + 0x54) -#define LYNX_28G_LNaRECR2(lane) (0x800 + (lane) * 0x100 + 0x58) - -#define LYNX_28G_LNaRSCCR0(lane) (0x800 + (lane) * 0x100 + 0x74) - -#define LYNX_28G_LNaPSS(lane) (0x1000 + (lane) * 0x4) -#define LYNX_28G_LNaPSS_TYPE(pss) (((pss) & GENMASK(30, 24)) >> 24) -#define LYNX_28G_LNaPSS_TYPE_SGMII 0x4 -#define LYNX_28G_LNaPSS_TYPE_XFI 0x28 - -#define LYNX_28G_SGMIIaCR1(lane) (0x1804 + (lane) * 0x10) -#define LYNX_28G_SGMIIaCR1_SGPCS_EN BIT(11) -#define LYNX_28G_SGMIIaCR1_SGPCS_DIS 0x0 -#define LYNX_28G_SGMIIaCR1_SGPCS_MSK BIT(11) +#define LNaRGCR0(lane) (0x800 + (lane) * 0x100 + 0x44) +#define LNaRGCR0_USE_PLLF 0x0 +#define LNaRGCR0_USE_PLLS BIT(28) +#define LNaRGCR0_USE_PLL_MSK BIT(28) +#define LNaRGCR0_N_RATE_MSK GENMASK(26, 24) +#define LNaRGCR0_N_RATE_FULL 0x0 +#define LNaRGCR0_N_RATE_HALF 0x1000000 +#define LNaRGCR0_N_RATE_QUARTER 0x2000000 +#define LNaRGCR0_N_RATE_MSK GENMASK(26, 24) + +#define LNaRGCR1(lane) (0x800 + (lane) * 0x100 + 0x48) + +#define LNaRECR0(lane) (0x800 + (lane) * 0x100 + 0x50) +#define LNaRECR1(lane) (0x800 + (lane) * 0x100 + 0x54) +#define LNaRECR2(lane) (0x800 + (lane) * 0x100 + 0x58) + +#define LNaRSCCR0(lane) (0x800 + (lane) * 0x100 + 0x74) + +#define LNaPSS(lane) (0x1000 + (lane) * 0x4) +#define LNaPSS_TYPE(pss) (((pss) & GENMASK(30, 24)) >> 24) +#define LNaPSS_TYPE_SGMII 0x4 +#define LNaPSS_TYPE_XFI 0x28 + +#define SGMIIaCR1(lane) (0x1804 + (lane) * 0x10) +#define SGMIIaCR1_SGPCS_EN BIT(11) +#define SGMIIaCR1_SGPCS_DIS 0x0 +#define SGMIIaCR1_SGPCS_MSK BIT(11) =20 struct lynx_28g_priv; =20 @@ -150,19 +150,19 @@ static void lynx_28g_rmw(struct lynx_28g_priv *priv, = unsigned long off, } =20 #define lynx_28g_lane_rmw(lane, reg, val, mask) \ - lynx_28g_rmw((lane)->priv, LYNX_28G_##reg(lane->id), \ - LYNX_28G_##reg##_##val, LYNX_28G_##reg##_##mask) + lynx_28g_rmw((lane)->priv, reg(lane->id), \ + reg##_##val, reg##_##mask) #define lynx_28g_lane_read(lane, reg) \ - ioread32((lane)->priv->base + LYNX_28G_##reg((lane)->id)) + ioread32((lane)->priv->base + reg((lane)->id)) #define lynx_28g_pll_read(pll, reg) \ - ioread32((pll)->priv->base + LYNX_28G_##reg((pll)->id)) + ioread32((pll)->priv->base + reg((pll)->id)) =20 static bool lynx_28g_supports_interface(struct lynx_28g_priv *priv, int in= tf) { int i; =20 for (i =3D 0; i < LYNX_28G_NUM_PLL; i++) { - if (LYNX_28G_PLLnRSTCTL_DIS(priv->pll[i].rstctl)) + if (PLLnRSTCTL_DIS(priv->pll[i].rstctl)) continue; =20 if (test_bit(intf, priv->pll[i].supported)) @@ -181,7 +181,7 @@ static struct lynx_28g_pll *lynx_28g_pll_get(struct lyn= x_28g_priv *priv, for (i =3D 0; i < LYNX_28G_NUM_PLL; i++) { pll =3D &priv->pll[i]; =20 - if (LYNX_28G_PLLnRSTCTL_DIS(pll->rstctl)) + if (PLLnRSTCTL_DIS(pll->rstctl)) continue; =20 if (test_bit(intf, pll->supported)) @@ -199,9 +199,9 @@ static void lynx_28g_lane_set_nrate(struct lynx_28g_lan= e *lane, struct lynx_28g_pll *pll, phy_interface_t intf) { - switch (LYNX_28G_PLLnCR1_FRATE_SEL(pll->cr1)) { - case LYNX_28G_PLLnCR1_FRATE_5G_10GVCO: - case LYNX_28G_PLLnCR1_FRATE_5G_25GVCO: + switch (PLLnCR1_FRATE_SEL(pll->cr1)) { + case PLLnCR1_FRATE_5G_10GVCO: + case PLLnCR1_FRATE_5G_25GVCO: switch (intf) { case PHY_INTERFACE_MODE_SGMII: case PHY_INTERFACE_MODE_1000BASEX: @@ -212,7 +212,7 @@ static void lynx_28g_lane_set_nrate(struct lynx_28g_lan= e *lane, break; } break; - case LYNX_28G_PLLnCR1_FRATE_10G_20GVCO: + case PLLnCR1_FRATE_10G_20GVCO: switch (intf) { case PHY_INTERFACE_MODE_10GBASER: case PHY_INTERFACE_MODE_USXGMII: @@ -242,20 +242,20 @@ static void lynx_28g_lane_set_pll(struct lynx_28g_lan= e *lane, =20 static void lynx_28g_cleanup_lane(struct lynx_28g_lane *lane) { - u32 lane_offset =3D LYNX_28G_LNa_PCC_OFFSET(lane); struct lynx_28g_priv *priv =3D lane->priv; + u32 lane_offset =3D LNa_PCC_OFFSET(lane); =20 /* Cleanup the protocol configuration registers of the current protocol */ switch (lane->interface) { case PHY_INTERFACE_MODE_10GBASER: - lynx_28g_rmw(priv, LYNX_28G_PCCC, - LYNX_28G_PCCC_SXGMII_DIS << lane_offset, + lynx_28g_rmw(priv, PCCC, + PCCC_SXGMII_DIS << lane_offset, GENMASK(3, 0) << lane_offset); break; case PHY_INTERFACE_MODE_SGMII: case PHY_INTERFACE_MODE_1000BASEX: - lynx_28g_rmw(priv, LYNX_28G_PCC8, - LYNX_28G_PCC8_SGMII_DIS << lane_offset, + lynx_28g_rmw(priv, PCC8, + PCC8_SGMII_DIS << lane_offset, GENMASK(3, 0) << lane_offset); break; default: @@ -265,15 +265,15 @@ static void lynx_28g_cleanup_lane(struct lynx_28g_lan= e *lane) =20 static void lynx_28g_lane_set_sgmii(struct lynx_28g_lane *lane) { - u32 lane_offset =3D LYNX_28G_LNa_PCC_OFFSET(lane); + u32 lane_offset =3D LNa_PCC_OFFSET(lane); struct lynx_28g_priv *priv =3D lane->priv; struct lynx_28g_pll *pll; =20 lynx_28g_cleanup_lane(lane); =20 /* Setup the lane to run in SGMII */ - lynx_28g_rmw(priv, LYNX_28G_PCC8, - LYNX_28G_PCC8_SGMII << lane_offset, + lynx_28g_rmw(priv, PCC8, + PCC8_SGMII << lane_offset, GENMASK(3, 0) << lane_offset); =20 /* Setup the protocol select and SerDes parallel interface width */ @@ -295,25 +295,25 @@ static void lynx_28g_lane_set_sgmii(struct lynx_28g_l= ane *lane) lynx_28g_lane_rmw(lane, SGMIIaCR1, SGPCS_EN, SGPCS_MSK); =20 /* Configure the appropriate equalization parameters for the protocol */ - iowrite32(0x00808006, priv->base + LYNX_28G_LNaTECR0(lane->id)); - iowrite32(0x04310000, priv->base + LYNX_28G_LNaRGCR1(lane->id)); - iowrite32(0x9f800000, priv->base + LYNX_28G_LNaRECR0(lane->id)); - iowrite32(0x001f0000, priv->base + LYNX_28G_LNaRECR1(lane->id)); - iowrite32(0x00000000, priv->base + LYNX_28G_LNaRECR2(lane->id)); - iowrite32(0x00000000, priv->base + LYNX_28G_LNaRSCCR0(lane->id)); + iowrite32(0x00808006, priv->base + LNaTECR0(lane->id)); + iowrite32(0x04310000, priv->base + LNaRGCR1(lane->id)); + iowrite32(0x9f800000, priv->base + LNaRECR0(lane->id)); + iowrite32(0x001f0000, priv->base + LNaRECR1(lane->id)); + iowrite32(0x00000000, priv->base + LNaRECR2(lane->id)); + iowrite32(0x00000000, priv->base + LNaRSCCR0(lane->id)); } =20 static void lynx_28g_lane_set_10gbaser(struct lynx_28g_lane *lane) { - u32 lane_offset =3D LYNX_28G_LNa_PCC_OFFSET(lane); struct lynx_28g_priv *priv =3D lane->priv; + u32 lane_offset =3D LNa_PCC_OFFSET(lane); struct lynx_28g_pll *pll; =20 lynx_28g_cleanup_lane(lane); =20 /* Enable the SXGMII lane */ - lynx_28g_rmw(priv, LYNX_28G_PCCC, - LYNX_28G_PCCC_10GBASER << lane_offset, + lynx_28g_rmw(priv, PCCC, + PCCC_10GBASER << lane_offset, GENMASK(3, 0) << lane_offset); =20 /* Setup the protocol select and SerDes parallel interface width */ @@ -335,12 +335,12 @@ static void lynx_28g_lane_set_10gbaser(struct lynx_28= g_lane *lane) lynx_28g_lane_rmw(lane, SGMIIaCR1, SGPCS_DIS, SGPCS_MSK); =20 /* Configure the appropriate equalization parameters for the protocol */ - iowrite32(0x10808307, priv->base + LYNX_28G_LNaTECR0(lane->id)); - iowrite32(0x10000000, priv->base + LYNX_28G_LNaRGCR1(lane->id)); - iowrite32(0x00000000, priv->base + LYNX_28G_LNaRECR0(lane->id)); - iowrite32(0x001f0000, priv->base + LYNX_28G_LNaRECR1(lane->id)); - iowrite32(0x81000020, priv->base + LYNX_28G_LNaRECR2(lane->id)); - iowrite32(0x00002000, priv->base + LYNX_28G_LNaRSCCR0(lane->id)); + iowrite32(0x10808307, priv->base + LNaTECR0(lane->id)); + iowrite32(0x10000000, priv->base + LNaRGCR1(lane->id)); + iowrite32(0x00000000, priv->base + LNaRECR0(lane->id)); + iowrite32(0x001f0000, priv->base + LNaRECR1(lane->id)); + iowrite32(0x81000020, priv->base + LNaRECR2(lane->id)); + iowrite32(0x00002000, priv->base + LNaRSCCR0(lane->id)); } =20 static int lynx_28g_power_off(struct phy *phy) @@ -359,8 +359,8 @@ static int lynx_28g_power_off(struct phy *phy) do { trstctl =3D lynx_28g_lane_read(lane, LNaTRSTCTL); rrstctl =3D lynx_28g_lane_read(lane, LNaRRSTCTL); - } while ((trstctl & LYNX_28G_LNaTRSTCTL_HLT_REQ) || - (rrstctl & LYNX_28G_LNaRRSTCTL_HLT_REQ)); + } while ((trstctl & LNaTRSTCTL_HLT_REQ) || + (rrstctl & LNaRRSTCTL_HLT_REQ)); =20 lane->powered_up =3D false; =20 @@ -383,8 +383,8 @@ static int lynx_28g_power_on(struct phy *phy) do { trstctl =3D lynx_28g_lane_read(lane, LNaTRSTCTL); rrstctl =3D lynx_28g_lane_read(lane, LNaRRSTCTL); - } while (!(trstctl & LYNX_28G_LNaTRSTCTL_RST_DONE) || - !(rrstctl & LYNX_28G_LNaRRSTCTL_RST_DONE)); + } while (!(trstctl & LNaTRSTCTL_RST_DONE) || + !(rrstctl & LNaRRSTCTL_RST_DONE)); =20 lane->powered_up =3D true; =20 @@ -495,17 +495,17 @@ static void lynx_28g_pll_read_configuration(struct ly= nx_28g_priv *priv) pll->cr0 =3D lynx_28g_pll_read(pll, PLLnCR0); pll->cr1 =3D lynx_28g_pll_read(pll, PLLnCR1); =20 - if (LYNX_28G_PLLnRSTCTL_DIS(pll->rstctl)) + if (PLLnRSTCTL_DIS(pll->rstctl)) continue; =20 - switch (LYNX_28G_PLLnCR1_FRATE_SEL(pll->cr1)) { - case LYNX_28G_PLLnCR1_FRATE_5G_10GVCO: - case LYNX_28G_PLLnCR1_FRATE_5G_25GVCO: + switch (PLLnCR1_FRATE_SEL(pll->cr1)) { + case PLLnCR1_FRATE_5G_10GVCO: + case PLLnCR1_FRATE_5G_25GVCO: /* 5GHz clock net */ __set_bit(PHY_INTERFACE_MODE_1000BASEX, pll->supported); __set_bit(PHY_INTERFACE_MODE_SGMII, pll->supported); break; - case LYNX_28G_PLLnCR1_FRATE_10G_20GVCO: + case PLLnCR1_FRATE_10G_20GVCO: /* 10.3125GHz clock net */ __set_bit(PHY_INTERFACE_MODE_10GBASER, pll->supported); break; @@ -536,11 +536,11 @@ static void lynx_28g_cdr_lock_check(struct work_struc= t *work) } =20 rrstctl =3D lynx_28g_lane_read(lane, LNaRRSTCTL); - if (!(rrstctl & LYNX_28G_LNaRRSTCTL_CDR_LOCK)) { + if (!(rrstctl & LNaRRSTCTL_CDR_LOCK)) { lynx_28g_lane_rmw(lane, LNaRRSTCTL, RST_REQ, RST_REQ); do { rrstctl =3D lynx_28g_lane_read(lane, LNaRRSTCTL); - } while (!(rrstctl & LYNX_28G_LNaRRSTCTL_RST_DONE)); + } while (!(rrstctl & LNaRRSTCTL_RST_DONE)); } =20 mutex_unlock(&lane->phy->mutex); @@ -554,12 +554,12 @@ static void lynx_28g_lane_read_configuration(struct l= ynx_28g_lane *lane) u32 pss, protocol; =20 pss =3D lynx_28g_lane_read(lane, LNaPSS); - protocol =3D LYNX_28G_LNaPSS_TYPE(pss); + protocol =3D LNaPSS_TYPE(pss); switch (protocol) { - case LYNX_28G_LNaPSS_TYPE_SGMII: + case LNaPSS_TYPE_SGMII: lane->interface =3D PHY_INTERFACE_MODE_SGMII; break; - case LYNX_28G_LNaPSS_TYPE_XFI: + case LNaPSS_TYPE_XFI: lane->interface =3D PHY_INTERFACE_MODE_10GBASER; break; default: --=20 2.34.1 From nobody Tue Dec 2 00:03:21 2025 Received: from AM0PR83CU005.outbound.protection.outlook.com (mail-westeuropeazon11010040.outbound.protection.outlook.com [52.101.69.40]) (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 CFB7E31A551 for ; Tue, 25 Nov 2025 11:49:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.69.40 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764071395; cv=fail; b=GpsNtGJobuDtnNSGd7TsdKIpW5eZzSXE55hu2M1McdsLzk8+Q0foj3ZjP3WfIvExxXuZ0AGUN49EaXgUA3grQxO77GOmUHaJ0Z2nAOSP7G+OFadx3qcnVgrlXxlv3LHubpKSKMIFaP70jHvOGR93YvTd8GCQ5QAZBBx7GiiDrCQ= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764071395; c=relaxed/simple; bh=ThWMUTosoI2Lc9UqUrRlfCOT494dnT2TkaYBWg8691E=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=BcA18mSGBZhAPK1mWSNW6bLRzJgRWTWfqypRIXY/LhVEsFx2JpiaADI3lixtuIb2Rib/pXDM8H9GWqhIso1bnPdgnbQd9B0ZeBiJeLmd6Yvsjj6Tj6IuPL79ehAYyWVKkiuKFb86FChkd8vgb65BSl1zobHp+JHazyFRaIKTchQ= 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=g+/pPFH3; arc=fail smtp.client-ip=52.101.69.40 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="g+/pPFH3" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=s49/UrnzYAvWqDWAXuMnbIip8iS2/QbXP6tq0bcUvnrf2sjJiczneLR3ArrcT65pG498upi0wo2lBvFBWeff8xmNih5PK5QI7TOym5hk8HaUgKcF+1YvvfyngGCeObJ8POkOAsf6b7A3IWTEmKojWKpiWND5y+7BlJhwMoxH1aA+JvH99NphKpb8on12UlmN5geEhydMvby+hWjWbMDFtV0SvDePbvw390LNYHx6eJevWp5t0INaq244E64rYvf4uOM5Sbo0/wugJ8pycwj2GRwHuK8ZLtaTs0yOetpvdPv/fdgnqzEcoQk0/aMX3o+bY8SBb0Sqb/pAFgESxAF3ug== 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=87iq3XOxYCWMThYeZ/ya9qnoxU7hFZbcjv3ecm/CkrA=; b=bgAm+1EG59Gaqdq4Ak+6Bc9+xGBPrGEBieU15FSsgQP1ETvo1Z6vSonNwiE5hcLPf9XE6oPzM6P9/3/ZjQb9BQNCqzKezc4GE9lCatAXWk7s1GsgGDlyniFvqLEL/mK8Os9Fk7rlFmi2BJMrrhq988F2/nFBvNVucYkpKy7dWXNmyZmWEH+FodNtE0VzqW8SmE7P1AfGJ/5gKMFdy1GPvzYzlh7NIXnkGr8+8SsLWGWfnIvEUtzbFbyZtjNBak/x/8y7Vrh3Dgk59BCKEkNlETTlJ5/3pIbRxD9wZYde7NiGl4+KyAIdm9PBKnnd4wF0DoHJYoCEPNYzLs4cT0+5IA== 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=87iq3XOxYCWMThYeZ/ya9qnoxU7hFZbcjv3ecm/CkrA=; b=g+/pPFH3DZZdfTwJo5Mt9HZy+mj512f2x8M5GvC/E6uBjXB2kXeQhD4D/zFepLYyuAWDrTKseTkoizgvfp/EjZLo2eU6x3SBmfzRHUIxwRPNHgiKXVdcYvFFk38XEZpl8wZaOTmk+n8GkgIuI/Ico/I3R+lSOPwbqPian+YS34UrenH+RJzNvMZaZoJ/Yf4ANJODfjAGRRE1Y6dXyxL7laJpDsMPm88c6hTfFFKz8oJ/35NUQXLM+wisgL+nekigy/ZSNpA9NJNI1g/7iEaFEOEkGt8bQRP/PCFrycGpsYoEULlgGHERupLlMZ7hUzyKtw4NpNUuvMG02MPC/GYNxA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from AM9PR04MB8585.eurprd04.prod.outlook.com (2603:10a6:20b:438::13) by PAXPR04MB8271.eurprd04.prod.outlook.com (2603:10a6:102:1ca::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9366.11; Tue, 25 Nov 2025 11:49:43 +0000 Received: from AM9PR04MB8585.eurprd04.prod.outlook.com ([fe80::8063:666f:9a2e:1dab]) by AM9PR04MB8585.eurprd04.prod.outlook.com ([fe80::8063:666f:9a2e:1dab%5]) with mapi id 15.20.9343.016; Tue, 25 Nov 2025 11:49:43 +0000 From: Vladimir Oltean To: linux-phy@lists.infradead.org Cc: Ioana Ciornei , Vinod Koul , Kishon Vijay Abraham I , Neil Armstrong , Josua Mayer , linux-kernel@vger.kernel.org Subject: [PATCH v5 phy 06/15] phy: lynx-28g: don't concatenate lynx_28g_lane_rmw() argument "reg" with "val" and "mask" Date: Tue, 25 Nov 2025 13:48:38 +0200 Message-Id: <20251125114847.804961-7-vladimir.oltean@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20251125114847.804961-1-vladimir.oltean@nxp.com> References: <20251125114847.804961-1-vladimir.oltean@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AS4P189CA0047.EURP189.PROD.OUTLOOK.COM (2603:10a6:20b:659::19) To AM9PR04MB8585.eurprd04.prod.outlook.com (2603:10a6:20b:438::13) 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: AM9PR04MB8585:EE_|PAXPR04MB8271:EE_ X-MS-Office365-Filtering-Correlation-Id: e1cc0282-4cf1-4ebb-4fdc-08de2c18b903 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|52116014|376014|19092799006|10070799003|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?wLyERr0X3E9PvFyMevFs58bgFUzJDxDCK9CSlPYIdjKieakt/8VadiR1DU+N?= =?us-ascii?Q?InYK8doklhXXM9i9IQy+8gaD89vcN0f8xvxY8pDa6X6lfQDgtAYE7NcRshYV?= =?us-ascii?Q?Ydptf646uA9MXIK7CKkhbrCAiHuq9UmR0eDUw+oQzmhXgJ73TOjLPR7qxK89?= =?us-ascii?Q?0vjgbnMH7PXgvACEBQks4oo0qO7MCxhvI76UQG+JBoMTkwgw3zoaz0pTQ2+L?= =?us-ascii?Q?eridUk2P37dAqoGx/3RyegAha16DQqz0uxVmJN9INMPa9oGEkq4MEpCm+8Kc?= =?us-ascii?Q?3Pt79x/C+CKGrEkNqgxTdrWaIfXyFZJrsKYHNsSnuHJKC0YFfBxAHETe8jg7?= =?us-ascii?Q?Kf+K9ZcUAXwkwFDKuIHV79h7lAy6MSadjAFALiRHMSPupjhuI9/IzH+mJYF9?= =?us-ascii?Q?E6vKmLWLFz47bpojx7Ia+QJSAUVJ1CpcvpHJ3RXQKVy8W4tL3I2N8iVaN+BT?= =?us-ascii?Q?y8FQpHH3Uay4AuRmFXOVUsAjfhMPYNc1ztJxSeJ/nX8/wmgA+0xvMySuW+JH?= =?us-ascii?Q?oWkDbT83pbtLzfarYVPoVTZj/eQcJ9ATxMrt6wcIUkucc85U2fnBljPd5bAR?= =?us-ascii?Q?k+obN260v20Javqj1Fjo4SO4O9wARmKrNVmElCnFD1/8mOYRtpeoBU9ETDIo?= =?us-ascii?Q?lJdnFRYlTkU9/XRP6GdAZ/TFrtJ2zKh3lfG48AWGMjSbUaviFfSkQOnYcaGi?= =?us-ascii?Q?pNu5DYcfRVPfN/pfAmjOdZ9kE64UpXuCGqbysPLxZZrnp+XDLeVF4gPthJhU?= =?us-ascii?Q?eodInKdqsPQxPEyAj4glu0greoDNXVdnLGCrr0k96gf/+DGw6qzYN5sTfCHg?= =?us-ascii?Q?yki7q0pW2fJQZ2/mAKIDSQHw6V/6/kY6o2c15nEUKHEo42OiDgxxZRqVBNgP?= =?us-ascii?Q?q17DhvMkUa4WYWjj82wj6PW/yzmdHR7Tf0nU/SB5MAGF3syoVOa8ZJYV4juS?= =?us-ascii?Q?axqp8e59iFDK7AnWzph/4LpK/oanyeyo2oDVfY8W5t45xl+25a8RbJo8p7Ah?= =?us-ascii?Q?Oh+fcVE8V5nC5GZeZy95lzoM1/DNtlts0riWD/FC3y+Ri98FhyrKBn5pK1Bc?= =?us-ascii?Q?zdTs21bRKNzFNJHI9x8Ti6+wHENiXTaz8iTw4DvAfV0vEoBPCYsP8humYZlJ?= =?us-ascii?Q?/QHD8bWT9Kbd4MRqPmv8EGGseQMUEx1B++35fesvGqMGVev2tkglrBkZi85G?= =?us-ascii?Q?0gmVPpGmfIEWB34QeyX56dTRb8mmQkGN6GUE58+oW4Nm7yBJ1J7xnsC2DxCX?= =?us-ascii?Q?VsjFilPpUEiEcEiXxwmWjBDU+M6vcmlj3s820Po81zn8+idIaqnEtrtLYV1m?= =?us-ascii?Q?U2TVZhs8UHEl+P6EXXMKnHh3PIqwU2CoBg5DpkNDYNAKa8XFnuH6WdWowR9V?= =?us-ascii?Q?v6CX9riC8JasZ47gqxtKQyxLDjZ50yUscKxdkIaUWgtlkJm43YqiENGFNMqh?= =?us-ascii?Q?26peiM3xWSC/SOKspy61+x7Om3+ArYUp?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM9PR04MB8585.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(52116014)(376014)(19092799006)(10070799003)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?nMguE3tM/9tc/w/ndD7rAWyAE6W6VT2Llo/3JMdUiMw8AGr6LKMhG0t40p0z?= =?us-ascii?Q?UXoGGHKpzr8ZdFfFdVIl8Hql0JYCTOK3IGz+KHqArjGdEcCq7PJ9/oRDxeZJ?= =?us-ascii?Q?2WuHcjvhNMqxmq8ncCN1WxRE70dWUWUvY0YwZAukWy702LAkt9Kt8ViKjeLi?= =?us-ascii?Q?8LIQTU+yznDXfTvxXF+bM+c9mb7MCxeUljxTlGapOIHIHDJUvTcqkxY/hla8?= =?us-ascii?Q?atH80rkpDXRihC15073AMCScF0jI3cJ95zy2aAXDBloiYkBAok1XJq/bVQyz?= =?us-ascii?Q?1h03cmSLW8qU9oQ06zyCrhIdCtPK89DgspITM1T6D7oyeiOuZXXE176ohTz3?= =?us-ascii?Q?av+W0L06EmWkI/+HXk4vqfnHaUifdYG15Qacvjs37lHuZnB0QvHFRAEgiruQ?= =?us-ascii?Q?vx7RgHvEa1uLpqMeYJK0OFYCEIxotwDsaQHWtT093Qp/H+Y6WC2SwdZwUdIJ?= =?us-ascii?Q?w5h1vljX0tilKFe0uKG6ZkUkmrwIMXAkJFNCiXsY+Phjfg9vOfnXEZLAXpTG?= =?us-ascii?Q?Zs+XF094ayfcZF/tacNoIfygBgCBxn67SLsQYOHiIcaQ0HTjXvMQBqrRToA5?= =?us-ascii?Q?ZVEA2s+nQw7Q87FJwpHSgy9l2X7bwDfULi9bqJ2WNnGUB5j1pEzHXF1N/UJQ?= =?us-ascii?Q?6/U+ecEnGu1Kq0IA4I9x0SIXl7ZXVX3LmT5edufwS0HOX5gdZHhY6g/Gsw+x?= =?us-ascii?Q?pj+WkWD8zamGDxQoDGs7dKjHZgGqA0SrYKCMq6Cs+4JoXAOdzsPRjqPkXf45?= =?us-ascii?Q?LC6yu4YF+GcW2bkHrvW+SjgcA0YSGxPXheOB608zdc0TmidWyxahFzFT5V7+?= =?us-ascii?Q?dg2ne42sYzJOfejmkPGM/tN3R+U9gF3r4GLtRlaBTx6IXMNSK4Erdbueh1JX?= =?us-ascii?Q?w0KvAiPirrj4ilO+DNBE8IueIziDQNi89xVqj1S8379nTY9hMfOklB0Egb+y?= =?us-ascii?Q?dwReLfwlnp+ckBjujsn/tyG64SzL1txZdr6ioGqHpMvNCZ76Jku2ZJxWACWO?= =?us-ascii?Q?FWP6aQNhO9APCH3xeKJtfiQn+dHlmC2NqQVFdhUrOfcWi6F6qRtBy2FxW8+Z?= =?us-ascii?Q?Op4nP/fsNmoqGBEvxKTLlWl7CHosJ9BCLNo9095X8I71HFyn7SEiCujwQLpR?= =?us-ascii?Q?7P/BJET1zU7YRCfMHYb3iOinK6HARoCwD/oJLZYYdWioNbvXieFy+anpwrjm?= =?us-ascii?Q?jJibZ13MJru3vJMbc6D+6d1nIOJOxDslKCqKdPE8OtzDfWxVq11QJl3hReeF?= =?us-ascii?Q?w2QpOJu4MNwAWq7CzJ2csETqWgcGt+E+QQdkuCyiFpl5b4l2DAcGHtTQDTbz?= =?us-ascii?Q?a/thNdqKwb9m1lpRQD6JdpPbbMU8CakFz2fiey0gdGgW+9x4O7Lmc2KEjscZ?= =?us-ascii?Q?iRXq/JevA144LaNWn8hxxqCP3SVWTzZT/7yn7eMKUZbh9Xbl7n2W7XYtIN+Z?= =?us-ascii?Q?NnEdt/UQeZkYloqdJ3R/a3fVyFptzXDOZT+bEZ+TGYT0UUMoM8kR9h0f8Twp?= =?us-ascii?Q?aEyLmREV8DbNr59JVDrYmqNPeQVfI8d8xs0neTuW5sKIRNinUqFOBzHGyHjS?= =?us-ascii?Q?ti26dymMTosN044rUmm2hgrIDfvD//UbFGuOCV/SWyPiiM1xLoSYl4OKCuyR?= =?us-ascii?Q?Gw0oa2/rWBVG+bO103u0/Nw=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: e1cc0282-4cf1-4ebb-4fdc-08de2c18b903 X-MS-Exchange-CrossTenant-AuthSource: AM9PR04MB8585.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Nov 2025 11:49:43.2595 (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: RTHzyVaIhQBjhsfTWHqUWvFUfVekS8qT6bGSONBSEER3E0zkY93ZJD+f/QUDTKSoqOSWHSCTGT3pVxt1HjOjTg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAXPR04MB8271 Content-Type: text/plain; charset="utf-8" The last step in having lynx_28g_lane_rmw() arguments that fully point to their definitions is the removal of the current concatenation logic, by which e.g. "LNaTGCR0, N_RATE_QUARTER, N_RATE_MSK" is expanded to "LNaTGCR0, LNaTGCR0_N_RATE_QUARTER, LNaTGCR0_N_RATE_MSK". There are pros and cons to the above. An advantage is the impossibility to mix up fields of one register with fields of another. For example both LNaTGCR0 and LNaRGCR0 contain an N_RATE_QUARTER field (one for the lane RX direction, one for the lane TX). But the two notable disadvantages are: 1. the impossibility to write expressions such as logical OR between multiple fields. Practically, this forces us to perform more accesses to hardware registers than would otherwise be needed. See the LNaGCR0 access for example. 2. the necessity to invent fields that don't exist, like SGMIIaCR1_SGPCS_DI= S, in order to clear SGMIIaCR1_SGPCS_EN (the real field name). This is confusing, because sometimes, fields that end with _DIS really exist, and it's best to not invent new field names. Signed-off-by: Vladimir Oltean --- v1->v5: none drivers/phy/freescale/phy-fsl-lynx-28g.c | 60 +++++++++++++++--------- 1 file changed, 38 insertions(+), 22 deletions(-) diff --git a/drivers/phy/freescale/phy-fsl-lynx-28g.c b/drivers/phy/freesca= le/phy-fsl-lynx-28g.c index 3cd6cd817e11..219cfeacc565 100644 --- a/drivers/phy/freescale/phy-fsl-lynx-28g.c +++ b/drivers/phy/freescale/phy-fsl-lynx-28g.c @@ -103,7 +103,6 @@ =20 #define SGMIIaCR1(lane) (0x1804 + (lane) * 0x10) #define SGMIIaCR1_SGPCS_EN BIT(11) -#define SGMIIaCR1_SGPCS_DIS 0x0 #define SGMIIaCR1_SGPCS_MSK BIT(11) =20 struct lynx_28g_priv; @@ -150,8 +149,7 @@ static void lynx_28g_rmw(struct lynx_28g_priv *priv, un= signed long off, } =20 #define lynx_28g_lane_rmw(lane, reg, val, mask) \ - lynx_28g_rmw((lane)->priv, reg(lane->id), \ - reg##_##val, reg##_##mask) + lynx_28g_rmw((lane)->priv, reg(lane->id), val, mask) #define lynx_28g_lane_read(lane, reg) \ ioread32((lane)->priv->base + reg((lane)->id)) #define lynx_28g_pll_read(pll, reg) \ @@ -205,8 +203,12 @@ static void lynx_28g_lane_set_nrate(struct lynx_28g_la= ne *lane, switch (intf) { case PHY_INTERFACE_MODE_SGMII: case PHY_INTERFACE_MODE_1000BASEX: - lynx_28g_lane_rmw(lane, LNaTGCR0, N_RATE_QUARTER, N_RATE_MSK); - lynx_28g_lane_rmw(lane, LNaRGCR0, N_RATE_QUARTER, N_RATE_MSK); + lynx_28g_lane_rmw(lane, LNaTGCR0, + LNaTGCR0_N_RATE_QUARTER, + LNaTGCR0_N_RATE_MSK); + lynx_28g_lane_rmw(lane, LNaRGCR0, + LNaRGCR0_N_RATE_QUARTER, + LNaRGCR0_N_RATE_MSK); break; default: break; @@ -216,8 +218,10 @@ static void lynx_28g_lane_set_nrate(struct lynx_28g_la= ne *lane, switch (intf) { case PHY_INTERFACE_MODE_10GBASER: case PHY_INTERFACE_MODE_USXGMII: - lynx_28g_lane_rmw(lane, LNaTGCR0, N_RATE_FULL, N_RATE_MSK); - lynx_28g_lane_rmw(lane, LNaRGCR0, N_RATE_FULL, N_RATE_MSK); + lynx_28g_lane_rmw(lane, LNaTGCR0, LNaTGCR0_N_RATE_FULL, + LNaTGCR0_N_RATE_MSK); + lynx_28g_lane_rmw(lane, LNaRGCR0, LNaRGCR0_N_RATE_FULL, + LNaRGCR0_N_RATE_MSK); break; default: break; @@ -232,11 +236,15 @@ static void lynx_28g_lane_set_pll(struct lynx_28g_lan= e *lane, struct lynx_28g_pll *pll) { if (pll->id =3D=3D 0) { - lynx_28g_lane_rmw(lane, LNaTGCR0, USE_PLLF, USE_PLL_MSK); - lynx_28g_lane_rmw(lane, LNaRGCR0, USE_PLLF, USE_PLL_MSK); + lynx_28g_lane_rmw(lane, LNaTGCR0, LNaTGCR0_USE_PLLF, + LNaTGCR0_USE_PLL_MSK); + lynx_28g_lane_rmw(lane, LNaRGCR0, LNaRGCR0_USE_PLLF, + LNaRGCR0_USE_PLL_MSK); } else { - lynx_28g_lane_rmw(lane, LNaTGCR0, USE_PLLS, USE_PLL_MSK); - lynx_28g_lane_rmw(lane, LNaRGCR0, USE_PLLS, USE_PLL_MSK); + lynx_28g_lane_rmw(lane, LNaTGCR0, LNaTGCR0_USE_PLLS, + LNaTGCR0_USE_PLL_MSK); + lynx_28g_lane_rmw(lane, LNaRGCR0, LNaRGCR0_USE_PLLS, + LNaRGCR0_USE_PLL_MSK); } } =20 @@ -277,8 +285,9 @@ static void lynx_28g_lane_set_sgmii(struct lynx_28g_lan= e *lane) GENMASK(3, 0) << lane_offset); =20 /* Setup the protocol select and SerDes parallel interface width */ - lynx_28g_lane_rmw(lane, LNaGCR0, PROTO_SEL_SGMII, PROTO_SEL_MSK); - lynx_28g_lane_rmw(lane, LNaGCR0, IF_WIDTH_10_BIT, IF_WIDTH_MSK); + lynx_28g_lane_rmw(lane, LNaGCR0, + LNaGCR0_PROTO_SEL_SGMII | LNaGCR0_IF_WIDTH_10_BIT, + LNaGCR0_PROTO_SEL_MSK | LNaGCR0_IF_WIDTH_MSK); =20 /* Find the PLL that works with this interface type */ pll =3D lynx_28g_pll_get(priv, PHY_INTERFACE_MODE_SGMII); @@ -292,7 +301,8 @@ static void lynx_28g_lane_set_sgmii(struct lynx_28g_lan= e *lane) lynx_28g_lane_set_nrate(lane, pll, PHY_INTERFACE_MODE_SGMII); =20 /* Enable the SGMII PCS */ - lynx_28g_lane_rmw(lane, SGMIIaCR1, SGPCS_EN, SGPCS_MSK); + lynx_28g_lane_rmw(lane, SGMIIaCR1, SGMIIaCR1_SGPCS_EN, + SGMIIaCR1_SGPCS_MSK); =20 /* Configure the appropriate equalization parameters for the protocol */ iowrite32(0x00808006, priv->base + LNaTECR0(lane->id)); @@ -317,8 +327,9 @@ static void lynx_28g_lane_set_10gbaser(struct lynx_28g_= lane *lane) GENMASK(3, 0) << lane_offset); =20 /* Setup the protocol select and SerDes parallel interface width */ - lynx_28g_lane_rmw(lane, LNaGCR0, PROTO_SEL_XFI, PROTO_SEL_MSK); - lynx_28g_lane_rmw(lane, LNaGCR0, IF_WIDTH_20_BIT, IF_WIDTH_MSK); + lynx_28g_lane_rmw(lane, LNaGCR0, + LNaGCR0_PROTO_SEL_XFI | LNaGCR0_IF_WIDTH_20_BIT, + LNaGCR0_PROTO_SEL_MSK | LNaGCR0_IF_WIDTH_MSK); =20 /* Find the PLL that works with this interface type */ pll =3D lynx_28g_pll_get(priv, PHY_INTERFACE_MODE_10GBASER); @@ -332,7 +343,7 @@ static void lynx_28g_lane_set_10gbaser(struct lynx_28g_= lane *lane) lynx_28g_lane_set_nrate(lane, pll, PHY_INTERFACE_MODE_10GBASER); =20 /* Disable the SGMII PCS */ - lynx_28g_lane_rmw(lane, SGMIIaCR1, SGPCS_DIS, SGPCS_MSK); + lynx_28g_lane_rmw(lane, SGMIIaCR1, 0, SGMIIaCR1_SGPCS_MSK); =20 /* Configure the appropriate equalization parameters for the protocol */ iowrite32(0x10808307, priv->base + LNaTECR0(lane->id)); @@ -352,8 +363,10 @@ static int lynx_28g_power_off(struct phy *phy) return 0; =20 /* Issue a halt request */ - lynx_28g_lane_rmw(lane, LNaTRSTCTL, HLT_REQ, HLT_REQ); - lynx_28g_lane_rmw(lane, LNaRRSTCTL, HLT_REQ, HLT_REQ); + lynx_28g_lane_rmw(lane, LNaTRSTCTL, LNaTRSTCTL_HLT_REQ, + LNaTRSTCTL_HLT_REQ); + lynx_28g_lane_rmw(lane, LNaRRSTCTL, LNaRRSTCTL_HLT_REQ, + LNaRRSTCTL_HLT_REQ); =20 /* Wait until the halting process is complete */ do { @@ -376,8 +389,10 @@ static int lynx_28g_power_on(struct phy *phy) return 0; =20 /* Issue a reset request on the lane */ - lynx_28g_lane_rmw(lane, LNaTRSTCTL, RST_REQ, RST_REQ); - lynx_28g_lane_rmw(lane, LNaRRSTCTL, RST_REQ, RST_REQ); + lynx_28g_lane_rmw(lane, LNaTRSTCTL, LNaTRSTCTL_RST_REQ, + LNaTRSTCTL_RST_REQ); + lynx_28g_lane_rmw(lane, LNaRRSTCTL, LNaRRSTCTL_RST_REQ, + LNaRRSTCTL_RST_REQ); =20 /* Wait until the reset sequence is completed */ do { @@ -537,7 +552,8 @@ static void lynx_28g_cdr_lock_check(struct work_struct = *work) =20 rrstctl =3D lynx_28g_lane_read(lane, LNaRRSTCTL); if (!(rrstctl & LNaRRSTCTL_CDR_LOCK)) { - lynx_28g_lane_rmw(lane, LNaRRSTCTL, RST_REQ, RST_REQ); + lynx_28g_lane_rmw(lane, LNaRRSTCTL, LNaRRSTCTL_RST_REQ, + LNaRRSTCTL_RST_REQ); do { rrstctl =3D lynx_28g_lane_read(lane, LNaRRSTCTL); } while (!(rrstctl & LNaRRSTCTL_RST_DONE)); --=20 2.34.1 From nobody Tue Dec 2 00:03:21 2025 Received: from OSPPR02CU001.outbound.protection.outlook.com (mail-norwayeastazon11013022.outbound.protection.outlook.com [40.107.159.22]) (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 EBD4A31A068 for ; Tue, 25 Nov 2025 11:49:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.159.22 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764071395; cv=fail; b=StGvYN6FPCc+leY+6FoK7r0SghSKIhMOSY9oy+rkXgv7EaNQ8UGeGRHdRlusgP5y4OT7uoXPcMpLN6G/JaBJtZfyT6LeJBXH6aQZnyNQu5vmKwNn8MCcoq5xpZUg1IwcyDxpVI3RUUZ7npLLItSPalKCIhbky4N8XJxbLOG3dFM= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764071395; c=relaxed/simple; bh=W7NFucjqfK2Gh8u4tmD7pSvyvdmiBs/UDlZVsRceN/c=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=JDVJ0btZbumaxsMFykmVN/y/+tmKQr0nGfUB1T9TBCRDuQgJzu+2zGucN73IZH79w+liTN2PJ5ZxAKzB3uP2Rhwi+4OQvZ4nAufLv2WYJzFkpRjvivlNQW+iN+AtvuPQm/q4TPHWUtYZxIfDJavHz4evBjyO2034C0UwpaB8Dek= 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=mjV7oMk7; arc=fail smtp.client-ip=40.107.159.22 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="mjV7oMk7" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=vEHkLPJEUuxNHD/oPrTtIEG1o9L7gFfWy2SevY0tXlK0xh9hiwjN+rDw3cRBGyh73nsfPw5lnhWrfGN2V5Jl1L98qmijCR6az7LdLZqgc4qpKsYElmOa7Rt9RdmVioaA6DCPfQzK0eU6pc6UcumP/fA65pzi9CTZzxnUMoo5BZ07qwz/W7aQD4LyNgR6mjEQBGqHwyyz14bVyC5fviJ0+tA7L9JnBMLgSfPQgI+TLj8hXtzxbIQn+N5rGy25ew4/OubQuJgtii6t2rAH3zOfvOLGvMB7ezzlfZNP4NJSYQPfW6LI1eA6Bfz9ga8m4aOu0ozQGqMGjRwFfKcwbl3oAw== 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=6sFwco2oDViVseGPcGRRKX5JDlVNi7+IpBLwajOf5+A=; b=pxwiPNxWlsstlNb3aitUaIAxxPJkqqCZmPNbx0y8ZuiIs5vcFh2nqg4MN7CnfalI4wNWlrnXHDDfVJBeAfe8scOOZhGY/18sUTODzgtnZqTrTk6oA+H7CGMFSTgJYKePYmR4DbPwtpYPcNDSzQLlCTskIP1qa+MkwJORF7lvu3N949YKYt6wMO5UuRq/qRfGwn6gFsEmdeaYePzexjeflBmkfJpciBDrjzhyjuqfys6Fmd7sUw/GGT5vIGO78hhHFKnQ5hSYf/kKFwojWetv84JSrvLnyqq/24tTVhubJdBpb/AbgGLphnZ4gPRai3Yfm3aY2c5qNE/D6IINaapgEg== 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=6sFwco2oDViVseGPcGRRKX5JDlVNi7+IpBLwajOf5+A=; b=mjV7oMk7zAuz/7SI97zZD8ucPpepPY0Oj5U3v634PnU0MuiP7p5VFyEbUfjFRrCnDSNzt3VDvqCoHpk65N02h7pDRV5JfALx6kYZLVTdnY2RzSC4iuiImN1FzvYAY4xasv9800cJZGA8lWuRyPuQDTz177XJZiuVAXOStBge52Yumhu+wlV1lI0C3QqLySJOq4Oesi5IqlgLl9+60Dj7hSkklkxdvJC2HIBOpK5u/YEp6566T4J8zlEedKg7V2yCVauls/ZvPfdAw8h42aC1DFlmGmc16gNVQ5JioKo/w8rihQIPFtk/yaK4xq1bz59a90NZpJM+rkkRHkwJfKFexQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from AM9PR04MB8585.eurprd04.prod.outlook.com (2603:10a6:20b:438::13) by PAXPR04MB8271.eurprd04.prod.outlook.com (2603:10a6:102:1ca::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9366.11; Tue, 25 Nov 2025 11:49:44 +0000 Received: from AM9PR04MB8585.eurprd04.prod.outlook.com ([fe80::8063:666f:9a2e:1dab]) by AM9PR04MB8585.eurprd04.prod.outlook.com ([fe80::8063:666f:9a2e:1dab%5]) with mapi id 15.20.9343.016; Tue, 25 Nov 2025 11:49:44 +0000 From: Vladimir Oltean To: linux-phy@lists.infradead.org Cc: Ioana Ciornei , Vinod Koul , Kishon Vijay Abraham I , Neil Armstrong , Josua Mayer , linux-kernel@vger.kernel.org Subject: [PATCH v5 phy 07/15] phy: lynx-28g: use FIELD_GET() and FIELD_PREP() Date: Tue, 25 Nov 2025 13:48:39 +0200 Message-Id: <20251125114847.804961-8-vladimir.oltean@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20251125114847.804961-1-vladimir.oltean@nxp.com> References: <20251125114847.804961-1-vladimir.oltean@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AS4P189CA0047.EURP189.PROD.OUTLOOK.COM (2603:10a6:20b:659::19) To AM9PR04MB8585.eurprd04.prod.outlook.com (2603:10a6:20b:438::13) 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: AM9PR04MB8585:EE_|PAXPR04MB8271:EE_ X-MS-Office365-Filtering-Correlation-Id: f3549275-35e6-4297-9628-08de2c18b9c4 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|52116014|376014|19092799006|10070799003|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?FMrxXhoVmSsfRDmKx0Hz7VeUpzpvR+k8pMCbZKabEQx7QLTBL/TLcXi1UxMl?= =?us-ascii?Q?fsauGN0q+noFEW/fK47Yptb622P7y3c65V4jETueBX0kdvaI8UGyoFG/xP9r?= =?us-ascii?Q?H1ljuiZsLI3M0yZ250+nMNufJQvUTwMLcOFI07IT10b7OO/LJGZqPz2WUqNH?= =?us-ascii?Q?Yp6na8EteOIzP/fL6FLnUJL6TQ95f+YYGj32GRt+aNIBzMQqLPnkwr1UJEvj?= =?us-ascii?Q?XvZud4SfQZHdnIFFKxCWDShrfYJU93vDx2s/XdE4Wng+zHD8tPJ+pZ11LzB3?= =?us-ascii?Q?gIInWyCUIaJnSzI5y9oe3oT6QplS4tY6rjY2jHVjLwCj2UVQMhbNuLhTHr4D?= =?us-ascii?Q?SIjdLcFvU9gKj7WQA3j7ZvBBWxx6nyGiG5ONy9AZ9Ieep7YdQGePdcCaoCqN?= =?us-ascii?Q?iFp1cG0Dabgy6SHWzJXvD8S4YuRLOTRkSHTClxseFK8RhnKf5dpk7h4T13/U?= =?us-ascii?Q?x5qFDVuLUQRMcW09Gukq0tWR49HD1eh1loi7S8VwP1adRmgzwVjl7zA+ArnI?= =?us-ascii?Q?lUPRckj4XCc6u5eotlwfXzJvY9v+GNrD3fLgi+PsqnluxtH6butJY8ME2RG2?= =?us-ascii?Q?yAIMRzbvdEk8/eeWdKaAmdt1JzxlbaJZiW+4wqkesTNpwv2CMSqb4BysuAMJ?= =?us-ascii?Q?9aEpgnB05whRDSnIcSw2kMHKFoHv9glGdTx0CU2nB2aThxOsu3A8OYD/gEyd?= =?us-ascii?Q?o4QO/71nmZ37FffWJbvG5RG29QNila3fE9mwPekXHSaEqMdB0q0OkiX2oZvz?= =?us-ascii?Q?MkQ/TbF4lPxooIFhuhZLWJ3Clh+7tHoeQJ0ODwF6QqtKR+m3DDZsL6F0MdRR?= =?us-ascii?Q?O/UP3Ae2Fr2ssof5bUAcntbSpazAg1xbu4Vz6kV5OOTByucMn1uQ7PuF7jX8?= =?us-ascii?Q?hXy6GD/+uw+mlrdvjC2jwnLp4q3Wa7QdM0WT/PhqmvzPxoGuaYv414RlEakk?= =?us-ascii?Q?QiYXUpqi45coFJKuYVF7h2WkfcpkUwWbLf4lgysY5ytyTEdTXo89VktdmD/e?= =?us-ascii?Q?eYIOmlZLcib4714UB/f1HeHgxMzQ7jQPNBGe38UJxHf33p6BzH96mt/Gsvwj?= =?us-ascii?Q?N95yM+0S43prLgiM7hsLP476gasRLO4RsOw0vi4A4EphLA0g+V3SrwNzCQMS?= =?us-ascii?Q?rZz5t3URwrf2R5tyPggv2K3gvVmaY/poVRMqILn17hA6KXl9XUW0QxUVrL8t?= =?us-ascii?Q?LHvAV0U4q4jQSQjDebMUqGWeOk9+zIYNt6gGp6k5O3oZ41NtfHgb/hDIYZDW?= =?us-ascii?Q?nx+u0YBz7scm8fSXSTIUuSzsI6buPM765bBu7efUyaa03JMtG/WU2BMUOd7T?= =?us-ascii?Q?8aBSu1pEZV9gAARXTkuRBCsZCimUR89nKT9QavKbrEawHZ6F2DJUjl43jCJp?= =?us-ascii?Q?eKOZJ2pktYG+xSXVmIokThtzKUMEjXclu3dlncD3Cp3L2Q8GkV5Q441TBZnT?= =?us-ascii?Q?3HjjLKTNvwVk9GjhTM+9/cn4sCofMqVn?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM9PR04MB8585.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(52116014)(376014)(19092799006)(10070799003)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?dt6d3JVWoEyEEAlkPlRedSRpPK3UEq3i2IeOyCszS/3PWvsqZ+RpazplBwe+?= =?us-ascii?Q?tYRDPBtiSb0/Bf59sViRvHr7BBLPGgP91td6LFeVOGcwUnM3h+fkiQ3ZiPKl?= =?us-ascii?Q?/tB5Y/BViqOGFJwujOCiUw9MlF4aDxcJEdql+2/OLUEEM0saBe2PvA7inwBA?= =?us-ascii?Q?VqDUWUeCA4LEGRCysys6F7P7wmUfaddQJ7SHWRM7diX5jjFAYVbcvRdPqpyk?= =?us-ascii?Q?8bmjoqZtr/6E2zGcOxQJoHTZJObzdTttUVr44RbZ9iJDjOgm3HcrDHoA/643?= =?us-ascii?Q?wkXx8OgnY3hknl91cNwajNeGCF9nfqKtTx1aHjqpG+bdDNIJtZNYfnfdd2BK?= =?us-ascii?Q?C/OUlR86WGluQYyiETxTglZ20OI94ZDpylGlQVWrKsuNkVXMkK8Mzv9XvM6G?= =?us-ascii?Q?HxfCqaYLWOO1KjWH4x5mTYBIMiNmnR6Gkhsz55SEnzOSU8UUtP6iYxUb98F3?= =?us-ascii?Q?K1C1rI/CFZpkuN5rCfHufFC45KTzxOMolxXIoEngicivT+T6z8KgXKKsi31F?= =?us-ascii?Q?OiLgiXgfcI0gYbJ9ynfXfuen+VJFLts4gCbG63MQn80h6BO+94jUyi67U07D?= =?us-ascii?Q?KcRlA/xGcc9lN/Dnv8zxL6yCKcfJkN3QaEvgaDlplvvEFqVwpKaYUobtlsku?= =?us-ascii?Q?v/4Lj3vGk+7PHvHka/5/mN16GneBoGJeHJTalPSWrlCYrO+C2c54flnwQ6/P?= =?us-ascii?Q?vt2FQKWkVIPNiVZH5qw9cqj5OVA5c3LciUGLeWjKCQH9KFuY2hF4cYe5E35k?= =?us-ascii?Q?KB6/gg8UCmtA3qYzUa6xfAyXFdz+yDEQQDFH73hBjc4f9o3hP8u+uJkipVIF?= =?us-ascii?Q?IVnU+PBE8yrv4gRH4TPFOMSHZFG4HHItr2QpEDt3ihI3BytRpvToNCoRfQQw?= =?us-ascii?Q?VRf4GNTTrDuy+yDsSEcM7YPu38Kau4NGbGNXHc9wYCoHD1hturCKy4gRcobB?= =?us-ascii?Q?P2dl2zlFdc+TG0YTsqBpwgu3Se7r6gHLTItVHgH8dqY9OeaN6EkIzfn8OUTA?= =?us-ascii?Q?0Zbrv+9C+MM7H4+Cp/umL59ldTrAnjjYqqfS25zq48vH7917mDp7ZbIii1BQ?= =?us-ascii?Q?kGGn8hj/eA/M/5y2Roc7Li8hE11BhpjC7gWb0O1qI2puUNg/PsWQFuCnJqCP?= =?us-ascii?Q?EtUpQdUe5J8xnt2Pv4yMqMtPfWMo/LMS0JAxfSqdENWfxfIzDNqZYEQAp3Oh?= =?us-ascii?Q?KhnkYFkq8XzETq1SvInHZZ0IjstfIR3R+lHn23FU8AGsWDq1z+piQMY3qN3s?= =?us-ascii?Q?Iq8prgobFPhH3zFippxuY/rvS25CL3E8DHCVB/5+Pc0lq8jq+gcuBoW9mVn3?= =?us-ascii?Q?7sfwBYB6+IYridCp2ALC4T1dCqWjkozOG3REqQm1RSmoAuzDZ+xxaU5RLJbt?= =?us-ascii?Q?qaTKGH4nsxOdRYrc7zxIX5flEjP4wCw9JdzYaRudV2+hQTQH+wQU2U5hr/sq?= =?us-ascii?Q?PSDXtUzfs3Ec1WMGwA3kvtbhgHPGdo+etiACn3Nfs5oEAoSHGE+n+QRCoByn?= =?us-ascii?Q?mlgh8jxXs4uumCQOjSAP+H9+ye0tNtDX9/+hw+nwWsSJnS4RIDBLjTQtH5tu?= =?us-ascii?Q?9hHLI1atqQnxfBEliMlnU5UnbMhZyJ6/rYeAHqAdgZ3vTYZFcIhjYtOh9RH9?= =?us-ascii?Q?ridS399mgMpKYPyJ2ZY4GzM=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: f3549275-35e6-4297-9628-08de2c18b9c4 X-MS-Exchange-CrossTenant-AuthSource: AM9PR04MB8585.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Nov 2025 11:49:44.6042 (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: qXXcmh5b8mgd/NuVQVcU6KSF6Rh0Ex8czYCytY4uwT5byBEx9mY49nEwhyUCbhmB0mLQD91GtvC9IE4bvoBl5Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAXPR04MB8271 Content-Type: text/plain; charset="utf-8" Reduce the number of bit field definitions required in this driver (in the worst case, a read form and a write form), by defining just the mask, and using the FIELD_GET() and FIELD_PREP() API from with that. Signed-off-by: Vladimir Oltean --- v1->v5: none drivers/phy/freescale/phy-fsl-lynx-28g.c | 107 ++++++++++++----------- 1 file changed, 57 insertions(+), 50 deletions(-) diff --git a/drivers/phy/freescale/phy-fsl-lynx-28g.c b/drivers/phy/freesca= le/phy-fsl-lynx-28g.c index 219cfeacc565..439fcd6bdc1c 100644 --- a/drivers/phy/freescale/phy-fsl-lynx-28g.c +++ b/drivers/phy/freescale/phy-fsl-lynx-28g.c @@ -1,6 +1,7 @@ // SPDX-License-Identifier: GPL-2.0+ /* Copyright (c) 2021-2022 NXP. */ =20 +#include #include #include #include @@ -29,26 +30,26 @@ #define PLLnRSTCTL_LOCK(rstctl) (((rstctl) & BIT(23)) >> 23) =20 #define PLLnCR0(pll) (0x400 + (pll) * 0x100 + 0x4) -#define PLLnCR0_REFCLK_SEL(cr0) (((cr0) & GENMASK(20, 16))) +#define PLLnCR0_REFCLK_SEL GENMASK(20, 16) #define PLLnCR0_REFCLK_SEL_100MHZ 0x0 -#define PLLnCR0_REFCLK_SEL_125MHZ 0x10000 -#define PLLnCR0_REFCLK_SEL_156MHZ 0x20000 -#define PLLnCR0_REFCLK_SEL_150MHZ 0x30000 -#define PLLnCR0_REFCLK_SEL_161MHZ 0x40000 +#define PLLnCR0_REFCLK_SEL_125MHZ 0x1 +#define PLLnCR0_REFCLK_SEL_156MHZ 0x2 +#define PLLnCR0_REFCLK_SEL_150MHZ 0x3 +#define PLLnCR0_REFCLK_SEL_161MHZ 0x4 =20 #define PLLnCR1(pll) (0x400 + (pll) * 0x100 + 0x8) -#define PLLnCR1_FRATE_SEL(cr1) (((cr1) & GENMASK(28, 24))) +#define PLLnCR1_FRATE_SEL GENMASK(28, 24) #define PLLnCR1_FRATE_5G_10GVCO 0x0 -#define PLLnCR1_FRATE_5G_25GVCO 0x10000000 -#define PLLnCR1_FRATE_10G_20GVCO 0x6000000 +#define PLLnCR1_FRATE_5G_25GVCO 0x10 +#define PLLnCR1_FRATE_10G_20GVCO 0x6 =20 /* Per SerDes lane registers */ /* Lane a General Control Register */ #define LNaGCR0(lane) (0x800 + (lane) * 0x100 + 0x0) -#define LNaGCR0_PROTO_SEL_MSK GENMASK(7, 3) -#define LNaGCR0_PROTO_SEL_SGMII 0x8 -#define LNaGCR0_PROTO_SEL_XFI 0x50 -#define LNaGCR0_IF_WIDTH_MSK GENMASK(2, 0) +#define LNaGCR0_PROTO_SEL GENMASK(7, 3) +#define LNaGCR0_PROTO_SEL_SGMII 0x1 +#define LNaGCR0_PROTO_SEL_XFI 0xa +#define LNaGCR0_IF_WIDTH GENMASK(2, 0) #define LNaGCR0_IF_WIDTH_10_BIT 0x0 #define LNaGCR0_IF_WIDTH_20_BIT 0x2 =20 @@ -60,13 +61,13 @@ =20 /* Lane a Tx General Control Register */ #define LNaTGCR0(lane) (0x800 + (lane) * 0x100 + 0x24) +#define LNaTGCR0_USE_PLL BIT(28) #define LNaTGCR0_USE_PLLF 0x0 -#define LNaTGCR0_USE_PLLS BIT(28) -#define LNaTGCR0_USE_PLL_MSK BIT(28) +#define LNaTGCR0_USE_PLLS 0x1 +#define LNaTGCR0_N_RATE GENMASK(26, 24) #define LNaTGCR0_N_RATE_FULL 0x0 -#define LNaTGCR0_N_RATE_HALF 0x1000000 -#define LNaTGCR0_N_RATE_QUARTER 0x2000000 -#define LNaTGCR0_N_RATE_MSK GENMASK(26, 24) +#define LNaTGCR0_N_RATE_HALF 0x1 +#define LNaTGCR0_N_RATE_QUARTER 0x2 =20 #define LNaTECR0(lane) (0x800 + (lane) * 0x100 + 0x30) =20 @@ -79,14 +80,13 @@ =20 /* Lane a Rx General Control Register */ #define LNaRGCR0(lane) (0x800 + (lane) * 0x100 + 0x44) +#define LNaRGCR0_USE_PLL BIT(28) #define LNaRGCR0_USE_PLLF 0x0 -#define LNaRGCR0_USE_PLLS BIT(28) -#define LNaRGCR0_USE_PLL_MSK BIT(28) -#define LNaRGCR0_N_RATE_MSK GENMASK(26, 24) +#define LNaRGCR0_USE_PLLS 0x1 +#define LNaRGCR0_N_RATE GENMASK(26, 24) #define LNaRGCR0_N_RATE_FULL 0x0 -#define LNaRGCR0_N_RATE_HALF 0x1000000 -#define LNaRGCR0_N_RATE_QUARTER 0x2000000 -#define LNaRGCR0_N_RATE_MSK GENMASK(26, 24) +#define LNaRGCR0_N_RATE_HALF 0x1 +#define LNaRGCR0_N_RATE_QUARTER 0x2 =20 #define LNaRGCR1(lane) (0x800 + (lane) * 0x100 + 0x48) =20 @@ -97,13 +97,12 @@ #define LNaRSCCR0(lane) (0x800 + (lane) * 0x100 + 0x74) =20 #define LNaPSS(lane) (0x1000 + (lane) * 0x4) -#define LNaPSS_TYPE(pss) (((pss) & GENMASK(30, 24)) >> 24) +#define LNaPSS_TYPE GENMASK(30, 24) #define LNaPSS_TYPE_SGMII 0x4 #define LNaPSS_TYPE_XFI 0x28 =20 #define SGMIIaCR1(lane) (0x1804 + (lane) * 0x10) #define SGMIIaCR1_SGPCS_EN BIT(11) -#define SGMIIaCR1_SGPCS_MSK BIT(11) =20 struct lynx_28g_priv; =20 @@ -197,18 +196,18 @@ static void lynx_28g_lane_set_nrate(struct lynx_28g_l= ane *lane, struct lynx_28g_pll *pll, phy_interface_t intf) { - switch (PLLnCR1_FRATE_SEL(pll->cr1)) { + switch (FIELD_GET(PLLnCR1_FRATE_SEL, pll->cr1)) { case PLLnCR1_FRATE_5G_10GVCO: case PLLnCR1_FRATE_5G_25GVCO: switch (intf) { case PHY_INTERFACE_MODE_SGMII: case PHY_INTERFACE_MODE_1000BASEX: lynx_28g_lane_rmw(lane, LNaTGCR0, - LNaTGCR0_N_RATE_QUARTER, - LNaTGCR0_N_RATE_MSK); + FIELD_PREP(LNaTGCR0_N_RATE, LNaTGCR0_N_RATE_QUARTER), + LNaTGCR0_N_RATE); lynx_28g_lane_rmw(lane, LNaRGCR0, - LNaRGCR0_N_RATE_QUARTER, - LNaRGCR0_N_RATE_MSK); + FIELD_PREP(LNaRGCR0_N_RATE, LNaRGCR0_N_RATE_QUARTER), + LNaRGCR0_N_RATE); break; default: break; @@ -218,10 +217,12 @@ static void lynx_28g_lane_set_nrate(struct lynx_28g_l= ane *lane, switch (intf) { case PHY_INTERFACE_MODE_10GBASER: case PHY_INTERFACE_MODE_USXGMII: - lynx_28g_lane_rmw(lane, LNaTGCR0, LNaTGCR0_N_RATE_FULL, - LNaTGCR0_N_RATE_MSK); - lynx_28g_lane_rmw(lane, LNaRGCR0, LNaRGCR0_N_RATE_FULL, - LNaRGCR0_N_RATE_MSK); + lynx_28g_lane_rmw(lane, LNaTGCR0, + FIELD_PREP(LNaTGCR0_N_RATE, LNaTGCR0_N_RATE_FULL), + LNaTGCR0_N_RATE); + lynx_28g_lane_rmw(lane, LNaRGCR0, + FIELD_PREP(LNaRGCR0_N_RATE, LNaRGCR0_N_RATE_FULL), + LNaRGCR0_N_RATE); break; default: break; @@ -236,15 +237,19 @@ static void lynx_28g_lane_set_pll(struct lynx_28g_lan= e *lane, struct lynx_28g_pll *pll) { if (pll->id =3D=3D 0) { - lynx_28g_lane_rmw(lane, LNaTGCR0, LNaTGCR0_USE_PLLF, - LNaTGCR0_USE_PLL_MSK); - lynx_28g_lane_rmw(lane, LNaRGCR0, LNaRGCR0_USE_PLLF, - LNaRGCR0_USE_PLL_MSK); + lynx_28g_lane_rmw(lane, LNaTGCR0, + FIELD_PREP(LNaTGCR0_USE_PLL, LNaTGCR0_USE_PLLF), + LNaTGCR0_USE_PLL); + lynx_28g_lane_rmw(lane, LNaRGCR0, + FIELD_PREP(LNaRGCR0_USE_PLL, LNaRGCR0_USE_PLLF), + LNaRGCR0_USE_PLL); } else { - lynx_28g_lane_rmw(lane, LNaTGCR0, LNaTGCR0_USE_PLLS, - LNaTGCR0_USE_PLL_MSK); - lynx_28g_lane_rmw(lane, LNaRGCR0, LNaRGCR0_USE_PLLS, - LNaRGCR0_USE_PLL_MSK); + lynx_28g_lane_rmw(lane, LNaTGCR0, + FIELD_PREP(LNaTGCR0_USE_PLL, LNaTGCR0_USE_PLLS), + LNaTGCR0_USE_PLL); + lynx_28g_lane_rmw(lane, LNaRGCR0, + FIELD_PREP(LNaRGCR0_USE_PLL, LNaRGCR0_USE_PLLS), + LNaRGCR0_USE_PLL); } } =20 @@ -286,8 +291,9 @@ static void lynx_28g_lane_set_sgmii(struct lynx_28g_lan= e *lane) =20 /* Setup the protocol select and SerDes parallel interface width */ lynx_28g_lane_rmw(lane, LNaGCR0, - LNaGCR0_PROTO_SEL_SGMII | LNaGCR0_IF_WIDTH_10_BIT, - LNaGCR0_PROTO_SEL_MSK | LNaGCR0_IF_WIDTH_MSK); + FIELD_PREP(LNaGCR0_PROTO_SEL, LNaGCR0_PROTO_SEL_SGMII) | + FIELD_PREP(LNaGCR0_IF_WIDTH, LNaGCR0_IF_WIDTH_10_BIT), + LNaGCR0_PROTO_SEL | LNaGCR0_IF_WIDTH); =20 /* Find the PLL that works with this interface type */ pll =3D lynx_28g_pll_get(priv, PHY_INTERFACE_MODE_SGMII); @@ -302,7 +308,7 @@ static void lynx_28g_lane_set_sgmii(struct lynx_28g_lan= e *lane) =20 /* Enable the SGMII PCS */ lynx_28g_lane_rmw(lane, SGMIIaCR1, SGMIIaCR1_SGPCS_EN, - SGMIIaCR1_SGPCS_MSK); + SGMIIaCR1_SGPCS_EN); =20 /* Configure the appropriate equalization parameters for the protocol */ iowrite32(0x00808006, priv->base + LNaTECR0(lane->id)); @@ -328,8 +334,9 @@ static void lynx_28g_lane_set_10gbaser(struct lynx_28g_= lane *lane) =20 /* Setup the protocol select and SerDes parallel interface width */ lynx_28g_lane_rmw(lane, LNaGCR0, - LNaGCR0_PROTO_SEL_XFI | LNaGCR0_IF_WIDTH_20_BIT, - LNaGCR0_PROTO_SEL_MSK | LNaGCR0_IF_WIDTH_MSK); + FIELD_PREP(LNaGCR0_PROTO_SEL, LNaGCR0_PROTO_SEL_XFI) | + FIELD_PREP(LNaGCR0_IF_WIDTH, LNaGCR0_IF_WIDTH_20_BIT), + LNaGCR0_PROTO_SEL | LNaGCR0_IF_WIDTH); =20 /* Find the PLL that works with this interface type */ pll =3D lynx_28g_pll_get(priv, PHY_INTERFACE_MODE_10GBASER); @@ -343,7 +350,7 @@ static void lynx_28g_lane_set_10gbaser(struct lynx_28g_= lane *lane) lynx_28g_lane_set_nrate(lane, pll, PHY_INTERFACE_MODE_10GBASER); =20 /* Disable the SGMII PCS */ - lynx_28g_lane_rmw(lane, SGMIIaCR1, 0, SGMIIaCR1_SGPCS_MSK); + lynx_28g_lane_rmw(lane, SGMIIaCR1, 0, SGMIIaCR1_SGPCS_EN); =20 /* Configure the appropriate equalization parameters for the protocol */ iowrite32(0x10808307, priv->base + LNaTECR0(lane->id)); @@ -513,7 +520,7 @@ static void lynx_28g_pll_read_configuration(struct lynx= _28g_priv *priv) if (PLLnRSTCTL_DIS(pll->rstctl)) continue; =20 - switch (PLLnCR1_FRATE_SEL(pll->cr1)) { + switch (FIELD_GET(PLLnCR1_FRATE_SEL, pll->cr1)) { case PLLnCR1_FRATE_5G_10GVCO: case PLLnCR1_FRATE_5G_25GVCO: /* 5GHz clock net */ @@ -570,7 +577,7 @@ static void lynx_28g_lane_read_configuration(struct lyn= x_28g_lane *lane) u32 pss, protocol; =20 pss =3D lynx_28g_lane_read(lane, LNaPSS); - protocol =3D LNaPSS_TYPE(pss); + protocol =3D FIELD_GET(LNaPSS_TYPE, pss); switch (protocol) { case LNaPSS_TYPE_SGMII: lane->interface =3D PHY_INTERFACE_MODE_SGMII; --=20 2.34.1 From nobody Tue Dec 2 00:03:21 2025 Received: from AM0PR83CU005.outbound.protection.outlook.com (mail-westeuropeazon11010040.outbound.protection.outlook.com [52.101.69.40]) (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 7859931A7F9 for ; Tue, 25 Nov 2025 11:49:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.69.40 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764071397; cv=fail; b=b0ez2GYhN5KhkAG1x5SrIlU3gT9kmglIq9nbApoEiHcERqbi8irLH5dZ0p4uaGRAtWJzxX5vx/QW+lHSMKL+uaeUxL2XGdMTcW0jE9b84MjTwFXlW9pHWbYrJ0FA36Sqrk4Ybdk/V61qJODYaFNk0QyZOS3Sps/JO3Ro2RLQSaQ= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764071397; c=relaxed/simple; bh=GejpFV6+J3JMbwArsSHxNLjuoTWYKXovzPsgiqWA5kI=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=Qpks9JzoEpK5PrzE9xGiGC/ypveVRNiFwrhW6F5zRgHw7jvm9l2we4dy5Q9QS59TxJl0po+DSxFYtfZ4AUxUb/7Om6TnoZJeuPicxN40t4gM4ENSap1tr9PuSJ4381x25Z6Zej0rn0QuNtG0nT0PFgfJWpNORRkFwqVQXDR1YH0= 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=VTN89+73; arc=fail smtp.client-ip=52.101.69.40 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="VTN89+73" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=eKNRiocNhDNtQPV1xn/4ZX4oAMNHccftZHaEV5yeBWR0rF4fd56zB5TKYIyFozlNTbSLxm/Yd530tdE5Q9nI+/28sULFUJ3pTWTfXPSLEmkfSpxpwH0Vq6pJSV6bKjNNae8SQhvSneJDb13igaxF0CsD+8ZKVGvV0U/EIYgujzoeEP0hOOGMaEa0rhN0NdAApqBSeaMmj0S9zMDeWCnHaIW/zGv99X0BQR+YssEQi/wZnIDrXkulXXamcVv2jD17NmAm+QsJ/JxPv4+gt4pUo1u3RfLrrM/XxXf7z/Ye0NrkGzpVmz6YBL4cDVfvPeCSy12cemdHs4Pzbfm0rRN6IQ== 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=V1v7Ud7YFNxBWKM6e+A1OwrlJ7YcvyMCM1zUS64CVYU=; b=lT/MXPJJDEJO54FMrn0cGavJy/DdyDMMV2BsVwG2FUcjOu0iN99V/OvbTvwTdEVADuoZReWRQt6Wi4xMwW1rfqmZk82HL4ZJ0LqaRnP99pLIj3i/rIo+TUXvxSWI10aOp/QAxtF5LaycZPHsxjN+bu2/MWGPgkGKFs9j46zzRh1ZfVGpCSqLLM1CFIyJFOukfjp7g2hs8cHNEmAN7x9QAn7fXDzpGroskGyA0viUxKrBfJdwho83Lb2mqfK1VbhPAl/6FACTx1EGzIIoPW8r3S5QSFWBY+yrPXXp4Hco/rmLcUOm1Bha0ahnOAVyKKw9TxMo8yy6hj6Ctz+rjwwM9A== 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=V1v7Ud7YFNxBWKM6e+A1OwrlJ7YcvyMCM1zUS64CVYU=; b=VTN89+733U5UcfEl1vbxerLI1CJmvivbcf1MuvXdVk63UJ6RHVv6N3jXGew0ePcxSN/UHhorNHf0U7qkLKWNP4izXjrKKDrFxUVMqHDR0rbBlr/bM8QANeo5sgr07LRp8hm1RQN8tvdaV4blsuM3D+qvOR4q3WoEQuZx+1wxc5yD+lqK/m1QmizEGW8iXFzZ7G6fOrna6Hu2oF+9sc6q9+PqF0UaL+uWlZFGkumbLSoegdtEtwBG9F5Zn6i0rgjab7rjlhyD7ahRHwPDqwSu5L8labmRRVQMW7VU9jTXV3/jEdVhcYT7Lp1jXQzipQUsxVesd4rYjXLTlxp/JQOwPA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from AM9PR04MB8585.eurprd04.prod.outlook.com (2603:10a6:20b:438::13) by PAXPR04MB8271.eurprd04.prod.outlook.com (2603:10a6:102:1ca::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9366.11; Tue, 25 Nov 2025 11:49:45 +0000 Received: from AM9PR04MB8585.eurprd04.prod.outlook.com ([fe80::8063:666f:9a2e:1dab]) by AM9PR04MB8585.eurprd04.prod.outlook.com ([fe80::8063:666f:9a2e:1dab%5]) with mapi id 15.20.9343.016; Tue, 25 Nov 2025 11:49:45 +0000 From: Vladimir Oltean To: linux-phy@lists.infradead.org Cc: Ioana Ciornei , Vinod Koul , Kishon Vijay Abraham I , Neil Armstrong , Josua Mayer , linux-kernel@vger.kernel.org Subject: [PATCH v5 phy 08/15] phy: lynx-28g: convert iowrite32() calls with magic values to macros Date: Tue, 25 Nov 2025 13:48:40 +0200 Message-Id: <20251125114847.804961-9-vladimir.oltean@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20251125114847.804961-1-vladimir.oltean@nxp.com> References: <20251125114847.804961-1-vladimir.oltean@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AS4P189CA0047.EURP189.PROD.OUTLOOK.COM (2603:10a6:20b:659::19) To AM9PR04MB8585.eurprd04.prod.outlook.com (2603:10a6:20b:438::13) 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: AM9PR04MB8585:EE_|PAXPR04MB8271:EE_ X-MS-Office365-Filtering-Correlation-Id: 56718446-eefe-48d5-8498-08de2c18ba7d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|52116014|376014|19092799006|10070799003|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?w6bQkxnp71PcV/kU2gdi8EwNfJjb1w1REc7WTi4mtO58hQnnTF/UaANFdhoN?= =?us-ascii?Q?wnQDGGrfbR34WPzRfSAstgGYemPw7YbBLwa2QXpUq0OFbvHKB6n2qXa+egy4?= =?us-ascii?Q?9L2TEsyUuIFeI0ztCsZdjkuT9H5teNDgbpiWXZmkM1VDvu58ILi934gVl1gh?= =?us-ascii?Q?ug3e7vPXLX2wUeomV3EmluqzeEWVmbTfUv1atg5wU3KpLNNvH6XMrvpjT3/A?= =?us-ascii?Q?n/TiiHeyCbRi3ljlCAhbDSje39A4scdNIzCqwLWSYpDIqGDI79PnA92J2vJo?= =?us-ascii?Q?nnWWNOHzc65ill5PQaKujq+gzZwoj8ZsEKlp5yYO4T724A/PPh+Sz8byZI4b?= =?us-ascii?Q?IZ1JM2CeealISY/75tPLf4N5iGFFxOeh1RZDve1z1juUqSxaMdjPBEHoDqGC?= =?us-ascii?Q?wQEUMU/2H24McIO1WShXW0RU2S1roFzTiBlND5ZW2ryCegSY/KgPasZZP7Fp?= =?us-ascii?Q?5knfKuTCMeJhwkuz1JN3UzFol1ZP1Ju1lTHhTljVwwDVQLiLVvvNHRm1pBaI?= =?us-ascii?Q?FlO8FKC2VASa/Z9N3UzOzDka0v1V+LnJIcNHYlN9/GRPXekBAwTue5naz+dS?= =?us-ascii?Q?Ir6TYd+E9uA3IrpErCCU4Eoe3zTb42QtlkXdgMyz2OqsQQWN4GPuRB3PGedz?= =?us-ascii?Q?nKYKjh5WTSk7buTgTPfFspd2/jBWcfy+tx+WWCIqUUfxr/cL7VxA6GG66gXN?= =?us-ascii?Q?oqSFlLHEYhHpTFVQXE38iRfs6QLT2N/oHzqDhklZqfAtAoZz6JOiFJekND7n?= =?us-ascii?Q?8LLSDIfePrgiCEat0DgbSCiYEt0+SJUbK6bV2ulUJuJJ4Cgel1DqaCxzCerg?= =?us-ascii?Q?0tXYRKbQZKeDtPlSHIjOPcFGz3nxgtOpRnZENq0r5JWcBXo3MlOCxFikm7ru?= =?us-ascii?Q?gHA7YcidA8j9umlZ60f8vvUGmrIu2wZZh4HA/ih5c9svCh1K9GUFsiDzJ8+s?= =?us-ascii?Q?cyhyAAwXsxCb3mAMGHZ47AXLmHcmkSYWpfPjIAzIB90NwdZRtWxe+CSmNilE?= =?us-ascii?Q?ggZ5QiGz5Ad5z2zU5CbT5WdxS46Ddtmm4mzcMW/Kxd+gmAaIPZ4KmyRgTGde?= =?us-ascii?Q?pnuipuuwZb8d9d7TQWIZRCD3L+REoT+Om0Cg+jXFp7FtmAJl41R/Eb6BAVgS?= =?us-ascii?Q?kmw0d/rDQKYTlzWC72jadXJyXPEqQrDw9+ziYSKnMiiF8OkC4dDemZOCXRUW?= =?us-ascii?Q?Stb2XOHMjX+c6OszvrMBWUauBlboBm4KSYNpqQpbY/er+IBPhlM7DLxmisxN?= =?us-ascii?Q?HX8zGVMA2QFcDUJ1g1sZrjYehEDufUKaDZjJEDEBml9wgKspG2VmPw3Q1t7A?= =?us-ascii?Q?Xv3XMQTLa+Mrwm1gZyi2I08OaH5gy1ir1SJwRei4BA/5pKERjKFiMSdf5Lqe?= =?us-ascii?Q?Xt2lM0qGzAPPrWt9b6sQZm0ZyBq+0LbIVDwzb6UEG2sbZsek6umPLmh4ve98?= =?us-ascii?Q?2REHoAI3ryL0+5rN1vXgn6gzXCSDdGJX?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM9PR04MB8585.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(52116014)(376014)(19092799006)(10070799003)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?Wue4kgm35Ci63hVtTPd+wEoNULzSNesm9p+ZJQ9XBi8DVcKJ5fERmS7fW/YA?= =?us-ascii?Q?VMWv3S/Uk9s40POaQB73fR53cDDoge9LV+Klq7lEqDfa+67jwiqhQg8E7lXi?= =?us-ascii?Q?eILpWiCO5BXH+1XE3LMiNr8wsjjNJJzr8bET8uycFmYTYciJqHumYdMWoEXf?= =?us-ascii?Q?MrMbB7hkj4BVJL0i3FaKWhydNmDoJyxdToqFTewqTKGS0PEB9mSpaodtaD/a?= =?us-ascii?Q?+F7uAWtpNxukaxhWSMbCB19FNDUBzff23cxAxT23EtqueiLI3dgFsXc5+u/3?= =?us-ascii?Q?t+n7zYXMfL7pbDLlsCKsXjdrBUaAmHRTeA+DdiXLKhqFBvU9qPaeuh+uAbhN?= =?us-ascii?Q?MzkRaPuo6hKFAjzvLm6D6P0ahu7gKrJIshp0qSVq1fLhzXxwcFbHFY6hOABi?= =?us-ascii?Q?+mKvqLe4zRLwZIo3yNqUnoTE3wt/o7MUb4Xxm3hlO1NbQcyDTy37TkPMhZef?= =?us-ascii?Q?DSJTz90Xirz5Wzf1xP7TtOcrmQsez92OBOjwQdiJVAEkd7twFzkPEUHuI9Ku?= =?us-ascii?Q?NoMQ6ZwWEoNkSrzTOwwNt/jHZ8AT9J3A+U2VMXq/+3KT8BaaV+tZbMRKyZvX?= =?us-ascii?Q?YAW9FB6udLJafQ2B/X1VYBtyIIGWN2qWyM6TNtVUQhN11bKCXVcFoHbpcbKf?= =?us-ascii?Q?XkU7b2eh5aBqiKcSJuR6qpHRKZzopBCnQ4YmHUdx7qhGIQrTkEWbeLTOLN63?= =?us-ascii?Q?5DQ7LFTXje2WsXxbhqqxkxaXCSazQYQ7LzHgKXe2I3nbI6ty7Ry6Dr+sQJvL?= =?us-ascii?Q?42FQfoV/GP1AT/pDeBt+xGGHPk/r3NB7apN1O1zZzN54zbb138S/yXVcVE61?= =?us-ascii?Q?2u4umEDd3JUzAgbH+PZfhddWOzrTb9Cw+/GUo+fWnMwcgq/FEs7UVdP7A1wn?= =?us-ascii?Q?IU+Uu54X9EWdsdPhvdFNVSgD4ED1zI/svRy8ZXZ3jcxgoK8aDVRyUN+ryRiu?= =?us-ascii?Q?yJqX57dTfI+NkPJIIp6v8LNkdhDiDdenoRSaJITg8QePUmOnGQN97DgYlabv?= =?us-ascii?Q?pCveYX4zLN6mgAlz/Kzc5H1vMYQ1tdVrHiO3rUh0PBLP6YfjuVN6f8ppQ8x5?= =?us-ascii?Q?oOr4agnSeqyorwf/1F5qupzq0v1kC+b7YVbXImT+u/M8KXjC/dN+00ZsGNJj?= =?us-ascii?Q?ivgobW4Uf9al2Hv1Fi286WECmbdSmedix49XWEQpZ7S/aj3v2Wro5h68Qh37?= =?us-ascii?Q?iNIY6tIUDNUZqtfIQi90MZU/Kc6SO2+ADJIxFf1If02aNBWUUg2s9wbj9FT2?= =?us-ascii?Q?go+/1bxP6x7nAQukm6F+8UzfQ5gsu1SkP5rIZ/UgUnG3exKByyeFmRj1lFPv?= =?us-ascii?Q?KmohObK8KOA83tQLryOeQWE7yUgiVAA14Ub1XiHxryIIfKyBv4k4q5DNVnXM?= =?us-ascii?Q?UbnICeDsOO4KSDiIalSXcMzx+Os70ZH9l0dYzWypjtyChirPy/j7341jMpgM?= =?us-ascii?Q?gLY9b1fPAox3pHBHKcXvAzpk/iyDL9zmVwg70PY9TNkwP2ZDl2RnKgAfcdYA?= =?us-ascii?Q?yCuiFJi9hAJ6FSwZ9y6+MzOJuBIh9geWK85Esu0U6TbMw37ZxWz0J6avcpvw?= =?us-ascii?Q?xMCPVc9qNij5+SfF8dQevK0oBmmCalT9evfLieQl5vLvOGBjsDp1ypaGiG11?= =?us-ascii?Q?JHw9gImxhg9tfqNF9BqJNoM=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 56718446-eefe-48d5-8498-08de2c18ba7d X-MS-Exchange-CrossTenant-AuthSource: AM9PR04MB8585.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Nov 2025 11:49:45.5051 (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: YVId+425FJWsuLXCIorTm/lxo4K4s5d5KniN2b4bczGhir2HckIxFRt3Tqorw6JKVXhX29cWRS3+x+BzRR1i0Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAXPR04MB8271 Content-Type: text/plain; charset="utf-8" The driver will need to become more careful with the values it writes to the TX and RX equalization registers. As a preliminary step, convert the magic numbers to macros defining the register field meanings. Signed-off-by: Vladimir Oltean --- v2->v5: none v1->v2: remove duplicate LNaRSCCR0_SMP_AUTOZ_D1F definition drivers/phy/freescale/phy-fsl-lynx-28g.c | 102 ++++++++++++++++++++--- 1 file changed, 90 insertions(+), 12 deletions(-) diff --git a/drivers/phy/freescale/phy-fsl-lynx-28g.c b/drivers/phy/freesca= le/phy-fsl-lynx-28g.c index 439fcd6bdc1c..def91c64a6ac 100644 --- a/drivers/phy/freescale/phy-fsl-lynx-28g.c +++ b/drivers/phy/freescale/phy-fsl-lynx-28g.c @@ -70,6 +70,12 @@ #define LNaTGCR0_N_RATE_QUARTER 0x2 =20 #define LNaTECR0(lane) (0x800 + (lane) * 0x100 + 0x30) +#define LNaTECR0_EQ_TYPE GENMASK(30, 28) +#define LNaTECR0_EQ_SGN_PREQ BIT(23) +#define LNaTECR0_EQ_PREQ GENMASK(19, 16) +#define LNaTECR0_EQ_SGN_POST1Q BIT(15) +#define LNaTECR0_EQ_POST1Q GENMASK(12, 8) +#define LNaTECR0_EQ_AMP_RED GENMASK(5, 0) =20 /* Lane a Rx Reset Control Register */ #define LNaRRSTCTL(lane) (0x800 + (lane) * 0x100 + 0x40) @@ -89,12 +95,56 @@ #define LNaRGCR0_N_RATE_QUARTER 0x2 =20 #define LNaRGCR1(lane) (0x800 + (lane) * 0x100 + 0x48) +#define LNaRGCR1_RX_ORD_ELECIDLE BIT(31) +#define LNaRGCR1_DATA_LOST_FLT BIT(30) +#define LNaRGCR1_DATA_LOST BIT(29) +#define LNaRGCR1_IDLE_CONFIG BIT(28) +#define LNaRGCR1_ENTER_IDLE_FLT_SEL GENMASK(26, 24) +#define LNaRGCR1_EXIT_IDLE_FLT_SEL GENMASK(22, 20) +#define LNaRGCR1_DATA_LOST_TH_SEL GENMASK(18, 16) +#define LNaRGCR1_EXT_REC_CLK_SEL GENMASK(10, 8) +#define LNaRGCR1_WAKE_TX_DIS BIT(5) +#define LNaRGCR1_PHY_RDY BIT(4) +#define LNaRGCR1_CHANGE_RX_CLK BIT(3) +#define LNaRGCR1_PWR_MGT GENMASK(2, 0) =20 #define LNaRECR0(lane) (0x800 + (lane) * 0x100 + 0x50) +#define LNaRECR0_EQ_GAINK2_HF_OV_EN BIT(31) +#define LNaRECR0_EQ_GAINK2_HF_OV GENMASK(28, 24) +#define LNaRECR0_EQ_GAINK3_MF_OV_EN BIT(23) +#define LNaRECR0_EQ_GAINK3_MF_OV GENMASK(20, 16) +#define LNaRECR0_EQ_GAINK4_LF_OV_EN BIT(7) +#define LNaRECR0_EQ_GAINK4_LF_DIS BIT(6) +#define LNaRECR0_EQ_GAINK4_LF_OV GENMASK(4, 0) + #define LNaRECR1(lane) (0x800 + (lane) * 0x100 + 0x54) +#define LNaRECR1_EQ_BLW_OV_EN BIT(31) +#define LNaRECR1_EQ_BLW_OV GENMASK(28, 24) +#define LNaRECR1_EQ_OFFSET_OV_EN BIT(23) +#define LNaRECR1_EQ_OFFSET_OV GENMASK(21, 16) + #define LNaRECR2(lane) (0x800 + (lane) * 0x100 + 0x58) +#define LNaRECR2_EQ_OFFSET_RNG_DBL BIT(31) +#define LNaRECR2_EQ_BOOST GENMASK(29, 28) +#define LNaRECR2_EQ_BLW_SEL GENMASK(25, 24) +#define LNaRECR2_EQ_ZERO GENMASK(17, 16) +#define LNaRECR2_EQ_IND GENMASK(13, 12) +#define LNaRECR2_EQ_BIN_DATA_AVG_TC GENMASK(5, 4) +#define LNaRECR2_SPARE_IN GENMASK(1, 0) =20 #define LNaRSCCR0(lane) (0x800 + (lane) * 0x100 + 0x74) +#define LNaRSCCR0_SMP_OFF_EN BIT(31) +#define LNaRSCCR0_SMP_OFF_OV_EN BIT(30) +#define LNaRSCCR0_SMP_MAN_OFF_EN BIT(29) +#define LNaRSCCR0_SMP_OFF_RNG_OV_EN BIT(27) +#define LNaRSCCR0_SMP_OFF_RNG_4X_OV BIT(25) +#define LNaRSCCR0_SMP_OFF_RNG_2X_OV BIT(24) +#define LNaRSCCR0_SMP_AUTOZ_PD BIT(23) +#define LNaRSCCR0_SMP_AUTOZ_CTRL GENMASK(19, 16) +#define LNaRSCCR0_SMP_AUTOZ_D1R GENMASK(13, 12) +#define LNaRSCCR0_SMP_AUTOZ_D1F GENMASK(9, 8) +#define LNaRSCCR0_SMP_AUTOZ_EG1R GENMASK(5, 4) +#define LNaRSCCR0_SMP_AUTOZ_EG1F GENMASK(1, 0) =20 #define LNaPSS(lane) (0x1000 + (lane) * 0x4) #define LNaPSS_TYPE GENMASK(30, 24) @@ -104,6 +154,12 @@ #define SGMIIaCR1(lane) (0x1804 + (lane) * 0x10) #define SGMIIaCR1_SGPCS_EN BIT(11) =20 +enum lynx_28g_eq_type { + EQ_TYPE_NO_EQ =3D 0, + EQ_TYPE_2TAP =3D 1, + EQ_TYPE_3TAP =3D 2, +}; + struct lynx_28g_priv; =20 struct lynx_28g_pll { @@ -151,6 +207,8 @@ static void lynx_28g_rmw(struct lynx_28g_priv *priv, un= signed long off, lynx_28g_rmw((lane)->priv, reg(lane->id), val, mask) #define lynx_28g_lane_read(lane, reg) \ ioread32((lane)->priv->base + reg((lane)->id)) +#define lynx_28g_lane_write(lane, reg, val) \ + iowrite32(val, (lane)->priv->base + reg((lane)->id)) #define lynx_28g_pll_read(pll, reg) \ ioread32((pll)->priv->base + reg((pll)->id)) =20 @@ -311,12 +369,22 @@ static void lynx_28g_lane_set_sgmii(struct lynx_28g_l= ane *lane) SGMIIaCR1_SGPCS_EN); =20 /* Configure the appropriate equalization parameters for the protocol */ - iowrite32(0x00808006, priv->base + LNaTECR0(lane->id)); - iowrite32(0x04310000, priv->base + LNaRGCR1(lane->id)); - iowrite32(0x9f800000, priv->base + LNaRECR0(lane->id)); - iowrite32(0x001f0000, priv->base + LNaRECR1(lane->id)); - iowrite32(0x00000000, priv->base + LNaRECR2(lane->id)); - iowrite32(0x00000000, priv->base + LNaRSCCR0(lane->id)); + lynx_28g_lane_write(lane, LNaTECR0, + LNaTECR0_EQ_SGN_PREQ | LNaTECR0_EQ_SGN_POST1Q | + FIELD_PREP(LNaTECR0_EQ_AMP_RED, 6)); + lynx_28g_lane_write(lane, LNaRGCR1, + FIELD_PREP(LNaRGCR1_ENTER_IDLE_FLT_SEL, 4) | + FIELD_PREP(LNaRGCR1_EXIT_IDLE_FLT_SEL, 3) | + LNaRGCR1_DATA_LOST_FLT); + lynx_28g_lane_write(lane, LNaRECR0, + LNaRECR0_EQ_GAINK2_HF_OV_EN | + FIELD_PREP(LNaRECR0_EQ_GAINK2_HF_OV, 31) | + LNaRECR0_EQ_GAINK3_MF_OV_EN | + FIELD_PREP(LNaRECR0_EQ_GAINK3_MF_OV, 0)); + lynx_28g_lane_write(lane, LNaRECR1, + FIELD_PREP(LNaRECR1_EQ_OFFSET_OV, 31)); + lynx_28g_lane_write(lane, LNaRECR2, 0); + lynx_28g_lane_write(lane, LNaRSCCR0, 0); } =20 static void lynx_28g_lane_set_10gbaser(struct lynx_28g_lane *lane) @@ -353,12 +421,22 @@ static void lynx_28g_lane_set_10gbaser(struct lynx_28= g_lane *lane) lynx_28g_lane_rmw(lane, SGMIIaCR1, 0, SGMIIaCR1_SGPCS_EN); =20 /* Configure the appropriate equalization parameters for the protocol */ - iowrite32(0x10808307, priv->base + LNaTECR0(lane->id)); - iowrite32(0x10000000, priv->base + LNaRGCR1(lane->id)); - iowrite32(0x00000000, priv->base + LNaRECR0(lane->id)); - iowrite32(0x001f0000, priv->base + LNaRECR1(lane->id)); - iowrite32(0x81000020, priv->base + LNaRECR2(lane->id)); - iowrite32(0x00002000, priv->base + LNaRSCCR0(lane->id)); + lynx_28g_lane_write(lane, LNaTECR0, + FIELD_PREP(LNaTECR0_EQ_TYPE, EQ_TYPE_2TAP) | + LNaTECR0_EQ_SGN_PREQ | + FIELD_PREP(LNaTECR0_EQ_PREQ, 0) | + LNaTECR0_EQ_SGN_POST1Q | + FIELD_PREP(LNaTECR0_EQ_POST1Q, 3) | + FIELD_PREP(LNaTECR0_EQ_AMP_RED, 7)); + lynx_28g_lane_write(lane, LNaRGCR1, LNaRGCR1_IDLE_CONFIG); + lynx_28g_lane_write(lane, LNaRECR0, 0); + lynx_28g_lane_write(lane, LNaRECR1, FIELD_PREP(LNaRECR1_EQ_OFFSET_OV, 31)= ); + lynx_28g_lane_write(lane, LNaRECR2, + LNaRECR2_EQ_OFFSET_RNG_DBL | + FIELD_PREP(LNaRECR2_EQ_BLW_SEL, 1) | + FIELD_PREP(LNaRECR2_EQ_BIN_DATA_AVG_TC, 2)); + lynx_28g_lane_write(lane, LNaRSCCR0, + FIELD_PREP(LNaRSCCR0_SMP_AUTOZ_D1R, 2)); } =20 static int lynx_28g_power_off(struct phy *phy) --=20 2.34.1 From nobody Tue Dec 2 00:03:21 2025 Received: from PA4PR04CU001.outbound.protection.outlook.com (mail-francecentralazon11013011.outbound.protection.outlook.com [40.107.162.11]) (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 90AD331A04E for ; Tue, 25 Nov 2025 11:49:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.162.11 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764071393; cv=fail; b=o1FoND5Z53AswB4UleMHFZ040jz2ygCWuScFNTBg3SRGXNNWI9dHFf3XtxwaUh6UZFVTfL1khbfu+YNDCu2jXx0/NFEZJwb1Zx4JjcqxuyDkLLXkac7U/euiicdFEiQ08N5I+fEpqpsKQ2FA5NpdAWP+BGrCEhgq+COAogmoQuk= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764071393; c=relaxed/simple; bh=S6M/WxBILYTdoxFhVHN7ONtBSwN0TzUcc6LDzmpK+7Y=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=ch/tNltYg7ntMEMoisPbnSbcC9a7zgytXUJXtrvTbqNidGHyWXbAfpfo+AzXYpaMngINQmdTnnxay8EeWkfOheoePg7B+Oem6Hjwf4un1aDm9bnH4+fk8SpwL3pcGUaga6JAeKn4WkbuB879EWsu2PxPTY2GcGjwuTcySy2oJjU= 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=nfUgUdjm; arc=fail smtp.client-ip=40.107.162.11 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="nfUgUdjm" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=KlKoiuiOMyNBvIsrDpdfIm8fHSz8R1e9b9qgITluhiTq+MIxC5l9pDX8fguZRUSaTsOAKsLPaomh3U7WF+AKcwv3fpKtX804LOHJNq1buWoXnYCplVZIrPWa03fii5JX8aoqPh9cisLAf9bybSSi4rf1Avn44TADQxckNSXGuwu/Tl9cAZfGbN/O2YdqHcWA00k/WZh6X7LdyJ3K27XD90pCMR/N8lMiVGQ0aFhJUM/qPJ0TtV3zJ2vMxFiLS3M4pJGurKig775hpyRItS8icAFRX+3mtzvewhCYeoDpCqmwGbbokYLJmWFy0/sff572h1xReq4Iq5MLGGnO5a2lBw== 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=GqVBI+KgTO3Sv2mdJA/2h8HM2jTHoNLiW5vIvg0RoWA=; b=UWoJ2C83KBkZVbzgcOI/0916fDt6OvIC6wBBGqbXEqIyWZoICC0DIgitaXHeVhXrfpmTRMHgoJy6cyjlP7b9Oip1uB+8ikNCreb+7TUIcNQbE6jfjZFyUIQuc+nlCgyEhQrKn4wP/M3VX/nzRenyUQOt2mWMbJ9jGK4rLqqXqrJZBoReuz/ISiRx3DAMQO7BTV5k+nG4wi5umw2LPXB0wW2g/RsG69qosl8jd/hG/L28rQjFSBux8tdc2u6rKCVOCVuoGg4bIOCfKBLQrUK2qUyeCA2O+R5cRIcwx3tZqyONtX8qeGdJh6uQFE3cpy21tsKzBAk2f7JeIhSUtpi7kg== 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=GqVBI+KgTO3Sv2mdJA/2h8HM2jTHoNLiW5vIvg0RoWA=; b=nfUgUdjm8gvgEktu/w9djYFlfvCI7fRYPeXP6Rv6JwYJnX1htbvFshka/EsjOPc7kxdJJMs87GXaUKQaX2JeWiQCsVv4ds5SS/lb6AuwI6ZaWRM84aa8NRsh3h3plflYfKzlmGsFhekaEdP9TkstCRMw8xydQ7NOaIpwyPHjreZxS7SXEU4HlYERde89SMu5qsYT67yiSXo7b4rGrp/AUk7TL3l2d6tsEVZBQ+KmSCSflDdJS057i8gw/ZLJ75F7ufv/XZ5ybn6cCZdW6SvlXASXToyiT4qTS/HNp/Jddtf3DqwaeUp8TU7q6WMqIB2XOUUW/n6zDNILOqMwEfkWcQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from AM9PR04MB8585.eurprd04.prod.outlook.com (2603:10a6:20b:438::13) by PAXPR04MB9201.eurprd04.prod.outlook.com (2603:10a6:102:232::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9366.11; Tue, 25 Nov 2025 11:49:46 +0000 Received: from AM9PR04MB8585.eurprd04.prod.outlook.com ([fe80::8063:666f:9a2e:1dab]) by AM9PR04MB8585.eurprd04.prod.outlook.com ([fe80::8063:666f:9a2e:1dab%5]) with mapi id 15.20.9343.016; Tue, 25 Nov 2025 11:49:46 +0000 From: Vladimir Oltean To: linux-phy@lists.infradead.org Cc: Ioana Ciornei , Vinod Koul , Kishon Vijay Abraham I , Neil Armstrong , Josua Mayer , linux-kernel@vger.kernel.org Subject: [PATCH v5 phy 09/15] phy: lynx-28g: restructure protocol configuration register accesses Date: Tue, 25 Nov 2025 13:48:41 +0200 Message-Id: <20251125114847.804961-10-vladimir.oltean@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20251125114847.804961-1-vladimir.oltean@nxp.com> References: <20251125114847.804961-1-vladimir.oltean@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AS4P189CA0047.EURP189.PROD.OUTLOOK.COM (2603:10a6:20b:659::19) To AM9PR04MB8585.eurprd04.prod.outlook.com (2603:10a6:20b:438::13) 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: AM9PR04MB8585:EE_|PAXPR04MB9201:EE_ X-MS-Office365-Filtering-Correlation-Id: 442edc0b-f228-45a3-733a-08de2c18bb06 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|10070799003|376014|52116014|366016|19092799006; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?s12ZTefUVmFx/y6IiiCPtUnLEqLgSHWN+9bT0xX6ZyUjBAiroXNrXNtACm+S?= =?us-ascii?Q?rSSr4U9H6vcRpFbbRwngKV/Mgn2twmsiDwhb4uQVwFHGsI8KpJoyy2o1t0Fh?= =?us-ascii?Q?FavH+a/5TkwawBb8i+AqxLGVXZ11OKe5475TkHByCZ/3kb/DOVqnaoFoo+F9?= =?us-ascii?Q?UEgiAN3d6Di2SPJE+Vbbk+Z1kpuDJA/5sNIeoGsnMquFp9WKyx5NDXV8F0fq?= =?us-ascii?Q?jOgMJFTmApq9YFdUyEdodk3ypzeEOh+X1/K+LzfkMI+s6z8bcHdEQs84SC9u?= =?us-ascii?Q?AWi10BkogwPt8GQ7pkWubc4dEttFB435ropMHhmIiQlMLjqD/7qNQVhuXxGK?= =?us-ascii?Q?lMtstknBPjqz80KJ8un3amibOwUZ1RFWKfAPxV3xZumEqFiqSRYXUKe2kLl9?= =?us-ascii?Q?V/ZLQUoaiz6bA4PQ1KQL0iqVCIlmbskx/vDj0+jYpE/wSiNCbskePy8UcFK2?= =?us-ascii?Q?PJgAKSVYlkxZN0V5Hyz3FdHQ5XELBayBzR+/I/i0b7yO0ZsDuJy02JrU6oVx?= =?us-ascii?Q?NCZhfnbTXbB0MDdbvBd4QjPptulaFLpNlrrGfJ1cmcC5ROl4WGMoL0LcT6qn?= =?us-ascii?Q?LiXmDum5QAD07aR2dRAiIs1IdyDHLtCu+SRYKbKWQUXFQK3rKBOC/xJ40Qbn?= =?us-ascii?Q?ZkRixx/Y8EDD9i5ZeAvJdvLr6K1qEmX9wF9PM8kV2w2ZVMD8RBfMHnZ2NljI?= =?us-ascii?Q?7SF0sunVXadrBW7KONriEpwShr2IFV98V9El3cni45p7tUOGvBNcOyCSjMo0?= =?us-ascii?Q?yvwMQJhkMe5N7nCR6hYrHDz3pNKLXg2CPVKrOW4oY1Py1mY6XtTEVOnhoeFw?= =?us-ascii?Q?k3qcYUwg7kBsuvlFbuD1w04WqjWA9xqqETkorPcdPq8T4NrmwrjQi3x5VGgf?= =?us-ascii?Q?qrWEfkg0BwTmNhfi4dTYXdnQgposCM3yXgkmufm8GU4EFQ8utyviNoOntV7n?= =?us-ascii?Q?XoPiEq4BC4JJf6Mf0XChdAwkgnGC+0rSFdndUuRdOpgoN+t3SwuD8fQoIiAh?= =?us-ascii?Q?ES6isnWi3tm2dSro30HcojIJm4Uk9Hjf+YHkesWwt1NGu9YDzlv3rxHPhYDm?= =?us-ascii?Q?FKavpOXmg8V3YhtMgDZaryKT2g6r0ZSGQLsoLw6Efb+J7Dmti6or1+8oaTtV?= =?us-ascii?Q?E4b4sdZS0yvs1ITgpG9aL4sZ4PLchc+wCh4uMfc7fGwgjX5tiBV8R46CAsgY?= =?us-ascii?Q?ORsfWz4BrH7zLZDL8f1c+BNJFVCSKU3lqwMCpXE5ukwuirUiSqP8rOpwZabi?= =?us-ascii?Q?MZarHevoFIqj9m4lFL4Ici464YrEmZKWsx4/DXwlfN1ke/Ath8+GrFZ+mz+0?= =?us-ascii?Q?UwlIev8MrTYrQ4njXHGMMHlPu443bf8A4/aTFHGxfAI5t7HBoNzLkWrYnVaI?= =?us-ascii?Q?tssw6J2rlqbPIa4IlrU7YTHM+yC6YGjgooDWoDmgMthOizYH8FffVK1DSv41?= =?us-ascii?Q?j4S7HX2eTmGiKeS+1Vtd/GB2alAS/Ofn?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM9PR04MB8585.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(10070799003)(376014)(52116014)(366016)(19092799006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?9a6U5QXED8RlyFWUuK3bi5NDqQLPd5GJjX/U+oBED5sGAbb9x4VPQCndkxPL?= =?us-ascii?Q?8PSuZUFGyeA0gwBK0/onuPAh4pMWmvB90OfR6On7pskdfWDolgC86wLnE4wN?= =?us-ascii?Q?+tyUX1XSXUK53UbojJnTS/R2yZK9DUx0lt5p1KvVz9K3Qr5tKCt+ofd6uqhl?= =?us-ascii?Q?uPgDVTQyfgkmyye97yHusBJiOeaeySqUPj7O4Ateq45rojmV9Ibsak/O6Ksc?= =?us-ascii?Q?Msmm/0f6LC3vhrweSPSQJh5ns5EqYb208t469eFWfHlIkiCA+InjokzdxaZX?= =?us-ascii?Q?GkHKpQ4jG0Wn6RnJmcYE9pC0iG+bzHkgfPG+muatYPgB8bKiJ1rZVHt9yla0?= =?us-ascii?Q?+pgTZPJHfIpuRcwIs0roGYfZ+FFJCED2FWO11km3sNs1ozELZnr+n17+WUxk?= =?us-ascii?Q?1pbEQiGEd5wCfi81HqwPhA7qXc6ME3OeMqhcXpaKcNPvmmH8jrIu6A4cQdEj?= =?us-ascii?Q?WSZJjg8dIdgQiTokbK2vQ7MP1c2B57fE4XbQCo7hFylIP9o+comn1Gu9lXw5?= =?us-ascii?Q?0e30/dJbLhRonvw2d6/CeJCtidxDNvtPALBqBdvRZrUYcJr+FE89/3LnvIoB?= =?us-ascii?Q?GsywUMFS74vFFG9Der3B9LYALBOEww+US27CrvfjQWeHFwOv9Q+MIqbBm/eM?= =?us-ascii?Q?jCI8jQtEhqbgaR/5zbLBth8PapyGJCxjoQP1GF3iKzbl7JVIdq4vAPkhTdP3?= =?us-ascii?Q?0SKxVmJi6C+VS9D8Syj0ZuswHjfUUXl30S9CdXJGVHW2YpdBQ1lXDKgF/uP2?= =?us-ascii?Q?XVQoNCX/0itvd3PjrzY3IKppWA4VA8Utm2vwDjkvZVr12MvMfEcz86vj+GsX?= =?us-ascii?Q?2MzL3S82ne+Ay+SZQwsla43qBaa2CNMVKr6nC/J0N1Or54yLZTRAVw7zR7JF?= =?us-ascii?Q?i1olZzh6pxA7QGtUUktTE2vAJ1RBqQb/PJTB9ZxARQvGU6KKByaJIOA+s6oD?= =?us-ascii?Q?8S4mzl4YXkVYZSuxtp1/bBRsM4vi4exMkYlneSj6vZnGzrEuTcqR7eafiBJK?= =?us-ascii?Q?JlsD0D/hY+IimSYJ8+NASZDz0fSA1EytJpqqMXE4NKytnivNw4CpJXQ9ARqj?= =?us-ascii?Q?hvi7zp7gJGK/9VZhBD7U1/izL3P7BGVc5P/sZUvC9Ob7/X3FOovngjkgK7FF?= =?us-ascii?Q?TabapHbm67Xa1zQBSQzMOUE1ATPg7zs74RHseaOKQM9O1dgQKfoRT6A5eyAu?= =?us-ascii?Q?PsiQFdPc3dEUCgSnmV7bUUyh4pZKz71GofXmMuoXQGghQdmR6kYhb1r/Lbjv?= =?us-ascii?Q?lIapPwMeN2C2+klGhbeJ2ATjKxXSmM8/o9tTWH1mVG72vFjm0PP1jSoyDKTE?= =?us-ascii?Q?k4PhB+TD+RgAj84tYRW8YqrsY5aokOU8X4wkp2vSanYOB6+dKPQR9+Ddl62g?= =?us-ascii?Q?ISyOF3KRZwmjqR/h6qGdxVqPz1KN5hT1QnqP7PYu00fmVc45jZpCyo/YjFqn?= =?us-ascii?Q?RoPmc446T9USYSdn0N5QSXW4pfy75zhz1kFrjDdiifvAfajsfpuiLQRp0G82?= =?us-ascii?Q?v2N9yY6wGjlTL3BSi7Pkb2tDcggtdGV1qgr25GZ9D5DMy+tzGlcmWo9UPeFx?= =?us-ascii?Q?izraDAOr5AKNGafMFeFg908tr/P6HmvmcaTGWhEs4OySWs1fLyf+/wGz7J4H?= =?us-ascii?Q?2mEPaR92jQJ65N3ygCXlcj8=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 442edc0b-f228-45a3-733a-08de2c18bb06 X-MS-Exchange-CrossTenant-AuthSource: AM9PR04MB8585.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Nov 2025 11:49:46.3816 (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: No5DFA7VXRbmTeKFTEPAXR0IXvDwsRPfQV6pAHkWm0NQt1YZpcN7jkVfoLC03ttqOFD5lQuQGNpSvC3e8pd8jQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAXPR04MB9201 Content-Type: text/plain; charset="utf-8" Eliminate the need to calculate a lane_offset manually, and generate some macros which access the protocol converter corresponding to the correct lane in the PCC* registers. Signed-off-by: Vladimir Oltean --- v1->v5: none drivers/phy/freescale/phy-fsl-lynx-28g.c | 55 ++++++++++++++---------- 1 file changed, 33 insertions(+), 22 deletions(-) diff --git a/drivers/phy/freescale/phy-fsl-lynx-28g.c b/drivers/phy/freesca= le/phy-fsl-lynx-28g.c index def91c64a6ac..5692ed8fc65f 100644 --- a/drivers/phy/freescale/phy-fsl-lynx-28g.c +++ b/drivers/phy/freescale/phy-fsl-lynx-28g.c @@ -12,17 +12,32 @@ #define LYNX_28G_NUM_LANE 8 #define LYNX_28G_NUM_PLL 2 =20 +#define LNa_PCC_OFFSET(lane) (4 * (LYNX_28G_NUM_LANE - (lane->id) - 1)) + /* General registers per SerDes block */ #define PCC8 0x10a0 -#define PCC8_SGMII 0x1 -#define PCC8_SGMII_DIS 0x0 +#define PCC8_SGMIInCFG(lane, x) (((x) & GENMASK(2, 0)) << LNa_PCC_OFFSET= (lane)) +#define PCC8_SGMIInCFG_EN(lane) PCC8_SGMIInCFG(lane, 1) +#define PCC8_SGMIInCFG_MSK(lane) PCC8_SGMIInCFG(lane, GENMASK(2, 0)) +#define PCC8_SGMIIn_KX(lane, x) ((((x) << 3) & BIT(3)) << LNa_PCC_OFFSET= (lane)) +#define PCC8_SGMIIn_KX_MSK(lane) PCC8_SGMIIn_KX(lane, 1) +#define PCC8_MSK(lane) PCC8_SGMIInCFG_MSK(lane) | \ + PCC8_SGMIIn_KX_MSK(lane) =20 #define PCCC 0x10b0 -#define PCCC_10GBASER 0x9 -#define PCCC_USXGMII 0x1 -#define PCCC_SXGMII_DIS 0x0 - -#define LNa_PCC_OFFSET(lane) (4 * (LYNX_28G_NUM_LANE - (lane->id) - 1)) +#define PCCC_SXGMIInCFG(lane, x) (((x) & GENMASK(2, 0)) << LNa_PCC_OFFSET= (lane)) +#define PCCC_SXGMIInCFG_EN(lane) PCCC_SXGMIInCFG(lane, 1) +#define PCCC_SXGMIInCFG_MSK(lane) PCCC_SXGMIInCFG(lane, GENMASK(2, 0)) +#define PCCC_SXGMIInCFG_XFI(lane, x) ((((x) << 3) & BIT(3)) << LNa_PCC_OF= FSET(lane)) +#define PCCC_SXGMIInCFG_XFI_MSK(lane) PCCC_SXGMIInCFG_XFI(lane, 1) +#define PCCC_MSK(lane) PCCC_SXGMIInCFG_MSK(lane) | \ + PCCC_SXGMIInCFG_XFI_MSK(lane) + +#define PCCD 0x10b4 +#define PCCD_E25GnCFG(lane, x) (((x) & GENMASK(2, 0)) << LNa_PCCD_OFFSET= (lane)) +#define PCCD_E25GnCFG_EN(lane) PCCD_E25GnCFG(lane, 1) +#define PCCD_E25GnCFG_MSK(lane) PCCD_E25GnCFG(lane, GENMASK(2, 0)) +#define PCCD_MSK(lane) PCCD_E25GnCFG_MSK(lane) =20 /* Per PLL registers */ #define PLLnRSTCTL(pll) (0x400 + (pll) * 0x100 + 0x0) @@ -314,20 +329,21 @@ static void lynx_28g_lane_set_pll(struct lynx_28g_lan= e *lane, static void lynx_28g_cleanup_lane(struct lynx_28g_lane *lane) { struct lynx_28g_priv *priv =3D lane->priv; - u32 lane_offset =3D LNa_PCC_OFFSET(lane); =20 /* Cleanup the protocol configuration registers of the current protocol */ switch (lane->interface) { case PHY_INTERFACE_MODE_10GBASER: - lynx_28g_rmw(priv, PCCC, - PCCC_SXGMII_DIS << lane_offset, - GENMASK(3, 0) << lane_offset); + /* Cleanup the protocol configuration registers */ + lynx_28g_rmw(priv, PCCC, 0, PCCC_MSK(lane)); break; case PHY_INTERFACE_MODE_SGMII: case PHY_INTERFACE_MODE_1000BASEX: - lynx_28g_rmw(priv, PCC8, - PCC8_SGMII_DIS << lane_offset, - GENMASK(3, 0) << lane_offset); + /* Cleanup the protocol configuration registers */ + lynx_28g_rmw(priv, PCC8, 0, PCC8_MSK(lane)); + + /* Disable the SGMII PCS */ + lynx_28g_lane_rmw(lane, SGMIIaCR1, 0, SGMIIaCR1_SGPCS_EN); + break; default: break; @@ -336,16 +352,13 @@ static void lynx_28g_cleanup_lane(struct lynx_28g_lan= e *lane) =20 static void lynx_28g_lane_set_sgmii(struct lynx_28g_lane *lane) { - u32 lane_offset =3D LNa_PCC_OFFSET(lane); struct lynx_28g_priv *priv =3D lane->priv; struct lynx_28g_pll *pll; =20 lynx_28g_cleanup_lane(lane); =20 /* Setup the lane to run in SGMII */ - lynx_28g_rmw(priv, PCC8, - PCC8_SGMII << lane_offset, - GENMASK(3, 0) << lane_offset); + lynx_28g_rmw(priv, PCC8, PCC8_SGMIInCFG_EN(lane), PCC8_MSK(lane)); =20 /* Setup the protocol select and SerDes parallel interface width */ lynx_28g_lane_rmw(lane, LNaGCR0, @@ -390,15 +403,13 @@ static void lynx_28g_lane_set_sgmii(struct lynx_28g_l= ane *lane) static void lynx_28g_lane_set_10gbaser(struct lynx_28g_lane *lane) { struct lynx_28g_priv *priv =3D lane->priv; - u32 lane_offset =3D LNa_PCC_OFFSET(lane); struct lynx_28g_pll *pll; =20 lynx_28g_cleanup_lane(lane); =20 /* Enable the SXGMII lane */ - lynx_28g_rmw(priv, PCCC, - PCCC_10GBASER << lane_offset, - GENMASK(3, 0) << lane_offset); + lynx_28g_rmw(priv, PCCC, PCCC_SXGMIInCFG_EN(lane) | + PCCC_SXGMIInCFG_XFI(lane, 1), PCCC_MSK(lane)); =20 /* Setup the protocol select and SerDes parallel interface width */ lynx_28g_lane_rmw(lane, LNaGCR0, --=20 2.34.1 From nobody Tue Dec 2 00:03:21 2025 Received: from PA4PR04CU001.outbound.protection.outlook.com (mail-francecentralazon11013011.outbound.protection.outlook.com [40.107.162.11]) (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 0633C31A55B for ; Tue, 25 Nov 2025 11:49:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.162.11 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764071397; cv=fail; b=K8cl+fMKcCkb0mBPi3pPWfjZo+FhKDsHBx4MZDDkP/ahR0QHR1uT7881xO+HvtCI+TAJZT05ZiMyYmbwUJRVBx3vqBER28Rn5ldtdIyO/GSzDVoCa3R2q+P/ewaTtlU9C0XgiqjuswJi9AP4UNZjDty+r75FIwjraDNxxpdlQZo= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764071397; c=relaxed/simple; bh=dr6G4X9IxkK67fbwe78Me9ZrtKf4M4c3tfikWf2t/hU=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=qI5EO//GFUDoS7qDeVCw3Qdyppos1hrqg6avZJMiOvw12B0uTUODx5e0AFfuGf0PzdeT1UovPf+kLmKshhhmaAaQSFpSGnAQokasOwQ5/YVPZaLXVgGxxSpRQlcPjqZ8/0HjcQgrw9wb5yLedyV7LsLKKnEkCOQc0HyJxiFDQxU= 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=UzYZhA5L; arc=fail smtp.client-ip=40.107.162.11 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="UzYZhA5L" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=GoznX0wcrziO6JSvhtvQJ1AN+yjPkYKdIYSxEoVhGR/gouZ20zy1hXpl1ssJkGjYXOzUEkpBhtVglGMYAYSM78Lxm2mgfN6NfFhGAMtYdRNs2XGdYLtguAdh+IiK6CXLMAWog0nIW8NjTyY6OI23lh+sNTf2FO7C9ueN4XTolxyDKvx173dpjhpHLAWkmDsFmfkNNfM3wNuDp/N1eYJnvgo+URZr0oQte/uJwI/N6KKoqusL1XJE1iU4dWz6QL7buh3pgsOJlkYKGN1X/Lxn3TT8eJN6y0MZUgr4wENw2UBlu+CDGhRwUjnJLHHMcPnV6fAkFY9YjdLsh/Ie7y7GQg== 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=zL8Efrk5h8TnwmD2UjAJTUuW5AQ/oFcyv53e0IBSLa0=; b=LyGQqEspNCLW2UtNynvdKzGcRzxCjf28iGxfFse3I8F60oVCtcgljtc5zJyvWT7oNrTEDnb3xkx7aQI7ZuPWSp/oJpEmmVwtPI60Apu8r3u806gy4nFnH+0j2dhrPaW1Zk2yrz2z1Ech89dNo1x8sZ6Uz85YLD1YyhJQVL1vBQv2lcfcmLvTihbugLONHqk6dZZF1DCiAWLxdxAnM2hADwghutYAvNtWcQljlao6S5gOjhVMT6hucF8qWXbY6HNi2l/EuhpRUKZXdNcQO/O+1nUpkk69dAPtYfp5i5o4AORjv4+oz5n//lL93hxKdd36sZLLIvPSaQlmgXXFNat8Yw== 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=zL8Efrk5h8TnwmD2UjAJTUuW5AQ/oFcyv53e0IBSLa0=; b=UzYZhA5L9CHqGaHPJfFx9JjNGc/3WaP2ySzzkHrTwawOzMAmbV4hkHBNXzefvu0/J6MavTJLuDP3s4RK7aoYycDZrKo4GBptP7Ebpt2qLFEKZyPpkbgR8lkMIDxZI6mIivBXJOncyQXCmMDfd/DMIl2NbkDmtw5wEc+4yOR6BN4BcFWTORqtsYmbQwuDU39wXDj3z1ksjL6voWvbeeqbM6s6VKd2zFxW8C+JULp41js0P5j3fddP+m6LPm51R8bwhfKJEs7hgvIQIPrAGDfxiCFPdNIws1vKwSwsyjvN2ESCKzJTyGGFWW5X84K7THjCQZ94AfqEutVg6X3LEam+gQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from AM9PR04MB8585.eurprd04.prod.outlook.com (2603:10a6:20b:438::13) by PAXPR04MB9201.eurprd04.prod.outlook.com (2603:10a6:102:232::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9366.11; Tue, 25 Nov 2025 11:49:48 +0000 Received: from AM9PR04MB8585.eurprd04.prod.outlook.com ([fe80::8063:666f:9a2e:1dab]) by AM9PR04MB8585.eurprd04.prod.outlook.com ([fe80::8063:666f:9a2e:1dab%5]) with mapi id 15.20.9343.016; Tue, 25 Nov 2025 11:49:47 +0000 From: Vladimir Oltean To: linux-phy@lists.infradead.org Cc: Ioana Ciornei , Vinod Koul , Kishon Vijay Abraham I , Neil Armstrong , Josua Mayer , linux-kernel@vger.kernel.org Subject: [PATCH v5 phy 10/15] phy: lynx-28g: make lynx_28g_set_lane_mode() more systematic Date: Tue, 25 Nov 2025 13:48:42 +0200 Message-Id: <20251125114847.804961-11-vladimir.oltean@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20251125114847.804961-1-vladimir.oltean@nxp.com> References: <20251125114847.804961-1-vladimir.oltean@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AS4P189CA0047.EURP189.PROD.OUTLOOK.COM (2603:10a6:20b:659::19) To AM9PR04MB8585.eurprd04.prod.outlook.com (2603:10a6:20b:438::13) 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: AM9PR04MB8585:EE_|PAXPR04MB9201:EE_ X-MS-Office365-Filtering-Correlation-Id: 768a3253-9057-4b7f-2f62-08de2c18bb9a X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|10070799003|376014|52116014|366016|19092799006; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?4Bim5wv+vC5v1COINmtQNI/84qRU+f0veNuTXorHR0Ud2yYcUkxZcKH3KrPi?= =?us-ascii?Q?5SByPhQs1P8FNKMqju0mnynB1h52FO3PPW0814LfFDE6remGHK8LBL8jKbff?= =?us-ascii?Q?3IWwEJSobJ+tpwzvP7W9EX2W7F9SQIORkbOKj6vjZQtXuh5UokcTz791DbNO?= =?us-ascii?Q?4BeB1Zfm6r1zoUb1VGEJCLo02gFYkd+MY1XoqphNuaCc0pmXQa7bfA8C5BzY?= =?us-ascii?Q?YFof71J8gro/22rG2+GhRPl6Zp3yvk3yjBWlXm0wcVfd+2/xP58cn032D7tw?= =?us-ascii?Q?E3IF3dvO6NBVXUieorajQYFhwSTNqQkeERqkYDxN+Ob4yR5wrlHM3s+x/ApI?= =?us-ascii?Q?llTEKaL6uv6P48tpLSxY38MFJS0PXwbJ0I0R6ToUIpnq6/IKICtNEjzsQYbh?= =?us-ascii?Q?ho2OuJaNlwWbmdbYGeqMRwVF5xDWrZC2pKLtFcEZsuanHAKpEO6Rb3PO7Hq8?= =?us-ascii?Q?pK3eKT2TBBWgPAC1n6tiT+/UlxIEWRp72jXnQTzIxv8dH86jujJi9rN1iret?= =?us-ascii?Q?vKOLWHLo3xtW+8b2SclTIkvN1z01Gxb4No5IYYJZjMW8E0mqJLKYBAWfuzBA?= =?us-ascii?Q?UD8KArFFN4Ksjii1QXTZZMCS5CtcAMgO7cpFgSKzasPFK53kYDTg3XgoK0fX?= =?us-ascii?Q?ud7BA2KTn79kTYu4SpWMSvQ+nsxsVzs+PwybMIH++WfKt4Kwz1NkcqGGC7RJ?= =?us-ascii?Q?ydwkbQsFN6TYKFDiB6dr3D+z1xFtnDocsuhfgVv90WkwjvC4vzDDx5OVw+R7?= =?us-ascii?Q?AspMt3aKepbLBij2AwVeN/aHeoySk2WxRW/dSLKSe8v/JDCgkF2uo3p5PvNG?= =?us-ascii?Q?kY4yjY0x5DY4MuOOz7EWl58BRgIc9bDg+aA6jBdw5s0gZr5nZoVirK2xRtHE?= =?us-ascii?Q?Ka89Ruc4k6OQH9dxly0zu1nT/O5iDufVc2DB/VZskQbuwPXkPUKl4qxUkgvx?= =?us-ascii?Q?iJJ5DOmdb+k6m5Nv6rE2FnTfZj0Hza8eHHVWvu+SQVrsVDAi68WG+TD8W5WY?= =?us-ascii?Q?pJ6T6UA46CtXeS2LsD3zMxiEcSowvgAJVJ9kt0M7IGiDUIBq2vUerUcf/lYm?= =?us-ascii?Q?FxVHMuXbPvrXLGgKyFh/kNMtiASvuW7ISMfGhgkHA/YDU5b6Z8gqX9FdCapO?= =?us-ascii?Q?mihNVTsndQF9W+kWPHoovME0cALi4g9KfMDjbz9VinNCC1pQ7jG3eMVp2TvJ?= =?us-ascii?Q?ELt4QHrzEyzgMeNT+nU5FO2KRhYFTfT9vKyH2CippRzGL1hfgUR/DkRx5XtW?= =?us-ascii?Q?fp2L4GBar/r8n/LJ/oN+ZsCe9M3T6rSQ715//CDkllBg1fZUDX4X4mbSspxx?= =?us-ascii?Q?FmJ6eR5+E4XKKDnmU2pZZLcNmALcWauoOpWpcSs9s2c9iNQePTTSCL3AI7k8?= =?us-ascii?Q?xaCX/guKjI/Gl9fETkKi/d9JcZmRyPE+PW82G+iTYQwWUptLWauxIIQE/cqk?= =?us-ascii?Q?5t1LXfiqEXbZHvXmzRbbkYWhEwaUDYhl?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM9PR04MB8585.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(10070799003)(376014)(52116014)(366016)(19092799006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?nF/IOPv6WZCMTfPZasFwDpjY+/tJIyVkvfEsbYwTa6AxRb/UyqUoAn1qnAEY?= =?us-ascii?Q?plxXjLw19eo18Xrp5z07SDUO5cPOWnnZ8oKZaqk6slkL0rnL6fc4BeEVxiEW?= =?us-ascii?Q?2PZ74Y84oIdc36Q+zZsLdB5CtHGDtf0umrGW2cxSvpsUq1oQLfQhAF/MK2il?= =?us-ascii?Q?LbDWIXUC4T7+GsHNHsgF/j51mlUwPTzBof0lfQOj84wE7nP0M7LpnDHKlJQV?= =?us-ascii?Q?nEajNT23CELIs5HD9NtiZLrBhHAKh8YJmCnV52yQtTdR+uqwqAdjXMgJdRs8?= =?us-ascii?Q?NOnF6UP23qYo+vjDYWI0C1njhQqWsp1Piy93bsDm5vRtAzZWkRfG7I1Eh1Hl?= =?us-ascii?Q?LBJl4ZTLtmxpXa2iXis2U+M4b9zwT9qWc9o5/J+f8L6kYleY5xnqlt6iohg2?= =?us-ascii?Q?GUGLQHplNOW30aZHyx358WysUCSAGE8xTPgfrEJJalDbBpLo8oTjglDakFsS?= =?us-ascii?Q?TzqUtYFUmgn+/Yx4akf4WFK1MDA4s1IBi7VTeQ/fReFnU9dVxF9FFVc5d+eu?= =?us-ascii?Q?DUmBO5d9PgYNwUTgMu2dwp/7A6npSbvRH6V/LI/+ZMrXFVJldHigylHb1TDY?= =?us-ascii?Q?ED+AEKZi59Uc0ajlGEjXrpUQQV8R0GibBzcoIG4LzR8X7jeMgzOpfWdRP2m7?= =?us-ascii?Q?D4w8QEg5+yk9vb4Pih767stPhFcqzaTCv4SeIqN3bUQTdlGU+vqA6RGVdfoh?= =?us-ascii?Q?s1v1rFRE9lP7MfklRmT15+a0+J+DG/EKSRljWRMtfvA4EQOzTW6CoDuuq38N?= =?us-ascii?Q?I5D5pph5ces2PRm39dMRewvf0fNQF7LtfcsK3/1E5Cl6UmUxcgjjKOYwxbvk?= =?us-ascii?Q?LcsPocCybfilputtykjJZooQevZ0KSPKIZP7GearyB37Rdfo4UOWoxWByIaP?= =?us-ascii?Q?jUrvZoPl5lwciD2o5u/Es9fMgQjHSfpA5QOwFHXwrnrS3gZeNzNmWV4k9tzS?= =?us-ascii?Q?m69C4QKqUIUXN8d2uv9F5bhDqcdnqOua2BcV0NJd1k0El6NyzXkdJ5jrAuny?= =?us-ascii?Q?haM4zf36CUyNVUoppmgMspTp0UuQ0U/cw9NfvaljvTB8+Fc6kBuAqZ9mtrWX?= =?us-ascii?Q?xz2CnFo8FA7rq6wSLrxR9VdfbPybsRAbWPOmfMGk+im/BCpDC/QT2GyYm0OT?= =?us-ascii?Q?6088tyQpgiXQHKPvpLoZMmTOZ9PMCvFUswCMkcKty5ApY6mTGUWzhFSO4saq?= =?us-ascii?Q?Gu+VHbh6dSEW68sBRc3b/ukcnGGl70f6gRhdOmvDV3th205I7MnvQ1Gb8Y1l?= =?us-ascii?Q?60rrq2dbM9Zi7WIOFiyBbQqZkvRMenjlGI2Brks/6GqACoZMZTXH4DWrEltW?= =?us-ascii?Q?/aPFjjbfmLmcDOelZltnGf9N7mGArQBcEr4gu5D3psaMxJkM8BxQlLz+vWjc?= =?us-ascii?Q?l5oWtWYdRCCU9JWegmJn8Cdj5DuBrQ7IpW4kjTO82BJAeBlsiuHVU9VtANik?= =?us-ascii?Q?K9GQJsOXh/Glt3RoHyhq6yJS3NRgwo9d0MrpWnBrd7CEA8jeYjf6IGVg6enI?= =?us-ascii?Q?hNl7VUaFzEogHhyV38811agdrF6W7D2FHt9ziGMaQ1fxwQ0276SgjnhSXq0y?= =?us-ascii?Q?/ArE8j9a2sTjL7iLIYXcxTOhBIZ+dHNh0q75HdXp83zPxdC61QvFcYNbfTpO?= =?us-ascii?Q?0Nuqd78ETucnHijobgjL0es=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 768a3253-9057-4b7f-2f62-08de2c18bb9a X-MS-Exchange-CrossTenant-AuthSource: AM9PR04MB8585.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Nov 2025 11:49:47.3682 (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: yX/dqWXS4ibADCn6yu8zG3qkwFl/WIeJRU9Fd/lYm1bME4aiKnAUIC2HCvERyXyxPsngL/34z/AWXDYTE84+Kg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAXPR04MB9201 Content-Type: text/plain; charset="utf-8" The current approach of transitioning from one SerDes protocol to another in lynx_28g_set_lane_mode() is too poetic. Because the driver only supports 1GbE and 10GbE, it only modifies those registers which it knows are different between these two modes. However, that is hardly extensible for 25GbE, 40GbE, backplane modes, etc. We need something more systematic to make sure that all lane and protocol converter registers are written to consistent values, no matter what was the source lane mode. For that, we need to introduce tables with register field values, for each supported lane mode. Signed-off-by: Vladimir Oltean --- v2->v5: none v1->v2: fix LNaGCR0_PROTO_SEL | LNaGCR0_IF_WIDTH access by using FIELD_PREP() drivers/phy/freescale/phy-fsl-lynx-28g.c | 659 +++++++++++++++++------ 1 file changed, 496 insertions(+), 163 deletions(-) diff --git a/drivers/phy/freescale/phy-fsl-lynx-28g.c b/drivers/phy/freesca= le/phy-fsl-lynx-28g.c index 5692ed8fc65f..c4bfa0ce7726 100644 --- a/drivers/phy/freescale/phy-fsl-lynx-28g.c +++ b/drivers/phy/freescale/phy-fsl-lynx-28g.c @@ -12,32 +12,32 @@ #define LYNX_28G_NUM_LANE 8 #define LYNX_28G_NUM_PLL 2 =20 -#define LNa_PCC_OFFSET(lane) (4 * (LYNX_28G_NUM_LANE - (lane->id) - 1)) - -/* General registers per SerDes block */ +/* SoC IP wrapper for protocol converters */ #define PCC8 0x10a0 -#define PCC8_SGMIInCFG(lane, x) (((x) & GENMASK(2, 0)) << LNa_PCC_OFFSET= (lane)) -#define PCC8_SGMIInCFG_EN(lane) PCC8_SGMIInCFG(lane, 1) -#define PCC8_SGMIInCFG_MSK(lane) PCC8_SGMIInCFG(lane, GENMASK(2, 0)) -#define PCC8_SGMIIn_KX(lane, x) ((((x) << 3) & BIT(3)) << LNa_PCC_OFFSET= (lane)) -#define PCC8_SGMIIn_KX_MSK(lane) PCC8_SGMIIn_KX(lane, 1) -#define PCC8_MSK(lane) PCC8_SGMIInCFG_MSK(lane) | \ - PCC8_SGMIIn_KX_MSK(lane) +#define PCC8_SGMIIa_KX BIT(3) +#define PCC8_SGMIIa_CFG BIT(0) =20 #define PCCC 0x10b0 -#define PCCC_SXGMIInCFG(lane, x) (((x) & GENMASK(2, 0)) << LNa_PCC_OFFSET= (lane)) -#define PCCC_SXGMIInCFG_EN(lane) PCCC_SXGMIInCFG(lane, 1) -#define PCCC_SXGMIInCFG_MSK(lane) PCCC_SXGMIInCFG(lane, GENMASK(2, 0)) -#define PCCC_SXGMIInCFG_XFI(lane, x) ((((x) << 3) & BIT(3)) << LNa_PCC_OF= FSET(lane)) -#define PCCC_SXGMIInCFG_XFI_MSK(lane) PCCC_SXGMIInCFG_XFI(lane, 1) -#define PCCC_MSK(lane) PCCC_SXGMIInCFG_MSK(lane) | \ - PCCC_SXGMIInCFG_XFI_MSK(lane) +#define PCCC_SXGMIIn_XFI BIT(3) +#define PCCC_SXGMIIn_CFG BIT(0) =20 #define PCCD 0x10b4 -#define PCCD_E25GnCFG(lane, x) (((x) & GENMASK(2, 0)) << LNa_PCCD_OFFSET= (lane)) -#define PCCD_E25GnCFG_EN(lane) PCCD_E25GnCFG(lane, 1) -#define PCCD_E25GnCFG_MSK(lane) PCCD_E25GnCFG(lane, GENMASK(2, 0)) -#define PCCD_MSK(lane) PCCD_E25GnCFG_MSK(lane) +#define PCCD_E25Gn_CFG BIT(0) + +#define PCCE 0x10b8 +#define PCCE_E40Gn_LRV BIT(3) +#define PCCE_E40Gn_CFG BIT(0) +#define PCCE_E50Gn_LRV BIT(3) +#define PCCE_E50GnCFG BIT(0) +#define PCCE_E100Gn_LRV BIT(3) +#define PCCE_E100Gn_CFG BIT(0) + +#define SGMII_CFG(id) (28 - (id) * 4) /* Offset into PCC8 */ +#define SXGMII_CFG(id) (28 - (id) * 4) /* Offset into PCCC */ +#define E25G_CFG(id) (28 - (id) * 4) /* Offset into PCCD */ +#define E40G_CFG(id) (28 - (id) * 4) /* Offset into PCCE */ +#define E50G_CFG(id) (20 - (id) * 4) /* Offset into PCCE */ +#define E100G_CFG(id) (12 - (id) * 4) /* Offset into PCCE */ =20 /* Per PLL registers */ #define PLLnRSTCTL(pll) (0x400 + (pll) * 0x100 + 0x0) @@ -92,6 +92,10 @@ #define LNaTECR0_EQ_POST1Q GENMASK(12, 8) #define LNaTECR0_EQ_AMP_RED GENMASK(5, 0) =20 +#define LNaTECR1(lane) (0x800 + (lane) * 0x100 + 0x34) +#define LNaTECR1_EQ_ADPT_EQ_DRVR_DIS BIT(31) +#define LNaTECR1_EQ_ADPT_EQ GENMASK(29, 24) + /* Lane a Rx Reset Control Register */ #define LNaRRSTCTL(lane) (0x800 + (lane) * 0x100 + 0x40) #define LNaRRSTCTL_HLT_REQ BIT(27) @@ -147,6 +151,21 @@ #define LNaRECR2_EQ_BIN_DATA_AVG_TC GENMASK(5, 4) #define LNaRECR2_SPARE_IN GENMASK(1, 0) =20 +#define LNaRECR3(lane) (0x800 + (lane) * 0x100 + 0x5c) +#define LNaRECR3_EQ_SNAP_START BIT(31) +#define LNaRECR3_EQ_SNAP_DONE BIT(30) +#define LNaRECR3_EQ_GAINK2_HF_STAT GENMASK(28, 24) +#define LNaRECR3_EQ_GAINK3_MF_STAT GENMASK(20, 16) +#define LNaRECR3_SPARE_OUT GENMASK(13, 12) +#define LNaRECR3_EQ_GAINK4_LF_STAT GENMASK(4, 0) + +#define LNaRECR4(lane) (0x800 + (lane) * 0x100 + 0x60) +#define LNaRECR4_BLW_STAT GENMASK(28, 24) +#define LNaRECR4_EQ_OFFSET_STAT GENMASK(21, 16) +#define LNaRECR4_EQ_BIN_DATA_SEL GENMASK(15, 12) +#define LNaRECR4_EQ_BIN_DATA GENMASK(8, 0) /* bit 9 is reserved */ +#define LNaRECR4_EQ_BIN_DATA_SGN BIT(8) + #define LNaRSCCR0(lane) (0x800 + (lane) * 0x100 + 0x74) #define LNaRSCCR0_SMP_OFF_EN BIT(31) #define LNaRSCCR0_SMP_OFF_OV_EN BIT(30) @@ -161,20 +180,199 @@ #define LNaRSCCR0_SMP_AUTOZ_EG1R GENMASK(5, 4) #define LNaRSCCR0_SMP_AUTOZ_EG1F GENMASK(1, 0) =20 +#define LNaTCSR0(lane) (0x800 + (lane) * 0x100 + 0xa0) +#define LNaTCSR0_SD_STAT_OBS_EN BIT(31) +#define LNaTCSR0_SD_LPBK_SEL GENMASK(29, 28) + #define LNaPSS(lane) (0x1000 + (lane) * 0x4) #define LNaPSS_TYPE GENMASK(30, 24) -#define LNaPSS_TYPE_SGMII 0x4 -#define LNaPSS_TYPE_XFI 0x28 +#define LNaPSS_TYPE_SGMII (PROTO_SEL_SGMII_BASEX_KX << 2) +#define LNaPSS_TYPE_XFI (PROTO_SEL_XFI_10GBASER_KR_SXGMII << 2) +#define LNaPSS_TYPE_40G ((PROTO_SEL_XFI_10GBASER_KR_SXGMII << 2) | 3) +#define LNaPSS_TYPE_25G (PROTO_SEL_25G_50G_100G << 2) +#define LNaPSS_TYPE_100G ((PROTO_SEL_25G_50G_100G << 2) | 2) =20 +/* MDEV_PORT is at the same bitfield address for all protocol converters */ +#define MDEV_PORT GENMASK(31, 27) + +#define SGMIIaCR0(lane) (0x1800 + (lane) * 0x10) #define SGMIIaCR1(lane) (0x1804 + (lane) * 0x10) #define SGMIIaCR1_SGPCS_EN BIT(11) =20 +#define ANLTaCR0(lane) (0x1a00 + (lane) * 0x10) +#define ANLTaCR1(lane) (0x1a04 + (lane) * 0x10) + +#define SXGMIIaCR0(lane) (0x1a80 + (lane) * 0x10) +#define SXGMIIaCR0_RST BIT(31) +#define SXGMIIaCR0_PD BIT(30) + +#define SXGMIIaCR1(lane) (0x1a84 + (lane) * 0x10) + +#define E25GaCR0(lane) (0x1b00 + (lane) * 0x10) +#define E25GaCR0_RST BIT(31) +#define E25GaCR0_PD BIT(30) + +#define E25GaCR1(lane) (0x1b04 + (lane) * 0x10) + +#define E25GaCR2(lane) (0x1b08 + (lane) * 0x10) +#define E25GaCR2_FEC_ENA BIT(23) +#define E25GaCR2_FEC_ERR_ENA BIT(22) +#define E25GaCR2_FEC91_ENA BIT(20) + +#define E40GaCR0(pcvt) (0x1b40 + (pcvt) * 0x20) +#define E40GaCR1(pcvt) (0x1b44 + (pcvt) * 0x20) + +#define E50GaCR1(pcvt) (0x1b84 + (pcvt) * 0x10) + +#define E100GaCR1(pcvt) (0x1c04 + (pcvt) * 0x20) + +#define CR(x) ((x) * 4) + enum lynx_28g_eq_type { EQ_TYPE_NO_EQ =3D 0, EQ_TYPE_2TAP =3D 1, EQ_TYPE_3TAP =3D 2, }; =20 +enum lynx_28g_proto_sel { + PROTO_SEL_PCIE =3D 0, + PROTO_SEL_SGMII_BASEX_KX =3D 1, + PROTO_SEL_SATA =3D 2, + PROTO_SEL_XAUI =3D 4, + PROTO_SEL_XFI_10GBASER_KR_SXGMII =3D 0xa, + PROTO_SEL_25G_50G_100G =3D 0x1a, +}; + +struct lynx_28g_proto_conf { + /* LNaGCR0 */ + int proto_sel; + int if_width; + /* LNaTECR0 */ + int teq_type; + int sgn_preq; + int ratio_preq; + int sgn_post1q; + int ratio_post1q; + int amp_red; + /* LNaTECR1 */ + int adpt_eq; + /* LNaRGCR1 */ + int enter_idle_flt_sel; + int exit_idle_flt_sel; + int data_lost_th_sel; + /* LNaRECR0 */ + int gk2ovd; + int gk3ovd; + int gk4ovd; + int gk2ovd_en; + int gk3ovd_en; + int gk4ovd_en; + /* LNaRECR1 ? */ + int eq_offset_ovd; + int eq_offset_ovd_en; + /* LNaRECR2 */ + int eq_offset_rng_dbl; + int eq_blw_sel; + int eq_boost; + int spare_in; + /* LNaRSCCR0 */ + int smp_autoz_d1r; + int smp_autoz_eg1r; +}; + +static const struct lynx_28g_proto_conf lynx_28g_proto_conf[PHY_INTERFACE_= MODE_MAX] =3D { + [PHY_INTERFACE_MODE_SGMII] =3D { + .proto_sel =3D LNaGCR0_PROTO_SEL_SGMII, + .if_width =3D LNaGCR0_IF_WIDTH_10_BIT, + .teq_type =3D EQ_TYPE_NO_EQ, + .sgn_preq =3D 1, + .ratio_preq =3D 0, + .sgn_post1q =3D 1, + .ratio_post1q =3D 0, + .amp_red =3D 6, + .adpt_eq =3D 48, + .enter_idle_flt_sel =3D 4, + .exit_idle_flt_sel =3D 3, + .data_lost_th_sel =3D 1, + .gk2ovd =3D 0x1f, + .gk3ovd =3D 0, + .gk4ovd =3D 0, + .gk2ovd_en =3D 1, + .gk3ovd_en =3D 1, + .gk4ovd_en =3D 0, + .eq_offset_ovd =3D 0x1f, + .eq_offset_ovd_en =3D 0, + .eq_offset_rng_dbl =3D 0, + .eq_blw_sel =3D 0, + .eq_boost =3D 0, + .spare_in =3D 0, + .smp_autoz_d1r =3D 0, + .smp_autoz_eg1r =3D 0, + }, + [PHY_INTERFACE_MODE_1000BASEX] =3D { + .proto_sel =3D LNaGCR0_PROTO_SEL_SGMII, + .if_width =3D LNaGCR0_IF_WIDTH_10_BIT, + .teq_type =3D EQ_TYPE_NO_EQ, + .sgn_preq =3D 1, + .ratio_preq =3D 0, + .sgn_post1q =3D 1, + .ratio_post1q =3D 0, + .amp_red =3D 6, + .adpt_eq =3D 48, + .enter_idle_flt_sel =3D 4, + .exit_idle_flt_sel =3D 3, + .data_lost_th_sel =3D 1, + .gk2ovd =3D 0x1f, + .gk3ovd =3D 0, + .gk4ovd =3D 0, + .gk2ovd_en =3D 1, + .gk3ovd_en =3D 1, + .gk4ovd_en =3D 0, + .eq_offset_ovd =3D 0x1f, + .eq_offset_ovd_en =3D 0, + .eq_offset_rng_dbl =3D 0, + .eq_blw_sel =3D 0, + .eq_boost =3D 0, + .spare_in =3D 0, + .smp_autoz_d1r =3D 0, + .smp_autoz_eg1r =3D 0, + }, + [PHY_INTERFACE_MODE_10GBASER] =3D { + .proto_sel =3D LNaGCR0_PROTO_SEL_XFI, + .if_width =3D LNaGCR0_IF_WIDTH_20_BIT, + .teq_type =3D EQ_TYPE_2TAP, + .sgn_preq =3D 1, + .ratio_preq =3D 0, + .sgn_post1q =3D 1, + .ratio_post1q =3D 3, + .amp_red =3D 7, + .adpt_eq =3D 48, + .enter_idle_flt_sel =3D 0, + .exit_idle_flt_sel =3D 0, + .data_lost_th_sel =3D 0, + .gk2ovd =3D 0, + .gk3ovd =3D 0, + .gk4ovd =3D 0, + .gk2ovd_en =3D 0, + .gk3ovd_en =3D 0, + .gk4ovd_en =3D 0, + .eq_offset_ovd =3D 0x1f, + .eq_offset_ovd_en =3D 0, + .eq_offset_rng_dbl =3D 1, + .eq_blw_sel =3D 1, + .eq_boost =3D 0, + .spare_in =3D 0, + .smp_autoz_d1r =3D 2, + .smp_autoz_eg1r =3D 0, + }, +}; + +struct lynx_pccr { + int offset; + int width; + int shift; +}; + struct lynx_28g_priv; =20 struct lynx_28g_pll { @@ -218,6 +416,10 @@ static void lynx_28g_rmw(struct lynx_28g_priv *priv, u= nsigned long off, iowrite32(tmp, reg); } =20 +#define lynx_28g_read(priv, off) \ + ioread32((priv)->base + (off)) +#define lynx_28g_write(priv, off, val) \ + iowrite32(val, (priv)->base + (off)) #define lynx_28g_lane_rmw(lane, reg, val, mask) \ lynx_28g_rmw((lane)->priv, reg(lane->id), val, mask) #define lynx_28g_lane_read(lane, reg) \ @@ -326,130 +528,6 @@ static void lynx_28g_lane_set_pll(struct lynx_28g_lan= e *lane, } } =20 -static void lynx_28g_cleanup_lane(struct lynx_28g_lane *lane) -{ - struct lynx_28g_priv *priv =3D lane->priv; - - /* Cleanup the protocol configuration registers of the current protocol */ - switch (lane->interface) { - case PHY_INTERFACE_MODE_10GBASER: - /* Cleanup the protocol configuration registers */ - lynx_28g_rmw(priv, PCCC, 0, PCCC_MSK(lane)); - break; - case PHY_INTERFACE_MODE_SGMII: - case PHY_INTERFACE_MODE_1000BASEX: - /* Cleanup the protocol configuration registers */ - lynx_28g_rmw(priv, PCC8, 0, PCC8_MSK(lane)); - - /* Disable the SGMII PCS */ - lynx_28g_lane_rmw(lane, SGMIIaCR1, 0, SGMIIaCR1_SGPCS_EN); - - break; - default: - break; - } -} - -static void lynx_28g_lane_set_sgmii(struct lynx_28g_lane *lane) -{ - struct lynx_28g_priv *priv =3D lane->priv; - struct lynx_28g_pll *pll; - - lynx_28g_cleanup_lane(lane); - - /* Setup the lane to run in SGMII */ - lynx_28g_rmw(priv, PCC8, PCC8_SGMIInCFG_EN(lane), PCC8_MSK(lane)); - - /* Setup the protocol select and SerDes parallel interface width */ - lynx_28g_lane_rmw(lane, LNaGCR0, - FIELD_PREP(LNaGCR0_PROTO_SEL, LNaGCR0_PROTO_SEL_SGMII) | - FIELD_PREP(LNaGCR0_IF_WIDTH, LNaGCR0_IF_WIDTH_10_BIT), - LNaGCR0_PROTO_SEL | LNaGCR0_IF_WIDTH); - - /* Find the PLL that works with this interface type */ - pll =3D lynx_28g_pll_get(priv, PHY_INTERFACE_MODE_SGMII); - if (unlikely(pll =3D=3D NULL)) - return; - - /* Switch to the PLL that works with this interface type */ - lynx_28g_lane_set_pll(lane, pll); - - /* Choose the portion of clock net to be used on this lane */ - lynx_28g_lane_set_nrate(lane, pll, PHY_INTERFACE_MODE_SGMII); - - /* Enable the SGMII PCS */ - lynx_28g_lane_rmw(lane, SGMIIaCR1, SGMIIaCR1_SGPCS_EN, - SGMIIaCR1_SGPCS_EN); - - /* Configure the appropriate equalization parameters for the protocol */ - lynx_28g_lane_write(lane, LNaTECR0, - LNaTECR0_EQ_SGN_PREQ | LNaTECR0_EQ_SGN_POST1Q | - FIELD_PREP(LNaTECR0_EQ_AMP_RED, 6)); - lynx_28g_lane_write(lane, LNaRGCR1, - FIELD_PREP(LNaRGCR1_ENTER_IDLE_FLT_SEL, 4) | - FIELD_PREP(LNaRGCR1_EXIT_IDLE_FLT_SEL, 3) | - LNaRGCR1_DATA_LOST_FLT); - lynx_28g_lane_write(lane, LNaRECR0, - LNaRECR0_EQ_GAINK2_HF_OV_EN | - FIELD_PREP(LNaRECR0_EQ_GAINK2_HF_OV, 31) | - LNaRECR0_EQ_GAINK3_MF_OV_EN | - FIELD_PREP(LNaRECR0_EQ_GAINK3_MF_OV, 0)); - lynx_28g_lane_write(lane, LNaRECR1, - FIELD_PREP(LNaRECR1_EQ_OFFSET_OV, 31)); - lynx_28g_lane_write(lane, LNaRECR2, 0); - lynx_28g_lane_write(lane, LNaRSCCR0, 0); -} - -static void lynx_28g_lane_set_10gbaser(struct lynx_28g_lane *lane) -{ - struct lynx_28g_priv *priv =3D lane->priv; - struct lynx_28g_pll *pll; - - lynx_28g_cleanup_lane(lane); - - /* Enable the SXGMII lane */ - lynx_28g_rmw(priv, PCCC, PCCC_SXGMIInCFG_EN(lane) | - PCCC_SXGMIInCFG_XFI(lane, 1), PCCC_MSK(lane)); - - /* Setup the protocol select and SerDes parallel interface width */ - lynx_28g_lane_rmw(lane, LNaGCR0, - FIELD_PREP(LNaGCR0_PROTO_SEL, LNaGCR0_PROTO_SEL_XFI) | - FIELD_PREP(LNaGCR0_IF_WIDTH, LNaGCR0_IF_WIDTH_20_BIT), - LNaGCR0_PROTO_SEL | LNaGCR0_IF_WIDTH); - - /* Find the PLL that works with this interface type */ - pll =3D lynx_28g_pll_get(priv, PHY_INTERFACE_MODE_10GBASER); - if (unlikely(pll =3D=3D NULL)) - return; - - /* Switch to the PLL that works with this interface type */ - lynx_28g_lane_set_pll(lane, pll); - - /* Choose the portion of clock net to be used on this lane */ - lynx_28g_lane_set_nrate(lane, pll, PHY_INTERFACE_MODE_10GBASER); - - /* Disable the SGMII PCS */ - lynx_28g_lane_rmw(lane, SGMIIaCR1, 0, SGMIIaCR1_SGPCS_EN); - - /* Configure the appropriate equalization parameters for the protocol */ - lynx_28g_lane_write(lane, LNaTECR0, - FIELD_PREP(LNaTECR0_EQ_TYPE, EQ_TYPE_2TAP) | - LNaTECR0_EQ_SGN_PREQ | - FIELD_PREP(LNaTECR0_EQ_PREQ, 0) | - LNaTECR0_EQ_SGN_POST1Q | - FIELD_PREP(LNaTECR0_EQ_POST1Q, 3) | - FIELD_PREP(LNaTECR0_EQ_AMP_RED, 7)); - lynx_28g_lane_write(lane, LNaRGCR1, LNaRGCR1_IDLE_CONFIG); - lynx_28g_lane_write(lane, LNaRECR0, 0); - lynx_28g_lane_write(lane, LNaRECR1, FIELD_PREP(LNaRECR1_EQ_OFFSET_OV, 31)= ); - lynx_28g_lane_write(lane, LNaRECR2, - LNaRECR2_EQ_OFFSET_RNG_DBL | - FIELD_PREP(LNaRECR2_EQ_BLW_SEL, 1) | - FIELD_PREP(LNaRECR2_EQ_BIN_DATA_AVG_TC, 2)); - lynx_28g_lane_write(lane, LNaRSCCR0, - FIELD_PREP(LNaRSCCR0_SMP_AUTOZ_D1R, 2)); -} - static int lynx_28g_power_off(struct phy *phy) { struct lynx_28g_lane *lane =3D phy_get_drvdata(phy); @@ -502,6 +580,268 @@ static int lynx_28g_power_on(struct phy *phy) return 0; } =20 +static int lynx_28g_get_pccr(phy_interface_t interface, int lane, + struct lynx_pccr *pccr) +{ + switch (interface) { + case PHY_INTERFACE_MODE_SGMII: + case PHY_INTERFACE_MODE_1000BASEX: + pccr->offset =3D PCC8; + pccr->width =3D 4; + pccr->shift =3D SGMII_CFG(lane); + break; + case PHY_INTERFACE_MODE_10GBASER: + pccr->offset =3D PCCC; + pccr->width =3D 4; + pccr->shift =3D SXGMII_CFG(lane); + break; + default: + return -EOPNOTSUPP; + } + + return 0; +} + +static int lynx_28g_get_pcvt_offset(int lane, phy_interface_t interface) +{ + switch (interface) { + case PHY_INTERFACE_MODE_SGMII: + case PHY_INTERFACE_MODE_1000BASEX: + return SGMIIaCR0(lane); + case PHY_INTERFACE_MODE_10GBASER: + return SXGMIIaCR0(lane); + default: + return -EOPNOTSUPP; + } +} + +static int lynx_pccr_write(struct lynx_28g_lane *lane, + phy_interface_t interface, u32 val) +{ + struct lynx_28g_priv *priv =3D lane->priv; + struct lynx_pccr pccr; + u32 old, tmp, mask; + int err; + + err =3D lynx_28g_get_pccr(interface, lane->id, &pccr); + if (err) + return err; + + old =3D lynx_28g_read(priv, pccr.offset); + mask =3D GENMASK(pccr.width - 1, 0) << pccr.shift; + tmp =3D (old & ~mask) | (val << pccr.shift); + lynx_28g_write(priv, pccr.offset, tmp); + + dev_dbg(&lane->phy->dev, "PCCR@0x%x: 0x%x -> 0x%x\n", + pccr.offset, old, tmp); + + return 0; +} + +static int lynx_pcvt_read(struct lynx_28g_lane *lane, phy_interface_t inte= rface, + int cr, u32 *val) +{ + struct lynx_28g_priv *priv =3D lane->priv; + int offset; + + offset =3D lynx_28g_get_pcvt_offset(lane->id, interface); + if (offset < 0) + return offset; + + *val =3D lynx_28g_read(priv, offset + cr); + + return 0; +} + +static int lynx_pcvt_write(struct lynx_28g_lane *lane, phy_interface_t int= erface, + int cr, u32 val) +{ + struct lynx_28g_priv *priv =3D lane->priv; + int offset; + + offset =3D lynx_28g_get_pcvt_offset(lane->id, interface); + if (offset < 0) + return offset; + + lynx_28g_write(priv, offset + cr, val); + + return 0; +} + +static int lynx_pcvt_rmw(struct lynx_28g_lane *lane, phy_interface_t inter= face, + int cr, u32 val, u32 mask) +{ + int err; + u32 tmp; + + err =3D lynx_pcvt_read(lane, interface, cr, &tmp); + if (err) + return err; + + tmp &=3D ~mask; + tmp |=3D val; + + return lynx_pcvt_write(lane, interface, cr, tmp); +} + +static void lynx_28g_lane_remap_pll(struct lynx_28g_lane *lane, + phy_interface_t interface) +{ + struct lynx_28g_priv *priv =3D lane->priv; + struct lynx_28g_pll *pll; + + /* Switch to the PLL that works with this interface type */ + pll =3D lynx_28g_pll_get(priv, interface); + if (unlikely(pll =3D=3D NULL)) + return; + + lynx_28g_lane_set_pll(lane, pll); + + /* Choose the portion of clock net to be used on this lane */ + lynx_28g_lane_set_nrate(lane, pll, interface); +} + +static void lynx_28g_lane_change_proto_conf(struct lynx_28g_lane *lane, + phy_interface_t interface) +{ + const struct lynx_28g_proto_conf *conf =3D &lynx_28g_proto_conf[interface= ]; + + lynx_28g_lane_rmw(lane, LNaGCR0, + FIELD_PREP(LNaGCR0_PROTO_SEL, conf->proto_sel) | + FIELD_PREP(LNaGCR0_IF_WIDTH, conf->if_width), + LNaGCR0_PROTO_SEL | LNaGCR0_IF_WIDTH); + + lynx_28g_lane_rmw(lane, LNaTECR0, + FIELD_PREP(LNaTECR0_EQ_TYPE, conf->teq_type) | + FIELD_PREP(LNaTECR0_EQ_SGN_PREQ, conf->sgn_preq) | + FIELD_PREP(LNaTECR0_EQ_PREQ, conf->ratio_preq) | + FIELD_PREP(LNaTECR0_EQ_SGN_POST1Q, conf->sgn_post1q) | + FIELD_PREP(LNaTECR0_EQ_POST1Q, conf->ratio_post1q) | + FIELD_PREP(LNaTECR0_EQ_AMP_RED, conf->amp_red), + LNaTECR0_EQ_TYPE | + LNaTECR0_EQ_SGN_PREQ | + LNaTECR0_EQ_PREQ | + LNaTECR0_EQ_SGN_POST1Q | + LNaTECR0_EQ_POST1Q | + LNaTECR0_EQ_AMP_RED); + + lynx_28g_lane_rmw(lane, LNaTECR1, + FIELD_PREP(LNaTECR1_EQ_ADPT_EQ, conf->adpt_eq), + LNaTECR1_EQ_ADPT_EQ); + + lynx_28g_lane_rmw(lane, LNaRGCR1, + FIELD_PREP(LNaRGCR1_ENTER_IDLE_FLT_SEL, conf->enter_idle_flt_sel) | + FIELD_PREP(LNaRGCR1_EXIT_IDLE_FLT_SEL, conf->exit_idle_flt_sel) | + FIELD_PREP(LNaRGCR1_DATA_LOST_TH_SEL, conf->data_lost_th_sel), + LNaRGCR1_ENTER_IDLE_FLT_SEL | + LNaRGCR1_EXIT_IDLE_FLT_SEL | + LNaRGCR1_DATA_LOST_TH_SEL); + + lynx_28g_lane_rmw(lane, LNaRECR0, + FIELD_PREP(LNaRECR0_EQ_GAINK2_HF_OV_EN, conf->gk2ovd_en) | + FIELD_PREP(LNaRECR0_EQ_GAINK3_MF_OV_EN, conf->gk3ovd_en) | + FIELD_PREP(LNaRECR0_EQ_GAINK4_LF_OV_EN, conf->gk4ovd_en) | + FIELD_PREP(LNaRECR0_EQ_GAINK2_HF_OV, conf->gk2ovd) | + FIELD_PREP(LNaRECR0_EQ_GAINK3_MF_OV, conf->gk3ovd) | + FIELD_PREP(LNaRECR0_EQ_GAINK4_LF_OV, conf->gk4ovd), + LNaRECR0_EQ_GAINK2_HF_OV | + LNaRECR0_EQ_GAINK3_MF_OV | + LNaRECR0_EQ_GAINK4_LF_OV | + LNaRECR0_EQ_GAINK2_HF_OV_EN | + LNaRECR0_EQ_GAINK3_MF_OV_EN | + LNaRECR0_EQ_GAINK4_LF_OV_EN); + + lynx_28g_lane_rmw(lane, LNaRECR1, + FIELD_PREP(LNaRECR1_EQ_OFFSET_OV, conf->eq_offset_ovd) | + FIELD_PREP(LNaRECR1_EQ_OFFSET_OV_EN, conf->eq_offset_ovd_en), + LNaRECR1_EQ_OFFSET_OV | + LNaRECR1_EQ_OFFSET_OV_EN); + + lynx_28g_lane_rmw(lane, LNaRECR2, + FIELD_PREP(LNaRECR2_EQ_OFFSET_RNG_DBL, conf->eq_offset_rng_dbl) | + FIELD_PREP(LNaRECR2_EQ_BLW_SEL, conf->eq_blw_sel) | + FIELD_PREP(LNaRECR2_EQ_BOOST, conf->eq_boost) | + FIELD_PREP(LNaRECR2_SPARE_IN, conf->spare_in), + LNaRECR2_EQ_OFFSET_RNG_DBL | + LNaRECR2_EQ_BLW_SEL | + LNaRECR2_EQ_BOOST | + LNaRECR2_SPARE_IN); + + lynx_28g_lane_rmw(lane, LNaRSCCR0, + FIELD_PREP(LNaRSCCR0_SMP_AUTOZ_D1R, conf->smp_autoz_d1r) | + FIELD_PREP(LNaRSCCR0_SMP_AUTOZ_EG1R, conf->smp_autoz_eg1r), + LNaRSCCR0_SMP_AUTOZ_D1R | + LNaRSCCR0_SMP_AUTOZ_EG1R); +} + +static int lynx_28g_lane_disable_pcvt(struct lynx_28g_lane *lane, + phy_interface_t interface) +{ + struct lynx_28g_priv *priv =3D lane->priv; + int err; + + spin_lock(&priv->pcc_lock); + + err =3D lynx_pccr_write(lane, interface, 0); + if (err) + goto out; + + switch (interface) { + case PHY_INTERFACE_MODE_SGMII: + case PHY_INTERFACE_MODE_1000BASEX: + err =3D lynx_pcvt_rmw(lane, interface, CR(1), 0, + SGMIIaCR1_SGPCS_EN); + break; + default: + err =3D 0; + } + +out: + spin_unlock(&priv->pcc_lock); + + return err; +} + +static int lynx_28g_lane_enable_pcvt(struct lynx_28g_lane *lane, + phy_interface_t interface) +{ + struct lynx_28g_priv *priv =3D lane->priv; + u32 val; + int err; + + spin_lock(&priv->pcc_lock); + + switch (interface) { + case PHY_INTERFACE_MODE_SGMII: + case PHY_INTERFACE_MODE_1000BASEX: + err =3D lynx_pcvt_rmw(lane, interface, CR(1), SGMIIaCR1_SGPCS_EN, + SGMIIaCR1_SGPCS_EN); + break; + default: + err =3D 0; + } + + val =3D 0; + + switch (interface) { + case PHY_INTERFACE_MODE_SGMII: + case PHY_INTERFACE_MODE_1000BASEX: + val |=3D PCC8_SGMIIa_CFG; + break; + case PHY_INTERFACE_MODE_10GBASER: + val |=3D PCCC_SXGMIIn_CFG | PCCC_SXGMIIn_XFI; + break; + default: + break; + } + + err =3D lynx_pccr_write(lane, interface, val); + + spin_unlock(&priv->pcc_lock); + + return err; +} + static int lynx_28g_set_mode(struct phy *phy, enum phy_mode mode, int subm= ode) { struct lynx_28g_lane *lane =3D phy_get_drvdata(phy); @@ -518,33 +858,26 @@ static int lynx_28g_set_mode(struct phy *phy, enum ph= y_mode mode, int submode) if (!lynx_28g_supports_interface(priv, submode)) return -EOPNOTSUPP; =20 + if (submode =3D=3D lane->interface) + return 0; + /* If the lane is powered up, put the lane into the halt state while * the reconfiguration is being done. */ if (powered_up) lynx_28g_power_off(phy); =20 - spin_lock(&priv->pcc_lock); - - switch (submode) { - case PHY_INTERFACE_MODE_SGMII: - case PHY_INTERFACE_MODE_1000BASEX: - lynx_28g_lane_set_sgmii(lane); - break; - case PHY_INTERFACE_MODE_10GBASER: - lynx_28g_lane_set_10gbaser(lane); - break; - default: - err =3D -EOPNOTSUPP; + err =3D lynx_28g_lane_disable_pcvt(lane, lane->interface); + if (err) goto out; - } + + lynx_28g_lane_change_proto_conf(lane, submode); + lynx_28g_lane_remap_pll(lane, submode); + WARN_ON(lynx_28g_lane_enable_pcvt(lane, submode)); =20 lane->interface =3D submode; =20 out: - spin_unlock(&priv->pcc_lock); - - /* Power up the lane if necessary */ if (powered_up) lynx_28g_power_on(phy); =20 --=20 2.34.1 From nobody Tue Dec 2 00:03:21 2025 Received: from OSPPR02CU001.outbound.protection.outlook.com (mail-norwayeastazon11013022.outbound.protection.outlook.com [40.107.159.22]) (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 C7C2131A815 for ; Tue, 25 Nov 2025 11:49:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.159.22 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764071399; cv=fail; b=Ne2zjqrM0LV+lKZb+UMSUBseMACU7dQzLfGDQh/hfvQ6YuRBVpf2YQ4JTabgtc3LFp/IUvF2aYuWuLwbRW0BErxSHSpsCqBf2NZVyelTaRYbbovEXd8u8ecML7IGmFucUUDIN0vttY6+aj+wr0jzsDF4bIIwlcfumrjtEO/OkDs= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764071399; c=relaxed/simple; bh=Xn8DqITBXCbS/oNNXrrHos8itWaH8u7bsiV8b+Y0CnU=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=SOb8Ky8dv7iccgo5NeZULCwRCOLn/pEGo1zLDvNFAHHDMNMgI9qa9ZTSW/8xNhNTc+fgKH1+65TyZ6fQK0kOf+eSOoAipm2reba9Z5BBpySaWa6dwP/Rr9FcxRNzg7ZT0tS/4Kl0r3l3DdWtzta7QNTtSVqgvsICSNb4mnc+nzU= 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=c9vr4Wki; arc=fail smtp.client-ip=40.107.159.22 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="c9vr4Wki" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=httJspFrXb6t08MdCcRlF7ldhTZ1HpAXu7rDlsX41KwwKNRrtm2EypgkfTA5pmyJT1eKbtURx+5FnypxznYqkX3oBMr1EM90JjcN8/JnZ8LwCRMBi+z3t+brRIL2VeslSS4sErAG/DiWCerLyeqFNfXkZqVPaGcAYCzYhKvMeBdmM+FPu1leJQ1XcAmILG29YAxHRQIXatEZdibm4eOQ3WUAiyTEF6Ixk9mGbwzPPZyVDufG2HHyrTnRD82LdTznFp6fWNlJHeigBfR2yt8RvUJYtf9k+wK6pxZe1Dc3bidD1HtrlSa/fTE5uX83oqHGFzJAKj5/OxW83O4Ie/1zzA== 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=zGYMnDLPgyUHcxpxeF8ASZidImapKQEXL8/mvCIhlj8=; b=TnufzgUGCVSy36wTPbD31X08SbrVdnArsXGuKAKMklB/JEtXnjlvvx/FXJHDDIwWjQUie1oNC5AhbqmoCg8UmvWV+2Ss4obQktpBk5zgtbUyF1QMYUhSy5cMaiNo4OgfMyrCIS8XOzxBDdU3UEgMHyMhp2KQK6fBrpDinYFILwlDP3y+Zcz/u4Wz/Im3XO8lS4Rg1p81hWMndNo5t5PR/kdZCOrPtVuFLo50+7AP4EucIGtlM6OdF63qdBkmEsARbYFK0oOnFytjvW86ASvqQJtRMtdmy2FDbuZs5ZQxzG0MOvrOmD1aZr1kLa9EXHWcTTEgi0uQKFpENMPCP4wYjw== 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=zGYMnDLPgyUHcxpxeF8ASZidImapKQEXL8/mvCIhlj8=; b=c9vr4Wkijyip5TVVWXavs33ZvylYt9DplbRlWr9AkpUM6fVT0AXDt6ufQffscLiQAXVRIGAY0Ig+hjDG8JcCBqQS1tmGNV0+DSxs4eeDEeFdbIshULhY1Fs+iypBiPE0fwv5B8/jfFlg6un+vmUCZGtiKX4BjRqcd9EISh/YpHZQqczlw/iCyoUMfSBcSqX/BixK+ZoIiFuxWUqyW5EuGn633IZEtUOinxu7IMMSjwYggI9RJobqNZ78Q2ekJPp2/zoGXagCHpWhOkZB517GAtwZ/RZ2y/H6Xeew2qlBqHRIU1otDaLVNpYD7FRs20As/5zFsOWpOk4YN0ylYcf+Sg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from AM9PR04MB8585.eurprd04.prod.outlook.com (2603:10a6:20b:438::13) by PAXPR04MB8271.eurprd04.prod.outlook.com (2603:10a6:102:1ca::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9366.11; Tue, 25 Nov 2025 11:49:48 +0000 Received: from AM9PR04MB8585.eurprd04.prod.outlook.com ([fe80::8063:666f:9a2e:1dab]) by AM9PR04MB8585.eurprd04.prod.outlook.com ([fe80::8063:666f:9a2e:1dab%5]) with mapi id 15.20.9343.016; Tue, 25 Nov 2025 11:49:48 +0000 From: Vladimir Oltean To: linux-phy@lists.infradead.org Cc: Ioana Ciornei , Vinod Koul , Kishon Vijay Abraham I , Neil Armstrong , Josua Mayer , linux-kernel@vger.kernel.org Subject: [PATCH v5 phy 11/15] phy: lynx-28g: refactor lane->interface to lane->mode Date: Tue, 25 Nov 2025 13:48:43 +0200 Message-Id: <20251125114847.804961-12-vladimir.oltean@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20251125114847.804961-1-vladimir.oltean@nxp.com> References: <20251125114847.804961-1-vladimir.oltean@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AS4P189CA0047.EURP189.PROD.OUTLOOK.COM (2603:10a6:20b:659::19) To AM9PR04MB8585.eurprd04.prod.outlook.com (2603:10a6:20b:438::13) 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: AM9PR04MB8585:EE_|PAXPR04MB8271:EE_ X-MS-Office365-Filtering-Correlation-Id: 72a76843-8c71-475f-7a6e-08de2c18bc2d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|52116014|376014|19092799006|10070799003|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?d1bb27OvZYxaB7SvfwuBbWjgEY/HlW33geQ/xEsZiiMa1wHwLXJOPsWIOLAk?= =?us-ascii?Q?zDP+t4N4M6Cm2hgyXKbA8CRE65DViHaVD1nqiQLIxIbGe7SxwwzWSnDYEUi/?= =?us-ascii?Q?TDqDbJyD+9t/scH+RTQrhcL41YtciFgQO0J8x4gQ7eAf2VCMUF1R8fBgegaD?= =?us-ascii?Q?GS0RNEHAz/T2VwXWf00D+NQx61Wr+azTe5Aedd7kcu+PEv5BJHJvZ3D8T9dK?= =?us-ascii?Q?mAj4uwKIIgoaPq1EUn89UOD/DjtQfsK2yzvopkq0+0YfD+sosUgfkG6XSQeZ?= =?us-ascii?Q?5pbIBHLZmsCRsjHnhVAOlU63HR+ESmSWx05V8HeK3lF22O/HnjhCizhRTgCF?= =?us-ascii?Q?OWycG5R5ps8ugF82EPtEF9wpQZAAkykDep3euJT9yru2EcU2Rim1uz2p2tDb?= =?us-ascii?Q?qlwVCmVpHY1eel0awVrI6VZ6FucsDBRfU1rRtOsae3I2Q8JZRRN/m92xUB/d?= =?us-ascii?Q?oiXNIQ2s/70MfsUWxC3T1nv86DTGtmQZvnhtvIWxsV7ZIPirLmILHHIcmaO4?= =?us-ascii?Q?H0vCrD8Ppq9IOeftSSHCgf8k+ts/f30QNtnrduw4nEP6WvQeqmKlItShZWYq?= =?us-ascii?Q?k8FBKDD4OxrdG/567B7ckn5u0NLgZEOhEVdiBDgfFVtX7iDzvyHQU2riCPpR?= =?us-ascii?Q?H8dSZ/qG/mHkpEeXTASLqKuD7Xlj8FzPn9c/8DCKYgOpZhmjgW89Crv3X/8H?= =?us-ascii?Q?FDXq2zEGPAxsSjbVnwE0tG+CHCgpNFuiFOi9YwsJudAcqVqTPYpiaKKJ0Q7c?= =?us-ascii?Q?HycxocJpwu9YfVliCMDOyBL62QHzmdvsMyf4txtS/qeq8mNDAZ6nHASU02ZW?= =?us-ascii?Q?vu5C110f4P+XB1fOFPw+JkqtHMepi4UqKHzv6ts4rQt5Tqk9iFV5ev8W84cw?= =?us-ascii?Q?Is+h5I/qXj8bNLDPJoYVohWNpTSCZRsdNE9oMO2lUzvO691h3vZyg1A4HMQm?= =?us-ascii?Q?KFgaac9cEDrwEtNA78qmBXIpMYrYlzpn8hhPrdthOGZeJv5/LZ8T/ucnVOPB?= =?us-ascii?Q?wzqLHedSR9jXDrf4w4N6QytKWprC+IDTkhxUL/foY6zkggut/o8x3g8F0/Hc?= =?us-ascii?Q?DTGTin7B1GhlI3EV6ziS/d5Jvf53TrWwaAUIu+qYv97Q+XC+z0tux0H5eBtb?= =?us-ascii?Q?yy3pbGyIFvjQpdmzrrm7SGsFESj+DETllu1l4j7IQAjPzCVwAx0SdXtPP77Z?= =?us-ascii?Q?yyUrL6S4fNU0IS8w4Uzhz0ena8BKxxFY+dKxqOMpuPLG7FUUlyBUNPUGNQoQ?= =?us-ascii?Q?AqFv1Hd5wA9UBDip6R0qmkRKoZ6fricBmWSbUdtwNvMC9Cuvy0DK/jdk2Bxl?= =?us-ascii?Q?asGIXgG5Qs8PvSLaMWuZjYVvwR6961PMC5y71FCYxeosT4N46DbNqffXVQuS?= =?us-ascii?Q?7rurzoM+lnY8hnUFIkD8JGkW2N3/vDERIhb2blrfyjz/VkTFZPjxW9uKy4Xy?= =?us-ascii?Q?rfAcnQtBTSJaFfAe7aEcjXz84WTO8n+l?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM9PR04MB8585.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(52116014)(376014)(19092799006)(10070799003)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?58YpPd0+mJyj973NEfcCe/Gx0UtJ0lJi1Oo7WWx3W4bYbYXn6MTI1e9Ty/a0?= =?us-ascii?Q?eNVzfwYzg04lCT1gUi/fYbt+KC5wY6iYhs4CWjeiNFW/nXkaIZ/l0L5a2866?= =?us-ascii?Q?Q644A4nH08qEEORV66icl8VvZZc/9yzVqWf3DgHpAITbOP8ZmioHghVZtYtj?= =?us-ascii?Q?Buf7kAsdayA1cskhwojLqFmAfHtA0vdYjMwFkw0QAblJdhfPN2+iWzs5LVwW?= =?us-ascii?Q?pccOtDBpW++jYN3mhFUJ63wwUzFsox9sTaJ/oZkwlXL5wypnExNWZ05j4e5Y?= =?us-ascii?Q?OvgS/SE1XxwSrCIiXRyA53MFg+T0gS38dMHEf20FnA4kcQGoX25C46Tzdu3t?= =?us-ascii?Q?KHos7+HBUuAZk9+5MOw5Jfi2Xe5+VG/cw9cE8bYZhM0bkh3r1DoeI7t7V1FW?= =?us-ascii?Q?ncNyE0Avq2qyJHEy+EOPwnTgYrG19GKP5R9ENZkiM0KOOBEY1zSLxIA9xeA0?= =?us-ascii?Q?RxLqCY0awxzQx8OLJTMlcJMc+Fv8fR7PloliV6Wio4C8/xq8wM1HkpaP2k59?= =?us-ascii?Q?mLtWedxk4YzGY6nKpPnx2dG5bEKeLqr5ksZcZJFFAyPrkA0DXs/1zwbe3KmY?= =?us-ascii?Q?dK7jwYOTmgrG+WkHtaBY1Qmj8zYxnZ+3yt0CteO1j75luVhhNc3hdiG97SMK?= =?us-ascii?Q?QxrQOC76cuhYCOinzQHoO83/Tgjlj8Mc7Pv7VJyiqvlLBP9YEq+biY0253yo?= =?us-ascii?Q?F8/LgcF3sj6J/fXnt215Hs3qnx1SidmzDdZQp+rfvoiDpOhhGYfQlImeX2R+?= =?us-ascii?Q?467+QVeBkNaNhSKLgp8P2++lb4+anxI/EWaHF3+yiARE707PHXIYm+dGQRYu?= =?us-ascii?Q?Y2LYzlQUhsazpz3MxidGNHxFTFYs7m2DrjDu28zwaoMuukp+fWcY5IfrYOzT?= =?us-ascii?Q?pS3zYUhkhy6b95eurTPTvWpzbYUmjIqX5sXQmleXNw2nXjWTLP+6SNEGcSJQ?= =?us-ascii?Q?8RyrswnsfLMcaa4dKy+nNsUGgIteL3D+USv6zKdrUfzbFkrgH4IUxta2czO6?= =?us-ascii?Q?8utApasoSELqDldenLVk3kshnAb5Jn1sSqLbzje9tec8Bg/eBCJWX8Xr5KOz?= =?us-ascii?Q?dUhqUre+IkIIuTLDJdD+TckfVrbtd/VhCvzhm5+FLvqhKAMY6IXvMSXXLAnK?= =?us-ascii?Q?l8WEdtxd5p91Snof4bVZfWtD774h0Nc9oX8RU+PiIASJxbkdXTNjmIUtADTf?= =?us-ascii?Q?MnD4qqKT3bnPJn8yyqvwotuEFlIPb+NPN0yzZj00SPvpJhJcoy3LP9nTwJqd?= =?us-ascii?Q?LnrxRicu3CgsR6GP5LZ+i+0+N+fWQwRfrnqa9Q8/Ntfi1Olpjw44bfNEgmGQ?= =?us-ascii?Q?kwO3sI0TULSengjFFLA0en7rUcagTKMUcximMR+XpGLnpkPUh3+36sHsj51d?= =?us-ascii?Q?KqJwu4+4xtucjTTwsQewGJyeZNW8DXYUVqkbx0soKpldIkaXXOebsWuHUS+6?= =?us-ascii?Q?OLGtW6c4R+ERJkKQpZ3Gi4naptxWjeBaGlA2KD2gpVPPRN//7jUg6M1lgHcT?= =?us-ascii?Q?7lORZ8vmdg6aw9KLxvDFiw3AnYW1vinRUeTaG8ucDMC6GON9cJoId3wkPGPT?= =?us-ascii?Q?jjDUoaHwJFrAjcVVRgOPgTlLa42Yfnm2wg9kskDOZjZ9TmyMnwrtJkU9PKai?= =?us-ascii?Q?bgVujBn+F23MbfFqVMtBeuQ=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 72a76843-8c71-475f-7a6e-08de2c18bc2d X-MS-Exchange-CrossTenant-AuthSource: AM9PR04MB8585.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Nov 2025 11:49:48.4838 (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: 0RmRGBGT4HAAkmYBxOM9tZCWbt4S6MPD8br1EBVCWALUq67S2XgszJlVfXfdL1ntL3eYD+uYCHIO4a5a+s59Cg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAXPR04MB8271 Content-Type: text/plain; charset="utf-8" Lynx 28G is a multi-protocol SerDes - it handles serial Ethernet, PCIe, SATA. The driver should not use the phylib-specific phy_interface_t as an internal data representation, but something specific to its internal capabilities, and only convert to phy_interface_t when PHY_MODE_ETHERNET is selected and used. Otherwise it has no way of representing the non-Ethernet lanes (which was not a short-term goal when the driver was introduced, and is not a goal per se right now either, but should nonetheless be possible). Prefer the "enum lynx_lane_mode" name over "lynx_28g_lane_mode", in preparation of future Lynx 10G SerDes support. This SerDes is part of the same IP family and has similar capabilities, and will reuse some code, hence the common data type. Signed-off-by: Vladimir Oltean --- v3->v5: none v2->v3: - fix lynx_28g_set_mode() by using lane_mode instead of submode - save lane_mode to local variable in lynx_28g_set_mode() v1->v2: none drivers/phy/freescale/phy-fsl-lynx-28g.c | 208 ++++++++++++----------- 1 file changed, 106 insertions(+), 102 deletions(-) diff --git a/drivers/phy/freescale/phy-fsl-lynx-28g.c b/drivers/phy/freesca= le/phy-fsl-lynx-28g.c index c4bfa0ce7726..29ab7213a35d 100644 --- a/drivers/phy/freescale/phy-fsl-lynx-28g.c +++ b/drivers/phy/freescale/phy-fsl-lynx-28g.c @@ -243,6 +243,13 @@ enum lynx_28g_proto_sel { PROTO_SEL_25G_50G_100G =3D 0x1a, }; =20 +enum lynx_lane_mode { + LANE_MODE_UNKNOWN, + LANE_MODE_1000BASEX_SGMII, + LANE_MODE_10GBASER_USXGMII, + LANE_MODE_MAX, +}; + struct lynx_28g_proto_conf { /* LNaGCR0 */ int proto_sel; @@ -280,8 +287,8 @@ struct lynx_28g_proto_conf { int smp_autoz_eg1r; }; =20 -static const struct lynx_28g_proto_conf lynx_28g_proto_conf[PHY_INTERFACE_= MODE_MAX] =3D { - [PHY_INTERFACE_MODE_SGMII] =3D { +static const struct lynx_28g_proto_conf lynx_28g_proto_conf[LANE_MODE_MAX]= =3D { + [LANE_MODE_1000BASEX_SGMII] =3D { .proto_sel =3D LNaGCR0_PROTO_SEL_SGMII, .if_width =3D LNaGCR0_IF_WIDTH_10_BIT, .teq_type =3D EQ_TYPE_NO_EQ, @@ -309,35 +316,7 @@ static const struct lynx_28g_proto_conf lynx_28g_proto= _conf[PHY_INTERFACE_MODE_M .smp_autoz_d1r =3D 0, .smp_autoz_eg1r =3D 0, }, - [PHY_INTERFACE_MODE_1000BASEX] =3D { - .proto_sel =3D LNaGCR0_PROTO_SEL_SGMII, - .if_width =3D LNaGCR0_IF_WIDTH_10_BIT, - .teq_type =3D EQ_TYPE_NO_EQ, - .sgn_preq =3D 1, - .ratio_preq =3D 0, - .sgn_post1q =3D 1, - .ratio_post1q =3D 0, - .amp_red =3D 6, - .adpt_eq =3D 48, - .enter_idle_flt_sel =3D 4, - .exit_idle_flt_sel =3D 3, - .data_lost_th_sel =3D 1, - .gk2ovd =3D 0x1f, - .gk3ovd =3D 0, - .gk4ovd =3D 0, - .gk2ovd_en =3D 1, - .gk3ovd_en =3D 1, - .gk4ovd_en =3D 0, - .eq_offset_ovd =3D 0x1f, - .eq_offset_ovd_en =3D 0, - .eq_offset_rng_dbl =3D 0, - .eq_blw_sel =3D 0, - .eq_boost =3D 0, - .spare_in =3D 0, - .smp_autoz_d1r =3D 0, - .smp_autoz_eg1r =3D 0, - }, - [PHY_INTERFACE_MODE_10GBASER] =3D { + [LANE_MODE_10GBASER_USXGMII] =3D { .proto_sel =3D LNaGCR0_PROTO_SEL_XFI, .if_width =3D LNaGCR0_IF_WIDTH_20_BIT, .teq_type =3D EQ_TYPE_2TAP, @@ -379,7 +358,7 @@ struct lynx_28g_pll { struct lynx_28g_priv *priv; u32 rstctl, cr0, cr1; int id; - DECLARE_PHY_INTERFACE_MASK(supported); + DECLARE_BITMAP(supported, LANE_MODE_MAX); }; =20 struct lynx_28g_lane { @@ -388,7 +367,7 @@ struct lynx_28g_lane { bool powered_up; bool init; unsigned int id; - phy_interface_t interface; + enum lynx_lane_mode mode; }; =20 struct lynx_28g_priv { @@ -429,7 +408,34 @@ static void lynx_28g_rmw(struct lynx_28g_priv *priv, u= nsigned long off, #define lynx_28g_pll_read(pll, reg) \ ioread32((pll)->priv->base + reg((pll)->id)) =20 -static bool lynx_28g_supports_interface(struct lynx_28g_priv *priv, int in= tf) +static const char *lynx_lane_mode_str(enum lynx_lane_mode lane_mode) +{ + switch (lane_mode) { + case LANE_MODE_1000BASEX_SGMII: + return "1000Base-X/SGMII"; + case LANE_MODE_10GBASER_USXGMII: + return "10GBase-R/USXGMII"; + default: + return "unknown"; + } +} + +static enum lynx_lane_mode phy_interface_to_lane_mode(phy_interface_t intf) +{ + switch (intf) { + case PHY_INTERFACE_MODE_SGMII: + case PHY_INTERFACE_MODE_1000BASEX: + return LANE_MODE_1000BASEX_SGMII; + case PHY_INTERFACE_MODE_10GBASER: + case PHY_INTERFACE_MODE_USXGMII: + return LANE_MODE_10GBASER_USXGMII; + default: + return LANE_MODE_UNKNOWN; + } +} + +static bool lynx_28g_supports_lane_mode(struct lynx_28g_priv *priv, + enum lynx_lane_mode mode) { int i; =20 @@ -437,7 +443,7 @@ static bool lynx_28g_supports_interface(struct lynx_28g= _priv *priv, int intf) if (PLLnRSTCTL_DIS(priv->pll[i].rstctl)) continue; =20 - if (test_bit(intf, priv->pll[i].supported)) + if (test_bit(mode, priv->pll[i].supported)) return true; } =20 @@ -445,7 +451,7 @@ static bool lynx_28g_supports_interface(struct lynx_28g= _priv *priv, int intf) } =20 static struct lynx_28g_pll *lynx_28g_pll_get(struct lynx_28g_priv *priv, - phy_interface_t intf) + enum lynx_lane_mode mode) { struct lynx_28g_pll *pll; int i; @@ -456,27 +462,27 @@ static struct lynx_28g_pll *lynx_28g_pll_get(struct l= ynx_28g_priv *priv, if (PLLnRSTCTL_DIS(pll->rstctl)) continue; =20 - if (test_bit(intf, pll->supported)) + if (test_bit(mode, pll->supported)) return pll; } =20 /* no pll supports requested mode, either caller forgot to check * lynx_28g_supports_lane_mode, or this is a bug. */ - dev_WARN_ONCE(priv->dev, 1, "no pll for interface %s\n", phy_modes(intf)); + dev_WARN_ONCE(priv->dev, 1, "no pll for lane mode %s\n", + lynx_lane_mode_str(mode)); return NULL; } =20 static void lynx_28g_lane_set_nrate(struct lynx_28g_lane *lane, struct lynx_28g_pll *pll, - phy_interface_t intf) + enum lynx_lane_mode lane_mode) { switch (FIELD_GET(PLLnCR1_FRATE_SEL, pll->cr1)) { case PLLnCR1_FRATE_5G_10GVCO: case PLLnCR1_FRATE_5G_25GVCO: - switch (intf) { - case PHY_INTERFACE_MODE_SGMII: - case PHY_INTERFACE_MODE_1000BASEX: + switch (lane_mode) { + case LANE_MODE_1000BASEX_SGMII: lynx_28g_lane_rmw(lane, LNaTGCR0, FIELD_PREP(LNaTGCR0_N_RATE, LNaTGCR0_N_RATE_QUARTER), LNaTGCR0_N_RATE); @@ -489,9 +495,8 @@ static void lynx_28g_lane_set_nrate(struct lynx_28g_lan= e *lane, } break; case PLLnCR1_FRATE_10G_20GVCO: - switch (intf) { - case PHY_INTERFACE_MODE_10GBASER: - case PHY_INTERFACE_MODE_USXGMII: + switch (lane_mode) { + case LANE_MODE_10GBASER_USXGMII: lynx_28g_lane_rmw(lane, LNaTGCR0, FIELD_PREP(LNaTGCR0_N_RATE, LNaTGCR0_N_RATE_FULL), LNaTGCR0_N_RATE); @@ -580,17 +585,16 @@ static int lynx_28g_power_on(struct phy *phy) return 0; } =20 -static int lynx_28g_get_pccr(phy_interface_t interface, int lane, +static int lynx_28g_get_pccr(enum lynx_lane_mode lane_mode, int lane, struct lynx_pccr *pccr) { - switch (interface) { - case PHY_INTERFACE_MODE_SGMII: - case PHY_INTERFACE_MODE_1000BASEX: + switch (lane_mode) { + case LANE_MODE_1000BASEX_SGMII: pccr->offset =3D PCC8; pccr->width =3D 4; pccr->shift =3D SGMII_CFG(lane); break; - case PHY_INTERFACE_MODE_10GBASER: + case LANE_MODE_10GBASER_USXGMII: pccr->offset =3D PCCC; pccr->width =3D 4; pccr->shift =3D SXGMII_CFG(lane); @@ -602,13 +606,12 @@ static int lynx_28g_get_pccr(phy_interface_t interfac= e, int lane, return 0; } =20 -static int lynx_28g_get_pcvt_offset(int lane, phy_interface_t interface) +static int lynx_28g_get_pcvt_offset(int lane, enum lynx_lane_mode lane_mod= e) { - switch (interface) { - case PHY_INTERFACE_MODE_SGMII: - case PHY_INTERFACE_MODE_1000BASEX: + switch (lane_mode) { + case LANE_MODE_1000BASEX_SGMII: return SGMIIaCR0(lane); - case PHY_INTERFACE_MODE_10GBASER: + case LANE_MODE_10GBASER_USXGMII: return SXGMIIaCR0(lane); default: return -EOPNOTSUPP; @@ -616,14 +619,14 @@ static int lynx_28g_get_pcvt_offset(int lane, phy_int= erface_t interface) } =20 static int lynx_pccr_write(struct lynx_28g_lane *lane, - phy_interface_t interface, u32 val) + enum lynx_lane_mode lane_mode, u32 val) { struct lynx_28g_priv *priv =3D lane->priv; struct lynx_pccr pccr; u32 old, tmp, mask; int err; =20 - err =3D lynx_28g_get_pccr(interface, lane->id, &pccr); + err =3D lynx_28g_get_pccr(lane_mode, lane->id, &pccr); if (err) return err; =20 @@ -638,13 +641,13 @@ static int lynx_pccr_write(struct lynx_28g_lane *lane, return 0; } =20 -static int lynx_pcvt_read(struct lynx_28g_lane *lane, phy_interface_t inte= rface, - int cr, u32 *val) +static int lynx_pcvt_read(struct lynx_28g_lane *lane, + enum lynx_lane_mode lane_mode, int cr, u32 *val) { struct lynx_28g_priv *priv =3D lane->priv; int offset; =20 - offset =3D lynx_28g_get_pcvt_offset(lane->id, interface); + offset =3D lynx_28g_get_pcvt_offset(lane->id, lane_mode); if (offset < 0) return offset; =20 @@ -653,13 +656,13 @@ static int lynx_pcvt_read(struct lynx_28g_lane *lane,= phy_interface_t interface, return 0; } =20 -static int lynx_pcvt_write(struct lynx_28g_lane *lane, phy_interface_t int= erface, - int cr, u32 val) +static int lynx_pcvt_write(struct lynx_28g_lane *lane, + enum lynx_lane_mode lane_mode, int cr, u32 val) { struct lynx_28g_priv *priv =3D lane->priv; int offset; =20 - offset =3D lynx_28g_get_pcvt_offset(lane->id, interface); + offset =3D lynx_28g_get_pcvt_offset(lane->id, lane_mode); if (offset < 0) return offset; =20 @@ -668,43 +671,44 @@ static int lynx_pcvt_write(struct lynx_28g_lane *lane= , phy_interface_t interface return 0; } =20 -static int lynx_pcvt_rmw(struct lynx_28g_lane *lane, phy_interface_t inter= face, +static int lynx_pcvt_rmw(struct lynx_28g_lane *lane, + enum lynx_lane_mode lane_mode, int cr, u32 val, u32 mask) { int err; u32 tmp; =20 - err =3D lynx_pcvt_read(lane, interface, cr, &tmp); + err =3D lynx_pcvt_read(lane, lane_mode, cr, &tmp); if (err) return err; =20 tmp &=3D ~mask; tmp |=3D val; =20 - return lynx_pcvt_write(lane, interface, cr, tmp); + return lynx_pcvt_write(lane, lane_mode, cr, tmp); } =20 static void lynx_28g_lane_remap_pll(struct lynx_28g_lane *lane, - phy_interface_t interface) + enum lynx_lane_mode lane_mode) { struct lynx_28g_priv *priv =3D lane->priv; struct lynx_28g_pll *pll; =20 /* Switch to the PLL that works with this interface type */ - pll =3D lynx_28g_pll_get(priv, interface); + pll =3D lynx_28g_pll_get(priv, lane_mode); if (unlikely(pll =3D=3D NULL)) return; =20 lynx_28g_lane_set_pll(lane, pll); =20 /* Choose the portion of clock net to be used on this lane */ - lynx_28g_lane_set_nrate(lane, pll, interface); + lynx_28g_lane_set_nrate(lane, pll, lane_mode); } =20 static void lynx_28g_lane_change_proto_conf(struct lynx_28g_lane *lane, - phy_interface_t interface) + enum lynx_lane_mode lane_mode) { - const struct lynx_28g_proto_conf *conf =3D &lynx_28g_proto_conf[interface= ]; + const struct lynx_28g_proto_conf *conf =3D &lynx_28g_proto_conf[lane_mode= ]; =20 lynx_28g_lane_rmw(lane, LNaGCR0, FIELD_PREP(LNaGCR0_PROTO_SEL, conf->proto_sel) | @@ -775,21 +779,20 @@ static void lynx_28g_lane_change_proto_conf(struct ly= nx_28g_lane *lane, } =20 static int lynx_28g_lane_disable_pcvt(struct lynx_28g_lane *lane, - phy_interface_t interface) + enum lynx_lane_mode lane_mode) { struct lynx_28g_priv *priv =3D lane->priv; int err; =20 spin_lock(&priv->pcc_lock); =20 - err =3D lynx_pccr_write(lane, interface, 0); + err =3D lynx_pccr_write(lane, lane_mode, 0); if (err) goto out; =20 - switch (interface) { - case PHY_INTERFACE_MODE_SGMII: - case PHY_INTERFACE_MODE_1000BASEX: - err =3D lynx_pcvt_rmw(lane, interface, CR(1), 0, + switch (lane_mode) { + case LANE_MODE_1000BASEX_SGMII: + err =3D lynx_pcvt_rmw(lane, lane_mode, CR(1), 0, SGMIIaCR1_SGPCS_EN); break; default: @@ -803,7 +806,7 @@ static int lynx_28g_lane_disable_pcvt(struct lynx_28g_l= ane *lane, } =20 static int lynx_28g_lane_enable_pcvt(struct lynx_28g_lane *lane, - phy_interface_t interface) + enum lynx_lane_mode lane_mode) { struct lynx_28g_priv *priv =3D lane->priv; u32 val; @@ -811,10 +814,9 @@ static int lynx_28g_lane_enable_pcvt(struct lynx_28g_l= ane *lane, =20 spin_lock(&priv->pcc_lock); =20 - switch (interface) { - case PHY_INTERFACE_MODE_SGMII: - case PHY_INTERFACE_MODE_1000BASEX: - err =3D lynx_pcvt_rmw(lane, interface, CR(1), SGMIIaCR1_SGPCS_EN, + switch (lane_mode) { + case LANE_MODE_1000BASEX_SGMII: + err =3D lynx_pcvt_rmw(lane, lane_mode, CR(1), SGMIIaCR1_SGPCS_EN, SGMIIaCR1_SGPCS_EN); break; default: @@ -823,19 +825,18 @@ static int lynx_28g_lane_enable_pcvt(struct lynx_28g_= lane *lane, =20 val =3D 0; =20 - switch (interface) { - case PHY_INTERFACE_MODE_SGMII: - case PHY_INTERFACE_MODE_1000BASEX: + switch (lane_mode) { + case LANE_MODE_1000BASEX_SGMII: val |=3D PCC8_SGMIIa_CFG; break; - case PHY_INTERFACE_MODE_10GBASER: + case LANE_MODE_10GBASER_USXGMII: val |=3D PCCC_SXGMIIn_CFG | PCCC_SXGMIIn_XFI; break; default: break; } =20 - err =3D lynx_pccr_write(lane, interface, val); + err =3D lynx_pccr_write(lane, lane_mode, val); =20 spin_unlock(&priv->pcc_lock); =20 @@ -847,18 +848,20 @@ static int lynx_28g_set_mode(struct phy *phy, enum ph= y_mode mode, int submode) struct lynx_28g_lane *lane =3D phy_get_drvdata(phy); struct lynx_28g_priv *priv =3D lane->priv; int powered_up =3D lane->powered_up; + enum lynx_lane_mode lane_mode; int err =3D 0; =20 if (mode !=3D PHY_MODE_ETHERNET) return -EOPNOTSUPP; =20 - if (lane->interface =3D=3D PHY_INTERFACE_MODE_NA) + if (lane->mode =3D=3D LANE_MODE_UNKNOWN) return -EOPNOTSUPP; =20 - if (!lynx_28g_supports_interface(priv, submode)) + lane_mode =3D phy_interface_to_lane_mode(submode); + if (!lynx_28g_supports_lane_mode(priv, lane_mode)) return -EOPNOTSUPP; =20 - if (submode =3D=3D lane->interface) + if (lane_mode =3D=3D lane->mode) return 0; =20 /* If the lane is powered up, put the lane into the halt state while @@ -867,15 +870,15 @@ static int lynx_28g_set_mode(struct phy *phy, enum ph= y_mode mode, int submode) if (powered_up) lynx_28g_power_off(phy); =20 - err =3D lynx_28g_lane_disable_pcvt(lane, lane->interface); + err =3D lynx_28g_lane_disable_pcvt(lane, lane->mode); if (err) goto out; =20 - lynx_28g_lane_change_proto_conf(lane, submode); - lynx_28g_lane_remap_pll(lane, submode); - WARN_ON(lynx_28g_lane_enable_pcvt(lane, submode)); + lynx_28g_lane_change_proto_conf(lane, lane_mode); + lynx_28g_lane_remap_pll(lane, lane_mode); + WARN_ON(lynx_28g_lane_enable_pcvt(lane, lane_mode)); =20 - lane->interface =3D submode; + lane->mode =3D lane_mode; =20 out: if (powered_up) @@ -889,11 +892,13 @@ static int lynx_28g_validate(struct phy *phy, enum ph= y_mode mode, int submode, { struct lynx_28g_lane *lane =3D phy_get_drvdata(phy); struct lynx_28g_priv *priv =3D lane->priv; + enum lynx_lane_mode lane_mode; =20 if (mode !=3D PHY_MODE_ETHERNET) return -EOPNOTSUPP; =20 - if (!lynx_28g_supports_interface(priv, submode)) + lane_mode =3D phy_interface_to_lane_mode(submode); + if (!lynx_28g_supports_lane_mode(priv, lane_mode)) return -EOPNOTSUPP; =20 return 0; @@ -946,12 +951,11 @@ static void lynx_28g_pll_read_configuration(struct ly= nx_28g_priv *priv) case PLLnCR1_FRATE_5G_10GVCO: case PLLnCR1_FRATE_5G_25GVCO: /* 5GHz clock net */ - __set_bit(PHY_INTERFACE_MODE_1000BASEX, pll->supported); - __set_bit(PHY_INTERFACE_MODE_SGMII, pll->supported); + __set_bit(LANE_MODE_1000BASEX_SGMII, pll->supported); break; case PLLnCR1_FRATE_10G_20GVCO: /* 10.3125GHz clock net */ - __set_bit(PHY_INTERFACE_MODE_10GBASER, pll->supported); + __set_bit(LANE_MODE_10GBASER_USXGMII, pll->supported); break; default: /* 6GHz, 12.890625GHz, 8GHz */ @@ -1002,13 +1006,13 @@ static void lynx_28g_lane_read_configuration(struct= lynx_28g_lane *lane) protocol =3D FIELD_GET(LNaPSS_TYPE, pss); switch (protocol) { case LNaPSS_TYPE_SGMII: - lane->interface =3D PHY_INTERFACE_MODE_SGMII; + lane->mode =3D LANE_MODE_1000BASEX_SGMII; break; case LNaPSS_TYPE_XFI: - lane->interface =3D PHY_INTERFACE_MODE_10GBASER; + lane->mode =3D LANE_MODE_10GBASER_USXGMII; break; default: - lane->interface =3D PHY_INTERFACE_MODE_NA; + lane->mode =3D LANE_MODE_UNKNOWN; } } =20 --=20 2.34.1 From nobody Tue Dec 2 00:03:21 2025 Received: from PA4PR04CU001.outbound.protection.outlook.com (mail-francecentralazon11013011.outbound.protection.outlook.com [40.107.162.11]) (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 6058F31B119 for ; Tue, 25 Nov 2025 11:49:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.162.11 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764071400; cv=fail; b=MxP/RD4OEsnGXdSLnF1Jl5N6J/IgvyPxLE1taWNCKvhPEWVwCd0aa/8dTURZdtQ1KzQLVEDdaB5hHIIDNTJuHvzwHZsreSErP2vvuPKTN6vZrtMcYhZmnspdJrAsgXOhZaMNUN9MwjDP+nzOaEGNsWZjN/xZxjP42FJDWcDIFpo= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764071400; c=relaxed/simple; bh=Qs/Tb6mnGeMJ9GXFVasW3l909uVUHS2SVZZOFX4Gfp4=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=rM3e9xzuUKHcvXYzcam11dmyM0kpSyS35/5QMyoyK3MWNaxfEHdCq4Pd2rr5un6B26H3CtfTJQ+kauhZrS68gHcL7TVzPJC57A3+9jQfLm1tfActYpfny1BBdeN9Y/PVw8ICEO4ANS+fHv8nXEmkHf8xbk0fWdZQlMJ7Ap1Vkhg= 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=XhJH2wZl; arc=fail smtp.client-ip=40.107.162.11 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="XhJH2wZl" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=zRcEAydQ0Rc25m+2lXcvqsVX/zjLRrRAHmqFHxKaWUxNsx8tw2t3mnXdNqusIFqbYeGX2L5dgI6wFjjrCCTgAwVI8RropUn2BPLKpDZwx9nqD4H5IpbHIdcJ4KqWRyl+LJDCai68lHFql3vIruabekC+k8/oPg5OHFssUpJpV2krZ033OLFqzmrO8NruejcTgNCqrmOLJXelr1GnqHbPDl7L10jEc796Czb5MGxxJlvjY1sOoXHChKcP/HxsLZ9diYqpXVLEdvPau40JRUFcQgyRNqj234EVFEfF9VyDOB6F31uGFUdrrD7lmKbCJ5q7O4lqQEaFwVdxPrKXyit23g== 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=MO5oT8G5/vmLKBzS8DEmmTxUhKY/bW6oAN8BrxM7vEw=; b=A2HPO9bmvU5SoYlK11PQbm7yKyVbFQAyyf4NjoMel45esJryUN27Szt0JRu3goM8/WMdZfI9condIlMZp9u5nLEYD5s1OF3GNHMedc43yJ1nuh7W/hWkqUoyWYO2HEKHxNmSliL2XS2ZuAd+O6Dki9Z+OclPfIA+Wrjs+hyWpSWFL6LNF5QKwiEwpB18gp2h9lWEXuRN5pZsA52FYltuFbtOw40YpHYcuKMAJKxEU4clchYJTgKC9L37er+lBS4NmO9S+SO1WGQq8MfOosTYIbAr/RNVSGjm6VQS2Jr3WlaRrdJat/SzfVPvujN8az5Tca8Wi7hJR5xq09XIuRwHDg== 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=MO5oT8G5/vmLKBzS8DEmmTxUhKY/bW6oAN8BrxM7vEw=; b=XhJH2wZluuJ2xQy7Dk4fsk82RAR1jIeoON4yWmnOEzLMgZCPiasSusxQ7xMvhxaXYO98uDlLCwN0HO7UcGs1PNHkqbULcVlYwj+J3KwpH0Nip2giExQmSWxYTwzPiPNZbJvCnWd2gSKDIT7xmqyydrrXDBKazr7/LRK4DBDeXzG3tjJKU7nzgcW8G/7R8WJYHhZCIyK43pAF2NZDqycIOx1oH28jjJkhmd6gnYrF+mEbKfPH47VBQ/2/0UHpymH2HbPx04Afp7AS5RoEl7pftGpW3UhsHKpdCAlI4HH7vJJzrPrcRHjS4Mh9jJyzKXjofAkp92y844exNBnQiSGlEg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from AM9PR04MB8585.eurprd04.prod.outlook.com (2603:10a6:20b:438::13) by PAXPR04MB9201.eurprd04.prod.outlook.com (2603:10a6:102:232::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9366.11; Tue, 25 Nov 2025 11:49:49 +0000 Received: from AM9PR04MB8585.eurprd04.prod.outlook.com ([fe80::8063:666f:9a2e:1dab]) by AM9PR04MB8585.eurprd04.prod.outlook.com ([fe80::8063:666f:9a2e:1dab%5]) with mapi id 15.20.9343.016; Tue, 25 Nov 2025 11:49:49 +0000 From: Vladimir Oltean To: linux-phy@lists.infradead.org Cc: Ioana Ciornei , Vinod Koul , Kishon Vijay Abraham I , Neil Armstrong , Josua Mayer , linux-kernel@vger.kernel.org Subject: [PATCH v5 phy 12/15] phy: lynx-28g: distinguish between 10GBASE-R and USXGMII Date: Tue, 25 Nov 2025 13:48:44 +0200 Message-Id: <20251125114847.804961-13-vladimir.oltean@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20251125114847.804961-1-vladimir.oltean@nxp.com> References: <20251125114847.804961-1-vladimir.oltean@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AS4P189CA0047.EURP189.PROD.OUTLOOK.COM (2603:10a6:20b:659::19) To AM9PR04MB8585.eurprd04.prod.outlook.com (2603:10a6:20b:438::13) 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: AM9PR04MB8585:EE_|PAXPR04MB9201:EE_ X-MS-Office365-Filtering-Correlation-Id: 72551ec3-5f8e-435d-8c67-08de2c18bcdb X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|10070799003|376014|52116014|366016|19092799006; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?IGlzJxOuWD4g6XN7XI2AJAVASspe0rYv3mcDCunHNccJRLws6L7V96+fjLSc?= =?us-ascii?Q?OLydJsUDJDGmRVrmXCM4yJvBr7Reg4l0Sk3CCsO5qxCxJr5e/ZbJqpmcFN+R?= =?us-ascii?Q?pUII3jzPPgnwvesyKh6yl2q5I6eyIvCxTg4lPmJGau2Ee2pV2zDWFiGl1dMx?= =?us-ascii?Q?SDovs2UcxS//ntsOFAvAQBVvGkSnjj5UJoXVvksDe7h2f/BcXrHJPZtp7ztL?= =?us-ascii?Q?xg6O0MzWMzKKQXFrQA5rrC3dq1u5GQVSygEw8WjBIaEx0r9YBJSerx97Ozv9?= =?us-ascii?Q?SJ3UmdqMvNgKYlmyXCPAjlsKPZfDnaElUukwHx5HShOo2uv9XofuWZpRUg/o?= =?us-ascii?Q?tgDJGXvPT1EhFPG/Q92hxyy41/1zTi18pIpzm8d80ORUWSRFJ4uTYLuv2+UE?= =?us-ascii?Q?fxnEnLAD6s3OLJoXnZhfDLujxzTJ6kwjdEZIcB/i8/NSu2c/FnR3j5JYve11?= =?us-ascii?Q?dFok8COAa0pKZPXfifdYi6ieP+QHwrvIZjL3UfeG7f9l41wyHmrSWOo/VMIO?= =?us-ascii?Q?8iswEDu6VhnUEpnFmYenljNrEZ/+U4vA0Pbu4Pj/GpvkplPijR+dvCjxdvp2?= =?us-ascii?Q?pfa4xRUtqpNLpHbuesUG4DXnuPz44QQ2mcRCXHo1Ll9rT2+xNbhS8aWL40pe?= =?us-ascii?Q?MOn4sgW5UnqEFjIlPEs0aqpeq8PrnzATk6u3KeLhRIZWE5ONjQnfSQ4YIYfk?= =?us-ascii?Q?GeQPFEB67nVHvMyE0gFY5u621eWqfacozmVQD+rEn51eLdAHBFStv2hFhx0t?= =?us-ascii?Q?hbzseWZzi6m4Aq0Ua/vhEjSxNQtfkkpGYdQ8zjZo63KRqwQFaMrCW4avshmY?= =?us-ascii?Q?jaofQ5Vbo/N++gN9JYdO6PXROAc/bh9ZTxd0S/TZooQm7u98pSFOiBxk/rg1?= =?us-ascii?Q?b+xZm2wB5xithotn04/gjE/OgCHQ4oft0fFSnIfKINWT2IkhYp2iTUGdkS6w?= =?us-ascii?Q?l+EQ0gxdsKnu7yozqm//LqdmveaKA38JN5OgZ8K3i73oY8xy4+KJKI4l5dli?= =?us-ascii?Q?ZxUs1AdnJoea7TmuxDVIP7IuLIBOIiVud7b1Z+6vDIWT0XxUs/bYS7XwYCKt?= =?us-ascii?Q?xG4B5FMgEXhPIDSI0dD/sh8liZj0aU+9CovE8WmKDUICCB/VUzUTva5KhqSv?= =?us-ascii?Q?4uR498qMSCizr/SpOUP1Ew97b75kZUsM583WK7hz2Qbd8gg/ERF9NpUSkK5f?= =?us-ascii?Q?RogosUiWp8HlttTTZdU8+AicHekadRiLm092hYgMfqcmO9GXTwIIr0AXQ+uc?= =?us-ascii?Q?y5xvxx2eWtAJfq5m08lqojlrT5TJtU1iSlW3SalzjtdfVllMhTnNB3QZalsl?= =?us-ascii?Q?J7Q+bMs9KBw4GdVzusdesOJoc47lV55iJDL1SHJsfg2DvQs9UYZBeT5jC5do?= =?us-ascii?Q?62/O0MTrdYRFdti/zjIyAV8ylE9tJq0zjCWH+LRPqjsnQaKaN7/rCKBxY9yg?= =?us-ascii?Q?wBEJHuE7TcyAJbBLEEA9QaqlxP8s9KP1?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM9PR04MB8585.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(10070799003)(376014)(52116014)(366016)(19092799006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?5jjGksl6lmi4j2l57O3tVv4+L4m7AIl+qKnnxuncREralvJuqBj5f0AABaum?= =?us-ascii?Q?LjtaomXRmuCIMJJFIve5GxPFsMPOOg33aXzhyf5w2lSTCXTRd4+ObIqzkUBu?= =?us-ascii?Q?v9FjIUkTV1jyE+ltv4hUNI1AAzJEtrtTXBwr4gwlFaXKqudEzR07YHk8T+0y?= =?us-ascii?Q?PrgLxvPm5gE9vA7MRnz9aL5fIwmHAaZjHaCHodNeGeCAyejOlZ2Y3tSbtVp9?= =?us-ascii?Q?BxapBK9tH9mDNsMWrc4Ml4GhvUaWI497AHt7QPY4pRdAjIsHD7UBIxP34Khz?= =?us-ascii?Q?ZncyCUC37ldhTMBinZEHZVwcoQNvKu2eF/UCL+/Ati3LIHmlIBJxciRaDPAO?= =?us-ascii?Q?RGB0Kvafk0lDQyGWfqlsTP+wV6P6QL+gUk+NrQdcB87PspZIWr6zIqZSw1Nm?= =?us-ascii?Q?FIln4zie4I4rLj1paHGT7IFbtPX+fx0MhSctUAA/DsV8NVKYCdiddUTWaays?= =?us-ascii?Q?t5IoFcopyXBFFRfLWEKPaAdUzw+RJo/8gktpaT607h8luzBsm5uCzAG8Em+p?= =?us-ascii?Q?AmDhfiidSfDgdhARDtQMLYimu9oKIt1a10xoJ+V9FjDxhJRY4Vyy7EN5BDFP?= =?us-ascii?Q?Va0dO6H/m/zvA5L6Iv2WRjqzuxd96pSLBXPPKiLTwJLysymNXKqKTOhRcMAR?= =?us-ascii?Q?xrRH5kEXixYt/UfnRVIAfpqyBwBenHdTplxWgCFVnku7RBCzkDHlUZu/p63a?= =?us-ascii?Q?bX4v3jfUmFsb5Kb2iFHmB/BzMkGY1ZfOarb8XPsWxvhqydI9oArQRutDUHcW?= =?us-ascii?Q?VwogY3hCkGqRobGWVyYLcu+VeWiMyGAVnGWyix9TiHhNng/wMUQHJdklUhFc?= =?us-ascii?Q?J/+22weyCPbHqv3lQiTYzlxYI+HeCNZPYQ63/J+e5U8xyW0nuq4JOczYDf/s?= =?us-ascii?Q?tmE40W683BRFuRNh072uZcQJpbugeDWUR9U1OnTUGlFuw5TljigpH3kpEQB4?= =?us-ascii?Q?cHAw17IbLsS91SBW2GrE7YeogBe53gfK3CJ4jAFPcK4r8c3qyqk/+2PuTgaB?= =?us-ascii?Q?cyWv9pKoebRhT6FmaItLUV8Db3AozhdYU75hhuPPsd97CuV6w5iL2BLn8CE6?= =?us-ascii?Q?M3jtmzatM7uhBA56uoIH3SOG66BMCgApVJ29Dm2nsDIZ1/pzq/zzbz8dTYFM?= =?us-ascii?Q?KFUo/5YnhWmCd88Ew8V/7RYgSPGu+bpAaRH+5CJ6fL9z/GyqNOM9dFvCEd3c?= =?us-ascii?Q?WLae1gDwoxNE193rbnje6YTHUL4WsKaXldmBsHH6qO+AYvLH7k/5Ixi9ol3y?= =?us-ascii?Q?LpyRO40i08+tqBtjM260twVJl0vFnMdOdbM4OZwmYcE+S3/0WLqO9XOKUctQ?= =?us-ascii?Q?/s36Xoq1SCclMafqJjdgpc2s2maVJ3Q+P02TReM2Ggk1EX2bAhJRRyRL3u4o?= =?us-ascii?Q?EpR/KoQbahFFmrHRwBu7PElnzv0ssZ/PPLh+LhDl+JvBotiabGzN+DeRXNZX?= =?us-ascii?Q?27z4huOd9nyzjs3cmNOyE6k/hnra5vFNPVw7xeE3YtLlJqTmaKKyKFnajA6/?= =?us-ascii?Q?kZJLV0a2qRIRjb0Gn/7GpgzFzWsRVxzukM5PlcCAr3NYX83BVxN3frrdKQV0?= =?us-ascii?Q?K9a2cMFK3uYrbtF8Ehw0coxs32XJCJ9cp5+S4HwCgHX4MpAAjN/bxyWlue0q?= =?us-ascii?Q?zOZ/F7dTyAUqEID4JPDCMW4=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 72551ec3-5f8e-435d-8c67-08de2c18bcdb X-MS-Exchange-CrossTenant-AuthSource: AM9PR04MB8585.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Nov 2025 11:49:49.4362 (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: z6390FKlLwJw3tdtIOU6J7t4H8lVwgrSPtODOyAC0m7E8a/PYg16qNLH5LjclcqxoTaMQ9Nj9zcXsVkkuQOxPw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAXPR04MB9201 Content-Type: text/plain; charset="utf-8" The driver does not handle well protocol switching to or from USXGMII, because it conflates it with 10GBase-R. In the expected USXGMII use case, that isn't a problem, because SerDes protocol switching performed by the lynx-28g driver is not necessary, because USXGMII natively supports multiple speeds, as opposed to SFP modules using 1000Base-X or 10GBase-R which require switching between the 2. That being said, let's be explicit, and in case someone requests a protocol change which involves USXGMII, let's do the right thing. Signed-off-by: Vladimir Oltean --- v1->v5: none drivers/phy/freescale/phy-fsl-lynx-28g.c | 87 ++++++++++++++++++++---- 1 file changed, 74 insertions(+), 13 deletions(-) diff --git a/drivers/phy/freescale/phy-fsl-lynx-28g.c b/drivers/phy/freesca= le/phy-fsl-lynx-28g.c index 29ab7213a35d..01589a2bfe74 100644 --- a/drivers/phy/freescale/phy-fsl-lynx-28g.c +++ b/drivers/phy/freescale/phy-fsl-lynx-28g.c @@ -246,7 +246,8 @@ enum lynx_28g_proto_sel { enum lynx_lane_mode { LANE_MODE_UNKNOWN, LANE_MODE_1000BASEX_SGMII, - LANE_MODE_10GBASER_USXGMII, + LANE_MODE_10GBASER, + LANE_MODE_USXGMII, LANE_MODE_MAX, }; =20 @@ -316,7 +317,35 @@ static const struct lynx_28g_proto_conf lynx_28g_proto= _conf[LANE_MODE_MAX] =3D { .smp_autoz_d1r =3D 0, .smp_autoz_eg1r =3D 0, }, - [LANE_MODE_10GBASER_USXGMII] =3D { + [LANE_MODE_USXGMII] =3D { + .proto_sel =3D LNaGCR0_PROTO_SEL_XFI, + .if_width =3D LNaGCR0_IF_WIDTH_20_BIT, + .teq_type =3D EQ_TYPE_2TAP, + .sgn_preq =3D 1, + .ratio_preq =3D 0, + .sgn_post1q =3D 1, + .ratio_post1q =3D 3, + .amp_red =3D 7, + .adpt_eq =3D 48, + .enter_idle_flt_sel =3D 0, + .exit_idle_flt_sel =3D 0, + .data_lost_th_sel =3D 0, + .gk2ovd =3D 0, + .gk3ovd =3D 0, + .gk4ovd =3D 0, + .gk2ovd_en =3D 0, + .gk3ovd_en =3D 0, + .gk4ovd_en =3D 0, + .eq_offset_ovd =3D 0x1f, + .eq_offset_ovd_en =3D 0, + .eq_offset_rng_dbl =3D 1, + .eq_blw_sel =3D 1, + .eq_boost =3D 0, + .spare_in =3D 0, + .smp_autoz_d1r =3D 2, + .smp_autoz_eg1r =3D 0, + }, + [LANE_MODE_10GBASER] =3D { .proto_sel =3D LNaGCR0_PROTO_SEL_XFI, .if_width =3D LNaGCR0_IF_WIDTH_20_BIT, .teq_type =3D EQ_TYPE_2TAP, @@ -413,8 +442,10 @@ static const char *lynx_lane_mode_str(enum lynx_lane_m= ode lane_mode) switch (lane_mode) { case LANE_MODE_1000BASEX_SGMII: return "1000Base-X/SGMII"; - case LANE_MODE_10GBASER_USXGMII: - return "10GBase-R/USXGMII"; + case LANE_MODE_10GBASER: + return "10GBase-R"; + case LANE_MODE_USXGMII: + return "USXGMII"; default: return "unknown"; } @@ -427,8 +458,9 @@ static enum lynx_lane_mode phy_interface_to_lane_mode(p= hy_interface_t intf) case PHY_INTERFACE_MODE_1000BASEX: return LANE_MODE_1000BASEX_SGMII; case PHY_INTERFACE_MODE_10GBASER: + return LANE_MODE_10GBASER; case PHY_INTERFACE_MODE_USXGMII: - return LANE_MODE_10GBASER_USXGMII; + return LANE_MODE_USXGMII; default: return LANE_MODE_UNKNOWN; } @@ -496,7 +528,8 @@ static void lynx_28g_lane_set_nrate(struct lynx_28g_lan= e *lane, break; case PLLnCR1_FRATE_10G_20GVCO: switch (lane_mode) { - case LANE_MODE_10GBASER_USXGMII: + case LANE_MODE_10GBASER: + case LANE_MODE_USXGMII: lynx_28g_lane_rmw(lane, LNaTGCR0, FIELD_PREP(LNaTGCR0_N_RATE, LNaTGCR0_N_RATE_FULL), LNaTGCR0_N_RATE); @@ -594,7 +627,8 @@ static int lynx_28g_get_pccr(enum lynx_lane_mode lane_m= ode, int lane, pccr->width =3D 4; pccr->shift =3D SGMII_CFG(lane); break; - case LANE_MODE_10GBASER_USXGMII: + case LANE_MODE_USXGMII: + case LANE_MODE_10GBASER: pccr->offset =3D PCCC; pccr->width =3D 4; pccr->shift =3D SXGMII_CFG(lane); @@ -611,13 +645,32 @@ static int lynx_28g_get_pcvt_offset(int lane, enum ly= nx_lane_mode lane_mode) switch (lane_mode) { case LANE_MODE_1000BASEX_SGMII: return SGMIIaCR0(lane); - case LANE_MODE_10GBASER_USXGMII: + case LANE_MODE_USXGMII: + case LANE_MODE_10GBASER: return SXGMIIaCR0(lane); default: return -EOPNOTSUPP; } } =20 +static int lynx_pccr_read(struct lynx_28g_lane *lane, enum lynx_lane_mode = mode, + u32 *val) +{ + struct lynx_28g_priv *priv =3D lane->priv; + struct lynx_pccr pccr; + u32 tmp; + int err; + + err =3D lynx_28g_get_pccr(mode, lane->id, &pccr); + if (err) + return err; + + tmp =3D lynx_28g_read(priv, pccr.offset); + *val =3D (tmp >> pccr.shift) & GENMASK(pccr.width - 1, 0); + + return 0; +} + static int lynx_pccr_write(struct lynx_28g_lane *lane, enum lynx_lane_mode lane_mode, u32 val) { @@ -829,8 +882,11 @@ static int lynx_28g_lane_enable_pcvt(struct lynx_28g_l= ane *lane, case LANE_MODE_1000BASEX_SGMII: val |=3D PCC8_SGMIIa_CFG; break; - case LANE_MODE_10GBASER_USXGMII: - val |=3D PCCC_SXGMIIn_CFG | PCCC_SXGMIIn_XFI; + case LANE_MODE_10GBASER: + val |=3D PCCC_SXGMIIn_XFI; + fallthrough; + case LANE_MODE_USXGMII: + val |=3D PCCC_SXGMIIn_CFG; break; default: break; @@ -955,7 +1011,8 @@ static void lynx_28g_pll_read_configuration(struct lyn= x_28g_priv *priv) break; case PLLnCR1_FRATE_10G_20GVCO: /* 10.3125GHz clock net */ - __set_bit(LANE_MODE_10GBASER_USXGMII, pll->supported); + __set_bit(LANE_MODE_10GBASER, pll->supported); + __set_bit(LANE_MODE_USXGMII, pll->supported); break; default: /* 6GHz, 12.890625GHz, 8GHz */ @@ -1000,7 +1057,7 @@ static void lynx_28g_cdr_lock_check(struct work_struc= t *work) =20 static void lynx_28g_lane_read_configuration(struct lynx_28g_lane *lane) { - u32 pss, protocol; + u32 pccr, pss, protocol; =20 pss =3D lynx_28g_lane_read(lane, LNaPSS); protocol =3D FIELD_GET(LNaPSS_TYPE, pss); @@ -1009,7 +1066,11 @@ static void lynx_28g_lane_read_configuration(struct = lynx_28g_lane *lane) lane->mode =3D LANE_MODE_1000BASEX_SGMII; break; case LNaPSS_TYPE_XFI: - lane->mode =3D LANE_MODE_10GBASER_USXGMII; + lynx_pccr_read(lane, LANE_MODE_10GBASER, &pccr); + if (pccr & PCCC_SXGMIIn_XFI) + lane->mode =3D LANE_MODE_10GBASER; + else + lane->mode =3D LANE_MODE_USXGMII; break; default: lane->mode =3D LANE_MODE_UNKNOWN; --=20 2.34.1 From nobody Tue Dec 2 00:03:21 2025 Received: from PA4PR04CU001.outbound.protection.outlook.com (mail-francecentralazon11013011.outbound.protection.outlook.com [40.107.162.11]) (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 610DA31BC85 for ; Tue, 25 Nov 2025 11:50:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.162.11 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764071403; cv=fail; b=SrACJMtgZ16KeDcqII/dOFr4T+AQrSHTkRUqex+QiNZy9Q7DQwrMkNgEZbpVenENyCWG4R+FCxBd0cMKw0wVUa/hmISxuc3JqeALrKJoPxE/w/G0d+HCSAZjBs3yqAQnQQYFjoq1oAHbCTn6jmD6MMvDIx0rPmx9tqOrMnbpjKY= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764071403; c=relaxed/simple; bh=5ddUGZrxuie6Q5laqRx5dr61sK3aKsn6dmGUKq3+EEM=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=TkcpVM7g7K8I/j1Ubf1dFye/qWV2LA2IkuaXUcRIzcMolSuIqySU/Uj1d3XkHQusLSrP1yjzHSrZhOrgKV0HmYi4ZuGyIIp21i69o8jikRbYmEB3MmcNQPJIe7Ocxyf3UirSQux+05t0zGQ9iR9ftmpIYHlBhuyaAsF9BgX4G0s= 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=FWu3Khyd; arc=fail smtp.client-ip=40.107.162.11 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="FWu3Khyd" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=FlvEyR6WEHCZ0EPISkghWr/KDTEJKVl61uMUMOSUNdaDRNSptLVqohWnJEty+W/jhyb2IeEQ5AmkkxjrWqLwUizMijzBCGZ/w6oAws6ab+uszpDy0irhWW/Nz2vjyNFbZaZzWDiRLlGs+f1p8TTZIwpooijk0IfgwYPMAwItk9Ebp2LER0M2fxhIIqsCvVpaTe/nVQ0i/npDix2Hm4utTAd3R0tcLU5NI0x2VatCK+g7p0l9Sato7j4yewY1O7xB2oePHDwRsMlp6BAuFHHGMeH5QEKjxgm3BJhYT9yAM/+Y4SIWs6JFZqYCOCOCtDSa1/+SuIGl4SJmzUBtsBCiSA== 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=YXIT6VRY7hzRvvV1KZODDJAjNEk7nw7WGBqxsZR+WOw=; b=nTTgmnnei26RplamPTQaEd3naGURGCc/ofPqPOPOyriqx2SlnmQD3sNdvZAVXXspdgbTzgo8Iy90qdqM6bhnUXbY63m5Q9E7ygNvnqYGhW6LxAzQkuPGyyLFo2QgX1W01rsS9liWTcJXrzs3UBunzPspdGg9hH5jjf+AHwvKH0vUyJhf/IwxznyDyBPpOAV4LPV4MUal+OYHxIhfFat62MClbtvl1DwQgxi57eMHfCiNNL/N8OIHy1jyV0t9QlrmZG52NIYeaoALREByMYoB3VsuSF2PH20L9Ga8rHIAe/rhCWa6iFAdbdrpWLZyJLUYUU3cE2ZCaFh1iJcu39/0cw== 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=YXIT6VRY7hzRvvV1KZODDJAjNEk7nw7WGBqxsZR+WOw=; b=FWu3KhydRtwpo6fqnMXpiEoqERLjdC+9Yq6r+lyKYE7+M39J7XOA9cITQtgVGNrS7lJddxkj/gEHZzs4MiL5YLJGr0+rh/HYzbFneNKvWYcFRa2kQXW9OLeE1aq7RA+W72VqTS1MLp1I40lh5CR7bWqDoPTn3iAWQxlP/aZ///E4umdkeV/A3WFXTrCb6//EBzYP7B2E9gaClRXORPRKkRYFnoXJ4E0jA8XnceHSVUO6eDWG1tUpRsN711lBhZ1Fb8rcoDIVD0pUDXeIvd5eAPQoXnOQdaNhloQ8MX2w3CzofChl+2Gsv9CFAmKvKJt2X9AOMSHDtteWtFtteYhzjA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from AM9PR04MB8585.eurprd04.prod.outlook.com (2603:10a6:20b:438::13) by PAXPR04MB9201.eurprd04.prod.outlook.com (2603:10a6:102:232::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9366.11; Tue, 25 Nov 2025 11:49:50 +0000 Received: from AM9PR04MB8585.eurprd04.prod.outlook.com ([fe80::8063:666f:9a2e:1dab]) by AM9PR04MB8585.eurprd04.prod.outlook.com ([fe80::8063:666f:9a2e:1dab%5]) with mapi id 15.20.9343.016; Tue, 25 Nov 2025 11:49:50 +0000 From: Vladimir Oltean To: linux-phy@lists.infradead.org Cc: Ioana Ciornei , Vinod Koul , Kishon Vijay Abraham I , Neil Armstrong , Josua Mayer , linux-kernel@vger.kernel.org Subject: [PATCH v5 phy 13/15] phy: lynx-28g: configure more equalization params for 1GbE and 10GbE Date: Tue, 25 Nov 2025 13:48:45 +0200 Message-Id: <20251125114847.804961-14-vladimir.oltean@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20251125114847.804961-1-vladimir.oltean@nxp.com> References: <20251125114847.804961-1-vladimir.oltean@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AS4P189CA0047.EURP189.PROD.OUTLOOK.COM (2603:10a6:20b:659::19) To AM9PR04MB8585.eurprd04.prod.outlook.com (2603:10a6:20b:438::13) 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: AM9PR04MB8585:EE_|PAXPR04MB9201:EE_ X-MS-Office365-Filtering-Correlation-Id: e9b4f19f-a6f8-41d7-d203-08de2c18bd5b X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|10070799003|376014|52116014|366016|19092799006; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?UQsAOIENiyCJHIIOc8KvXdTwhUaSbtX1/eXCBIStyMC7Q6WQDJaagZeXT9s0?= =?us-ascii?Q?YhLi4nnQdyfvbjfJgZHOpebv+uf2WANteqKxvOusMluulb05GYzYPXYBjRpT?= =?us-ascii?Q?lE0mxxkOEym4NC+YfFYo/8izD917GmPtpsoQlM8Z/hEK714z3ArDvsteFnYt?= =?us-ascii?Q?hzGaR4wmnb/qm4m1vTuSQY/NX6DG837RodaO8bmHer0f92GS6ykuUFrX9G8U?= =?us-ascii?Q?hT1BBOnJKTyxr70sOJtpni5vENZEWKGPwMB5BfXwmgkHnt9TTlPpHg8ZnPM5?= =?us-ascii?Q?bFXUMfe3Xtj5a96S9I948M+WdpOGKi+Un2Z9oQF1xMsncV08LsRYBQbIeM05?= =?us-ascii?Q?vbQerntLNLUot8tsEhyIINJ/4nnNrHpXHxF5nJyfNICYprMwzdhGfD3lHcLI?= =?us-ascii?Q?bQQ1G5lOW22jNnqhooW1uAKbO0iLoPnIlgP21a15tB7lC+dXP5XPH5xuBdt5?= =?us-ascii?Q?ug+kunlGhTmbFPwLwK3yUhuulfY7W8wHnG/R0LT1NU9trHrhcI5BmReYTmDU?= =?us-ascii?Q?Dl7SonZONDdNYV64yB8g5Lh1Agw9HUlqHV8L+JNiDYw3xp1JMA7m9FGt9F0j?= =?us-ascii?Q?8P0EW51cm+4/auskJZQqz/5rKTSUHG0sx7k51WcCA06ylufGf+z4IwKCZxs8?= =?us-ascii?Q?ucAxXPbqP0U+twnbVjJiwORVp0BIrh+U5Cod/cVzEFTf5RQcKjDd4LGDBKBS?= =?us-ascii?Q?yPgucBRb/5Rk2gAgtFpaVsEJrxRCtcJUPuIGm4ir3caI0IlTHm/JswNExcus?= =?us-ascii?Q?fHSJAb0mLuG160oDT+RcffFwbbmkgchSpJZ9Q+8PrIPBvO0ho0f3KD7xkgcF?= =?us-ascii?Q?7YJ5MilDxb7cP7BFxNvy36b6CkGMhKpnvVAdNwLu2e1vgjJbHzjIkqsynZL/?= =?us-ascii?Q?Bon3uWR51pOKsirtatRV4ORTgxekLlIPARPZkhZklivZfKAHIvsxOr77v4M7?= =?us-ascii?Q?gLMDcCOH69huhmX2nEYEIV2YjHQnhRDn3FaPMd9PMjK4vTsAQPXfRk5KxrcG?= =?us-ascii?Q?1FbBHYKfnVPQpVesLDmFaOgXgFNa/M7DKFIvgIeMLg5C93oEkL7cpaLwK+LD?= =?us-ascii?Q?kNuRSb69s3hY+pFyNtjAT5IasLiVgXj9SHkaSnC/MDIilCarFHRYlMG7U3mb?= =?us-ascii?Q?9bbjtSV2qME0pzfupGcvjHcBBYJqRU/Z10cKTZ2Ra1dzr3If9+VC3Tr4o57C?= =?us-ascii?Q?8zJS3c2NQxWnvnV9BBwpvuxtv3y/hC9CyqHgkuVUcqzMqnAk/1aIQZzOWW6V?= =?us-ascii?Q?d6cUfu0SRFGfGfRLDwLrns70rrATAdeRW+a7iUhdCeNn/U8Hgi48SqTfSdHR?= =?us-ascii?Q?y8B0wgLr2gx/kn7w9a/8IgamhhOFHthx98F5yFzZuf5/7NkaYzsn27SUdnTC?= =?us-ascii?Q?vo+ry/HY8wog138MMqffzwb7rqUj1vqiSK/I8u2FiYxJKzCXM1pjAdVqP2IN?= =?us-ascii?Q?sc0e0M6M32IJEePdf++3f2F6womqWK7e?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM9PR04MB8585.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(10070799003)(376014)(52116014)(366016)(19092799006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?I7H8zPQCtqKWcRUw3cQ6FewLI+vMmY44ThX7xD764eRwczmo3V1+84FwMxn6?= =?us-ascii?Q?ZLoZm8g1pnT2rt5UUhVh3kFk2LBhlwmC9NM/AATuXsWWmQ+27YHEUXabmv1T?= =?us-ascii?Q?lNAl3pry8Zj5PrHo+wWEetnLCgclmh12S2GeeYpoCuz7z2lCMavoeGVw5R40?= =?us-ascii?Q?rrommnFLB81Z2kPSo8qjcXJiD/Tn0H9dSL7JXFDejm43drKYKNPJb1ERNIWh?= =?us-ascii?Q?1TCHsdmNvnWJZF7B76O34ktZlTaItkVyU+ytPfOlY8j3eP3igwSzh86Q1Oty?= =?us-ascii?Q?byFYkDV4U+MgUZaJdRrVrBsm5LAiWn9aNtjlKZ84X1CDkoFNqwO/joYTDN2B?= =?us-ascii?Q?0xC1et5467Zh6cDwswVoaCDZ9XmUaH2jDjoTdp8s+fXBM5AhzpAZakBNoM4x?= =?us-ascii?Q?214T+ID9tydCh7b2lni826hfhsbcsQKW40CUD3wIMVFvY0kwRGfxu2WibIPT?= =?us-ascii?Q?veFrX0ccMaWRstg0cTHV5K//oNvRe0cTg1Jt6cYo1u2Wd/+3v5MP+OCB3k0F?= =?us-ascii?Q?dU5H45JqhBWRC9WgNATt0wG2tWWMFPzcMAHpkK0Y8t+gugnrrCHLcBCwJHSD?= =?us-ascii?Q?oEqB1jQC+ZTrt6LWuUUnmSKfJlnnac8B5pWacNn355gswbI7fMmqEdaGS1m3?= =?us-ascii?Q?SA3QLZvFhtdcocPomVkUNWnvITakoEBaNlU3oiZTEEPlxjbNjRHEEOetZ8fK?= =?us-ascii?Q?4nu2fQ3ak6C25emH9ZWuj8aynhuFOHogH9hY6ZZi/HMnDT0FOTL8FyVJfS75?= =?us-ascii?Q?6j6uUCG4RDHdM5Ez3JStOr0H92GtHCgdfhBn7PrIsdViMPFKRPNZ8rLvqP7R?= =?us-ascii?Q?6jREa9dsoora6CPXBU5zx2hjJRn0Mfd26tr+i/We+rnLLQcn1FnR4jW4DmI8?= =?us-ascii?Q?Pk8PDZGLWCfUzLDdxjfh7SN5XgPM2REwkFiB0hnBuRUC1r23wH1PCT66ieBx?= =?us-ascii?Q?LqLoVm4s2Be3rMRvz/wVhS4uhwN4XKF42hdAi55XvD1EMGxXVEmE55/jgnTP?= =?us-ascii?Q?UJQx86XVbDDtEnUQLY4RsysEiALfp2I79szstWDXu/jWq1BKrKo2OR5Vx25F?= =?us-ascii?Q?mpla3ICOSRX+nMePOkcomcYBpjoNQaHVSy+Hf6XawxihqjEIKzobS6BISItf?= =?us-ascii?Q?MsOuIv3tL2Y6KpRRFxaqJGhtnL0uHd5cqxweLz3VVUTuWB6iuXvgTjVI8lDM?= =?us-ascii?Q?MeUzpYHuwIUoztK5EO+Jkd1hXOAbV2RT+XZHUdCQxBuEyRS9exGwLV8r2Hlq?= =?us-ascii?Q?9VA31O+g8lEL3Cv1Exxm3wmmzWNvGX9y3SFEgjKr7VgN11uqareYRPrhjLMx?= =?us-ascii?Q?vE+nHfquKaS67ovhL2w845mhqkABCdUN2owKGr30tlBQWjeChd3YHByqLEQ3?= =?us-ascii?Q?Fhd8kPuGh5bATuyy1KA0xZ/lWKtFOgc3uEGRKwPZhBYQOIvghhHzgwolHYIj?= =?us-ascii?Q?DMeOio5BIHPr0xTqbgDcBCBC7R+rXvmrK1yNzkTlFnMlEOuTuTq9eyU6SxzE?= =?us-ascii?Q?xIARAr01Qs0NaLR2jRz5qANin+JI+O0XYxpOkmrIRHZRQIdfeCWjQP5f8Bkh?= =?us-ascii?Q?WlmRt5dKpVDBaSriZCmfm3PYoqDzBxwjLY6Y5Xc8+TrnQr9k7Rfh9HGgWIFs?= =?us-ascii?Q?E6J6wrTp7TeINHDPBssMRn0=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: e9b4f19f-a6f8-41d7-d203-08de2c18bd5b X-MS-Exchange-CrossTenant-AuthSource: AM9PR04MB8585.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Nov 2025 11:49:50.2568 (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: AnXtnQtIFg+3arMflgQ5ZPOhlW+werDDiQDChJ6qW/nDGz3aXfrTfXY5CTfTSdGp4wp7Ifm3QthLOtUWkt6c1Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAXPR04MB9201 Content-Type: text/plain; charset="utf-8" From: Ioana Ciornei While adding support for 25GbE, it was noticed that the RCCR0 and TTLCR0 registers have different values for this protocol than the 10GbE and 1GbE modes. Expand the lynx_28g_proto_conf[] array with the expected values for the currently supported protocols. These were dumped from a live system, and are the out-of-reset values. It will ensure that the lane is configured with these values when transitioning from 25GbE back into one of these modes. Signed-off-by: Ioana Ciornei Signed-off-by: Vladimir Oltean --- v1->v5: none drivers/phy/freescale/phy-fsl-lynx-28g.c | 37 ++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/drivers/phy/freescale/phy-fsl-lynx-28g.c b/drivers/phy/freesca= le/phy-fsl-lynx-28g.c index 01589a2bfe74..be804f9b7d5e 100644 --- a/drivers/phy/freescale/phy-fsl-lynx-28g.c +++ b/drivers/phy/freescale/phy-fsl-lynx-28g.c @@ -166,6 +166,18 @@ #define LNaRECR4_EQ_BIN_DATA GENMASK(8, 0) /* bit 9 is reserved */ #define LNaRECR4_EQ_BIN_DATA_SGN BIT(8) =20 +#define LNaRCCR0(lane) (0x800 + (lane) * 0x100 + 0x68) +#define LNaRCCR0_CAL_EN BIT(31) +#define LNaRCCR0_MEAS_EN BIT(30) +#define LNaRCCR0_CAL_BIN_SEL BIT(28) +#define LNaRCCR0_CAL_DC3_DIS BIT(27) +#define LNaRCCR0_CAL_DC2_DIS BIT(26) +#define LNaRCCR0_CAL_DC1_DIS BIT(25) +#define LNaRCCR0_CAL_DC0_DIS BIT(24) +#define LNaRCCR0_CAL_AC3_OV_EN BIT(15) +#define LNaRCCR0_CAL_AC3_OV GENMASK(11, 8) +#define LNaRCCR0_CAL_AC2_OV_EN BIT(7) + #define LNaRSCCR0(lane) (0x800 + (lane) * 0x100 + 0x74) #define LNaRSCCR0_SMP_OFF_EN BIT(31) #define LNaRSCCR0_SMP_OFF_OV_EN BIT(30) @@ -180,6 +192,15 @@ #define LNaRSCCR0_SMP_AUTOZ_EG1R GENMASK(5, 4) #define LNaRSCCR0_SMP_AUTOZ_EG1F GENMASK(1, 0) =20 +#define LNaTTLCR0(lane) (0x800 + (lane) * 0x100 + 0x80) +#define LNaTTLCR0_TTL_FLT_SEL GENMASK(29, 24) +#define LNaTTLCR0_TTL_SLO_PM_BYP BIT(22) +#define LNaTTLCR0_STALL_DET_DIS BIT(21) +#define LNaTTLCR0_INACT_MON_DIS BIT(20) +#define LNaTTLCR0_CDR_OV GENMASK(18, 16) +#define LNaTTLCR0_DATA_IN_SSC BIT(15) +#define LNaTTLCR0_CDR_MIN_SMP_ON GENMASK(1, 0) + #define LNaTCSR0(lane) (0x800 + (lane) * 0x100 + 0xa0) #define LNaTCSR0_SD_STAT_OBS_EN BIT(31) #define LNaTCSR0_SD_LPBK_SEL GENMASK(29, 28) @@ -286,6 +307,10 @@ struct lynx_28g_proto_conf { /* LNaRSCCR0 */ int smp_autoz_d1r; int smp_autoz_eg1r; + /* LNaRCCR0 */ + int rccr0; + /* LNaTTLCR0 */ + int ttlcr0; }; =20 static const struct lynx_28g_proto_conf lynx_28g_proto_conf[LANE_MODE_MAX]= =3D { @@ -316,6 +341,9 @@ static const struct lynx_28g_proto_conf lynx_28g_proto_= conf[LANE_MODE_MAX] =3D { .spare_in =3D 0, .smp_autoz_d1r =3D 0, .smp_autoz_eg1r =3D 0, + .rccr0 =3D LNaRCCR0_CAL_EN, + .ttlcr0 =3D LNaTTLCR0_TTL_SLO_PM_BYP | + LNaTTLCR0_DATA_IN_SSC, }, [LANE_MODE_USXGMII] =3D { .proto_sel =3D LNaGCR0_PROTO_SEL_XFI, @@ -344,6 +372,9 @@ static const struct lynx_28g_proto_conf lynx_28g_proto_= conf[LANE_MODE_MAX] =3D { .spare_in =3D 0, .smp_autoz_d1r =3D 2, .smp_autoz_eg1r =3D 0, + .rccr0 =3D LNaRCCR0_CAL_EN, + .ttlcr0 =3D LNaTTLCR0_TTL_SLO_PM_BYP | + LNaTTLCR0_DATA_IN_SSC, }, [LANE_MODE_10GBASER] =3D { .proto_sel =3D LNaGCR0_PROTO_SEL_XFI, @@ -372,6 +403,9 @@ static const struct lynx_28g_proto_conf lynx_28g_proto_= conf[LANE_MODE_MAX] =3D { .spare_in =3D 0, .smp_autoz_d1r =3D 2, .smp_autoz_eg1r =3D 0, + .rccr0 =3D LNaRCCR0_CAL_EN, + .ttlcr0 =3D LNaTTLCR0_TTL_SLO_PM_BYP | + LNaTTLCR0_DATA_IN_SSC, }, }; =20 @@ -829,6 +863,9 @@ static void lynx_28g_lane_change_proto_conf(struct lynx= _28g_lane *lane, FIELD_PREP(LNaRSCCR0_SMP_AUTOZ_EG1R, conf->smp_autoz_eg1r), LNaRSCCR0_SMP_AUTOZ_D1R | LNaRSCCR0_SMP_AUTOZ_EG1R); + + lynx_28g_lane_write(lane, LNaRCCR0, conf->rccr0); + lynx_28g_lane_write(lane, LNaTTLCR0, conf->ttlcr0); } =20 static int lynx_28g_lane_disable_pcvt(struct lynx_28g_lane *lane, --=20 2.34.1 From nobody Tue Dec 2 00:03:21 2025 Received: from PA4PR04CU001.outbound.protection.outlook.com (mail-francecentralazon11013011.outbound.protection.outlook.com [40.107.162.11]) (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 6785431DDB8 for ; Tue, 25 Nov 2025 11:50:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.162.11 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764071405; cv=fail; b=Vw8JoN/CizfdPfgIcwzEiXiZU2cHxfCwwKZT2Ttm6P8vF+FPoSAaX9xPTzO3nxMY20FFW10jHtJbeNZJYWD4rc5/D1aqLE0dt1TRdp6IFfVc0nWSPUp/6yX4ffFvr7u/UzLnl9HIrUtbgb9R6NwC6urODUwHlFmBYlahUWH3vtQ= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764071405; c=relaxed/simple; bh=j623RYQWTRlYXptt3QSWCUJcrszsg2uG+ISjZZNIwKs=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=nk6QDo6Mlxo57E1cTWpNuMkDgz4o9ee0dVesEomwg/3BjhIr1iptaGCuZwzJcHbG2y+whcvgp0slNjBMMDcBPWtijXsko/RN9AKE6w1SHxqa8tdaUnE2G4eTvTGrz49eoJUqQCYvAgmiHHecEbuIgUQzFbNPEiroFMcwxDRMKHg= 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=beYhhCYw; arc=fail smtp.client-ip=40.107.162.11 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="beYhhCYw" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=QcXFqP5ZCEOMlNba+ziDtQHjXohocSfK03+zIRV6SXYx/WzynibToG4PeRQgvklNB2NPeJAOUQFKncrzsS/2IAGK/2AQceoWLGNVdLthCSjVKrPV5qT/4qT4OQ9njFg7QobK7i2L9vTjfZ619xXKF/nl3GUTLWHMQMYo9u/IuKS+kOVEkN4JxUXLWIr5I7DGRy49+ytXmdqpIMmpPvZ2EcYC9GwRmZHtB0Ou4F/2JGXcJHX4mHvf/9GKelmFZRExb1cUoAS55jlSHstj/lbf37pyWkqetLyLZP5YG0JhcvF6pbdsDCW1kVw+Ey/NgTRam+j7CruTy/sZOae7AU8O0Q== 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=CZHB08HX8ysiFewo6aRGX8nmg02B7CZeinbVixhGRkc=; b=bCmGeL2JmeBbiMWoC0ti69+c0IjKHHDJt8605Y0ZyLprvrgioz4r6j6iMLQyyNG+m0VL5Yb+yL2FAC3FHGrZvA42WbWJk0PP5TjvqbQhliezMJxB0CWTe+eUwuKY99UsnkaaW8uj7hGFOZk7xQf4hnJFLkhxr4oeX0JjcVzHID9UDhpdWDcGZPw5fDjy7gZXzs6yspSurs9cmmx4S/FxgSjs3p2bpRHatR/8JB4e+6WE7HtrYkJuTlipmdncsmFViZasPgmf3rHOTgrIN9cI6Akkc+nNSaixQfDJhkYKV1eF2HkA/go0lEQSo0SE5QjQHN3G6TJZtIuiA+5ySjffDQ== 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=CZHB08HX8ysiFewo6aRGX8nmg02B7CZeinbVixhGRkc=; b=beYhhCYwheHcDZK9AxIjz3/OK5wEC4DYhFCNXYwWugqyUl6lJUV36+ws0FwVJG7GrQk6g4yWw2FUkzOfY/1nfOz+FoFPJWN+2vzJPqEDyFsE50j5psZpymNgdJY+LEkP7p/G9KCHOew1ZcmbtrW5Z3an0zFgDE2R9PNkxeoCiJfpArC7z9+rUdJpU9tUVaeIDFU8yBqbzibRI4oKFFuJ7fnMNOr4H5DKTBHdjt//W6Tomh9zDkdZ/i1Kt/CuJwHV2VgCqslBsCjZseZeOEjr7HEv03AOmJVLlEnVTQJXNz5VhlwZUNYlDA3eHRNTEa3G0BmKbYO0O2k+atf5nvZJ2g== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from AM9PR04MB8585.eurprd04.prod.outlook.com (2603:10a6:20b:438::13) by PAXPR04MB9201.eurprd04.prod.outlook.com (2603:10a6:102:232::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9366.11; Tue, 25 Nov 2025 11:49:51 +0000 Received: from AM9PR04MB8585.eurprd04.prod.outlook.com ([fe80::8063:666f:9a2e:1dab]) by AM9PR04MB8585.eurprd04.prod.outlook.com ([fe80::8063:666f:9a2e:1dab%5]) with mapi id 15.20.9343.016; Tue, 25 Nov 2025 11:49:51 +0000 From: Vladimir Oltean To: linux-phy@lists.infradead.org Cc: Ioana Ciornei , Vinod Koul , Kishon Vijay Abraham I , Neil Armstrong , Josua Mayer , linux-kernel@vger.kernel.org Subject: [PATCH v5 phy 14/15] phy: lynx-28g: use "dev" argument more in lynx_28g_probe() Date: Tue, 25 Nov 2025 13:48:46 +0200 Message-Id: <20251125114847.804961-15-vladimir.oltean@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20251125114847.804961-1-vladimir.oltean@nxp.com> References: <20251125114847.804961-1-vladimir.oltean@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AS4P189CA0047.EURP189.PROD.OUTLOOK.COM (2603:10a6:20b:659::19) To AM9PR04MB8585.eurprd04.prod.outlook.com (2603:10a6:20b:438::13) 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: AM9PR04MB8585:EE_|PAXPR04MB9201:EE_ X-MS-Office365-Filtering-Correlation-Id: 066ce0ff-e5c2-4596-e831-08de2c18bdd7 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|10070799003|376014|52116014|366016|19092799006; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?MCEPiEekXGpI3oCfxKkFhbbTxE8mN5yOteb+Bc1bnDvRgravAKn8JlPIlbFG?= =?us-ascii?Q?3/mri2Hcd/rtka3e9rlrnoiA3hsT0tkXv+GnnnVuKcamshAmYzDGgABmVDpP?= =?us-ascii?Q?mLYZOeV7F1znEiIvH56MR9Z1OTrg3NUvSlY2g7TKgcB8ejwRl/lDvTO4iX6I?= =?us-ascii?Q?HdvGKzeYJQCMoyyg4zEmJ3ZKxOLOY3fNvPqyLXdfZTn+QHYugjhQgVhDGMz0?= =?us-ascii?Q?4afYSMIQ/XpDUKcW0dhJQNOyXv5141RLTW8D6mO//t2lUTfpy4jRAsyjniYE?= =?us-ascii?Q?UKwiqtVTPkg9ERfoMYxK2yYX4i93gvCqhbCMdHD4ZHs058vlipA7flHUhq7i?= =?us-ascii?Q?+2CKsUU27Udl3FvxhVEZpF0PfrYyy6QO+2DF7DBOkKx5OtEwwpqHkEG/alEK?= =?us-ascii?Q?K/bKw6fnKfTJmXiOezh3julhFPHNgG/3fLjlp44gR/bdroMdAL+zymWKexZI?= =?us-ascii?Q?4dA7unZR64eHkK4zdb0u4M7mOMKruo9DuC/2JdBkO/Vrl9FtLmuBsBZ2hx/P?= =?us-ascii?Q?9ddQEICEwyrzf4Y07N+PbtqKvgrAsiIAKCZ5ajQF3YjZfUz+YNBGkW6sg8km?= =?us-ascii?Q?9KOqfFbMOK6CrA5ubkdHdJqAIbOqOtsq1kitdBFgVI8UWt+NT4Dd1IduRASZ?= =?us-ascii?Q?J6ieBKhm8nXz+w7KaiYPQXds/0ZRHK0H/1+7LJ5o634Hx7R6eQ3ZJ7Sbw5M9?= =?us-ascii?Q?YX4HQE3vGBiOpfH33vpCLa0AQ62Pj0y1/oMQ46PyIVnMLy1qfCCFWmaD7z8Q?= =?us-ascii?Q?sOPdOcdyi+irTr5vkvt/mwUNikQ5g8HvT62rd9bZULLVbQgt2FalpxRZ4tHn?= =?us-ascii?Q?ULLlWzYJkL0khNjr1K5TInqhymjOEkRAJKaHfocUfmMgadX0aUpHr9HTekWN?= =?us-ascii?Q?mGS0daaLTD5voWw6mdY9ja2In785Sogy5e9N1rVa7+ItReMPXiGPRJCEAUzy?= =?us-ascii?Q?V4wpFIIA/C7it3MF8LEfUQE6b5k0uBzBlfol4X0czKcQOTAMmwMwXZmmR2Fp?= =?us-ascii?Q?bK0NyLHjJw2NdSOHfSjpCsRuzzH8Xs9w2nWYK7N9eH9ImcbMLoKWb1Qg/5eC?= =?us-ascii?Q?c2wfsuAkCkyw0l3POCgCKg0STQTTXZz2zSrFhzb5iYxL/3j6IxtOUQI91kHm?= =?us-ascii?Q?g+SAmpT0J5pEsF/KtmqelN0oxBiUo5O1hV43i3fQ7H2ratTFTD8xVYn8lsox?= =?us-ascii?Q?+NXVN4m/sWUQKXwgqbLgD0aqVNpjilQ7v3ezu2m1iciBXBdvcZdCLS2YyKbY?= =?us-ascii?Q?SzOA/kcD5Pkb6lwhc/aNVJSMBx4dHZZEUQuz15QPgW+nzTdriEc2w+tH1lE3?= =?us-ascii?Q?iPzMN0SD+E0DRQmi2JkevO4Ae1hbyfsu+o8KRS2BhckZCYT8YWD0LmArLof3?= =?us-ascii?Q?hFuOb7CXR5vtKKY3behsK3wONb/Mmdlmd0Drhdrt3OnFZGgBbPkms5r9PTr/?= =?us-ascii?Q?oZRjXjxSqY/FKG6GceYyRduG4apL5Kh4?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM9PR04MB8585.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(10070799003)(376014)(52116014)(366016)(19092799006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?qMgJqjmWZhQRU6fxEDXXtGtTi5/cK+o+opfKmilhHQH+jF5/b9IL3hoz5rdz?= =?us-ascii?Q?Xuyf1QBsO4vwqeiybZvLzBm5JuHDzoXaNDw4AcSqFTYXko7YrC5TrrbVbiXO?= =?us-ascii?Q?7YzdMUku5J1D7940Noqq4Ozls6DM/Isq4n5dgkg3mza9PPE25gPkLf+PnqCi?= =?us-ascii?Q?59gB/eit3tGmAK5FeosN8NGKlNiREKA9QNbhpPjq5k3IG0QvtSAzp1ji5OZK?= =?us-ascii?Q?sGE1AdYP/9zP0kPw8y00NVjvYuoBTQHx165K0B02Z3gU1BSGglqU2WCO9mmR?= =?us-ascii?Q?aFAIYrsJekzFa4xYukSX8AKXsmuv1Z8QBVWQgFnBBrH3NKt+3wa9J0xORqVv?= =?us-ascii?Q?PtSb982iiQ2RClgciaXsVzJPWrl/USSQuwJbFHWH4x7pyUJbuto1mCGRRp3k?= =?us-ascii?Q?qVpDAurlSriBa5T3/LpJjTbJFi1zbTwvaNLzjVggQ8VcM/PQklzGMG+S555D?= =?us-ascii?Q?dOBZDqEj3pqcIIo2YB7pO+B7IjZingenNVBxOUOrKycDscbKEBfeIR1Jv8N/?= =?us-ascii?Q?57UV8Sgw5iM86y5O8/Ekp5I7kYE20hK3aWA5KS9QXl9bRSdf0X0oM39o3uez?= =?us-ascii?Q?0jmNu+3OMWjzmlwGma7mn2l79IYqRAkeuz2NnZcurNcyIUvd8JAMekbdaX03?= =?us-ascii?Q?CqtPywsqY78c+b4kE0gkSfwE/172Y8fsR3p6ozu20hkfQanj4UM3ZXyyxMqp?= =?us-ascii?Q?Z5SV55iSoU+kunaDLC+JpkOwERXT/WXYPEe6dZ3gPcIzg+sZiZr5twyuT79U?= =?us-ascii?Q?E911irMyGXq8WHPU4RufTJN6DA2VMmFzX6vnf6hoC247uYgyGgZGZ0Gz/SQK?= =?us-ascii?Q?1MAX6BdGaJ9jV32oK8D0EkHlP0KNBma2SmhJSIhnP2TPjSkmIr9s5++VL0Vt?= =?us-ascii?Q?iyCq/M6SaaqzQFfjX+DYiprtqvtM9wllAGCGZJWSdWuSqicx5oqOX+J34zTI?= =?us-ascii?Q?Na6wOCKPg/ZSKY6+RnGEznJqGj//igNWP0JIT8HKg3Q7JVdnSXIKJVCdcf/m?= =?us-ascii?Q?JfPuN2Lhx9+mrEXpoZIWQRdAtJgN3DCFlBV6djcdWAzRy9ikSLGxL2ffv8Jq?= =?us-ascii?Q?iwosdsOIn3z0SgdXkUdFmJrHHjJRwV4N7xary5+Lp2u8PZ9kp0fVAL7nh8yl?= =?us-ascii?Q?wzPdhx7MdFkh1DRevRZDPbXcDJ5tMbjX+VjFbDavVmvrTZw47eaewl1dSYO5?= =?us-ascii?Q?Q7t5Dkv3FQay2OBPD4JxMRxEactM91K6oemG8hRbzrEnk/ZBpVK05YM8y9n5?= =?us-ascii?Q?ki2FuI0xhK1jK8pjDXJZt+6LWTwiRpyE85QYjpQrap3ZiMIEu1DzyTNwARW5?= =?us-ascii?Q?BmbeUGPgULF9SNSwixLP3qZH3NawJNii0nByLMUgyZsAChudE2+gu8NJSqk8?= =?us-ascii?Q?vPd4l6VvaceVSgtZVfOjSUi+yEnu8aRF67UB7v/F9Ofn2Sq+ylOPeZqtU37J?= =?us-ascii?Q?n4BwZq/hrA62GYwks8jjIOVMyrR4DC4FgCWKu1cH9O/fKK7NXCSeiqeK9sRI?= =?us-ascii?Q?SHVdpYP4CdSCqbJyUkp+HeTcy6jeJtdWS3SnB0+TujyufOFY8dPrChcjt0hC?= =?us-ascii?Q?yCJKhd2aDXYB+ggq6cp0Cx2/M9vAFzwQMJXQCP61NTjNOVxLmpZt3QpEMpKa?= =?us-ascii?Q?laYm9Ooz1mtD3hNiBpwXM/M=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 066ce0ff-e5c2-4596-e831-08de2c18bdd7 X-MS-Exchange-CrossTenant-AuthSource: AM9PR04MB8585.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Nov 2025 11:49:51.0817 (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: U3oeJKFN8K0f/zTAhpsJe2cTMoe/U+hQf7C1wVF3e1J2Z+vqXV62gsVdKl5T3D02f++UlGqy2KUgaUiEKkx6Kg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAXPR04MB9201 Content-Type: text/plain; charset="utf-8" We have "dev" which holds &pdev->dev, but we still dereference this pointer 4 more times, instead of using the local variable. Signed-off-by: Vladimir Oltean --- v4->v5: none v3->v4: adapt to the new patch order where "[PATCH v4 phy 03/16] phy: lynx-28g: support individual lanes as OF PHY providers" has moved some priv->dev dereferences to lynx_28g_probe_lane() v2->v3: none v1->v2: patch is new drivers/phy/freescale/phy-fsl-lynx-28g.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/drivers/phy/freescale/phy-fsl-lynx-28g.c b/drivers/phy/freesca= le/phy-fsl-lynx-28g.c index be804f9b7d5e..423223371dd0 100644 --- a/drivers/phy/freescale/phy-fsl-lynx-28g.c +++ b/drivers/phy/freescale/phy-fsl-lynx-28g.c @@ -1160,10 +1160,10 @@ static int lynx_28g_probe(struct platform_device *p= dev) struct device_node *dn; int err; =20 - priv =3D devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL); + priv =3D devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL); if (!priv) return -ENOMEM; - priv->dev =3D &pdev->dev; + priv->dev =3D dev; =20 priv->base =3D devm_platform_ioremap_resource(pdev, 0); if (IS_ERR(priv->base)) @@ -1216,8 +1216,8 @@ static int lynx_28g_probe(struct platform_device *pde= v) queue_delayed_work(system_power_efficient_wq, &priv->cdr_check, msecs_to_jiffies(1000)); =20 - dev_set_drvdata(&pdev->dev, priv); - provider =3D devm_of_phy_provider_register(&pdev->dev, lynx_28g_xlate); + dev_set_drvdata(dev, priv); + provider =3D devm_of_phy_provider_register(dev, lynx_28g_xlate); =20 return PTR_ERR_OR_ZERO(provider); } --=20 2.34.1 From nobody Tue Dec 2 00:03:21 2025 Received: from PA4PR04CU001.outbound.protection.outlook.com (mail-francecentralazon11013011.outbound.protection.outlook.com [40.107.162.11]) (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 E353931ED99 for ; Tue, 25 Nov 2025 11:50:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.162.11 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764071407; cv=fail; b=teembG8CKwG7HDSMsXti67hxrqijwcvYMAFwFPZ3j5Yc6MMV59xiPE3zkWu9qy2Cx4kjkqLe1nnTBNqFKUVxs4/QQT1IjF5ZNdIo9NJ4VNCgeN1fOBt8ARDwp020A65an/3eQWez6EtBVGMzvAgHXNoeLtmricGSDPhZ9tHgpxU= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764071407; c=relaxed/simple; bh=ijHdpvnE+tEZaO3I08yygyQ5Mb4Gkpbba0XBPFrrfbQ=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=XBZYklTZIH7J23IU+7yY6DCWeAGc0rA96K/WrScob4k5hU6PCySUMc47szaj1Hllh9CFISK27HPzWB9Sf01G0kvPrC6zVefBorcNjB7A3ZAkLgl48ETorr1vNpUF8T2y2/M8jC64CTbPVB5WLWsZns2AF4STnj4o8OlATdea2+Q= 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=eU6ysIVB; arc=fail smtp.client-ip=40.107.162.11 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="eU6ysIVB" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=YPpAv75+dzFBQ6OhhX6S6M+etsVfkf9hknhPXVMgtu3/S31fSbh+QqZP0vfWXVdB7u2NTojXqZhAhEXGl/ynblo/TMZEqGPFDFSr98Odk8JdNdojeQ5rmbxMOdEpgmcjJ8TIPrfJLXe5qcEduU6VRPDW3UpmrZ/uRQ+TePCUiw7T4n5ytyIa4Aw3vHmTuA5XHVpDN2pEPiDnn5NdC0jYgNUlBwIU9FerBcZBNigPF8EWZXXYtg6VJu2FgLu3D+LxUDOjMPAca9jzGyKjzk6OeM74dmEjOUFxLcr+otRaCDnSy/7RLJ4taR9Tz+TCoakMy/6zzqVPRydjUW+09TJlHQ== 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=dzOQG97txPTqv5GnhuAz/xO1hcwiceAi4EPAH4/kEwU=; b=ZbvAtZW12VYt6ChImecbVeRcB1D4xJ3iI6sMmBHFCMBOn2hJPXhNy1hjeDP0xIqoKaUywxOaBFfZYltquzl6Ap8efnS9Vo0W3JC4TGmZhd9/qaaO212ukpYDRoMJnb9OahFeCPSHpUU3pr1whZhRv89tyzLg7NBqpAJcbuJ2iSNYj/zLKi9N6gwExOo09BGcwfaK6eJeROjV4a7TW/AySMb1DyEIJDUXQCS8HtMqsh8oAmp/zbOVTpPY/xN07QYxUgwTILbLWdMxVtM1EZErtbSku15aNLHhz02juUD75e9pIDEbkJlpoP16ySYI3dk/iZ0kYZ0NPjvLdY/V06xVsw== 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=dzOQG97txPTqv5GnhuAz/xO1hcwiceAi4EPAH4/kEwU=; b=eU6ysIVBXl0IkSFJdwE+6xMH9JDdxcaKLGT90Od+RvkJ5uAOCDWLsjnYzGNMMXtDKaM8MK1AnCreMJtkskzpRWNUMhMnG/SB8+ObGoPe63HDX4OW/WjB0i/JppPEKGbX9bJw21ns/GJKC5NNDbjtBGzyVCFaf37plWEz5cjT74KjX24obwWfUO2K9HPJJHCNfHGISTCIaAZakS84nFdLJwTWsyepKx4i54I2WdpQGezOXMHFSQ4YtqpjE+FjUkFQ+naZxwMA6D93KfovMQrtNNuavVa/jjiekZ5ii6st39JK3En3cRvr5QTWUOuFa98+0U8auUPBtJ9JVMWjQhq3sQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from AM9PR04MB8585.eurprd04.prod.outlook.com (2603:10a6:20b:438::13) by PAXPR04MB9201.eurprd04.prod.outlook.com (2603:10a6:102:232::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9366.11; Tue, 25 Nov 2025 11:49:52 +0000 Received: from AM9PR04MB8585.eurprd04.prod.outlook.com ([fe80::8063:666f:9a2e:1dab]) by AM9PR04MB8585.eurprd04.prod.outlook.com ([fe80::8063:666f:9a2e:1dab%5]) with mapi id 15.20.9343.016; Tue, 25 Nov 2025 11:49:52 +0000 From: Vladimir Oltean To: linux-phy@lists.infradead.org Cc: Ioana Ciornei , Vinod Koul , Kishon Vijay Abraham I , Neil Armstrong , Josua Mayer , linux-kernel@vger.kernel.org Subject: [PATCH v5 phy 15/15] phy: lynx-28g: improve lynx_28g_probe() sequence Date: Tue, 25 Nov 2025 13:48:47 +0200 Message-Id: <20251125114847.804961-16-vladimir.oltean@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20251125114847.804961-1-vladimir.oltean@nxp.com> References: <20251125114847.804961-1-vladimir.oltean@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AS4P189CA0047.EURP189.PROD.OUTLOOK.COM (2603:10a6:20b:659::19) To AM9PR04MB8585.eurprd04.prod.outlook.com (2603:10a6:20b:438::13) 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: AM9PR04MB8585:EE_|PAXPR04MB9201:EE_ X-MS-Office365-Filtering-Correlation-Id: e688b1b3-930a-43f6-70ec-08de2c18be64 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|10070799003|376014|52116014|366016|19092799006; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?OBjIpzPjFL2/WXiDTyE68oSU2LIdhr+9SkTCwgVtZDC9Gvofm4fbfeEDOljF?= =?us-ascii?Q?sbvMGWidKtdocjSu6f28fC36GhR5E7pcJloy1yTDTGcI5VZb7nPwcsIjmG11?= =?us-ascii?Q?tmjyZw2dxuG9QGqFFq9cSUYXuId91gHtwx3+BVDWRfyYbNF5q2Yxa9l2UYwc?= =?us-ascii?Q?1GPqB6MPyzdDCCc30SB8dHnM7uiGbwVpsGvTdiOmW8005YgDrM3ftDTlTT24?= =?us-ascii?Q?rHuwNaV+AJ27qs+NxKv5zFCN9x9PqJgCWwfZNOgVjBytu7bTb9vTZKKwpKCi?= =?us-ascii?Q?abeZTW1ykHdyhMRPqPPnNgob3BXDJuHCGYIIXyYqk85knUwb6qQFIgSMCsog?= =?us-ascii?Q?zProuqxyU1WJeZkOK129+lJ4kA64Yiz0Z7X5LqPOp/+y4olKutPaZQXDJH3e?= =?us-ascii?Q?+j6Hg427rHDSX0lgzYSA0JZf+bfx/Ti5BFpivxoUzXLNgydb67DtyAgqih3C?= =?us-ascii?Q?7eSI7zSm9gazSLKeTkVvl/QxWfO9bA1FxaTUSabxJQp0A76pBUFkqAUG9Z3V?= =?us-ascii?Q?MYnpEIYnsFKLXJ+n80y9g1ss6xCo6Xr5UiWyIA9O6X955Zt56pbJf8ztOAfI?= =?us-ascii?Q?9GN+6ZKSs/G3tV428kcFOA0z6edQ1OF7YVRKHSKOTf+dgvzHQkAHlk6lL+qa?= =?us-ascii?Q?7dU5/TK6dAbyVRyTbTINMMPDTkKFXMnRu6BEN7ZEyVJO+KCOMLhFEJsCJOfO?= =?us-ascii?Q?Eh5XX0rO0XpXjXoXHSn+Du+85Y05SH/HIcClWA6gEaLrvIrNvpioF8/kYhEH?= =?us-ascii?Q?nHJKp8ef7np03HWG/+uBfULpaZVpX69XzvNtlqvl1idHP3Zt5ntH0Ti7UOIM?= =?us-ascii?Q?N9fdtoYnDw2WvG+ZSiWoMEhpF4TP9XGDGdEc+Xqp4NjY51/RbgeaNyplLCJe?= =?us-ascii?Q?ZlFVwQjHmtkhW6q4vcvCYX9uKanIZhy8pET0mwgg/kJ6uGVVeJh4vVEhzmG2?= =?us-ascii?Q?VsOWk1HFewobl+guv0pR6BFXV3uaoFQUZJMNgf6mjG7saMGvarwMtvpCTPCJ?= =?us-ascii?Q?ifDz43q2xoJUis5vgFxefkI1nDl6diSlL/8qByHnjC/MITp0biKYfbIe/HTe?= =?us-ascii?Q?BIrmJCbIaCcCFffnSrGNhA/Oq3WmRkd3tUPDscng6TZv5yxzjHCA7rc1k9oL?= =?us-ascii?Q?tfFjK9eVV20tzgMEs3PPli6iSByFgdvdua6NmUokh5/s1Xibiz8ISxNxc+Sp?= =?us-ascii?Q?+n8ZP9LJc2dwtTNFQP1Q+3V5hes0DJ9uipAtGQ+mV95zNiUeUa8YUYB9G4MG?= =?us-ascii?Q?O2ysFIKMvqTEFFh3TmSynCOFnjdQa7rcVPUwWXmpF5YUjgJePPRmui1tYYju?= =?us-ascii?Q?/kVPI0kEdZDa31dWaUJOW2eyhGASbhjUxFB+zU8BjMVh11x9S9H9ko6eH4l6?= =?us-ascii?Q?QOe8PdB8LAdHLCgNMZLGxNt0U1N2bNNLszgcaeDgZWdIJqhhi1gJGN/IR+62?= =?us-ascii?Q?AE7N4suIFYzV1BQvdSYgRXsF5HSdMQNO?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM9PR04MB8585.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(10070799003)(376014)(52116014)(366016)(19092799006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?/FtNidd3MrXLadvSZKuGffI7fdh1grKBdcFTiPzuZkdr8AN7+7nrh1s+JBhg?= =?us-ascii?Q?fGwlXchqNswOYmTkFs/LunPHf2cNj2rkucmIhri6NuIh4cXfG3zuWhmrSV69?= =?us-ascii?Q?pqJGBWec9t0w2ZyoAiYdSZ4mvrAH8IS7XKIHZnC5dsxLxw0zJjkl0NT+Necs?= =?us-ascii?Q?cdH6mJovSb24salXb4X6e2ct65Oc42onEbI/nkwGflQjQRB9wy2Bp1yPyBYI?= =?us-ascii?Q?bVhP6871hOaxsRDr6qPiVXg5aiMChN+LkJkJUqPRyMPleRJ2H+uwgzcSnrgp?= =?us-ascii?Q?Rw1S0yPhDxISVpQYoGKiC/GRzDgUXimPDmFlaYOJBnae07YYiySsMoZYr+DO?= =?us-ascii?Q?KGTsMoeZlT7PCnCM5/BVgEpc+PBbSjirapp3zj/YsRRP+1xjjL3bb4LhJpcO?= =?us-ascii?Q?yigct74+3e60fhprRRI3lFpf5Q7rcq7gDJMoNwCAxRYbuWTIo5Ehywd7SaoH?= =?us-ascii?Q?8AizjDud/hiioUoj84CRFRHGbSpDf70HDRA2IM0qQZh9qBpy+6xyXL6ptlZB?= =?us-ascii?Q?x+T/WHC2xZ8LPN4FBtyjg8Y/a1iud4RACmn0WMoQkbBl0qCvssdmtWK8M10S?= =?us-ascii?Q?P4Go7KV3oYQlgVjcBBt1z96DmRFzxBNYVYBV7oTHgAlLNgkqyrzYR1dsDade?= =?us-ascii?Q?TewwnVMkJePORNY9htLvHtzR/01Tn4i3XDbEPqsJd2halVpnhTJQenCXlTIC?= =?us-ascii?Q?arZnbZk3DhhlFRnUB6JZKmojSftQinA/4muqpQJVxLCYkcFu9po97Q/fDciZ?= =?us-ascii?Q?oXuRJYFhDG62k6xKHs2v/3I8+9wnSYnPgqbNI5HUWi1K5CmXujilsu5R2tzF?= =?us-ascii?Q?tJVIZWgjpB8s815lpvjFscK7yI7Uyrixgk1NuQhvbImRXSXev+NV8U3x21xh?= =?us-ascii?Q?aSyQR8McyePuXu9nKVFEBPHYFWIGgJD8c/vbbQRwnvOw6ybX1vTd+SpQPtqM?= =?us-ascii?Q?THucA7HyoT4hgl/6Zpzy4ifWpxxTCkjeaY+xygsrlZXEGOvqJqXVSgcKZ6dO?= =?us-ascii?Q?TYmfOa7+7uJk7vSiC8BwszZWv53nGPwC6VwXdJuFQ7T2jsretmiST2Li7Mw8?= =?us-ascii?Q?sSrzMVHTe0LKgZejwHdzk/H/diTtQzQN2cSii1CXNMrTKGAlOJbugbS5MAbz?= =?us-ascii?Q?+3wAZXWaF03EIm8c19b2ZToICFQBQT44eZxbi3MbK2gvnjIL1M4i6Qoo2Plu?= =?us-ascii?Q?TCuiyJewLdlhtLRfhrCNFRUs85kUJBYjKDGw9fhTfdIBuvJ/L3z3ojzZI28U?= =?us-ascii?Q?J8d27QtgU8LMl33gDe8o0VoNxJJF3Z/CDX4dPCTk0rU21vmIjdXVc4YtJJNC?= =?us-ascii?Q?1EHRNo3ZswOjwshgi70E+I9ZOFxtrWdHSoAAsot7wKW+uXRfclsk47trTTRc?= =?us-ascii?Q?AJ7iFLdyRd+lF0OkENd3780m6j2SAWwqQ5MJApuxDQjwnvmDeOMVy3NyLyOT?= =?us-ascii?Q?GEGT1IXzWEk5vXO+QlebvzCOcI0fK0gvFYcY/2PLBUbToGlnYoZ5JXr82S++?= =?us-ascii?Q?HkLfizqdhgRR1vvr2p3l1JvE94vIem9mz2vQDI7V348GlDGAPE/DK1/dsqS9?= =?us-ascii?Q?VgWPS3cY92XlAE/pCqgywMn87DprKHe9WHtybJT6AbkzRe4GB0SWL5FuSryz?= =?us-ascii?Q?qqE7AM60g2mHmPImXrMhIRo=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: e688b1b3-930a-43f6-70ec-08de2c18be64 X-MS-Exchange-CrossTenant-AuthSource: AM9PR04MB8585.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Nov 2025 11:49:52.0827 (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: JMoKvA8KodxgMZt5nEKbTaVA7xoHOSogNf3DxhC7oOnOgO4T3YLq8GfFSt6xM8nMIZc7nCQ4h4hZGn607E/4jw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAXPR04MB9201 Content-Type: text/plain; charset="utf-8" dev_set_drvdata() is called twice, it is sufficient to do it only once. devm_of_phy_provider_register() can fail, and if it does, the &priv->cdr_check work item is queued, but not cancelled, and the device probing failed, so it will trigger use after free. This is a minor risk though. Resource initialization should be done a little earlier, in case we need to dereference dev_get_drvdata() in lynx_28g_pll_read_configuration() or in lynx_28g_lane_read_configuration(). Signed-off-by: Vladimir Oltean --- v4->v5: none v3->v4: slight context change due to the introduction of lynx_28g_probe_lane() v2->v3: none v1->v2: patch is new drivers/phy/freescale/phy-fsl-lynx-28g.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/drivers/phy/freescale/phy-fsl-lynx-28g.c b/drivers/phy/freesca= le/phy-fsl-lynx-28g.c index 423223371dd0..2b0fd95ba62f 100644 --- a/drivers/phy/freescale/phy-fsl-lynx-28g.c +++ b/drivers/phy/freescale/phy-fsl-lynx-28g.c @@ -1163,7 +1163,11 @@ static int lynx_28g_probe(struct platform_device *pd= ev) priv =3D devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL); if (!priv) return -ENOMEM; + priv->dev =3D dev; + dev_set_drvdata(dev, priv); + spin_lock_init(&priv->pcc_lock); + INIT_DELAYED_WORK(&priv->cdr_check, lynx_28g_cdr_lock_check); =20 priv->base =3D devm_platform_ioremap_resource(pdev, 0); if (IS_ERR(priv->base)) @@ -1208,18 +1212,14 @@ static int lynx_28g_probe(struct platform_device *p= dev) } } =20 - dev_set_drvdata(dev, priv); - - spin_lock_init(&priv->pcc_lock); - INIT_DELAYED_WORK(&priv->cdr_check, lynx_28g_cdr_lock_check); + provider =3D devm_of_phy_provider_register(dev, lynx_28g_xlate); + if (IS_ERR(provider)) + return PTR_ERR(provider); =20 queue_delayed_work(system_power_efficient_wq, &priv->cdr_check, msecs_to_jiffies(1000)); =20 - dev_set_drvdata(dev, priv); - provider =3D devm_of_phy_provider_register(dev, lynx_28g_xlate); - - return PTR_ERR_OR_ZERO(provider); + return 0; } =20 static void lynx_28g_remove(struct platform_device *pdev) --=20 2.34.1