From nobody Sun Feb 8 23:27:07 2026 Received: from PA4PR04CU001.outbound.protection.outlook.com (mail-francecentralazon11013038.outbound.protection.outlook.com [40.107.162.38]) (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 D23D1395275; Wed, 14 Jan 2026 15:21:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.162.38 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768404101; cv=fail; b=ebQSQWYBpk8DaJwZX6tiJ9R6zhtW1UkM41aDhin32IfeupYwodKb39beA3EDGF0tOagGUIS4QJL0UGkqmmWYxkuVLdgsopttsK7FFt/lY5OlGohDnh5AXckCNoh/pv0wyAeabSMoAujgOa7tWchDAvHS8xBxN+VD2cMTW2mQpqk= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768404101; c=relaxed/simple; bh=4yFAWruSblcDWtmK0rBaYyczP8z5K3a8NUQV/6shTH8=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=NgAr1ZTNyi7ZljBtq7Vv6UpHPXKJ21qLAfUjHdY/7NHi0oC/v6u3cRxvMANFpqt+1PHjHJwLvPFHeX2sirS19FZ5vXW6raXaha4S4HxC+fhsYriy+SpgVBhBdrKOLhkzs8G7OGghNV326BniEBOkEmsA6YwJ61uWC9vlHZdVcKI= 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=OvQaSM3i; arc=fail smtp.client-ip=40.107.162.38 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="OvQaSM3i" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=X8NeCVE/fp6B3lGiARS2d8Eg9z23Mzg+eJnrrVK/c3fMsXWc7G98pRGVp3Ukp0FQspdepDp+AOEtar1/OJkPy+xd2My2AHEvmNDXvFXSOoB2fKEaNUBrAgCBZmQ84DtIdd8JAzHDcHJ+qTObuR4YhuNTvhozjmEhwPXiYarXe+1TPI/zkVCYPHxvlrt7oapLvsEq/3cvBYx6vDWv5aR0PVaZGMshxj418GDZ60hYYPzV5hzFSz+RMXZrs56R4oIzK9g2k+ZFELJdi7Qw7OxueZC1cuwyx3HLuuZJP+pjN5oRcxs8f+FiX3C4/cBJcDDVtkrtxTGCtDlu9XXqGvkSsA== 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=vk7+9rgKnM4kOyhaqIdBEBqfG8OZ6vYf04Zje6jhFDI=; b=ibk5zBWCwFqJCp4esy/OaJwVKVDxOSaZP6M1OmLeQCdMsDxUTfaFbms31352LQDI+/9kjlHJCAJeQFmeZAteGbdmB3NmotiH31b5UFRiwQebdLX5ju3NuBjIzjXH10BXJQP9u6u0VCvpZZnmLlhUFQ/rsFkXGnWFJfe3ys5Q3XsI7Q0LaTsF1h78UOoFWCBmr7jyeQ+X+BBbBSZlSMCMMjmpu79njHRo2fvi3E306uJ2yRLjz2rUjApqvhkI+7Dq8MAjAJFADSB3uaVBojhmzND/p97GG70nq7YgOVETMvnNjxQUmJe+ci3wt74Y7reUytkhHgkVABs7W76Wh4ef0g== 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=vk7+9rgKnM4kOyhaqIdBEBqfG8OZ6vYf04Zje6jhFDI=; b=OvQaSM3ibNYwyy7sRrndkGcqZqdOCTcz+Fis8Gs94aPO6Z+sCsPDbgG0V00IvTEG6tvRJMu7W0Y1lpiuf98u+Sjv2xb9c3dvy2rXzybXWEX3bNEkmNuqhEGZSo4Tm6NVmhUHZf6K7m2hEEpeXTvhhPCeFou2zpPQq2E77i4GfXNDvEks8/4QNT8Nr6RvHXdshkQGZdprAuE49w9Z9QSrxe+nQ5nnJJsPEitSsN0Cy4sGEC0irITMtcnEVFPDCmVNjMCq3QcOGyBZJON3auPOcxyumdHT0rCWZQ4rdFKqpz0oGhsPkXD49YSL8AMkEZUlmjCQcgkhfHNg2bTASf4zZg== 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 DB8PR04MB7068.eurprd04.prod.outlook.com (2603:10a6:10:fe::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9520.5; Wed, 14 Jan 2026 15:21:21 +0000 Received: from AM9PR04MB8585.eurprd04.prod.outlook.com ([fe80::f010:fca8:7ef:62f4]) by AM9PR04MB8585.eurprd04.prod.outlook.com ([fe80::f010:fca8:7ef:62f4%4]) with mapi id 15.20.9520.003; Wed, 14 Jan 2026 15:21:21 +0000 From: Vladimir Oltean To: linux-phy@lists.infradead.org Cc: netdev@vger.kernel.org, Ioana Ciornei , Vinod Koul , Kishon Vijay Abraham I , Neil Armstrong , Josua Mayer , linux-kernel@vger.kernel.org Subject: [PATCH phy 1/8] phy: lynx-28g: skip CDR lock workaround for lanes disabled in the device tree Date: Wed, 14 Jan 2026 17:21:04 +0200 Message-Id: <20260114152111.625350-2-vladimir.oltean@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260114152111.625350-1-vladimir.oltean@nxp.com> References: <20260114152111.625350-1-vladimir.oltean@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM8P190CA0015.EURP190.PROD.OUTLOOK.COM (2603:10a6:20b:219::20) 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_|DB8PR04MB7068:EE_ X-MS-Office365-Filtering-Correlation-Id: 606943ae-e624-44dc-ddcf-08de538092c3 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|376014|19092799006|52116014|38350700014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?4dCXhhmPnjwLlim5Hl9BCj6cUJ9WMMmd3Ea53yu2+T8JInjfzJgT5si9LAGF?= =?us-ascii?Q?mPY3uxZH0BKD134iobEEvr+YfVaGfeMKQc4GyIh2PQODPkioV2eymQ80XVcT?= =?us-ascii?Q?GZVfZB/9NA3yugyttSJE7OoQSffHDfaYLt5ZThlRnu9Ak1jKLty0sq9ywzDQ?= =?us-ascii?Q?jJ8OHWJHh4AJ4k1Xu3o+7tu9BNg9GOuSdlSS5MDx8/Q5AsfiGsoKZa+PLTHW?= =?us-ascii?Q?0i/pJIt6p3AHyK5Wxd7SQatAmMbusuCxgWVA1bcV48Yo5JZ/BZC5t4hxFF86?= =?us-ascii?Q?4oPvxp/QaY1kaGjVu2CLd2/yoyGG2tuACQiZcp2kT1G/o5maq3gzdkWv/qX4?= =?us-ascii?Q?Xqj3Oy+wsg3TmVzwGwvKJK6LiiN4sE7SdkkgcT9J2yDoX+nKpSKBbC3OpVfe?= =?us-ascii?Q?rUOiybZCzQbDvp5yxG5D5Ovux44XsYoH7c9/6CdbEcrRq95FJPJteyq81yP6?= =?us-ascii?Q?I7xcYGfXbX4imiMWGI/T4Yb7G5tmIkmlzeLJpfNN0pkbdYaPuvDn2GaRtCjM?= =?us-ascii?Q?gSVMV8uhZq0poNtFlF4gyw67aJZsk26Q0wEA39T4aPk9QtVkS+D7jrcGLw/Z?= =?us-ascii?Q?ucO0dYLR1F34BAbhdMorbmPYbV68V1NTvv9c1M2wy0B3DtIAJDyYsjw4f8bu?= =?us-ascii?Q?BkojLMc+PdIIi4D0Fi2bCXVNvOuR2aJkMJLDVzTmwsMYfUqZs8cV25J2qccT?= =?us-ascii?Q?StzUw/71Rt+bbDX+nG3emUhc9jrii3ft9DljTZzV2mAvZTiJCGlvPqzatXpN?= =?us-ascii?Q?A2YyAM9MJkd8fqM1R+1tMn0PiexWvcsIOHX/2gGRbLuwUQcSc+aau8riKZdF?= =?us-ascii?Q?gDkp3Ar5LRhcYTASHGeoNtmPYSOFCpAbBrUb1TJZIflhXeHSrxHQejuU1hJa?= =?us-ascii?Q?iEuabYI7gqw/xLUnET4/YTwk8gj94XRipqTPwyUPjnp+raBFQl+DbFZAvCWh?= =?us-ascii?Q?V6uNcBuHOAi1vGhnMpPmIVXCYZjntoL3NcPu56oinWgjK9Ouvn+pqvA4VVRv?= =?us-ascii?Q?tErPHxbyCbKLu7jGj12RXDyYh7lVbyQWcEGcp2HjFGigPbD/fijsj7wGSdvz?= =?us-ascii?Q?LCfjvclYLx+yB/5EtXnv9v+we4NXoubQPMx3a8bIxGehtD4bbEIllGP5Fl5W?= =?us-ascii?Q?oFk+zxH9h6IC74qJMCEfOGHPdbUXiVlOVAS83vD5KBkqifL3LpWBEhNVtUA/?= =?us-ascii?Q?oW7Du4EIcA/qqQLGcR7y2z0tV4CsQleRwmK47pDch/SP6ZiWPMaifWkqpCKC?= =?us-ascii?Q?Ucbu/OqKdipjuOmZrjnHnbDB+1F3eDPFfZDwPaeBL3oHVYQQ3VfoBX7EgrU8?= =?us-ascii?Q?PAa5w0Yd34GlFrwl3zypLxsa4mvcmlQZwdjE7fUTcKQfrperCzXdGiKKR+XI?= =?us-ascii?Q?cDi9bn8ZYCuClcLjNnPqye7nB//v/eY48s6mppv69wcj736CfwYCkGjjfI21?= =?us-ascii?Q?XA2WGRzfYeUhddEEOi8s5hdCoCZcQA6g4L+fm54n8n5/nsi5vqyCI894w1pL?= =?us-ascii?Q?BcZCWHunRjhYNSL2ZpLqGwQZJQri6BcTOBToSlTitowhWROR8GhtiZnRNq5B?= =?us-ascii?Q?fQAIaWKOh5JBOKhZvF67/Fzmu9pZvd2q48Pj09VnpNCyFCbc49CixIN31RS8?= =?us-ascii?Q?7a3usLG8Oc0ZnemcUqbJJP4=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)(366016)(376014)(19092799006)(52116014)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?163y+ghuWL738WSmKzHKg92auUlsXp7akWHEk5tZ6YdkXkGI+P/WiIuIP5sg?= =?us-ascii?Q?+Z885nNTTv5pLJvO+sIi1IDZVvIIPzwcgjViEVXjbw2/xCLtcw89En0t6ZWW?= =?us-ascii?Q?Ep03iVAEyKjk5U5Xx1TtOX2Vpg/cMzaQZfDjEZY0uofs1m1WbUkLJt8OHx3g?= =?us-ascii?Q?3zOORLHUGa3OhpCLVJn9bjUhr0VmtuiKJPli0zEToV1Tz1/u13DbpJhr0N6J?= =?us-ascii?Q?B42IALc1NybocQbw74Z3ilchCdqklCQy1dgSavz/2LPzahEOETQ8pW9k0i0R?= =?us-ascii?Q?Cu9DbkkBYqh9VAgUKbBX/TrDcF8Bs5aD0x8Sy1RxbVrwTnZn7Rlo5iS9k51w?= =?us-ascii?Q?gD9m+Ev8kp0JdYJnnRcugKy/VPu0vp1TtasiYc7MOCE66x/tZnq8Uam1DWGj?= =?us-ascii?Q?t9niUDhUBQcq3pn0Wo8io0HKwcxBnxAVPjpgfRJ1OAV1+B+X3pzYGozzNeYI?= =?us-ascii?Q?/tFhgTXiGwZxrYvVxPocPCLs3jX+oVLAdXB6wej3BrerA3+wK0sPgCdA2Jw1?= =?us-ascii?Q?mleJlH5XFudBACKP2CmWYFOSZlyLx7nUAdstWjM/s9jyIsr8S98nZKZ8ZIgJ?= =?us-ascii?Q?vRK+AhIVDYoXuCLWf4GWa+kk0lDjIla2AbdTKsCiC0UhFWrSYzeTDACpcw7A?= =?us-ascii?Q?DdFQZYLrkvfvXzu+PuGfsuPsdTUnfrkryu1FR+HomKBfQhm3DTa3ztu0YyOG?= =?us-ascii?Q?/f2pDjtgs+cBFdTikQs9LaE8Y4Yi7wBuxse4tbMXgpsJok//sOUGOJ2ryuum?= =?us-ascii?Q?zsTor1kBwQ88sjkKjW0BNTGcqyBIm2Rt8kWzXqX/NYl1QMNRJx4l+COt0lGL?= =?us-ascii?Q?utMxPMnFyv67YzzHi9cX/50FzF1n6yIeNw517nIFarB00IkXklxMIqwAE4aX?= =?us-ascii?Q?xoFl4RdB0R3AM4At502//BRP679UDHq+gG2PrOmCs85GjxtcX4zH2lcwRWGX?= =?us-ascii?Q?MXr9gkNfUTZnmrKsLQDW6pRF0sQApGEKUw8kmk4i6xOisNuZvpYKrZsgV8Bs?= =?us-ascii?Q?TJOhAbPMI9R9VRwbLJOuDUCKAnuYQugLuT07PxWlpqSqzKJGJAtx9EHO6W2v?= =?us-ascii?Q?I3ohVTpWcmgRqhkd+d6R6BxiXxJvdW8WALpYI//DgnjJ/qEJjtzTXuUS502b?= =?us-ascii?Q?OyHmAQA2yH2mY24LCM72Ju2JYphPtBlb6dUN2ut02oZR8N69TtgD+609nMH7?= =?us-ascii?Q?NHyymMar4caUm0lnYlCzP6ywSNIMUmp2YZYKUez93q0iL/WTTj69YOBGElxX?= =?us-ascii?Q?BPJYCNQdVHyb4KwE/BXN3hRvvX1XcL5WR3Ef1XLdbeKNcp0Suqaqy8yo53g+?= =?us-ascii?Q?H4eumj/n/1WBnueUrgnzsCBNupJesZRU196EeHHCfG5ajIgKuCoG51eH95c+?= =?us-ascii?Q?dlv36AJFDe8twBoVJMV+Oh1Fk6YSMoCTWJtFWz/czb/28E8fCObNEI4z09da?= =?us-ascii?Q?KVGpNwRgpgrbSe6ag3ibnFUErLLTJlneNTHb/mEEVPCFBV8Qd6GHAMCApAAw?= =?us-ascii?Q?Bd/BefEsSZFlsc2MuHuydjSje+5gjvR9JmQRgwN3hhKNh9J1duZb//GDmKFK?= =?us-ascii?Q?a1l7pDlTR/O63J04aWbuSnGBXjYJS7O9FGlCBzCWDOWSBajvn7LWRFpkgVgC?= =?us-ascii?Q?emU0+bqT++KDQMR27zf/p2TCjDX/Ep9ZRyol0dHTGd42qfJ60NyuQBP6aY9z?= =?us-ascii?Q?Emegb/YVsB+mW9Nl1+sz+WaS7ytKmXYWN6E0BxcIyPNdwBdNUfv0UdWFWaC3?= =?us-ascii?Q?T6wjQ2wp4mYomvFC9oe++hj1fH38GRA=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 606943ae-e624-44dc-ddcf-08de538092c3 X-MS-Exchange-CrossTenant-AuthSource: AM9PR04MB8585.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Jan 2026 15:21:21.8489 (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: Rj/PmdG2OUft8zMqqss263dKJfDlATm90fiIUfpZCb/8Bydy0WrG8ZTY3LvMPAz84EvpYdMiiMwezsfWxJnvRw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB8PR04MB7068 Content-Type: text/plain; charset="utf-8" The blamed commit introduced support for specifying individual lanes as OF nodes in the device, and these can have status =3D "disabled". When that happens, for_each_available_child_of_node() skips them and lynx_28g_probe_lane() -> devm_phy_create() is not called, so lane->phy will be NULL. Yet it will be dereferenced in lynx_28g_cdr_lock_check(), resulting in a crash. This used to be well handled in v3 of that patch: https://lore.kernel.org/linux-phy/20250926180505.760089-14-vladimir.oltean@= nxp.com/ but until v5 was merged, the logic to support per-lane OF nodes was split into a separate change, and the per-SoC compatible strings patch was deferred to a "part 2" set. The splitting was done improperly, and that handling of NULL lane->phy pointers was not integrated into the proper commit. Fixes: 7df7d58abbd6 ("phy: lynx-28g: support individual lanes as OF PHY pro= viders") Signed-off-by: Vladimir Oltean --- part 1 -> part 2: patch is "new" drivers/phy/freescale/phy-fsl-lynx-28g.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/phy/freescale/phy-fsl-lynx-28g.c b/drivers/phy/freesca= le/phy-fsl-lynx-28g.c index 2b0fd95ba62f..63427fc34e26 100644 --- a/drivers/phy/freescale/phy-fsl-lynx-28g.c +++ b/drivers/phy/freescale/phy-fsl-lynx-28g.c @@ -1069,6 +1069,8 @@ static void lynx_28g_cdr_lock_check(struct work_struc= t *work) =20 for (i =3D 0; i < LYNX_28G_NUM_LANE; i++) { lane =3D &priv->lane[i]; + if (!lane->phy) + continue; =20 mutex_lock(&lane->phy->mutex); =20 --=20 2.34.1 From nobody Sun Feb 8 23:27:07 2026 Received: from DUZPR83CU001.outbound.protection.outlook.com (mail-northeuropeazon11012009.outbound.protection.outlook.com [52.101.66.9]) (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 0421A38E11C; Wed, 14 Jan 2026 15:21:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.66.9 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768404101; cv=fail; b=Lg75E0qARYhx6uIqysZhuOoPkKvlhYSSbUyE2Gsm1KDItqnV+sONT3hgZH8sQK4cuMfaeFHnLZClo79JRTMN2o4BZ/elAqvJD2W2JlUeLGcXeCSCfPjzRMgh2RQeP/9wXCl1jyyYHxEr2UWLEmVcCI1AGD06liC0HBOwWCZ9FP4= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768404101; c=relaxed/simple; bh=lPBsuZwNitDYMEzGkmHs2wRlfV0RtQzKGYM7hWN/dss=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=PcciCgDI5gJE25hE84OTVck9WSbLcsGgW3z5FYkcFUXwGzGdWu3HJvxePBDe89R0cRF50W0pEON1xzlxZWAbpumwnzIYZ3AyS14Kt+C7dgkrqxglGl6DdhxupIvE3LsupGc80wNtOgA6dP7b4vjUM+855lmqVeYoaHz1C+hRtIg= 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=H8g9fx5g; arc=fail smtp.client-ip=52.101.66.9 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="H8g9fx5g" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=iMtaCAidwjobzWmZzdELA6vE5jxzmJ7TNamBeg/QcaqmsC0joCdKJ7niyv6DBYnCbar4T/xYebjQUeLg1Tey77phFwp/VlEWpAjW555fsQQ2DKr4P50U4uJyPpNysPjAgkeTtGoHVIXZAfXqxk0Xpz5OwK5M62+Ol3AoUk53iiX2zkQlWh+x404iLcboOdQCn7f36XXxbRWrBJZtp8ZNRhb9yA7FBhzuPJMIWson7DNwQH2zMiGFlIz67D1ILw+r/8Kb2im0L6A5upfofzePucCYrqOR24NiPePVht8875N6ozqYAfD3TSds2Uhpy5pIK6mAL98TrJXHR7M9t94qDg== 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=bXt94sygG4GDyOK0AIqSkIk1OcVUInQaiYyD523BQfs=; b=HORZ5uk/2ZpqQWw8SLSbolPtBI651Kcr+Emha4cLWUUv6IvGNtXP78/tGvPXOiHR159DAewjxc61LslEhsENtn338LlLKSkAR15P5IyIdhPeeGkrnse68SrnSNaZKvEdzJlb2st2XFB98KytpfKFcfiG0UCsitHWa3b6qYdtDJn4ZGli6Z9jjZbIpTXiskluGm7HRA5sH0nvR+Z1IC1f/6r3LZzeqoceyZFiAyTK/YN5TDu1rfkBjeiFbU7khxCamG61oU3Kq8y//xVwMo/V61094p2xxlN/zl1vinK7qFAKGbBqHUut3SxE5Wk38SCIRrJeXzBoqA15TYyf4M1rbw== 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=bXt94sygG4GDyOK0AIqSkIk1OcVUInQaiYyD523BQfs=; b=H8g9fx5ga90i8vuNaUDx2cxjPjJVXldqS2Z3Wu32OmpW9OWkgU/zAS5MUVNmrclJgVNLzaiTE7nmLrEmltEx0sKW6KgdhMOHvY4X4kEsGnfCsj4F6KLT6CdwpJjizFsRnwEtV+QV9g1SFsorcDhCXeB8akvjzccoI5rerPOMf10hn1uk2HDkNbXp5lqBgVXbJe+5E6DAvWMYxS+6HylBPEtsvbC4gMmLpMsw7yuE3zCx88mwgnHOV9P6ap28Os+/cjeismSyuAcH949/SWoP3Y1W1pEG9hrxlJKg3yvZBZgRydXrYlMDAsDX9ct16cZHBDObIFcsLraFy+PNOJ5YDw== 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 DB8PR04MB7068.eurprd04.prod.outlook.com (2603:10a6:10:fe::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9520.5; Wed, 14 Jan 2026 15:21:23 +0000 Received: from AM9PR04MB8585.eurprd04.prod.outlook.com ([fe80::f010:fca8:7ef:62f4]) by AM9PR04MB8585.eurprd04.prod.outlook.com ([fe80::f010:fca8:7ef:62f4%4]) with mapi id 15.20.9520.003; Wed, 14 Jan 2026 15:21:23 +0000 From: Vladimir Oltean To: linux-phy@lists.infradead.org Cc: netdev@vger.kernel.org, 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 phy 2/8] dt-bindings: phy: lynx-28g: add compatible strings per SerDes and instantiation Date: Wed, 14 Jan 2026 17:21:05 +0200 Message-Id: <20260114152111.625350-3-vladimir.oltean@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260114152111.625350-1-vladimir.oltean@nxp.com> References: <20260114152111.625350-1-vladimir.oltean@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM8P190CA0015.EURP190.PROD.OUTLOOK.COM (2603:10a6:20b:219::20) 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_|DB8PR04MB7068:EE_ X-MS-Office365-Filtering-Correlation-Id: 99a1f504-f607-4517-7cb2-08de53809387 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|376014|19092799006|7416014|52116014|38350700014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?f84xO0GJOfOq7rC5Kz5LoID6N0YRErTd9QAreouBv/Lng2poklyNB2w+tr2r?= =?us-ascii?Q?eqNRPG4Py63Q++KcBzai+/ZH/kNl7RDTWFOe958rrrWS/F06HatWA586BDX8?= =?us-ascii?Q?n7yekF2vtUi5ZlmsNQPHGLxdojY9SK8mKt0wBE5b9lvTlzyUi/iZvv1JLsvT?= =?us-ascii?Q?R2swWa9Al5rPlfVXQwXFWtiAddilYXZaC9dW6XMkn4nTOC81kTRvY20xEAF3?= =?us-ascii?Q?kV+ygVUsBUL6+obAp0KtwDHSHtXs4ZI8575TDMufk8yl7DYceSI1pfCP3r00?= =?us-ascii?Q?0issBaAg38Vm9VtznzdVBSw9UMdq5XB7FgZ0FIsDDgNaPgyYuzf3t3NCe2zq?= =?us-ascii?Q?LcuGpdwmjbdCw69N8X8kABX0PKjnmqsJgHqFgXm4Zb607WKiHJE23p21zQ9b?= =?us-ascii?Q?FEe7WPCxR15A/zUKLzEo1TjUFI7Aa3VvhVX8W4l89rfMiBGFetTLZxCBAWyj?= =?us-ascii?Q?IQEj5DDlqh3XAmQnMB6eJCoHkW5MULF7ClLwyvkA5ksURPjAad0RTUltYGDv?= =?us-ascii?Q?9lgCo28HS8zouqTpw99OtFr2QtaXbdTEazXSZFa06Ago0c6Ex1En5cFspUtY?= =?us-ascii?Q?9vYQmSesbXe+4Kne7kUUlhgoiZpXTzj+bwrBsUgrKEgSLG3V6NvJ6M5B548/?= =?us-ascii?Q?6dLO+J4YoClvq5YWFcM4xBhOb18nl/b8fYc4RnULdg2JgfxMXxxQUaoIgkNi?= =?us-ascii?Q?kNESBLR4F8NvxAOia0noVEBTy8Gkt4Ge0UEqbkkzLQsB9p8gjHdNFThDG8Le?= =?us-ascii?Q?LqTQvUlgazbu1NDgz2Nytra9g5DtBmqA/NF+uF7LOkJJQEo+jug23cWkhUDT?= =?us-ascii?Q?0Zr3kofoxODDkwjCN3i7gG5dU9mz+GbPNzsubPOpFhtvDsOfKGDVrmLBZE/C?= =?us-ascii?Q?QtKfo2Y+xplGOAX/KLYwBEmkIKTXWpJdFnJtKb71agLyjqCW/KFetwLiGU1X?= =?us-ascii?Q?E2a4FfarpXGekIFfygY1SfLMLpNP0oa/1BS5hPrAmQNp0VAtNiVf/TbmDa6l?= =?us-ascii?Q?44N2DWsZd6ra7oyFipCckCYsPzlS38lUpGCOpbb+lz1iw8n0hlqNPFKzt11n?= =?us-ascii?Q?B1Fsoa/KdXKiwrGWsJ4lS9VKqsLxmD6bhKfcGlY0ytHeL6cf4B+ps+UK7yfv?= =?us-ascii?Q?oR7FHWU06uWl7C7MamzqRKU1scRlws+bwsSQqMQctECo5SyDHUMxKBRKAJQ9?= =?us-ascii?Q?6/QF/qyY8jnFVNUuz+HV82nEMGkbLlhfCDQrvPvhC22Qdy1YDjzFMPYRylZ0?= =?us-ascii?Q?E+2C3VUUi3gEdlzDPKHILdntx5ZsffYtI4+84vC16v6buPO83o1tds/tltpw?= =?us-ascii?Q?WffMqlkmVF4i5N2ej4FN3oUuBywn7h2SIBctZPF07WU1s8SKWClM9C1Je3MI?= =?us-ascii?Q?uQI6vLq3jwMIy1Gh0ipW9paILKb/HZ30dzJbMD/qIfUQOIoN65Livy7pd2ZM?= =?us-ascii?Q?zXzv2OrsSxuK5BsxT8sTwfaIn/roz2Aul5GosYHOq5xaHrsQRvLGxPIT0fcE?= =?us-ascii?Q?+eM4+3P8zoFLKh9a9KYSKopJ0jeONEWSqZ+W7PJkeE0o4cPQz1zz8OqnBrc+?= =?us-ascii?Q?JqYwgmPYLe9a90s9U/z31BfM9OCy0rClqSlHEK6l22eqBVRvbAM1zxjBDDFx?= =?us-ascii?Q?Rl4EzEiXt5fzsO8oyTGXVlAE6dveia0FmTXJEgnWugFV?= 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)(366016)(376014)(19092799006)(7416014)(52116014)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?Za7DvDnjYapARpZYCSc3Id3z1/JqI7QV5LCSLwsYVP6mAwRRlYxpK3OXV0YZ?= =?us-ascii?Q?wxlBRRJDDCzALDpdL9wjThl1r0w4BvyJEOHRGwm9ShHID+APhwAoG/EnT095?= =?us-ascii?Q?ymWvmMtq+NT5G249W8+Hp7JEl6W+SbZoUW14CPUvNi+6ocKP4jsnEW5uT2or?= =?us-ascii?Q?zzysaO4x4nlxvrVADr8vc0Zbx2U79bVCmuGX253X97iaWOWvugHA2oQGYUU8?= =?us-ascii?Q?P4riHLdKaZlm/vW3CMai+oFmhCTCbgZQY0FfFZeHMOqSP/ua26pjRQEjSirF?= =?us-ascii?Q?M4Zquvvg/UNb3XL12bdXS1S9QFvbsnQv4n+QAjsWi0wugu5wttXUFdsvR3Uw?= =?us-ascii?Q?iIEtFy7QLdD/AXvSY2BSWIZFNk76bngAKi9dulx7tWqn/Uh5SkgIyWu+rAaD?= =?us-ascii?Q?CjcKhfq23T60DPpnbv6bOPKwu60iwvZpH2kOMlV1Q+Zd492t/8AxIcE00cNT?= =?us-ascii?Q?3FSWYpxvuegpbigG4vLLR7W8cZpfoI5NtBbbAPsZr0japm9fMGX1m6311uuE?= =?us-ascii?Q?7vjvRQwOClUp5O5Xm/INISuETH/5sMBfH7k1MUBBw4wM4JMZEIW+ovoUEuxs?= =?us-ascii?Q?Or6GYIZwMmfqrncd8mXDFOvZHkpyl4qFh6ut/TjXzz9lVhc9vba3kZ8AOStj?= =?us-ascii?Q?9dlGc4SB18aYUqn6SaxBNBcHI+pr7AZdZp/tahkLPT5S/cfFECoP+UcILy2X?= =?us-ascii?Q?JI/GBZlX6f9PpBT4huziOhK05oMubEdSlIQShwBguW8cI6BKd4GRcopjCq6n?= =?us-ascii?Q?DzVYEvRLFGBKekCXLOE3uvXEyyFfbJgHdksnS/fgdiddo86xlQeXbh4SiCHm?= =?us-ascii?Q?qSqG38mtQuieWFyyFX0Z4zhpOU9FxKwEz5KoNgTJvAyTxEp414dzVGrz9nnn?= =?us-ascii?Q?cQIe7Y6OULBiNDVz2VEQRJ2Z797Iebf0BlMQ/m6bRmgloTi71USl6zqcuauQ?= =?us-ascii?Q?MsJ94FHZ9UaIqe50dYef8IeLzlT5sRlHVs2kaSTS1c7QcM/WAVPxOSg+S5K/?= =?us-ascii?Q?lkJ35ps41+QQm9F3Vu/H7RbsHHlHnYy6hikoUhZP+hvniknHrWAUPYG0V7S4?= =?us-ascii?Q?N7/nLGY6L8Wy6mHc8mPc1TTShE59tkq1pksngjNN+q5/++5UqPLW3LtTjudG?= =?us-ascii?Q?BzwODHyHK/ylSjPcwbpfxPetq/bSytRU45dS2nDyBaf2FoBEeE75CZPCbDHy?= =?us-ascii?Q?xuDAHslz7Xc/99T4hRPJZyAl+RXXgbrPcC5tSrXLRwmwN97CGfKcC+lYFlim?= =?us-ascii?Q?IUhe97lKKPMjeTib7HVlBumsz3j+yWQjprlm7aQEPSCmvuSMjcfznJ5AbeuP?= =?us-ascii?Q?nV4lVwk5NU60oDpsR89P5CMKl/FhruRz75wL44sjmnuiYF9SrHxazseTIOjR?= =?us-ascii?Q?nxOIPKdkG+Q/BkTKxp91a7wiASc90CJ6evD/Yi7ODMgAaGaeveIa+zJDKDOE?= =?us-ascii?Q?he6UzYmQX21I+TofnOVnw/cXus5tV5ShNUWPJG5YAlZBfkXD9HG9MD9CWNFI?= =?us-ascii?Q?Pl7u2jra24GA+FURqWgXB/9pWgqWaa2Hcgh05Vg4z567uXtT1M0cbksHuDHO?= =?us-ascii?Q?KtMYD/h400r8jPbPGfA0/pnkohFKWNPh3K9wAb/cmkOI7LrR6Myg1EJ1qcBt?= =?us-ascii?Q?e2pfxB4KjynRmZfFWZ596OfKF4CJWpUUPIruvqh2Fzap8CBNczZVAjFitkQW?= =?us-ascii?Q?4UspMLVXqCtgldrcHQilV8+kSveK0S2ex6K57r4CxVleOaaPnqKA8KLjfYBs?= =?us-ascii?Q?FIhUlL3vCkg0YYnWwIWcog+sCYlujtQ=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 99a1f504-f607-4517-7cb2-08de53809387 X-MS-Exchange-CrossTenant-AuthSource: AM9PR04MB8585.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Jan 2026 15:21:23.0381 (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: x16R9cujiqDKWHxZWMpc64jTLKlZ8jrhf12GW2NqmJ5PPOu5XkbyJWgLSUq8s3NnqjXfezcpjA6m6OUAoTPSCg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB8PR04MB7068 Content-Type: text/plain; charset="utf-8" The 28G Lynx SerDes is instantiated 3 times in the NXP LX2160A SoC and twice in the NXP LX2162A. All these instances share the same register map, but the number of lanes and the protocols supported by each lane differs in a way that isn't detectable by the programming model. Going by the generic "fsl,lynx-28g" compatible string and expecting all SerDes instantiations to use it was a mistake that needs to be fixed. The two major options considered are (a) encode the SoC and the SerDes instance in the compatible string, everything else is the responsibility of the driver to derive based on this sufficient information (b) add sufficient device tree properties to describe the per-lane differences, as well as the different lane count Another important consideration is that any decision made here should be consistent with the decisions taken for the yet-to-be-introduced 10G Lynx SerDes (older generation for older SoCs), because of how similar they are. I've seen option (b) at play in this unmerged patch set for the 10G Lynx here, and I didn't like it: https://lore.kernel.org/linux-phy/20230413160607.4128315-3-sean.anderson@se= co.com/ This is because there, we have a higher degree of variability in the PCCR register values that need to be written per protocol. This makes that approach more drawn-out and more prone to errors, compared to (a) which is more succinct and obviously correct. So I've chosen option (a) through elimination, and this also reflects how the SoC reference manual provides different tables with protocol combinations for each SerDes. NXP clearly documents these as not identical, and refers to them as such (SerDes 1, 2, etc). The per-SoC compatible string is prepended to the "fsl,lynx-28g" generic compatible, which is left there for compatibility with old kernels. An exception would be LX2160A SerDes #3, which at the time of writing is not described in fsl-lx2160a.dtsi, and is a non-networking SerDes, so the existing Linux driver is useless for it. So there is no practical reason to put the "fsl,lynx-28g" fallback for "fsl,lx2160a-serdes3". The specific compatible strings give us the opportunity to express more constraints in the schema that we weren't able to express before: - We allow #phy-cells in the top-level SerDes node only for compatibility with old kernels that don't know how to translate "phys =3D <&serdes_1_lane_a>" to a PHY. We don't need that feature for the not-yet-introduced LX2160A SerDes #3, so make the presence of #phy-cells at the top level be dependent on the presence of the "fsl,lynx-28g" fallback compatible. - The modernization of the compatible string should come together with per-lane OF nodes. - LX2162A SerDes 1 has fewer lanes than the others, and trying to use lanes 0-3 would be a mistake that could be caught by the schema. Cc: Rob Herring Cc: Krzysztof Kozlowski Cc: Conor Dooley Cc: devicetree@vger.kernel.org Signed-off-by: Vladimir Oltean Reviewed-by: Rob Herring (Arm) --- part 1 -> part 2: - drop everything having to do with constraints (on #phy-cells, #address-cells, #size-cells) based on new compatible strings. Patch made its last appearance in v4 from part 1: https://lore.kernel.org/linux-phy/20251110092241.1306838-16-vladimir.oltean= @nxp.com/ v3->v4: - OF nodes per lane broken out as a separate "[PATCH v4 phy 01/16] dt-bindings: phy: lynx-28g: permit lane OF PHY providers" - rewritten commit message - s|"^phy@[0-9a-f]+$"|"^phy@[0-7]$"|g in patternProperties - define "#address-cells" and "#size-cells" as part of common properties, only leave the part which marks them required in the allOf constraints area v2->v3: - re-add "fsl,lynx-28g" as fallback compatible, and #phy-cells =3D <1> in top-level "serdes" node - drop useless description texts - fix text formatting - schema is more lax to allow overlaying old and new required properties v1->v2: - drop the usage of "fsl,lynx-28g" as a fallback compatible - mark "fsl,lynx-28g" as deprecated - implement Josua's request for per-lane OF nodes for the new compatible strings .../devicetree/bindings/phy/fsl,lynx-28g.yaml | 33 +++++++++++++++++-- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/Documentation/devicetree/bindings/phy/fsl,lynx-28g.yaml b/Docu= mentation/devicetree/bindings/phy/fsl,lynx-28g.yaml index e96229c2f8fb..8375bca810cc 100644 --- a/Documentation/devicetree/bindings/phy/fsl,lynx-28g.yaml +++ b/Documentation/devicetree/bindings/phy/fsl,lynx-28g.yaml @@ -9,10 +9,37 @@ title: Freescale Lynx 28G SerDes PHY maintainers: - Ioana Ciornei =20 +description: + The Lynx 28G is a multi-lane, multi-protocol SerDes (PCIe, SATA, Etherne= t) + present in multiple instances on NXP LX2160A and LX2162A SoCs. All insta= nces + share a common register map and programming model, however they differ in + supported protocols per lane in a way that is not detectable by said + programming model without prior knowledge. The distinction is made throu= gh + the compatible string. + properties: compatible: - enum: - - fsl,lynx-28g + oneOf: + - const: fsl,lynx-28g + deprecated: true + description: + Legacy compatibility string for Lynx 28G SerDes. Any assumption + regarding whether a certain lane supports a certain protocol may + be incorrect. Deprecated except when used as a fallback. Use + device-specific strings instead. + - items: + - const: fsl,lx2160a-serdes1 + - const: fsl,lynx-28g + - items: + - const: fsl,lx2160a-serdes2 + - const: fsl,lynx-28g + - items: + - const: fsl,lx2162a-serdes1 + - const: fsl,lynx-28g + - items: + - const: fsl,lx2162a-serdes2 + - const: fsl,lynx-28g + - const: fsl,lx2160a-serdes3 =20 reg: maxItems: 1 @@ -60,7 +87,7 @@ examples: #size-cells =3D <2>; =20 serdes@1ea0000 { - compatible =3D "fsl,lynx-28g"; + compatible =3D "fsl,lx2160a-serdes1", "fsl,lynx-28g"; reg =3D <0x0 0x1ea0000 0x0 0x1e30>; #address-cells =3D <1>; #size-cells =3D <0>; --=20 2.34.1 From nobody Sun Feb 8 23:27:07 2026 Received: from PA4PR04CU001.outbound.protection.outlook.com (mail-francecentralazon11013038.outbound.protection.outlook.com [40.107.162.38]) (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 21613396D19; Wed, 14 Jan 2026 15:21:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.162.38 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768404106; cv=fail; b=Y/lrlKF+8XQZYJILiOjNQwASGK9mhZQqcvC+qc7EIIiv9gYRIw+4WMygwnM88Ei9lniw4UjLOgVwLgxDHzH1iXvwHEPZJ476A7rJAy5H+MJIKqSSvhb019ng87p3112QyWwzK/Z+7d6sj7g8M1bkkqAZgRs5zFIgLcM1/kDh3uk= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768404106; c=relaxed/simple; bh=L131JXIzEoKLWUNypJ2saekvn1wGkGP4pmKBh4hSFJk=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=BjxYazUtCWzWFopgCTeVOQGzEjTROUv/EaiByxsfnDpK1W4D1ZO1tGlD9pjH5KBN4SVo0Wo33Kgo8KKYPhwKK2x6Ufl/6vclzvzv19NCy8ELgxXGDXLKRv6XQASyuuTca6JX/bVL5RhT1AV5D6g6jSoon5mxrGGVoknepDIRPkk= 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=JP1LH1By; arc=fail smtp.client-ip=40.107.162.38 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="JP1LH1By" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Dva5C8wG6+QQqs9kchN7zbbRcs4q/NHsoe4xtx5kUcpEXQ94Ve8qWBz8eiw2RScWGc4RbPndXq5R/jPBhNTO/sAyVrC3t9H2BteacSTD/SHUUDUlWy5LjRNpqNxC94cYJzyuTDP4KR7SJ5rHiyAZ1i7hTwiExXCQhKW0NSf27i+44MY73Bk2uJemf7snxptnHKIF7J4bekuBVK5LBFbkcGzOSKUP1E/tO1NDVUQ2SUPOm3X9WLe6I0e+eV7YD5MklXr+0TkrM8qQtXjNefVL/Zf6Eo+GCT5cLM4BuBbRML5IoyivSFvHnucU6y4XThkBXzNdjqgvJE9RdWLvnMh4vQ== 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=1vixQSBgiAaI6lKHwKAuiRwZ35VXYlNG7c4Uk9Q8O6Y=; b=fWIdH/e61a/t8zGPJpb+7KjC5497jttSWHgTpT2M19ydMESXoCrInX7iGXGLKdTGaqURX7yIT2kqvEm3WCWD2aagI8rEDpgtidpnrGUdlhLk8bI66zVKLOSYv/UkytnhBdsnB68Repu37d0IjO30d1G7PIaG7GTOWMC6U6/OrUkH9zuJTtAeN9nWJAEp0r5rtb3YC+B6/JYQXTUM1sMA9WFKN4WxlwxbCmd1RFCLfr9oHlnc1E1i0Gt7Ii+YBMOPd5wN7ooh4w25do/F8cFgUdp5I2NF6G5DNGJVF8pjuR/OLKJuFyx86X7DjzPwGa4GswQ9cItUnMDdh0mJPhZrxA== 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=1vixQSBgiAaI6lKHwKAuiRwZ35VXYlNG7c4Uk9Q8O6Y=; b=JP1LH1Byiem8x/Gz1yeEtJjOY5jOMLxp1pwaakB0p3FHLt0+nt5Txv5w2EUAdsOzhZ0vln1P2yLtuC/GdN441vtWh5KkfNx3gSW+2SmgX6FQ4RVMnrBvX+VlHaeyuHibrpV4Ex26tcAnOfaQpKb4eD3qeR1L4YYow26gGzRVACpK4/YYJUr80HDXFE8vkWLiha+QC1Slaj3/AnLKKmJFur2/sg3KSPQWvAF8cDFnsIlNI9rIyULPsUNOtiM8dRjQlEY2XBbpdKscJiWDuofWxAoGSfJube9bGUd6zHr2wnGQ73UbykOhI4hPjgYzrCQtuG9QW4qZU2BwRoL7/6VgEg== 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 DB8PR04MB7068.eurprd04.prod.outlook.com (2603:10a6:10:fe::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9520.5; Wed, 14 Jan 2026 15:21:24 +0000 Received: from AM9PR04MB8585.eurprd04.prod.outlook.com ([fe80::f010:fca8:7ef:62f4]) by AM9PR04MB8585.eurprd04.prod.outlook.com ([fe80::f010:fca8:7ef:62f4%4]) with mapi id 15.20.9520.003; Wed, 14 Jan 2026 15:21:24 +0000 From: Vladimir Oltean To: linux-phy@lists.infradead.org Cc: netdev@vger.kernel.org, Ioana Ciornei , Vinod Koul , Kishon Vijay Abraham I , Neil Armstrong , Josua Mayer , linux-kernel@vger.kernel.org Subject: [PATCH phy 3/8] dt-bindings: phy: lynx-28g: add constraint on LX2162A lane indices Date: Wed, 14 Jan 2026 17:21:06 +0200 Message-Id: <20260114152111.625350-4-vladimir.oltean@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260114152111.625350-1-vladimir.oltean@nxp.com> References: <20260114152111.625350-1-vladimir.oltean@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM8P190CA0015.EURP190.PROD.OUTLOOK.COM (2603:10a6:20b:219::20) 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_|DB8PR04MB7068:EE_ X-MS-Office365-Filtering-Correlation-Id: 949d3bee-0acf-4412-c7f3-08de53809413 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|376014|19092799006|52116014|38350700014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?sUkzwLX4+QSL+y2IVIu81h+UZH21LJmPQ3fi8k8x4ePTzjp+Thk2UKqYTdmW?= =?us-ascii?Q?hqS+K+wbPa32Yshs83jKsmJQ0tOsYgL1eEdfJiN8pnzeBqv7dkgQKjBEfau+?= =?us-ascii?Q?4iLeRxiNJ9rhl62q0WfuE1HE8QQTBdOKNDVDv4F7idTkGosWWvd8J5glcAth?= =?us-ascii?Q?WpHk7n86Bl7pSnhLAev4E3u/inZr3uu2DQUDfjiE92/iFUsD9m+F96ALCf/8?= =?us-ascii?Q?qoSVtZpMzUSFZ6UXBxNFzjyh6dBM5bO/PIx/4tVDA/LPcVXkh0P310rlV6eX?= =?us-ascii?Q?DGFSLgkYYnOSJdrsSM5X9cdHqU3rD6BGI3uA4utun96IjZMiM0UHNr+Tbmur?= =?us-ascii?Q?RlBdwYdFUGbgnI5VsXocK2l64KPXV1bSmubFILLjKjOe2Rz5kfNrcIx7CAh2?= =?us-ascii?Q?2P9/3JCH9lCw/lNqB2MZqlpJlCQKQuRcI7sKVEhH3nIKs20D1fFyfNvpAohg?= =?us-ascii?Q?AFoZAjQjfvw8atlrCMrPF/BjwnoTPdedS9j4uTHRzr31F90uDK6yavEAXApR?= =?us-ascii?Q?uu1aAp4mDOk04CQsWf/W78uYb6qM+JQD17w3eQcIuqo6hMK+ZAi1MWkZywaj?= =?us-ascii?Q?aJOReFZX4cVFr2jxsNBwavdj/C09Ks4XQuFcgpdUU6OEnL9gtEwZm9hzJ0xq?= =?us-ascii?Q?bYMd1jYRVqPWkHPpx0iixWWZP13laKAzJZAx9AMjpR+aNeA5jJp5YW4nhl9/?= =?us-ascii?Q?tyV5QCCQCQdxtPMOGziVBDQ9IjvlisgAY1m50VOqv0qB7CdccgCUgpTy/7kf?= =?us-ascii?Q?6OyHddTRWQHF4F+WgLC3aVHI/a5MN5EJNlWg2yFw2kG9nOtyuC1gkT9QLhh8?= =?us-ascii?Q?CSdfDJpiiX5y6l4ZtYp0WvIX/4LdVTzGjwE6I277haeUHXI3k9Y5aZPuCe1J?= =?us-ascii?Q?q1eaYYlZ2ciiCWLpz1CZalPNbippyRdOARjGQOfolK/2eZ31GJJqPqoW7y4X?= =?us-ascii?Q?B6lIQjhQFSVVmocbN75J8h7K9oc5FTqIoTXaK8JTt+0lRmHVGYMBZN39Mjnx?= =?us-ascii?Q?yFiclpNduTY8dENWxUYgbRdulMn1kkvrnU2KHH8NMQwhVOxubj16HBbX2KT3?= =?us-ascii?Q?Ncd/TLhDjD0J3cR168+rtfUm8+Ni4NWuTt/dCiiDjccHr2gj5VwYDTwHOAXY?= =?us-ascii?Q?EdVtqvVT/wnuF+LkKBaNkJC09ybKkXqtMBdNhRyvpRei18eOcWeMUPnyozk9?= =?us-ascii?Q?G9wbo0cDkjxTflwuRfxzt32BYogmE3bI2m48xLDJrJpM5OgZXNO8lAj1rT+u?= =?us-ascii?Q?bMa9kJMAbf00a/a9llGuPdWS6hc57/bShb7CBvrGr+daaOp7zrCTb1Swd7+B?= =?us-ascii?Q?M/S0cD+t8koRTh78GdpX/cC5ox/9CLLy7KsGwIiV4hRvRQfZ3sTcyULtObux?= =?us-ascii?Q?lGHPH9YiUzu6LmYdXzJbRn1E5YbV97N5Eq6litW5a4XmevGe321GFKwVep9/?= =?us-ascii?Q?6cUB08WM4RaAYsabnwPNxe1sPq/mPFpg5DWnXo33VGuvDV9bDIAjdoUjRNX/?= =?us-ascii?Q?1FhMAAbQcXUtOqWllhv9XfTb3nMSPsVVas22pmYfkD2gBsYVRxO9j5NWI81j?= =?us-ascii?Q?8wTCVe6NzjwSusw9b6xOH/42wzveUURW/mtVmeJAWwuKt3mJ0MpaMZ04q8iL?= =?us-ascii?Q?N92jv6b+bgDZNAF9U4YB5+w=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)(366016)(376014)(19092799006)(52116014)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?XCa3vZJZoC4CKg0nTnm9bLZNNEJp1E11iCdjjSNwzjX1/tPqOyvPt+B9i9SB?= =?us-ascii?Q?9vTkrIq7jlINoUaNqVS8Som1FgHYLVtTE9ObIKcvxqdgre4k0WlughgxypF8?= =?us-ascii?Q?WWdoA86OZLBHYI6rtR4gXZy6/TI1HGwxT7ghusgeZLKIabzDKe2PxjpjQ75i?= =?us-ascii?Q?Oht59b5zTSd/PcqdE+PeE4Ebg3B1HqodYRbGNWDJKD1EArm9eaHdPWRckOC8?= =?us-ascii?Q?s8l6Sv3nHmgxWBL+qKiQgpdx9a9k0WJYLYvha2hOgGPa0p83dxM9XylHsw67?= =?us-ascii?Q?HfnlB5cy5FbShYc3cIBD5E7A7p99FrVixmoUIqCGEYeYVoKeMXY0rQdqXiCF?= =?us-ascii?Q?E2Ii0oSgXDy0TJOEYZjqIQR2sGTM9u73bzde1mC68ycxNH8wxFJcQyG1AyWq?= =?us-ascii?Q?RaZujX/1U4U+1uFe0XwBVWJVSXAfDjVhju2ILdoJ+EWgN5qRV628UBcC80oX?= =?us-ascii?Q?c8JWlosgSJT66q1VLithsTH8Zo6VcY31VaICUN2j+gUM2oQlZo8tVV5Qff6P?= =?us-ascii?Q?ZqMYa7dHbxKGThiIFPMzgIdn+gbV1KLcsLZVjRfce7xgGh2V+TGzCbdzuW2Z?= =?us-ascii?Q?w2/Bqr4wi59d3Mxi8nERceZYU5D3OE44RDns1RDk6FbKvZAr2SJjhjU8LsWJ?= =?us-ascii?Q?x0whZuwATw63FaI+GLHW6WaMtu3/Xk+b530QWAbPVMVSowcegI3P+ChDoDrf?= =?us-ascii?Q?TEAjNUl87jIoaX48yZNzv/gTOe8V9ZHI3a9fUaNlCfCKzd1w8kYNZ4oTfvpS?= =?us-ascii?Q?BUXeTMMhRIUwJ6IxTSWWniuo2uBrX+dzB9TlEQKl+0NxPZJ1HxctwYU3eEaN?= =?us-ascii?Q?PZ19vEtmVXQSa4RA7UK7S+rlHbQex6E/Hi0uC1LCfslJ8YDm/n+8ArnQRJRq?= =?us-ascii?Q?dbmlUsoA+VX6+bJ8+IWOlL/jDaEzyPAuoAA6SydsVN7n6FBZlomachAq76KV?= =?us-ascii?Q?Z4+yqEXAjJLy0gRTXmSKCG+VbZ/tJx+EI2Qy7Cu7WuwQcFPQjKIrHQxGuZOA?= =?us-ascii?Q?D+KLiJGQGLBeVcuLg1YjSIHmTAd4/mJ+pXP2DihC57aFQQmk/D8FJF8XZilv?= =?us-ascii?Q?ww9bDAybPy5l2HvKzMZ8GijT7Qs7vcVdBkxbgDzhWZ3qjTq0m+lPHd+yTOxx?= =?us-ascii?Q?5kKpKaf9uWURsySqCtsTl/yHQQV5qugxU0j4PBmD2jp1SIDSswlv1DSETcmN?= =?us-ascii?Q?mDmudXP1MTrkU1OTDOlVnJrETvIWeaV1n2fOXvpsWom1ojYanDViDb9d+t2/?= =?us-ascii?Q?UaAoJS6f/uM9R4AgcFWT/Erk3UxVvJJ+LzpwvxRshSW4m72If/uTNcnd0a+s?= =?us-ascii?Q?uhtr0uIpp00lenJDjtUD5Ow+4s3ISokzf1TQlqkDmHeefLP+B38ZnCpa0wCB?= =?us-ascii?Q?MKMdGALtyI0qjLGsI0906JQtbqO2h0RQ0mfL2uaxnUPoCzi85a8OzWVH87E5?= =?us-ascii?Q?oTtbmxP2YGrBKfZYtY80XK2XyU7pHBMee/Z0JZCH+QZyCLLco7735uQxQndD?= =?us-ascii?Q?9O7h2N8A5fhNVu3Zkj4YkOcuid53xFK48mo2tIv9/amX5bRGWEM6gWaBu7Mh?= =?us-ascii?Q?Zh+hn9k1RXbraBJbv4RpGVdsK50ItOzNQbBr200EJyeAdSAhCQG/l99WexmX?= =?us-ascii?Q?jfZg1soiOrgkNEcmTfSWJ+A7+nZj4Ea3X6TP1x+GU+VJkS7JFEOoJdJsKH85?= =?us-ascii?Q?9lDUCD3Fl771wrP81PuAKoQmSvgztWHpIqHixesyCi0zQjOjl6h8CAE7RlTx?= =?us-ascii?Q?jhsUSSBG0Qe9b9TfhhPV8L8KCSITyS4=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 949d3bee-0acf-4412-c7f3-08de53809413 X-MS-Exchange-CrossTenant-AuthSource: AM9PR04MB8585.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Jan 2026 15:21:24.0026 (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: yfFZ1jyznIWUcdnBtGgK+s+hktrXTLkybpprqHWllhf8atgg28SzLLEwTtS8Hso+F6SXuAAEahgdwJ+n7QdLCQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB8PR04MB7068 Content-Type: text/plain; charset="utf-8" The SerDes 1 of LX2162A has fewer lanes than all other instances, and strangely, their indices are not 0-3, but 4-7. This constraint was not possible to be imposed when the schema didn't have per-SoC compatible strings and per-lane OF nodes, so depend on the two to restrict the lane index. Signed-off-by: Vladimir Oltean --- part 1 -> part 2: patch is "new" This is a rewritten constraint from the previous "[PATCH v4 phy 15/16] dt-bindings: phy: lynx-28g: add compatible strings per SerDes and instantiation": https://lore.kernel.org/linux-phy/20251110092241.1306838-16-vladimir.oltean= @nxp.com/ .../devicetree/bindings/phy/fsl,lynx-28g.yaml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/Documentation/devicetree/bindings/phy/fsl,lynx-28g.yaml b/Docu= mentation/devicetree/bindings/phy/fsl,lynx-28g.yaml index 8375bca810cc..2f245094a985 100644 --- a/Documentation/devicetree/bindings/phy/fsl,lynx-28g.yaml +++ b/Documentation/devicetree/bindings/phy/fsl,lynx-28g.yaml @@ -78,6 +78,23 @@ required: - reg - "#phy-cells" =20 +allOf: + # LX2162A SerDes 1 has fewer lanes than the others + - if: + properties: + compatible: + contains: + const: fsl,lx2162a-serdes1 + patternProperties: + "^phy@[0-7]$": true + then: + patternProperties: + "^phy@[0-7]$": + properties: + reg: + minimum: 4 + maximum: 7 + additionalProperties: false =20 examples: --=20 2.34.1 From nobody Sun Feb 8 23:27:07 2026 Received: from DUZPR83CU001.outbound.protection.outlook.com (mail-northeuropeazon11012009.outbound.protection.outlook.com [52.101.66.9]) (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 22369397ACB; Wed, 14 Jan 2026 15:21:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.66.9 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768404111; cv=fail; b=G7Y1ZuqRzi8LlciG2UFOMREdqFWvywF0M9gp2Cb7wHII3aUKnXsR/ZuHelBszC8OYjXziWqJVAFPvN7gOz7NlJOaDiA8S7A2fBaIPHV9BXQkamd9jynTlBxDWmhBZhq3hYkVFIKhenPhlpl1KZq/kL4wgvg0SY8zDTb1w1VNh2c= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768404111; c=relaxed/simple; bh=ziCNt9EgYlrHmbMbGttT7Kyp/CvXpg9raweDC3ZnArc=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=Rw4WYMtxGmfzSmaWXIeve0sbLH1GQ8pD8ctDOZbb2AqFE0d66b0c6IbS2sV6n8I5SSfjkr/bSBrVIJiQgoZSGSneR1uBQeJ49LlsY7fPt4Jh06rIBL1wi4U+bSnxtSxTzr5ajYmuOg7kbk5HuzTn2y+wV56zbzIhpFrp3cBFNHs= 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=iV+19vzI; arc=fail smtp.client-ip=52.101.66.9 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="iV+19vzI" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Du2VNKTsrtnBDe6rAu5g9S4+vbMRI29hOhYuLAACGWXCpfHdvpHgoYrmy/7W8S3K785xJlyKhhAVUD7bzDzIHnE/pspT/UmBAu7f6hZXO8N0stE9kxMjolHLajt7RfUARZOw/kwvcELkzpypbzStlg3vjBL9HowxlEeoGzz5/f+Zpm1LTXmXF1DHWWsaVv07h3fYg4lIfc7MF2XqNdJ2HtO/uN2wEm4uk8dzp5MMa+p5eIwBoYk51sO8LnXQCli0UN65b9rJDVfrEY8fwmTK8rrEh4moH0V396s9M9W9p2UGq4gTDNASgmXRNfp3llcLz4+vK8D0DIug0KkLCNE3mQ== 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=dOHhcVucJAR6CP7FtOkZaJgsLht3DaZGqf4Vu2k/vc8=; b=tPeC2weelC/uEO2wfoFEp6Y8M2jhKexYyHB6Kx1+CMogPgI/FktNAYvPH9M6PGHsEWk0tJ1JgNr88Kh0gUzbHqYyO9jW1UcU3emIUWqDt6b6MF7rwGKXCAifmzEg0foOwXriWYkK6BQdYgEticgsy8uRdXXXxcCMJy4tLWhFxZCNRjrmJ4OiF77VJnmKq7uFF1W2owy0xNZqLUZofCXq+5SkDwPyTHAefgZEp3dkJR32JvIUXaiqhvxSEgz2IUoFV1musT9BTxuSz9xfpwhvWnDeY4TrHPGG/llXORdjRJEGG5rMZFC+g3v0vroR0qIj1yc2MfbbFpcrK1Czj1Ou+w== 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=dOHhcVucJAR6CP7FtOkZaJgsLht3DaZGqf4Vu2k/vc8=; b=iV+19vzIWHQ3bYEs+ldT29eoQsMuQRcH320f7XpoWPaG4KngEmtEtYxOpenDgoij+T9XTVolHmFSAmzQ5tB+TSXZy5N17zodeuhGsvO2LqOVbzpzdtQWTaJpfHtPt/0pGzG3XpN7JdE35VkUNGGoTYv0FBOOmWyFRHwREsyDkSSClau4ka7cPqKpb6g9+6OLI8r7MnSEAoWRhKfmJ6vcuhnJfpVKCr5sfdQRMsexgQrViuzm47wkbaJKTR9kzugC0lx4UWDPqBzUfxnoLziW0QLTwgO8iuhZVIJhWtbBSTj9g/yPYrprPh82RGBzo2pF1sTfP0T8XO/Z2ZlozR5R3w== 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 DB8PR04MB7068.eurprd04.prod.outlook.com (2603:10a6:10:fe::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9520.5; Wed, 14 Jan 2026 15:21:25 +0000 Received: from AM9PR04MB8585.eurprd04.prod.outlook.com ([fe80::f010:fca8:7ef:62f4]) by AM9PR04MB8585.eurprd04.prod.outlook.com ([fe80::f010:fca8:7ef:62f4%4]) with mapi id 15.20.9520.003; Wed, 14 Jan 2026 15:21:25 +0000 From: Vladimir Oltean To: linux-phy@lists.infradead.org Cc: netdev@vger.kernel.org, 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 phy 4/8] phy: lynx-28g: probe on per-SoC and per-instance compatible strings Date: Wed, 14 Jan 2026 17:21:07 +0200 Message-Id: <20260114152111.625350-5-vladimir.oltean@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260114152111.625350-1-vladimir.oltean@nxp.com> References: <20260114152111.625350-1-vladimir.oltean@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM8P190CA0015.EURP190.PROD.OUTLOOK.COM (2603:10a6:20b:219::20) 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_|DB8PR04MB7068:EE_ X-MS-Office365-Filtering-Correlation-Id: ca69446c-d066-413c-ebed-08de538094d2 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|376014|19092799006|7416014|52116014|38350700014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?ODr/+Osk4jHPQUlZImd5ZKMkKEi+lYTGoyxED2K0/dxXwFyZevTZWifD41ai?= =?us-ascii?Q?DHIUXSaMEuWgZTHqNhXJwboJY2VGhGW6Vwp16fiH4zPIyp0ZBqkxspDLIY79?= =?us-ascii?Q?ZkbpS2D87gK1suL1WMylZWl6OpUmw/CyJELXE/kyQrP3VgTqq7ME+kS3w40z?= =?us-ascii?Q?RbzFVW21Uydgw+YT+yg2+ZUAfr1lzVOS9OlkK/ZCP5PRN9qC1ZhBwJrae7Zl?= =?us-ascii?Q?sBQEOBEy2JFQ7MusWBPpVuRJcC4Aa1T/hXy9US94U8dfWqbkT2KNG5P7jMwU?= =?us-ascii?Q?qciZj7Dg0VkelwwoHYY3hhcgYnnLBv6FK1Wl5kxO+tw3+sstkGJe1QSGJL5f?= =?us-ascii?Q?+eIsSf1aLCpUn83YbS8KKkCghswW8BBj75g8pwrf/nz6w99K90+fT9OyNB0e?= =?us-ascii?Q?C2+tHZVYQGrwzrbnxVv/PGS9E40N4djsddTIfcyWTbyJXsA8ZORkILuk3LGz?= =?us-ascii?Q?fNlDG94jID4X4bBOXGx/Xr15+7GGffKVzLaOczq6y0wC0oeRjDg629HZuUB8?= =?us-ascii?Q?4FXkGtWxJIQqF1gq8oFnlD1dDQxIOk5OJo7fPyHFR23Ab6QnqnJfwGokhHIC?= =?us-ascii?Q?nQwgybd5PqlhaXVu1b/+nMU5z467Pvvx6K/pKWXFNS5NZZ2GSWhFP6IEijx3?= =?us-ascii?Q?YQ9Q3BxmRz29NIegPXwup5H5Wbh0TYCO4UXjZq0GUoEnuYkDPVBAHPkwIKwN?= =?us-ascii?Q?uE0G7Evaqh/j7DQ1c8K49inThbjKBTXWmN9dutXibKtE7lu2PL6it453NFBj?= =?us-ascii?Q?q9I36i8/EwDnRuPZ5hioPD+kF7HREqQGs+/06F3Tsd9731Ym2iqXlZxuNZEZ?= =?us-ascii?Q?0i3/5M2koSmt37nVFo1zaW4vNc4wSqcbnTrBOE2l6zXGR+mrnUMWBFu+Lfug?= =?us-ascii?Q?JFokU1oCsiYiWsI90TnCDzSS5ihuj11UyR0GqITFn3QcN6og3HNkoAkpFnB9?= =?us-ascii?Q?IfL/gf/LF82yxSTCgQBDSLV0Orarf0kQg7d6dBuiUJylSfklZ1TaTzpdERPl?= =?us-ascii?Q?b4ah0P0gIlVcvdTHRXXztMizrG3LGDcxMMKvziuh1SeSsFJ7kLxCX9xt8dqw?= =?us-ascii?Q?J8q09kOT5cPzzGk9lwx+K+qfip9iD31mgyjobCuWDM8HliFpuktZtozPJV6p?= =?us-ascii?Q?tgQ5N2eZrtgZfXTbTO2Mid7zr2VTblATnydNpWNmdcbPrn15ajFwELWoZQww?= =?us-ascii?Q?Zob8SwVE42H4gfj/dV2HP4LZsowP1o8uYtr7vQz6fZkdRAm8Dfrc9ZperLs/?= =?us-ascii?Q?y8nRa4CSFdsLVpgW8kNvpr/53YegThZfQwg8bfImApYh9JhXY6HD8dKcpYRn?= =?us-ascii?Q?9OoZAD3STr7cehf9+SuqlxJje+aC9O5mJWZkrfIjm+KwFtHG6poJx5pJ4lEO?= =?us-ascii?Q?YTS5RaGnsHEkYonhYDrDvqRvQl7DsfsehK030MqKJcVMAySUXXhcKNs1u+1O?= =?us-ascii?Q?cOUA7/1U6kqSC5NfZ5cCZHCK6hsjPRcOMwWVkpTJ47wzyZf9njtQX2lop9dD?= =?us-ascii?Q?lccJbU7ciim71kefZiifEGwtAzox0oMcwayRR8QwpDIRnH6d0mLyWWvWOx5J?= =?us-ascii?Q?TD5CAd6hH1o41qhivYt8WC2OYH/DYGMqrKe44AvlmAiR0l5I+OuFTq7uH0Q8?= =?us-ascii?Q?HgAJgR5VidUq4G0ja6yFIlk=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)(366016)(376014)(19092799006)(7416014)(52116014)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?6Q3QjIcB3M90YVkn6sMpZEwToNo2A6wdAsB2+ucoG0S9ljszl+23HE5kg17k?= =?us-ascii?Q?X33yJGvIo4BHDygCvVvdUBRunWX9pgRf0M+AlXyxEOIGFB12mm5ozu4gcvND?= =?us-ascii?Q?SOvljjyDd92EA9RW5E8g8lkeTIXkmxC0XBc+1nuRUJjy9jl2/uh6R3DoBMwW?= =?us-ascii?Q?zQP0XnuJM+9+FClcYH1hT+xbyVacvccjQuA6Od/U5BbxsRi4FCmw1mVr5dr+?= =?us-ascii?Q?FZ8ZgPQZiuYJzXrCf02YPPY8YBZyj65eoZimD2Iby+bkTWjk78Q68Rm08EBh?= =?us-ascii?Q?6GA+GInNT2K/9zEqChmnJSyrN+YJcCWBo7lvHaPPbXeW2Tm1nZ9+/CuigGkm?= =?us-ascii?Q?UcVYZpBtN0sNFRRR3xrvx5fgimSscww0YNMWvucm+/W6WQiyDN4H8JW1cV8T?= =?us-ascii?Q?1AasxvLNXE26ZWixEIapDz2E922KJk4qEc9byMzD6ZQmW2PmmqZD+JDRROnB?= =?us-ascii?Q?VPx3851ABcMmz9d+xu8pmBSz9JQcSiXc9P+RAeY9uswVytpvHXiATHsqqjqf?= =?us-ascii?Q?LsQP8eRxvLHDtLy9MqDy3qACirYl8vF6ucr1EXTkIjK6wqhgTI8GafOaSOXU?= =?us-ascii?Q?uUMVbNt90KKpiLmxWmohKgZgIXKc7DjCkR/8gI5Ap90j9EbQSmeo7SFI3Z43?= =?us-ascii?Q?qaH8nyQctZ+SRzu/ER7QEx1FofE30meX3FlosQc1BDEn26O8vCliekaxpgt7?= =?us-ascii?Q?OiypYSwEiOoF90mukmmP3vC4ldcZHIlDSlChw6Sg0XlaLJc9A1TCf9/CFUVq?= =?us-ascii?Q?d4dLUWKOfJqwlvs2SVqPWKToftmTR37DAunK+vjxpFu+klhdNNYlv2BIlCiC?= =?us-ascii?Q?F177WoHaRXSXGRFrsqHWXMLRI/fm4ecv81qgWNtjwwE8FLfYCh3CDmWEI9nn?= =?us-ascii?Q?jU4PdogNVe7AdxYltEtDmFtWtkfW1RCqB8fYpX0AlqvQutBEkzISO3WvaOOi?= =?us-ascii?Q?StqBJl468XqP/HvKFoWbu8tWtaRaoAgiWETFrnhfGZutcvFLxpnH9Dk30EIQ?= =?us-ascii?Q?3U23S5JEA7ipSvzw29NcF0dwFprpy453wVfLIu9AZr1PjLuTAVyFbHlgzYL6?= =?us-ascii?Q?WXQ+Hw/Bdi7eQBn2UvP7HbY/YzN1PsBcUnJ3QOAt4MMdrF5f2X1HnOyh9qve?= =?us-ascii?Q?OjmiTeaKwqZPJ//2hZbmQwgeuwmCxEgrQ9e77TXOJ/rPQ5IoQ7q4eBunorNl?= =?us-ascii?Q?iwWyHz5ort4ZW8B1Mf9xdKNOp1HXFLl/jtLp545DaJthzV+Pis/klnQkBoIC?= =?us-ascii?Q?bli2i3d55RyOoYMTVJmhpImKu+lOeuB/lI0cb3siIvfH9vgigxaM8Uc+mcwj?= =?us-ascii?Q?6WgZdNSSiiEFM54/Yd25OeJ3AEasLmgEwvddGbKneq3QhQZH3rHpC6VNF76+?= =?us-ascii?Q?79vwbIVLrs80zBCRfwPi1MXOYj/Jy0fCe1rMJQlAmwGKpudV9tNnUyoaxjbF?= =?us-ascii?Q?zjj9RiODjtdcNughgjdWIIEXrcdzy+8YXamLcomO8osGjxs7MNSEDzYeelRp?= =?us-ascii?Q?jM0KGK1M3MrFl8sR71ucU5EKPIjrahMh6aMplK+JZYyCA0WVeyIgnoZWSdjl?= =?us-ascii?Q?4UUnsTz7tREplvUHZmRJ9lpydUpir7aqyKW8vUzUAfX4zzvTXmKkt615m1rR?= =?us-ascii?Q?izU9yvAo6ZKxlHfvcEYDGq3sxQINGSebnXsWoAnnYXMj9V2Jxo5BXiQQs951?= =?us-ascii?Q?XWx4CxpgQU1nvR/3YcQeVLvoXy/QMqSsJ15D/F7WrfX5FwiNpXEfHVPH7K2d?= =?us-ascii?Q?g3BnYb7an/CdZMlZnQcjAs6qc6RoEbk=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: ca69446c-d066-413c-ebed-08de538094d2 X-MS-Exchange-CrossTenant-AuthSource: AM9PR04MB8585.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Jan 2026 15:21:25.2848 (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: d20U3MrdSZLFpk6w/0X73J06Rrm7B6RRUIATLXApuUqPKM44rFX8Eh0rJintI8C2Jvo048fJZ/UKnFst1ZIC9Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB8PR04MB7068 Content-Type: text/plain; charset="utf-8" Add driver support for probing on the new, per-instance and per-SoC bindings, which provide the main benefit that they allow rejecting unsupported protocols per lane (10GbE on SerDes 2 lanes 0-5), but they also allow avoiding the creation of PHYs for lanes that don't exist (LX2162A lanes 0-3). Implications of the new bindings: 1. Probing on "fsl,lynx-28g" is still supported, but the feature set is frozen in time to just 1GbE and 10GbE (essentially the feature set as of this change). However, we encourage the user at probe time to update the device tree (because of the inability to reject unsupported lane protocols, as described above). 2. We have a new priv->info->first_lane, set to 4 for LX2162A SerDes #1 and to 0 for everybody else. 3. The lynx_28g_supports_lane_mode() function prototype changes. It was a SerDes-global function and now becomes per lane, to reflect the specific capabilities each instance may have. The implementation goes through priv->info->lane_supports_mode(). Cc: Rob Herring Cc: Krzysztof Kozlowski Cc: Conor Dooley Cc: devicetree@vger.kernel.org Signed-off-by: Vladimir Oltean --- part 1 -> part 2: - split out lynx_28g_cdr_lock_check() fix into separate patch Patch made its last appearance in v4 from part 1: https://lore.kernel.org/linux-phy/20251110092241.1306838-17-vladimir.oltean= @nxp.com/ (old) part 1 change log: v3->v4: - the introduction of "bool lane_phy_providers" from lynx_28g_probe() disappeared, and the whole "is the SerDes a PHY provider, or the individual lanes?" question is now handled by "[PATCH v4 phy 03/16] phy: lynx-28g: support individual lanes as OF PHY providers" v2->v3: - reword commit message - add some comments regarding the "fsl,lynx-28g" fallback mechanism - skip CDR lock workaround for lanes with no PHY (disabled in the device tree in the new binding) v1->v2: - remove priv->info->get_pccr() and priv->info->get_pcvt_offset(). These were always called directly as lynx_28g_get_pccr() and lynx_28g_get_pcvt_offset(). - Add forgotten priv->info->lane_supports_mode() test to lynx_28g_supports_lane_mode(). - Rename the "fsl,lynx-28g" drvdata as lynx_info_compat rather than lynx_info_lx2160a_serdes1, to reflect its treatment as less featured. - Implement a separate lane probing path for the #phy-cells =3D <0> case. drivers/phy/freescale/phy-fsl-lynx-28g.c | 126 +++++++++++++++++++++-- 1 file changed, 116 insertions(+), 10 deletions(-) diff --git a/drivers/phy/freescale/phy-fsl-lynx-28g.c b/drivers/phy/freesca= le/phy-fsl-lynx-28g.c index 63427fc34e26..9e154313c99b 100644 --- a/drivers/phy/freescale/phy-fsl-lynx-28g.c +++ b/drivers/phy/freescale/phy-fsl-lynx-28g.c @@ -433,9 +433,15 @@ struct lynx_28g_lane { enum lynx_lane_mode mode; }; =20 +struct lynx_info { + bool (*lane_supports_mode)(int lane, enum lynx_lane_mode mode); + int first_lane; +}; + struct lynx_28g_priv { void __iomem *base; struct device *dev; + const struct lynx_info *info; /* Serialize concurrent access to registers shared between lanes, * like PCCn */ @@ -500,11 +506,18 @@ static enum lynx_lane_mode phy_interface_to_lane_mode= (phy_interface_t intf) } } =20 -static bool lynx_28g_supports_lane_mode(struct lynx_28g_priv *priv, +/* A lane mode is supported if we have a PLL that can provide its required + * clock net, and if there is a protocol converter for that mode on that l= ane. + */ +static bool lynx_28g_supports_lane_mode(struct lynx_28g_lane *lane, enum lynx_lane_mode mode) { + struct lynx_28g_priv *priv =3D lane->priv; int i; =20 + if (!priv->info->lane_supports_mode(lane->id, mode)) + return false; + for (i =3D 0; i < LYNX_28G_NUM_PLL; i++) { if (PLLnRSTCTL_DIS(priv->pll[i].rstctl)) continue; @@ -687,6 +700,87 @@ static int lynx_28g_get_pcvt_offset(int lane, enum lyn= x_lane_mode lane_mode) } } =20 +static bool lx2160a_serdes1_lane_supports_mode(int lane, + enum lynx_lane_mode mode) +{ + return true; +} + +static bool lx2160a_serdes2_lane_supports_mode(int lane, + enum lynx_lane_mode mode) +{ + switch (mode) { + case LANE_MODE_1000BASEX_SGMII: + return true; + case LANE_MODE_USXGMII: + case LANE_MODE_10GBASER: + return lane =3D=3D 6 || lane =3D=3D 7; + default: + return false; + } +} + +static bool lx2160a_serdes3_lane_supports_mode(int lane, + enum lynx_lane_mode mode) +{ + /* + * Non-networking SerDes, and this driver supports only + * networking protocols + */ + return false; +} + +static bool lx2162a_serdes1_lane_supports_mode(int lane, + enum lynx_lane_mode mode) +{ + return true; +} + +static bool lx2162a_serdes2_lane_supports_mode(int lane, + enum lynx_lane_mode mode) +{ + return lx2160a_serdes2_lane_supports_mode(lane, mode); +} + +/* Feature set is not expected to grow for the deprecated compatible strin= g */ +static bool lynx_28g_compat_lane_supports_mode(int lane, + enum lynx_lane_mode mode) +{ + switch (mode) { + case LANE_MODE_1000BASEX_SGMII: + case LANE_MODE_USXGMII: + case LANE_MODE_10GBASER: + return true; + default: + return false; + } +} + +static const struct lynx_info lynx_info_compat =3D { + .lane_supports_mode =3D lynx_28g_compat_lane_supports_mode, +}; + +static const struct lynx_info lynx_info_lx2160a_serdes1 =3D { + .lane_supports_mode =3D lx2160a_serdes1_lane_supports_mode, +}; + +static const struct lynx_info lynx_info_lx2160a_serdes2 =3D { + .lane_supports_mode =3D lx2160a_serdes2_lane_supports_mode, +}; + +static const struct lynx_info lynx_info_lx2160a_serdes3 =3D { + .lane_supports_mode =3D lx2160a_serdes3_lane_supports_mode, +}; + +static const struct lynx_info lynx_info_lx2162a_serdes1 =3D { + .lane_supports_mode =3D lx2162a_serdes1_lane_supports_mode, + .first_lane =3D 4, +}; + +static const struct lynx_info lynx_info_lx2162a_serdes2 =3D { + .lane_supports_mode =3D lx2162a_serdes2_lane_supports_mode, +}; + static int lynx_pccr_read(struct lynx_28g_lane *lane, enum lynx_lane_mode = mode, u32 *val) { @@ -939,7 +1033,6 @@ static int lynx_28g_lane_enable_pcvt(struct lynx_28g_l= ane *lane, 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); - 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; @@ -951,7 +1044,7 @@ static int lynx_28g_set_mode(struct phy *phy, enum phy= _mode mode, int submode) return -EOPNOTSUPP; =20 lane_mode =3D phy_interface_to_lane_mode(submode); - if (!lynx_28g_supports_lane_mode(priv, lane_mode)) + if (!lynx_28g_supports_lane_mode(lane, lane_mode)) return -EOPNOTSUPP; =20 if (lane_mode =3D=3D lane->mode) @@ -984,14 +1077,13 @@ static int lynx_28g_validate(struct phy *phy, enum p= hy_mode mode, int submode, union phy_configure_opts *opts __always_unused) { 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 lane_mode =3D phy_interface_to_lane_mode(submode); - if (!lynx_28g_supports_lane_mode(priv, lane_mode)) + if (!lynx_28g_supports_lane_mode(lane, lane_mode)) return -EOPNOTSUPP; =20 return 0; @@ -1067,7 +1159,7 @@ static void lynx_28g_cdr_lock_check(struct work_struc= t *work) u32 rrstctl; int i; =20 - for (i =3D 0; i < LYNX_28G_NUM_LANE; i++) { + for (i =3D priv->info->first_lane; i < LYNX_28G_NUM_LANE; i++) { lane =3D &priv->lane[i]; if (!lane->phy) continue; @@ -1129,7 +1221,8 @@ static struct phy *lynx_28g_xlate(struct device *dev, =20 idx =3D args->args[0]; =20 - if (WARN_ON(idx >=3D LYNX_28G_NUM_LANE)) + if (WARN_ON(idx >=3D LYNX_28G_NUM_LANE || + idx < priv->info->first_lane)) return ERR_PTR(-EINVAL); =20 return priv->lane[idx].phy; @@ -1167,10 +1260,18 @@ static int lynx_28g_probe(struct platform_device *p= dev) return -ENOMEM; =20 priv->dev =3D dev; + priv->info =3D of_device_get_match_data(dev); dev_set_drvdata(dev, priv); spin_lock_init(&priv->pcc_lock); INIT_DELAYED_WORK(&priv->cdr_check, lynx_28g_cdr_lock_check); =20 + /* + * If we get here it means we probed on a device tree where + * "fsl,lynx-28g" wasn't the fallback, but the sole compatible string. + */ + if (priv->info =3D=3D &lynx_info_compat) + dev_warn(dev, "Please update device tree to use per-device compatible st= rings\n"); + priv->base =3D devm_platform_ioremap_resource(pdev, 0); if (IS_ERR(priv->base)) return PTR_ERR(priv->base); @@ -1194,7 +1295,7 @@ static int lynx_28g_probe(struct platform_device *pde= v) return -EINVAL; } =20 - if (reg >=3D LYNX_28G_NUM_LANE) { + if (reg < priv->info->first_lane || reg >=3D LYNX_28G_NUM_LANE) { dev_err(dev, "\"reg\" property out of range for %pOF\n", child); of_node_put(child); return -EINVAL; @@ -1207,7 +1308,7 @@ static int lynx_28g_probe(struct platform_device *pde= v) } } } else { - for (int i =3D 0; i < LYNX_28G_NUM_LANE; i++) { + for (int i =3D priv->info->first_lane; i < LYNX_28G_NUM_LANE; i++) { err =3D lynx_28g_probe_lane(priv, i, NULL); if (err) return err; @@ -1233,7 +1334,12 @@ static void lynx_28g_remove(struct platform_device *= pdev) } =20 static const struct of_device_id lynx_28g_of_match_table[] =3D { - { .compatible =3D "fsl,lynx-28g" }, + { .compatible =3D "fsl,lx2160a-serdes1", .data =3D &lynx_info_lx2160a_ser= des1 }, + { .compatible =3D "fsl,lx2160a-serdes2", .data =3D &lynx_info_lx2160a_ser= des2 }, + { .compatible =3D "fsl,lx2160a-serdes3", .data =3D &lynx_info_lx2160a_ser= des3 }, + { .compatible =3D "fsl,lx2162a-serdes1", .data =3D &lynx_info_lx2162a_ser= des1 }, + { .compatible =3D "fsl,lx2162a-serdes2", .data =3D &lynx_info_lx2162a_ser= des2 }, + { .compatible =3D "fsl,lynx-28g", .data =3D &lynx_info_compat }, /* fallb= ack, keep last */ { }, }; MODULE_DEVICE_TABLE(of, lynx_28g_of_match_table); --=20 2.34.1 From nobody Sun Feb 8 23:27:07 2026 Received: from PA4PR04CU001.outbound.protection.outlook.com (mail-francecentralazon11013038.outbound.protection.outlook.com [40.107.162.38]) (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 B1D2C396B80; Wed, 14 Jan 2026 15:21:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.162.38 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768404114; cv=fail; b=SWQrKmapaaySiP9Sz49Yj/rvSxO6XUGrQK7txspSI7vIwtaW3Dw7QZIn7YwXfaNGaC6vP+yTazQ1o9udX0peNqB4tFWl3Aks+W5Hwti6fVGbHB89Gf0k8gC46Q5/PNQRDZ51At04uBG/+bX6N15iCPSFKKErvWu1oITMV6Ms5wQ= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768404114; c=relaxed/simple; bh=PgCgojvfwuYghm+UFfXY2oo9N2RcW03QWGNb1Vr1ay8=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=m5zQ3fOKV7zAaVxx4XYeFtsFSzJP2SJyGvGdjAdIPFgNoEavqZ3cCkIXU2eVq5z5RTvOTS/R5dFhQyU/XpAkyopBuoerwcv039EzAy6Oao0+OP+jueECwlTfLTUaYevZj4TkUSS1KbipViLnWPwtmyTAbnQ021kh/CdiQpBVBNo= 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=DOr04Jf0; arc=fail smtp.client-ip=40.107.162.38 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="DOr04Jf0" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ve4nRllKe/3G8fRS7jYl7x/NfW/00eX4WNqXIJ7iu/pYW6xFDJCu6gO+3KyNXqMF6gAOYU9Wb85MfCGWyWIBBAM0/RMXoQvQku9M1witPmlsYfVtN8IElS3m65Yr+ge82lzOC+MDGWUg53u8nXqZTqLFKL1ziPxYzdWSCx/V5qQPlMUTKG85JqZDbHRmbr4252gni37KtD5vhTYPgB3q4Kxp9BvB7aL8WBo+3U1GZ/cabol587GPYy96ZDPtuAcgkeKrqFqm8NrA7kQYEPtyfq2nNGcLYQDXM1SM9blbbRtt2XtaHQoPzZBd9QtsrTzPEk597LYZRKFvCxKZmfO3qA== 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=M37UiS7fAFUL+hufODtjw3na7vHSd63ZGwCVin68EQs=; b=LUM/wT6PsHZ59VrynPrjkCOj6YAuaR+tHX2f9rarJG2DQ/zhEBPSN45BnJDB7JLfGbPUEW++iCRkziNwh+2QdbC/YyXtuEi8sZmq6drNvlkwJrSopT+EOBEPs0+4BqsqdnosdLE4GmyJAVPJ8aciTTQVQIdPVsFnxPISvXmEkVlvY1vuXUTUAwAbgu9PJzEkAFkdoThjKbPJ3s2WjcX0MA5xbEfUzHslZHdN19mNc/LOjgtiarrC6XfA/g3Ovp9dqp7R2Nx4tc69viepe5bekh85edayzu1f6gQp/NUCjv7bTaE+0hMCsBahHxn4eerQgnChX/fPvOIzy0v0kwbNhg== 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=M37UiS7fAFUL+hufODtjw3na7vHSd63ZGwCVin68EQs=; b=DOr04Jf02hiwZde8TkH6P+8vjeAIbuI4LS6ckgf3DTgvbPiVPe6n2honA7bLhrmrgLC28f+fEdartvzYnO9uoDZVmnn30taSEEQozJ0iFwuVNLHHGR09rOPsMnCVhf6i9A0oE/MnPmi0gKJGHuo/0ifH9lmNw4uKUcaoGTqGdwry58ZJ2ts7CMBHG2qRGKd64oHmffIH3rWjf8r11aX3b1LRti1V1pza9eJ8T+j6hMWKDe4/ReiuU4w3JVBADhF4sqrIO4+kwFkM3pvTgYd+UpOVRVEWUVnEA8CwAu62cjdJwy8x3hCvrakGgYGQkr7OtAORnXaLJpkwBzRk2VCoxw== 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 DB8PR04MB7068.eurprd04.prod.outlook.com (2603:10a6:10:fe::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9520.5; Wed, 14 Jan 2026 15:21:26 +0000 Received: from AM9PR04MB8585.eurprd04.prod.outlook.com ([fe80::f010:fca8:7ef:62f4]) by AM9PR04MB8585.eurprd04.prod.outlook.com ([fe80::f010:fca8:7ef:62f4%4]) with mapi id 15.20.9520.003; Wed, 14 Jan 2026 15:21:26 +0000 From: Vladimir Oltean To: linux-phy@lists.infradead.org Cc: netdev@vger.kernel.org, Ioana Ciornei , Vinod Koul , Kishon Vijay Abraham I , Neil Armstrong , Josua Mayer , linux-kernel@vger.kernel.org Subject: [PATCH phy 5/8] phy: lynx-28g: add support for 25GBASER Date: Wed, 14 Jan 2026 17:21:08 +0200 Message-Id: <20260114152111.625350-6-vladimir.oltean@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260114152111.625350-1-vladimir.oltean@nxp.com> References: <20260114152111.625350-1-vladimir.oltean@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM8P190CA0015.EURP190.PROD.OUTLOOK.COM (2603:10a6:20b:219::20) 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_|DB8PR04MB7068:EE_ X-MS-Office365-Filtering-Correlation-Id: aaf669dc-4edc-4bb1-d1b2-08de53809569 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|376014|19092799006|52116014|38350700014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?H6H1pfy7bcqnaBJ/5dxkS1c3OzSScA8IQz3epTVfsd6jATjcwoPz78LHLYCT?= =?us-ascii?Q?2JXRta2GU1873yW2g7/P81W5RMoRdaKgYTmXL/oUhjgcd3cn+Gz3ru0E+MJn?= =?us-ascii?Q?uG/3JKeh0Fg2ivChtERaTZafkUOLjGcXvilFO9MOuAGhd5PlWbuDGqPKOmxk?= =?us-ascii?Q?qJbSFAPrHeF2B5kbplobnGlqsLgHbXbI1u06xZQqhV2e0gHJYe5HvFBtYw61?= =?us-ascii?Q?SuajoUcGSnT1dzq1A5XqpI4kiIRYS7WBWywMV8bGq+J73qJmD4v3jNcamRJb?= =?us-ascii?Q?/cg6Y1tdHdvXZQiLdsVWtVmwL6TidV1UEfivCxR1YUFEpBvNXuKoeVvJ/Axo?= =?us-ascii?Q?fJnscFxPga7ZNTCGozo4z7PZd9yJjWCCOPxTIKxWNGb49+LL8RzuaS6DEikj?= =?us-ascii?Q?ySd2yDn7FVHGcZ32bWYJXcFjjjNpI143wlQyK0WvEqK1OyKVMN7z3uQFOuzP?= =?us-ascii?Q?7fbU3h0zqI4ROmOxLA3roPCg6Y3LSsqNB6dpVh2ATjYdEdgK9kvVjYTltFqJ?= =?us-ascii?Q?ISe7tHW9NlD1CKgT/ZIHhA5FpohzC5Q5/YzVuVrNK8dtc4lL89Zbkw/m+2jT?= =?us-ascii?Q?Ewf88UOZNX7mdRYrJ41wQo8QTSnLI4IhIBz595iVWbpkLyfGhh9tA2Fkc9Gm?= =?us-ascii?Q?v335KlV7B4+tHub+4hklW6i33ApQp8LFcXLVShX6Kk/EKE4grWAkGUlxhiOf?= =?us-ascii?Q?sEYuVScPbYfWrqhGEcAuSph+7ek6XJHT2/3y/UqfYPPICty41kLPtdxx4teu?= =?us-ascii?Q?HiayHRY7OmQyZe6Ol2WF3uLgCKUeE1Z3h6m+4mcbGuPFxArgHu1l72Itwo1Q?= =?us-ascii?Q?10TFge2EljGbhTbAZaLnuCdH/9jPGMThX9Al8ijnz7KSLedQibfOtDfwWBUq?= =?us-ascii?Q?Yue3EmHWnAfkbDvUU57fHG4KMcVpBspcmJfi7VtJCiKog3crCs+pAWRA5v5A?= =?us-ascii?Q?pWQ0TgenPqQu8g4KSKDHQhY5QHdUyCWpPbqpcnoOZK8r3EHbeWT9+cNbtRaU?= =?us-ascii?Q?ZVe6YOyNVi9himnBj2anjcg68b3nPEG610em+6FRsEYhBvFBj65HHimMN3N6?= =?us-ascii?Q?8rI4lvUDkV3PEAOW2vlveMUA1mFgAsPucwL4JsG6XhU3Ykbfiwxl1TYCEbbW?= =?us-ascii?Q?f9ADuz788Et545uof/nET1VCgprThsfrewpMfaY/LFKI05zkRSkDyqIIinHz?= =?us-ascii?Q?ckozOkqZrLora7YysqpC1nAa6mGL5gmik9/V1TLK1RnevRFjQfB86bJcU762?= =?us-ascii?Q?abCu1H04aL/Zbh+1WNdU9MVtfmrrqG3IWIVgPoch5iWTAUl2ucDLsJk1f4Cy?= =?us-ascii?Q?988SS5SCnA2roKJNXWIlVQEb1cbeU5eV9QUIqxLwxwI0V0cVeG9geXSKOg7a?= =?us-ascii?Q?9zTno7najhRI5Gi62EIkLgPtmFdyqdx7onh3xnyD7iXaVdFE+6WZdBTpXqPI?= =?us-ascii?Q?gAoehB1il40Eh4009hnN9sMdmbBRntMf6ePaOF9tw1GIa0SoVpQ91Mx708UJ?= =?us-ascii?Q?MphPoQUleZh9snCLKxN5EqubPrvsgH/oE/Q2+4nVFzB23hvS7ZZkghntxs7M?= =?us-ascii?Q?XOGK7xSwCNtU2s1hCrsIJkG+/c0LtWoL6L3I5P6to08El8K0bv7+3hrjZI1z?= =?us-ascii?Q?jPfbq1D88sYLvqUL8L2KTWI=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)(366016)(376014)(19092799006)(52116014)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?F3Q9wBUEYTnN8QrN2YrC43nTKt0GF/Jdf9S00ZK1PAicSjnNZonO0kX9kDH4?= =?us-ascii?Q?q0XDORc+H6cGZ/3XgVxaHZuy882wLZcnrsnEnQnq5orvSGwbs6o0kEph98ig?= =?us-ascii?Q?E5PAVVn3DUatXv3fD3S7vGONGTwFRc0dmNJyVraXH7AbgeJqBW6m0v9iDEwr?= =?us-ascii?Q?iCgZcyGV0xr1QPGn/5kY6iSOIWHRPrHj1SWrasK9xQiLy0f/X45JtCIPPnLT?= =?us-ascii?Q?6cS3WyyDEnSTuRDSHDTC7ei4E2KHjNui2EjyBAYeiYi5YbqhvqaO+dPPTzDW?= =?us-ascii?Q?6iJ82byWXzBFolIPtCi8uNYITtEHavQ8ERmk5jc7r64hW8L2MbpnGSMOR3tE?= =?us-ascii?Q?rWVtRiDufbhqvNFISAWeEF22QqehaXpxvJp0lRV/PE29cQ+HzgmereLcEPVy?= =?us-ascii?Q?ucDNrNmraHDVzKm9FbK4mCnrFFvSs0cQcadl3IkUeXXlqKEPJoIDVmwL5lTD?= =?us-ascii?Q?BUxP8E+Uhi6vtePZ4YYs03U8/rXu0StsiRBs60s5APtr+emyZAPMuh6CEvi0?= =?us-ascii?Q?MaQjU2Xr+yxlQDqrAKo9d3bnssg9KdIqFrbvcXPZrngOPfUScwNeD8GkLtSO?= =?us-ascii?Q?YqJhpIljPEZZmMqyQxOoPtxqnom+M2h/YsrSBBIF7M49auraQUpNf3z1pQ2x?= =?us-ascii?Q?le3ztaYjiZFbRVHakc1UyECJ6Kex9Vqf2+IurB2aSIpneiCyMgpReJvBDotz?= =?us-ascii?Q?/57wxyp5UDvzhykeJOcuousnr1Rs6P4TRZoLoZLalDh0Y56YW4GLIDi6s7oh?= =?us-ascii?Q?EteSe4uwGgofKwMuRb0BbRgDjIft1afea6roK1YSNj6JPFfJfrNriEzKwhK2?= =?us-ascii?Q?9xwRWx1pjUqq0MZcnpi/BYl57EU6R0gglwncl0TsIekU3VKVNwlhFtwKS8Mi?= =?us-ascii?Q?cAjIyu5QSD6p+cq+Dwthqk1QY+A5+KeT+7T7qQxCkaLlw4mGfglj9FKquLRF?= =?us-ascii?Q?dlFcx2F84xbKltXLgTw7bQTgYeiI1VR8Hl0AYUY7YwjXGzbUt4G4KdjyrVa6?= =?us-ascii?Q?8GMiwb2S2JATeNWAuwMlEzoI3AHwcMp3K6LzO9gS6mrr8+2pq7DjuEy5nNXY?= =?us-ascii?Q?M65b7Y8qX9sPoOBOIkBghoWz1XapY5/zPPT0NsL2qtdIMgOgb6bV+uUv/H+Y?= =?us-ascii?Q?G0Lb/2e7ass4N/6okRXC24Ksh7j3OYQDxiA3ZJszR7kBefOf8XghY7FfRPBL?= =?us-ascii?Q?RHlfjZG+ke+05+ksTIpCiyGWBgPR8vS6W/vv8TkjIXcN1V8gkzdahMQyiwCf?= =?us-ascii?Q?t1O/rpZtGjGixK/7cz3nCgUODNdYXdwGRN+h4VVehcb+VEgbO5o/nRHmAx7X?= =?us-ascii?Q?pv9iZSxu+ExuQvbG7PTVHA3wXPYV1+VeNwz4qV8xqy9puCynjIqW5QmL319V?= =?us-ascii?Q?pWgmYnprSXwYoV1/NmweeZWx+hvsmbSMkw58cTC2TOmi2UvwHzGdfTHd4/tX?= =?us-ascii?Q?tRVwXiCvGlZa9MFPymlPOHc6eGmhuQBzqygKh2vJCys49BgSQdI9/J2akNvp?= =?us-ascii?Q?q927aP6oBfW3gBP52GVse97JBstmfWA0nHC3rIc3dT+7715QjB9Bg1QEJ78o?= =?us-ascii?Q?Fv9/pDexhpNi1DeAvQ5lQ/dsEPeNgs+jXzt+uTpHq8vLZAf51GsQjwt5cxB7?= =?us-ascii?Q?dFf9io1zizlJCwbdc/8sEh2Difda6RmvB7+TmSDsNcx5pgP+pOa8vspjJ5wB?= =?us-ascii?Q?g1ZhuhaJ2j5yQ0szfKqo5AUvReQdeg2eQPusrcBn6OkHPt0+1vXjU+OIWkQ4?= =?us-ascii?Q?NIpATxIFW09Qm0Id53k/+2vfWK88o+o=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: aaf669dc-4edc-4bb1-d1b2-08de53809569 X-MS-Exchange-CrossTenant-AuthSource: AM9PR04MB8585.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Jan 2026 15:21:26.2635 (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: 4arROIhSluZi65bjSLU1AI3ag7k//ArgJs0HMe82qOtLlPGlFTcUQpqIoZsoW+IR/BtU4cfYGIgTB0cIx8RbIA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB8PR04MB7068 Content-Type: text/plain; charset="utf-8" From: Ioana Ciornei Add support for 25GBASE-R in the Lynx 28G SerDes PHY driver. 25GbE is sourced from a clock net frequency of 12.890625 GHz, as produced by PLLF or PLLS, further multiplied by the lane by 2. The change consists of: - determining at probe time if any PLL was preconfigured for the required clock net frequency for 25GbE - adding the default lane parameters for reconfiguring a lane to 25GbE irrespective of the original protocol - allowing this operating mode only on supported lanes, i.e. all lanes of LX2162A SerDes #1, and LX2160A SerDes lanes 0-1, 4-7. Signed-off-by: Ioana Ciornei Signed-off-by: Vladimir Oltean --- part 1 -> part 2: - rewrite commit message. Patch made its last appearance in v3 from part 1: https://lore.kernel.org/linux-phy/20250926180505.760089-15-vladimir.oltean@= nxp.com/ (old) part 1 change log: v2->v3: none v1->v2: implement missing lane_supports_mode() restrictions for 25GbE drivers/phy/freescale/phy-fsl-lynx-28g.c | 90 +++++++++++++++++++++++- 1 file changed, 88 insertions(+), 2 deletions(-) diff --git a/drivers/phy/freescale/phy-fsl-lynx-28g.c b/drivers/phy/freesca= le/phy-fsl-lynx-28g.c index 9e154313c99b..7ada581bbe4c 100644 --- a/drivers/phy/freescale/phy-fsl-lynx-28g.c +++ b/drivers/phy/freescale/phy-fsl-lynx-28g.c @@ -57,6 +57,7 @@ #define PLLnCR1_FRATE_5G_10GVCO 0x0 #define PLLnCR1_FRATE_5G_25GVCO 0x10 #define PLLnCR1_FRATE_10G_20GVCO 0x6 +#define PLLnCR1_FRATE_12G_25GVCO 0x16 =20 /* Per SerDes lane registers */ /* Lane a General Control Register */ @@ -64,9 +65,11 @@ #define LNaGCR0_PROTO_SEL GENMASK(7, 3) #define LNaGCR0_PROTO_SEL_SGMII 0x1 #define LNaGCR0_PROTO_SEL_XFI 0xa +#define LNaGCR0_PROTO_SEL_25G 0x1a #define LNaGCR0_IF_WIDTH GENMASK(2, 0) #define LNaGCR0_IF_WIDTH_10_BIT 0x0 #define LNaGCR0_IF_WIDTH_20_BIT 0x2 +#define LNaGCR0_IF_WIDTH_40_BIT 0x4 =20 /* Lane a Tx Reset Control Register */ #define LNaTRSTCTL(lane) (0x800 + (lane) * 0x100 + 0x20) @@ -83,6 +86,7 @@ #define LNaTGCR0_N_RATE_FULL 0x0 #define LNaTGCR0_N_RATE_HALF 0x1 #define LNaTGCR0_N_RATE_QUARTER 0x2 +#define LNaTGCR0_N_RATE_DOUBLE 0x3 =20 #define LNaTECR0(lane) (0x800 + (lane) * 0x100 + 0x30) #define LNaTECR0_EQ_TYPE GENMASK(30, 28) @@ -112,6 +116,7 @@ #define LNaRGCR0_N_RATE_FULL 0x0 #define LNaRGCR0_N_RATE_HALF 0x1 #define LNaRGCR0_N_RATE_QUARTER 0x2 +#define LNaRGCR0_N_RATE_DOUBLE 0x3 =20 #define LNaRGCR1(lane) (0x800 + (lane) * 0x100 + 0x48) #define LNaRGCR1_RX_ORD_ELECIDLE BIT(31) @@ -269,6 +274,7 @@ enum lynx_lane_mode { LANE_MODE_1000BASEX_SGMII, LANE_MODE_10GBASER, LANE_MODE_USXGMII, + LANE_MODE_25GBASER, LANE_MODE_MAX, }; =20 @@ -407,6 +413,41 @@ static const struct lynx_28g_proto_conf lynx_28g_proto= _conf[LANE_MODE_MAX] =3D { .ttlcr0 =3D LNaTTLCR0_TTL_SLO_PM_BYP | LNaTTLCR0_DATA_IN_SSC, }, + [LANE_MODE_25GBASER] =3D { + .proto_sel =3D LNaGCR0_PROTO_SEL_25G, + .if_width =3D LNaGCR0_IF_WIDTH_40_BIT, + .teq_type =3D EQ_TYPE_3TAP, + .sgn_preq =3D 1, + .ratio_preq =3D 2, + .sgn_post1q =3D 1, + .ratio_post1q =3D 7, + .amp_red =3D 0, + .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 5, + .gk2ovd_en =3D 0, + .gk3ovd_en =3D 0, + .gk4ovd_en =3D 1, + .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 2, + .spare_in =3D 3, + .smp_autoz_d1r =3D 2, + .smp_autoz_eg1r =3D 2, + .rccr0 =3D LNaRCCR0_CAL_EN | + LNaRCCR0_CAL_DC3_DIS | + LNaRCCR0_CAL_DC2_DIS | + LNaRCCR0_CAL_DC1_DIS | + LNaRCCR0_CAL_DC0_DIS, + .ttlcr0 =3D LNaTTLCR0_DATA_IN_SSC | + FIELD_PREP_CONST(LNaTTLCR0_CDR_MIN_SMP_ON, 1), + }, }; =20 struct lynx_pccr { @@ -486,6 +527,8 @@ static const char *lynx_lane_mode_str(enum lynx_lane_mo= de lane_mode) return "10GBase-R"; case LANE_MODE_USXGMII: return "USXGMII"; + case LANE_MODE_25GBASER: + return "25GBase-R"; default: return "unknown"; } @@ -501,6 +544,8 @@ static enum lynx_lane_mode phy_interface_to_lane_mode(p= hy_interface_t intf) return LANE_MODE_10GBASER; case PHY_INTERFACE_MODE_USXGMII: return LANE_MODE_USXGMII; + case PHY_INTERFACE_MODE_25GBASER: + return LANE_MODE_25GBASER; default: return LANE_MODE_UNKNOWN; } @@ -588,6 +633,20 @@ static void lynx_28g_lane_set_nrate(struct lynx_28g_la= ne *lane, break; } break; + case PLLnCR1_FRATE_12G_25GVCO: + switch (lane_mode) { + case LANE_MODE_25GBASER: + lynx_28g_lane_rmw(lane, LNaTGCR0, + FIELD_PREP(LNaTGCR0_N_RATE, LNaTGCR0_N_RATE_DOUBLE), + LNaTGCR0_N_RATE); + lynx_28g_lane_rmw(lane, LNaRGCR0, + FIELD_PREP(LNaRGCR0_N_RATE, LNaRGCR0_N_RATE_DOUBLE), + LNaRGCR0_N_RATE); + break; + default: + break; + } + break; default: break; } @@ -665,6 +724,11 @@ static int lynx_28g_power_on(struct phy *phy) return 0; } =20 +static int lynx_28g_e25g_pcvt(int lane) +{ + return 7 - lane; +} + static int lynx_28g_get_pccr(enum lynx_lane_mode lane_mode, int lane, struct lynx_pccr *pccr) { @@ -680,6 +744,11 @@ static int lynx_28g_get_pccr(enum lynx_lane_mode lane_= mode, int lane, pccr->width =3D 4; pccr->shift =3D SXGMII_CFG(lane); break; + case LANE_MODE_25GBASER: + pccr->offset =3D PCCD; + pccr->width =3D 4; + pccr->shift =3D E25G_CFG(lynx_28g_e25g_pcvt(lane)); + break; default: return -EOPNOTSUPP; } @@ -695,6 +764,8 @@ static int lynx_28g_get_pcvt_offset(int lane, enum lynx= _lane_mode lane_mode) case LANE_MODE_USXGMII: case LANE_MODE_10GBASER: return SXGMIIaCR0(lane); + case LANE_MODE_25GBASER: + return E25GaCR0(lynx_28g_e25g_pcvt(lane)); default: return -EOPNOTSUPP; } @@ -703,7 +774,12 @@ static int lynx_28g_get_pcvt_offset(int lane, enum lyn= x_lane_mode lane_mode) static bool lx2160a_serdes1_lane_supports_mode(int lane, enum lynx_lane_mode mode) { - return true; + switch (mode) { + case LANE_MODE_25GBASER: + return lane !=3D 2 && lane !=3D 3; + default: + return true; + } } =20 static bool lx2160a_serdes2_lane_supports_mode(int lane, @@ -1019,6 +1095,9 @@ static int lynx_28g_lane_enable_pcvt(struct lynx_28g_= lane *lane, case LANE_MODE_USXGMII: val |=3D PCCC_SXGMIIn_CFG; break; + case LANE_MODE_25GBASER: + val |=3D PCCD_E25Gn_CFG; + break; default: break; } @@ -1143,8 +1222,12 @@ static void lynx_28g_pll_read_configuration(struct l= ynx_28g_priv *priv) __set_bit(LANE_MODE_10GBASER, pll->supported); __set_bit(LANE_MODE_USXGMII, pll->supported); break; + case PLLnCR1_FRATE_12G_25GVCO: + /* 12.890625GHz clock net */ + __set_bit(LANE_MODE_25GBASER, pll->supported); + break; default: - /* 6GHz, 12.890625GHz, 8GHz */ + /* 6GHz, 8GHz */ break; } } @@ -1203,6 +1286,9 @@ static void lynx_28g_lane_read_configuration(struct l= ynx_28g_lane *lane) else lane->mode =3D LANE_MODE_USXGMII; break; + case LNaPSS_TYPE_25G: + lane->mode =3D LANE_MODE_25GBASER; + break; default: lane->mode =3D LANE_MODE_UNKNOWN; } --=20 2.34.1 From nobody Sun Feb 8 23:27:08 2026 Received: from DUZPR83CU001.outbound.protection.outlook.com (mail-northeuropeazon11012009.outbound.protection.outlook.com [52.101.66.9]) (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 0E7D039C62C; Wed, 14 Jan 2026 15:21:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.66.9 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768404120; cv=fail; b=BqMrIFTIXbqKMY9K6KoExVTCNpqOp2b/lVSPdfuXhCtUDyDOo2GBRGrStjv7vOZWLb4uubl1LK7Z/8MyN8HFnM0gVDBNyZ5K3WuxgEANeIqrCDX3i8sVCrgLzvU+xmGSBCHDivKcbYMJzRLgiciPL0wTEVYnMnLUgDbuDPR3WSM= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768404120; c=relaxed/simple; bh=I7Lmup9vbfcW1VuqP0qRocQn9sz/IpdIfy511A71S1w=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=J5O7fqBTvno5rxOl+kQ2D3QATodrn4N4cmfy60tunLPwIsljWlPmI/wn1Yk306ZMybB+8oyY5Bqi2dJOiWUxULuH1mbnZr0HwNb7HhD76h6itv12Dkx2Ej/Eb3TWuw/gN7+F6mgDtaY/GE4o0GDb+JYYU9bC3D9hrMUlrT3YfNg= 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=jsvv4hkR; arc=fail smtp.client-ip=52.101.66.9 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="jsvv4hkR" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=H0E5gwk+6+V94bgZUi5zq6iJ2T14OaZfePVlPEEcUgb671Jqfh/c8p87KuWdPyU5YyUx2DN2qNaOqczTQsHNJbuk8h5dCh7mC3FYkUQwhGIKURWwmDO6V7/+2iZgdIiUFelrgywK0VJY0GKDA6V3RwqcpVRXkuBm9cgA5TEINZNeuBSZZ6PkRTiU2s8Q/c1yK621BAFalLCs8ePDv+JKH2vxp36scLELyKhW6TR9aLjUDxYAHjyGq2Ow9kC/KDF6Rp6qm7UoYukFwFfHLcfE+us5P1LRFQtx28M4S7u/BUj+kXmdEp2amEp5QErKUzRa2OdLjXQr250CXPgpM/frmQ== 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=MnTWU1ngZKtWj1AHo9b2HnsmlNHaNpaS5FoTywIlE0c=; b=kZsIaYRyaT23iX6Dwv/sFO4KjibtES6ROGywFMbgw1ogb0Rt7ZjOyP9W4TlVj5fiAaVCn0mKeiEPZ31Ds8FtZVx7zRjmfCzdbqZ/I2K4bdbr5+RLRzWYdlO26f9Ut2T/6FHTknDjLMFrCXtLAQXqmNxq8D22e7W6sU2QeCjuW4bxwqm28weV1qfH4I+MOMgqFtbcD4CjsyZtLRazvLuNzPqAzTccdCsCdnxXd1zPblnUDRdJrjAp3ijfBat47/aEWCq3pF/8fm8Mv2XxblQyGnAjYK/TLkN/yruC6ykEvi1hviwG8MaUeCo7z4jPfEv6IeemN+Q1pWvQcp0GERV48Q== 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=MnTWU1ngZKtWj1AHo9b2HnsmlNHaNpaS5FoTywIlE0c=; b=jsvv4hkRUSo189HiBSr8p1OmGx/gTttRD6sWG9imL4DjOX/aLwfLHwarscDsLO4q9RWoOQSWy1Grrg0xP1m2eF6Ho3T48Ke4AOhPS051ueixstWXmjq0u2Fps+sJZn5Ncl2L3XN9Cf0as3m5IvYL3rlfm7pVocEFEc6F2lN9b4+ZVzarV1i5OgwTG7cPo2wHkMvqTtMHG9WrAxcVPNkrdTdtB2C36y7W9fjQrarR/vR1d9QVxVuK4im302QmEV73KtPN8E9/mB9bdKPT6ZOeeSDtK/d0yPZ9NWXv5QGJHLWQ+QObaGighTk9NoLf1ADPQdq0tmJq8GUqCq5/fUzC9w== 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 DB8PR04MB7068.eurprd04.prod.outlook.com (2603:10a6:10:fe::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9520.5; Wed, 14 Jan 2026 15:21:27 +0000 Received: from AM9PR04MB8585.eurprd04.prod.outlook.com ([fe80::f010:fca8:7ef:62f4]) by AM9PR04MB8585.eurprd04.prod.outlook.com ([fe80::f010:fca8:7ef:62f4%4]) with mapi id 15.20.9520.003; Wed, 14 Jan 2026 15:21:27 +0000 From: Vladimir Oltean To: linux-phy@lists.infradead.org Cc: netdev@vger.kernel.org, Ioana Ciornei , Vinod Koul , Kishon Vijay Abraham I , Neil Armstrong , Josua Mayer , linux-kernel@vger.kernel.org Subject: [PATCH phy 6/8] phy: lynx-28g: use timeouts when waiting for lane halt and reset Date: Wed, 14 Jan 2026 17:21:09 +0200 Message-Id: <20260114152111.625350-7-vladimir.oltean@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260114152111.625350-1-vladimir.oltean@nxp.com> References: <20260114152111.625350-1-vladimir.oltean@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM8P190CA0015.EURP190.PROD.OUTLOOK.COM (2603:10a6:20b:219::20) 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_|DB8PR04MB7068:EE_ X-MS-Office365-Filtering-Correlation-Id: 47c72b5b-2490-472f-a3bb-08de538095fd X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|376014|19092799006|52116014|38350700014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?AKoUHKFr2CjPAGqSYtaY8VYY/Fa1k+TPW4Kmcq6SBlaR2CNQ/r0We2JB2Gr9?= =?us-ascii?Q?sBy1wipI9DMHbrIzw/E9Nv2dLqd9a5d20/9L0X0+d0HeRRJUX/4sXxEOZ8O8?= =?us-ascii?Q?VdfQ07Yb2Ez2yq5LwpJ+u+EwaoiW7MchLqo1T5xducpkg3Nkhs4WrQPtEjb4?= =?us-ascii?Q?0NJpIhqtyN+hi1XOJx0trYroLFWhVBw7bZeaCYhE8TxH6tHvBCoGGyfsOezw?= =?us-ascii?Q?k72c+F6o+Wn+Wy1W5stpmGIZuGTL0Y2RmnfMvgU0pXvgjHGH7PvM2+UPB5I0?= =?us-ascii?Q?6H8c5r/MXVMu06XaDD9Xh4sbEZcBrvB5dy5U3BAD/gFyQaGLzob/OMKFXjc+?= =?us-ascii?Q?W42JXVHvwuqye3LGeatLDkgQsKn0b+SncgVFNplac8BcTNcsWQJLYf1WHbf/?= =?us-ascii?Q?bXKeT5UDV/c8LxOijiJU8bJi3++yPqPvvNURTunjju9+32qPWgrMMvaM9y/0?= =?us-ascii?Q?QKHqenk4l96mrhbSg3iIhEUe/FzAkUE04cdWcC/UcceF2hRM3jlKAFpekTYX?= =?us-ascii?Q?u3LTrOm6nAmxEYdKymspUjIvSm/+gfPKorKG8jl+K/8Nr7oi3Dy7QZSuwso8?= =?us-ascii?Q?yNafolshD5A3Ul9/3QUcyqkz4FGmZIBGEtg/24WzTXh5N/fjmrg+NqKMK7bw?= =?us-ascii?Q?Tuh2ZNXrRoWDFuZLv6dnnei89JA39M+uvgTAZXexFMXm5iYPgPWxgOFQCXRK?= =?us-ascii?Q?QQWHHTrxQeyiUIfmozW2eYis51mwCHVX7wwkMXXk5P0dQ8SEGZbaB2cYdIuB?= =?us-ascii?Q?G3/1YySKPF4Vfc0A4oQ6mNIr0V8a4CaKJqX6N6qW/Vi2jn+P8uLvcnoiF3WL?= =?us-ascii?Q?2nMIjt/hzV62LSJ3OM8VZdsIZYdSokETL34fstSOrRWnx73kYJoQ06GkRIgw?= =?us-ascii?Q?JVlxUmsFZxY0/FzNTU4ixY77WEc31O0ilbaHkBAijxuREeobRh+sSFJsgnTl?= =?us-ascii?Q?waoY8f+cbgqzQiJvmvc5HbsaIQGXGMZzCVmUsqRNowvpssH8FMLBxvq2g7KU?= =?us-ascii?Q?Ka+exj+coL1SNJUxYI2eeNgDNidPFupYlMg/pqakrYO5EvN1+su+C05hprW+?= =?us-ascii?Q?hB59VuWsu513RqfCWIrHjQwmMqW5bCouuQDf+hBZCzwQS+OSNHenrv2uzp1l?= =?us-ascii?Q?ULhGGq4siJwViYnMxQwbcBIL6M8wpBkHVUgevFZCQA5tn6RInMNcHkP+NPJU?= =?us-ascii?Q?Wzkqaw84xCCivU3Bduz4oY1sj9U25JpxTA0jO1fjp3XG98LQGQCw+90Py5WF?= =?us-ascii?Q?HxQO8NkxsRNcRV870w7c2vDR+rVPrUpSSpTu8mSll8Xfmzn6dWHbXp2qLKH3?= =?us-ascii?Q?G6nnfpp7e6NL47pMrV/wg3paF0wB836hDpcJh08SymGeLyDKZzBz8Mv0mkGM?= =?us-ascii?Q?rpBdvHCvUzC2im/WyJ1PRqOmyaO6xcZYU8TFzfTPoJr1ceekJDTHGRjDykSl?= =?us-ascii?Q?Errs6Y1N3lIkKK3ZaFVTgqJwDfamVHVzgk0PKGZCUB0zEVd3ywPBogx7zGsz?= =?us-ascii?Q?ivmOGe2sZz2fYWJvxOdr/7h9PedudYVg7x9bP7kirtkfr0cjgJBJezPn1SqH?= =?us-ascii?Q?gZZY1PyMomWe0mKGDukCNXTqxBSws4YVQQ2wK4AJNhRs4pLyRO3xigRu09bw?= =?us-ascii?Q?li0gcaJ8glHce/CJFd0JEh4Y58kMrQe45kWPrz107Ji9?= 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)(366016)(376014)(19092799006)(52116014)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?pCmAtZlQ+0TJohdojE0JviOkscaBKvK1zYBYFhsK1K7o42KxmnfAtrQiMS44?= =?us-ascii?Q?RGNewM+4Djy4ZcxAIc7J3Fs3CRm9Rqssiulk+Z/F1VuQHNpq9fZK5Q3Jv/mb?= =?us-ascii?Q?+SX5g0ugJWRdJuzx094RPIhRv862/stJW/jxdL6xmu+tYkRJQLWj7XtLSO4H?= =?us-ascii?Q?SP2voulojV2C7qxQ+tFiFwfKEA2550jcq2uP3ULmao3JsDwozijlNqXUqnh8?= =?us-ascii?Q?q5GGakFbLsS4xI+48sZ737I8Xwbyzo7/oK4Hp4FIK6sofLWITUL/M+fZB7Ff?= =?us-ascii?Q?bzqf50bs9TRh9V8Cb69tCzRqvHS1h0ByKz5K6NCdkr/EMk4gTLnjiXNrKLpv?= =?us-ascii?Q?RZ/UQdLTZ5r7weJJzNMSLRrYV15o/DPelwbQdObQSk92qs3AGip6SF6z2fYD?= =?us-ascii?Q?yQsffqw11Qt+QRgUwwDTf4G1///Lc4gYscOjiDH9TuJIYN9XH/+Xj5Zf0/sM?= =?us-ascii?Q?LW81YzeOOCneQnEoL40ti1XKvQvbDHOqcm73SBBG+AKgJz80aTltSNKrS66B?= =?us-ascii?Q?dc0UHR7tN7gLC7v5EhY5e7z71WfZJzCFmJE2vkcTy1oc8P6UILjMxgTACadX?= =?us-ascii?Q?GYz5i092gfWKgcedaCvAghHP2VaoUFmDN5tIRzBUOGa/ix/yAULaYwVzMTxt?= =?us-ascii?Q?5q2/v46XP5iAYRVbyrKdPwYHKrb1WYowsRgcOW/ydevoGWgwH3RyJqFVzOBb?= =?us-ascii?Q?KWgESH97Eirqt3gwmUUfZQs5pE+6HncLK+uWP3RTgVlp+SxEi1kRP5JIVW2T?= =?us-ascii?Q?kzN+SHyYSK/VjmGYdXOB0lx9hHIkp3cHJW6Jma2rawxxtn71p520q9O9NVtM?= =?us-ascii?Q?V+INBbsZjRByi5/TXDAgyF3Tqa5yUhy7avxCOSOenB3KKGaEN7ru47185rJ5?= =?us-ascii?Q?YnEbittT+iHXDn7TzsYNJsUU+Jm51W9sqoel3Awjp+9SQHICG9LI4M+L4O0y?= =?us-ascii?Q?+2uiVsc8HGEoRbCPYj7YEh9EfxmwXzjRwrRlHppnoqIfILSfYrxJPY4c9HL3?= =?us-ascii?Q?29pVRSQUkGHXWDDqJjrn64jSjrCe+7uQoygpcLIy5gkvLdYMZxsNyDhcktLW?= =?us-ascii?Q?mRW+WRqQIiCBzkugvBdCMrPmUv+j2Rg1bCNAeleuFn9vcpUPEe/eUObpe+Sz?= =?us-ascii?Q?QTmcJ5EYRP8FL/4viidLpEvfLRboJPRl/5oj7VCMKhaf45CgN4E+qasujkdH?= =?us-ascii?Q?AA2Gh5b4nvkQgANhSyY+Rpalze0AyX91SRudGCqZdpydot+VXOguNRKBkzDu?= =?us-ascii?Q?kVJcoayb+dAEN+d5sGg1BYnlK75NEpbGnuxGNzdzSZX14cKD3tsDNW5f/TlC?= =?us-ascii?Q?6JDZ9cq1y8mhQ0P9R9KBL43HkBualCi6b3XtlCURwPwC96/RVaN7OqSgx8tk?= =?us-ascii?Q?kvX2XyUVNiasrDzZciSr4A9G+ijKK0KkDvlwvOT7ByWgC6Ee1BWPYdnn2hxm?= =?us-ascii?Q?9b8DcGIX/FC4Opgd/Re54nZi8sQ/H7uYnTWvGjhzvrGuKagAEDJO4ceKX0RI?= =?us-ascii?Q?lDSeSQSxqqI24Mtm8e142zVOdVMjfcDjfeCIkd2AXDksAH2aWLz3JfTm2ddG?= =?us-ascii?Q?g/Qb5FvBXfKQaTGtsRYoyQd4tJUdUXdvAZVY9cFkzZg/4KwFQ4ZxUW3y8vbn?= =?us-ascii?Q?fP7gPyKorHjFZ2+EYQnZe6tCg9tlZOLgo12fptl876Xmom+nWB7LCK13szhz?= =?us-ascii?Q?rWNCthca+mv1CZtukBWf5FuSnF6GNPowavXacS3rWT/908y3ay0elqBcFb63?= =?us-ascii?Q?SE8ENsxKS8l7SVr8zzLH4DWyY1jVqq4=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 47c72b5b-2490-472f-a3bb-08de538095fd X-MS-Exchange-CrossTenant-AuthSource: AM9PR04MB8585.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Jan 2026 15:21:27.2445 (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: fU5zM9cW8ada2Q1IK+rsx0wx3Ylg9mVpTORPtgmfvPYCM7H/p1N1+odne23WMLoHU6/p97mDI5wESz00eB61rQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB8PR04MB7068 Content-Type: text/plain; charset="utf-8" There are various circumstances in which a lane halt, or a lane reset, will fail to complete. If this happens, it will hang the kernel, which only implements a busy loop with no timeout. The circumstances in which this will happen are all bugs in nature: - if we try to power off a powered off lane - if we try to power off a lane that uses a PLL locked onto the wrong refclk frequency (wrong RCW, but SoC boots anyway) Actually, unbounded loops in the kernel are a bad practice, so let's use read_poll_timeout() with a custom function that reads both LNaTRSTCTL (lane transmit control register) and LNaRRSTCTL (lane receive control register) and returns true when the request is done in both directions. The HLT_REQ bit has to clear, whereas the RST_DONE bit has to get set. Because of the new potential timeout error in lynx_28g_power_off() and lynx_28g_power_on(), this needs to be checked for at call sites. Before, these functions only returned zero. Suggested-by: Josua Mayer Link: https://lore.kernel.org/lkml/d0c8bbf8-a0c5-469f-a148-de2235948c0f@sol= id-run.com/ Signed-off-by: Vladimir Oltean --- part 1 -> part 2: - minor commit message fixups Patch made its last appearance in v3 from part 1: https://lore.kernel.org/linux-phy/20250926180505.760089-16-vladimir.oltean@= nxp.com/ (old) part 1 change log: v2->v3: patch is new drivers/phy/freescale/phy-fsl-lynx-28g.c | 96 ++++++++++++++++++------ 1 file changed, 74 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 7ada581bbe4c..048c24c48803 100644 --- a/drivers/phy/freescale/phy-fsl-lynx-28g.c +++ b/drivers/phy/freescale/phy-fsl-lynx-28g.c @@ -254,6 +254,12 @@ =20 #define CR(x) ((x) * 4) =20 +#define LYNX_28G_LANE_HALT_SLEEP_US 100 +#define LYNX_28G_LANE_HALT_TIMEOUT_US 1000000 + +#define LYNX_28G_LANE_RESET_SLEEP_US 100 +#define LYNX_28G_LANE_RESET_TIMEOUT_US 1000000 + enum lynx_28g_eq_type { EQ_TYPE_NO_EQ =3D 0, EQ_TYPE_2TAP =3D 1, @@ -672,10 +678,29 @@ static void lynx_28g_lane_set_pll(struct lynx_28g_lan= e *lane, } } =20 +static bool lynx_28g_lane_halt_done(struct lynx_28g_lane *lane) +{ + u32 trstctl =3D lynx_28g_lane_read(lane, LNaTRSTCTL); + u32 rrstctl =3D lynx_28g_lane_read(lane, LNaRRSTCTL); + + return !(trstctl & LNaTRSTCTL_HLT_REQ) && + !(rrstctl & LNaRRSTCTL_HLT_REQ); +} + +static bool lynx_28g_lane_reset_done(struct lynx_28g_lane *lane) +{ + u32 trstctl =3D lynx_28g_lane_read(lane, LNaTRSTCTL); + u32 rrstctl =3D lynx_28g_lane_read(lane, LNaRRSTCTL); + + return (trstctl & LNaTRSTCTL_RST_DONE) && + (rrstctl & LNaRRSTCTL_RST_DONE); +} + static int lynx_28g_power_off(struct phy *phy) { struct lynx_28g_lane *lane =3D phy_get_drvdata(phy); - u32 trstctl, rrstctl; + bool done; + int err; =20 if (!lane->powered_up) return 0; @@ -687,11 +712,15 @@ static int lynx_28g_power_off(struct phy *phy) LNaRRSTCTL_HLT_REQ); =20 /* Wait until the halting process is complete */ - do { - trstctl =3D lynx_28g_lane_read(lane, LNaTRSTCTL); - rrstctl =3D lynx_28g_lane_read(lane, LNaRRSTCTL); - } while ((trstctl & LNaTRSTCTL_HLT_REQ) || - (rrstctl & LNaRRSTCTL_HLT_REQ)); + err =3D read_poll_timeout(lynx_28g_lane_halt_done, done, done, + LYNX_28G_LANE_HALT_SLEEP_US, + LYNX_28G_LANE_HALT_TIMEOUT_US, + false, lane); + if (err) { + dev_err(&phy->dev, "Lane %c halt failed: %pe\n", + 'A' + lane->id, ERR_PTR(err)); + return err; + } =20 lane->powered_up =3D false; =20 @@ -701,7 +730,8 @@ static int lynx_28g_power_off(struct phy *phy) static int lynx_28g_power_on(struct phy *phy) { struct lynx_28g_lane *lane =3D phy_get_drvdata(phy); - u32 trstctl, rrstctl; + bool done; + int err; =20 if (lane->powered_up) return 0; @@ -713,11 +743,15 @@ static int lynx_28g_power_on(struct phy *phy) LNaRRSTCTL_RST_REQ); =20 /* Wait until the reset sequence is completed */ - do { - trstctl =3D lynx_28g_lane_read(lane, LNaTRSTCTL); - rrstctl =3D lynx_28g_lane_read(lane, LNaRRSTCTL); - } while (!(trstctl & LNaTRSTCTL_RST_DONE) || - !(rrstctl & LNaRRSTCTL_RST_DONE)); + err =3D read_poll_timeout(lynx_28g_lane_reset_done, done, done, + LYNX_28G_LANE_RESET_SLEEP_US, + LYNX_28G_LANE_RESET_TIMEOUT_US, + false, lane); + if (err) { + dev_err(&phy->dev, "Lane %c reset failed: %pe\n", + 'A' + lane->id, ERR_PTR(err)); + return err; + } =20 lane->powered_up =3D true; =20 @@ -1132,8 +1166,11 @@ static int lynx_28g_set_mode(struct phy *phy, enum p= hy_mode mode, int submode) /* 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); + if (powered_up) { + err =3D lynx_28g_power_off(phy); + if (err) + return err; + } =20 err =3D lynx_28g_lane_disable_pcvt(lane, lane->mode); if (err) @@ -1146,8 +1183,16 @@ static int lynx_28g_set_mode(struct phy *phy, enum p= hy_mode mode, int submode) lane->mode =3D lane_mode; =20 out: - if (powered_up) - lynx_28g_power_on(phy); + if (powered_up) { + int err2 =3D lynx_28g_power_on(phy); + /* + * Don't overwrite a failed protocol converter disable error + * code with a successful lane power on error code, but + * propagate a failed lane power on error. + */ + if (!err) + err =3D err2; + } =20 return err; } @@ -1180,9 +1225,8 @@ static int lynx_28g_init(struct phy *phy) * probe time. */ lane->powered_up =3D true; - lynx_28g_power_off(phy); =20 - return 0; + return lynx_28g_power_off(phy); } =20 static const struct phy_ops lynx_28g_ops =3D { @@ -1240,7 +1284,7 @@ static void lynx_28g_cdr_lock_check(struct work_struc= t *work) struct lynx_28g_priv *priv =3D work_to_lynx(work); struct lynx_28g_lane *lane; u32 rrstctl; - int i; + int err, i; =20 for (i =3D priv->info->first_lane; i < LYNX_28G_NUM_LANE; i++) { lane =3D &priv->lane[i]; @@ -1258,9 +1302,17 @@ static void lynx_28g_cdr_lock_check(struct work_stru= ct *work) if (!(rrstctl & LNaRRSTCTL_CDR_LOCK)) { 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)); + + err =3D read_poll_timeout(lynx_28g_lane_read, rrstctl, + !!(rrstctl & LNaRRSTCTL_RST_DONE), + LYNX_28G_LANE_RESET_SLEEP_US, + LYNX_28G_LANE_RESET_TIMEOUT_US, + false, lane, LNaRRSTCTL); + if (err) { + dev_warn_once(&lane->phy->dev, + "Lane %c receiver reset failed: %pe\n", + 'A' + lane->id, ERR_PTR(err)); + } } =20 mutex_unlock(&lane->phy->mutex); --=20 2.34.1 From nobody Sun Feb 8 23:27:08 2026 Received: from PA4PR04CU001.outbound.protection.outlook.com (mail-francecentralazon11013038.outbound.protection.outlook.com [40.107.162.38]) (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 A2FE139C654; Wed, 14 Jan 2026 15:21:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.162.38 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768404123; cv=fail; b=FNE24dCKR8QY4qQmNF+BFO976eOcjvWHXJBX4fTfO6IVTtIR8a5nF4uHMkIFfoqrrwo723XNR86FcmtVpa5qR3c8tVhMDFUK6PFzojnIf9Q9tn1QLjPJhxLk0KSMVURXhRRROmNYM2gxFrCvsn1A4fSxwKWMLJw4Z4fKKUdB6AQ= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768404123; c=relaxed/simple; bh=odvJ0GH5tgvRpHSbmtBoG4G3DTsIJY2FlWdzFECVTr4=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=lhlgSFzIpcfVWyf++PbH8y8T2RRCt1I4Pj0kXomT/vhekopLJ5MKMC33OMT5NYBJuj7gbQYAHM2ytfED3/eEsAdiClVaD745EDiHJEqU/gcJem+zAJPKg2kcuky7zcNidKWATRbbH8e/jUST/+ff59X54+tLOvonqC7LWx04Ges= 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=k3ln43bk; arc=fail smtp.client-ip=40.107.162.38 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="k3ln43bk" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=mPpxri9uNqFL0qth+ajqHsBAHPB2Njbj2pHqYYHWj6NYETgawXcqccTajbUPNu3vxfKpGgLDR154o48aayj6/QDHCzcOi+9sHY9015HxQXJ3/UZeRtIx+MU8Rtgy9zgTJ3Yt4EGE0BVh9svqfqB5qukSHvzZn5KTFQPW571ID0kiYucBuYJ4m2GyMiUtlN7AgVofwYjvWzTZkqdOegGF+NjCZVhCJRECm71L16SYkooGWy6aUACBjU/+hj1XE8m6xYMtSzTsaBZsKDY5sjbnmFKXqLpfAewkc1lmVHRr2eWfb7IKcrn6sj7ZYHirMQpZLApbCYlKi3isV2UKd+Q42w== 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=i933dvB78A3s1ehF8H1jCqsle0UkZm35gpPMszJblZk=; b=njf96wWxh5MoPfg8OgwO8B1quMB7LNyHtlPgLInijgMTPlm9or1gmDRSZjTy5pE7bXri+VjAiZCvTG1hAA4FXYfWR3b37g+BsINqvSvk8f/MwGGnTnkM4/d5VGGjSxCt0hgOT9z1aNkXnQ3muoHFvU/fAuoBtmFMbiQG879WaFAugyCV3fCOBvBGkiem2BJ5DkJ8Rc+miXW9KdBzq1BfR99UJFzEvVCiq8XpVOUSfJO7U8WUq4erMTf8HBe9eMci6CVFk0CGH6gZzxR7sQ/IVBZLepUxq/4snZZ/VgrP6aQR/Fgm8guRe+tjox0fkOEEPuVr74p1HWqk01SBgU2l4A== 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=i933dvB78A3s1ehF8H1jCqsle0UkZm35gpPMszJblZk=; b=k3ln43bkU8isYKO1iTC8Ail5yqO/txeF5AYHPwtp9Z8No4BUIOKrlR7ADI+sIStnFEo8gdYXQ7uUhKO3lqnhSmjqMNErKiYBkBPM3M3gvFlO3k1YuIiYzXyZ58FpP3iXxSPeup1ZmKaBYUC2dPJblYUY2avRLsXq5dZTRENDDrEmmGN9GjRpzAy9h/g0ZXgLHyOpTwX0y0COQNWpDWrmbsmSZpYbYVs0ki5DHz0Rehm8uPKdUU58I0MS7I78WjHKo7KEORUepDG51uAib3pUeG9ocSuMbVw2Ta9cBI3yBUNef9oa0uTnoLnIxTvEF6CDXQpIpCP/PisnUd1LAKWqqA== 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 DB8PR04MB7068.eurprd04.prod.outlook.com (2603:10a6:10:fe::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9520.5; Wed, 14 Jan 2026 15:21:28 +0000 Received: from AM9PR04MB8585.eurprd04.prod.outlook.com ([fe80::f010:fca8:7ef:62f4]) by AM9PR04MB8585.eurprd04.prod.outlook.com ([fe80::f010:fca8:7ef:62f4%4]) with mapi id 15.20.9520.003; Wed, 14 Jan 2026 15:21:28 +0000 From: Vladimir Oltean To: linux-phy@lists.infradead.org Cc: netdev@vger.kernel.org, Ioana Ciornei , Vinod Koul , Kishon Vijay Abraham I , Neil Armstrong , Josua Mayer , linux-kernel@vger.kernel.org Subject: [PATCH phy 7/8] phy: lynx-28g: truly power the lanes up or down Date: Wed, 14 Jan 2026 17:21:10 +0200 Message-Id: <20260114152111.625350-8-vladimir.oltean@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260114152111.625350-1-vladimir.oltean@nxp.com> References: <20260114152111.625350-1-vladimir.oltean@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM8P190CA0015.EURP190.PROD.OUTLOOK.COM (2603:10a6:20b:219::20) 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_|DB8PR04MB7068:EE_ X-MS-Office365-Filtering-Correlation-Id: d710effa-845f-4f05-3dd1-08de5380969a X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|376014|19092799006|52116014|38350700014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?inNiyvbA4bGX+lGtQGW0vs53+KtW9Z75RjhAj3UpvA32Jm3ejm+mgNgALGvS?= =?us-ascii?Q?bJZenvDfBu3hqHKqqB8a4cFzX9jJgbe9YA9P314AfsYwNH0YMRVA3V7eghsj?= =?us-ascii?Q?fftHwUophwyHwtF4REsmTGpVHduA7lxtZwQce56+AYPd6vKK/wXBtQio8Yzq?= =?us-ascii?Q?KLefLPuZ9Drcz9Y92tpcFsuadCZeu5CSe8scZAZrNBQr4KDv/h9LLmVfvW9G?= =?us-ascii?Q?b3aeJ4Yhhy2jUrAFX/YZZxv93g1EW23Vs3U98B9fDrJ/R87PnNmm9M3oG/IK?= =?us-ascii?Q?zgDwABu4vU5W+v6jIgY/u04zQO4FFWGZ9h1rNtrmGDjmTwwTJwKrgRPVr0+v?= =?us-ascii?Q?H/oB8y6Q9OsUY/gAzfw0GM3eh14uvJ6ITgK5DnGe70Wuwai0yPREYBTM4Ce+?= =?us-ascii?Q?bQB0xS360/0H/msr0nl8nAkbktd6QfnnIcFyilVGu2kjWB9Gr73Ylvfx0CG+?= =?us-ascii?Q?WltKJIboEMZn/5WwU7NYvjIu6ijastoKHWrZZMa0GllU5TK8AXnYpG8mMS4u?= =?us-ascii?Q?CMjBLtVlx4Njad5SSv6CoU8TyW4negO5xPm/2giYSDQBNJ9PrLePPlVPqnCU?= =?us-ascii?Q?O2D8g1FkUv7reG7gThVMNPrrjXNPXzXyvuUn+0NWozFyjfHY7BskzNm2t9ab?= =?us-ascii?Q?naKfAzjBuLtwe76eW71ujppGO15R+Cz9X20adMZdassjwLQpUtTOfiiYdDfY?= =?us-ascii?Q?lFeUq52TNs75rYodJIsFN8hJdkh30uWn+nwTTgXsB51QCpYs1G4cHOuIoLEa?= =?us-ascii?Q?wi5Htz/F5fZh6fBQk4GDb6L7tRXQgpk6s95bS7g1N1ZwyqHfmeFLmMtsJZQo?= =?us-ascii?Q?B4UlHwhMUhIaZNmmFdpl+l+EiccCqf4fAnHdrvusDfYuaS6A1/Txx3zN6Cd3?= =?us-ascii?Q?ABrcW6A9pM3Vmxifp8rNE4tFP9c7rx7ZWzvVG9Y8CrUgAMNXTD/Rx0QqepF1?= =?us-ascii?Q?Js0WNMAplkSCJEYHtmv8+KedUd+QUBPxGHA81PFwoPD2rky1iarhpN+uddgt?= =?us-ascii?Q?H5h2r6eNYJB7hCTzYLvm01+UeCgouSNKgIU/mjXvT8qjq1RejISleXrDNa7w?= =?us-ascii?Q?DY1btIbTDYQQ3lHybaXi9KJdovhFDh6TZynTI2h1iF/pl3cxtnPYDTOsqfwd?= =?us-ascii?Q?e9Tz58/ny3OZZrFQ2aqADCXW8dFzO42g7y1wq/Axpe58vCn3ewnDgBERnWdl?= =?us-ascii?Q?rTm0mpNiYg3DqfSX6wTdGFcOXTY8nakVGNVbj64KfSOYDx7n+DA3Y4g0jVsw?= =?us-ascii?Q?g/DNrJxeqdi6mymrHaaro0MN6exKHQ0BwPnxdbY9c3TbOsdMrFa/LczZi/Ql?= =?us-ascii?Q?hOlSt7dgYM1EEjmgBNAjFEX9iueh6VLy10IKH5eYXBzxs3BxfoWc4cZKacwN?= =?us-ascii?Q?wEyJW/6wTKE0pTqktqZk+x4+wGETc8tzgkOleuBMsLB4OmgQUO1/yEV/m6Lw?= =?us-ascii?Q?ux64h4sSvf8Ba5w4AGZ4mMX/PyGrklBYuWzCCXCN35ImapPiUS3thCsqSH0U?= =?us-ascii?Q?Te3R5iaQrcFLYDknvDpA0TbSz0/6XWyjsJfeHtoPbGNN6qOSqBZ64R+twi7a?= =?us-ascii?Q?mIAqyMOBcoQbrUfK67fyIisvlqNBgWYD/hrd9T9FZyOq/omE67EcH2AVOgKp?= =?us-ascii?Q?e0vNCH8ad/wUN5nJRlMatfw=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)(366016)(376014)(19092799006)(52116014)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?pD5CNUxjJ+W+PMVnYWlviWiAZj1b+wsC8zd+JZe9/eR1uf657jDV+pLt7VkG?= =?us-ascii?Q?HP3+YZziZMH0yOoRrTmutK++fOEz6sV3EpHdgQ9K6+eHmDD9RUcGRBNXHSP+?= =?us-ascii?Q?SbSshHwazQIMm6Mf/GhQHzojxz4JSmUBM/6R6zFy6obz/d5mdUoIsOTZaPGa?= =?us-ascii?Q?EjWclvx/8n7jKzeOSbjmsv5YjO5OAtJ6sqOPM0pJIVpEltNaXf24iVswAsq+?= =?us-ascii?Q?qh2p61/kqWkHN3B/hQivhK8jxbHQsYwcfR90708rV02DjPFLhdlgh+MWnw8P?= =?us-ascii?Q?uVYuAELUbYs7NZHBVdPeyN9gdKjK6mfZ8v3oOb6b88dNF9gmmMBh0BCHyfZa?= =?us-ascii?Q?ZWo4i5Uq2ATZ4udc8THMrAGMt7ikHeKFBZFTqqzlXEOngc+ZlcRx324bX5UO?= =?us-ascii?Q?aCNe0KhHLluxYNjdpyFplgSLxcB5yP7luvVgyxh6VRTMoTKfiR5ciky6YDgf?= =?us-ascii?Q?/pxOuEQCPnOly0eD98b0CUvBr5F3aOayg2kOevrqCcsK+ATxcNgpVDel69GX?= =?us-ascii?Q?pjYmpndwE//8PJhhmvT2IDct7J2HSTiGYMvt1IAT26ZzMjLH2Mr2xeXIrOaF?= =?us-ascii?Q?8aQO+G81umtBeqPqf0GTXOd5XphgfuFknMjUKIejctV5hKnAypIIUEX2q1UO?= =?us-ascii?Q?27Nvzgi6aCmI1LaxirCchtGnciQkRVNlKeunddQZbksoPg6M+s5e+tGdH7ec?= =?us-ascii?Q?UgE/Vlu9Pr98BS0uxlXL5hIOmLxzp6wsYXazkFZoJEagIlmvzHunSx9kPkFk?= =?us-ascii?Q?U6OZZaMe5RVpqYvuugvUjNg4E6MpfbrolOsgMH+YlmcPaxFLoOC9wqysdE5W?= =?us-ascii?Q?N1k+O5LDmducvsB8Us2O959rJZpf75b0EHCIXZhteHWiRl2eoLD4C9GreqRd?= =?us-ascii?Q?VyDtFV34CZbnaxtqIT5NMur3N4oRE83NWVc4+M7YqmaXaroYAbgZXjQciW0X?= =?us-ascii?Q?gvEvtPaW14qa6UM+Nq0sd7vhMhMUthF58VzxUbbPI44NWtq8JQaHMIxQ7kcr?= =?us-ascii?Q?Yx73cVzmnipdiGAiQxCzeZ1vk1mM8Oq62xsyoPto5kqSojeaN2uzMGkL5RKf?= =?us-ascii?Q?+qdwQunupWky+lqJrsnZXJi8uR2+JuhzOG206wtRm5TDNxs38gPecc+PHpxN?= =?us-ascii?Q?4sTRVs+ZqStrenvNJSehAZGCpMydsTT0NO/TPFweAKB98tAKEYwBQ/hbfptL?= =?us-ascii?Q?SHl7NRsD5Ou1nMF8sDCJJLTwL9B8+TOZS1OjQuSOeHwo7lrk5iowOY2iKO3R?= =?us-ascii?Q?+YBa89Hke74Eld3KIT99mzxjF+DXMJ7vRIttV+gCJGV+Rmwc9X6h4Ur+0sSD?= =?us-ascii?Q?MAFipGUgmWFJuc66HaPmDx9z+had2GfaaDcOqCXUAv/0WEuLeUgUUhtOe1ub?= =?us-ascii?Q?ZYIdMUKrwHz1u1nGfJEDcrJOZYbwCS0I0YS5on/J4H4KlB55bSl0nF2a5FLU?= =?us-ascii?Q?PlxwJfg0VFzgMn6kYzFJjMFYGeOmFVCE64aLLhzp1SN9Je3jk0l3Bh8f3BXb?= =?us-ascii?Q?+Dl+w3/xmQPMf0sn2SKwkuskJuzMuIhkfiuaXJ2cZF4N0VnAJ6Z0jZfYVVg+?= =?us-ascii?Q?1LuaO1OYF4mu6CqJ6r3wgKLBpzj7vkRqtJE78/oYwvh8RbX96CyMd9UyhyHR?= =?us-ascii?Q?nJd7zYzdndLBUxVYp3OtyOeTOtBHLucgVb355Acs2fcbjvPw+qSCfEV2QOsN?= =?us-ascii?Q?U3ZKLk37swR7phGSvLw9XXbKfDFgMcFsYqWdNSfI/vUFJwgF0qOlEX3H2vi1?= =?us-ascii?Q?YRtsYxibboO/NOO2OwqyaE2fSCjNdXQ=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: d710effa-845f-4f05-3dd1-08de5380969a X-MS-Exchange-CrossTenant-AuthSource: AM9PR04MB8585.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Jan 2026 15:21:28.2591 (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: vo1iqkcT4SoFlQqZu53AHKDFlRHQf8LLhB2ANpeos2TqlH3uyhkEJb/nanK8OLI2DFX+MIDbfVfm+eohFNfBaA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB8PR04MB7068 Content-Type: text/plain; charset="utf-8" The current procedure for power_off() and power_on() is the same as the one used for major lane reconfiguration, aka halting. But one would expect that a powered off lane causes the CDR (clock and data recovery) loop of the link partner to lose lock onto its RX stream (which suggests there are no longer any bit transitions =3D> the channel is inactive). However, it can be observed that this does not take place (the CDR lock is still there), which means that a halted lane is still active. Implement the procedure mentioned in the block guide for powering down a lane, and then back on. Signed-off-by: Vladimir Oltean --- part 1 -> part 2: - minor commit message fixup Patch last made its appearance in v3 from part 1: https://lore.kernel.org/linux-phy/20250926180505.760089-17-vladimir.oltean@= nxp.com/ (old) part 1 change log: v2->v3: reimplement lynx_28g_power_off() using read_poll_timeout() v1->v2: slight commit message reword drivers/phy/freescale/phy-fsl-lynx-28g.c | 99 ++++++++++++++++++++---- 1 file changed, 83 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 048c24c48803..4c20d5d42983 100644 --- a/drivers/phy/freescale/phy-fsl-lynx-28g.c +++ b/drivers/phy/freescale/phy-fsl-lynx-28g.c @@ -73,9 +73,11 @@ =20 /* Lane a Tx Reset Control Register */ #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) +#define LNaTRSTCTL_RST_DONE BIT(30) +#define LNaTRSTCTL_HLT_REQ BIT(27) +#define LNaTRSTCTL_STP_REQ BIT(26) +#define LNaTRSTCTL_DIS BIT(24) =20 /* Lane a Tx General Control Register */ #define LNaTGCR0(lane) (0x800 + (lane) * 0x100 + 0x24) @@ -102,9 +104,11 @@ =20 /* Lane a Rx Reset Control Register */ #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_RST_DONE BIT(30) +#define LNaRRSTCTL_HLT_REQ BIT(27) +#define LNaRRSTCTL_STP_REQ BIT(26) +#define LNaRRSTCTL_DIS BIT(24) #define LNaRRSTCTL_CDR_LOCK BIT(12) =20 /* Lane a Rx General Control Register */ @@ -260,6 +264,9 @@ #define LYNX_28G_LANE_RESET_SLEEP_US 100 #define LYNX_28G_LANE_RESET_TIMEOUT_US 1000000 =20 +#define LYNX_28G_LANE_STOP_SLEEP_US 100 +#define LYNX_28G_LANE_STOP_TIMEOUT_US 1000000 + enum lynx_28g_eq_type { EQ_TYPE_NO_EQ =3D 0, EQ_TYPE_2TAP =3D 1, @@ -687,6 +694,15 @@ static bool lynx_28g_lane_halt_done(struct lynx_28g_la= ne *lane) !(rrstctl & LNaRRSTCTL_HLT_REQ); } =20 +static bool lynx_28g_lane_stop_done(struct lynx_28g_lane *lane) +{ + u32 trstctl =3D lynx_28g_lane_read(lane, LNaTRSTCTL); + u32 rrstctl =3D lynx_28g_lane_read(lane, LNaRRSTCTL); + + return !(trstctl & LNaTRSTCTL_STP_REQ) && + !(rrstctl & LNaRRSTCTL_STP_REQ); +} + static bool lynx_28g_lane_reset_done(struct lynx_28g_lane *lane) { u32 trstctl =3D lynx_28g_lane_read(lane, LNaTRSTCTL); @@ -696,15 +712,13 @@ static bool lynx_28g_lane_reset_done(struct lynx_28g_= lane *lane) (rrstctl & LNaRRSTCTL_RST_DONE); } =20 -static int lynx_28g_power_off(struct phy *phy) +/* Halting puts the lane in a mode in which it can be reconfigured */ +static int lynx_28g_lane_halt(struct phy *phy) { struct lynx_28g_lane *lane =3D phy_get_drvdata(phy); bool done; int err; =20 - if (!lane->powered_up) - return 0; - /* Issue a halt request */ lynx_28g_lane_rmw(lane, LNaTRSTCTL, LNaTRSTCTL_HLT_REQ, LNaTRSTCTL_HLT_REQ); @@ -727,15 +741,12 @@ static int lynx_28g_power_off(struct phy *phy) return 0; } =20 -static int lynx_28g_power_on(struct phy *phy) +static int lynx_28g_lane_reset(struct phy *phy) { struct lynx_28g_lane *lane =3D phy_get_drvdata(phy); bool done; int err; =20 - if (lane->powered_up) - return 0; - /* Issue a reset request on the lane */ lynx_28g_lane_rmw(lane, LNaTRSTCTL, LNaTRSTCTL_RST_REQ, LNaTRSTCTL_RST_REQ); @@ -750,9 +761,64 @@ static int lynx_28g_power_on(struct phy *phy) if (err) { dev_err(&phy->dev, "Lane %c reset failed: %pe\n", 'A' + lane->id, ERR_PTR(err)); + } + + return err; +} + +static int lynx_28g_power_off(struct phy *phy) +{ + struct lynx_28g_lane *lane =3D phy_get_drvdata(phy); + bool done; + int err; + + if (!lane->powered_up) + return 0; + + /* Issue a stop request */ + lynx_28g_lane_rmw(lane, LNaTRSTCTL, LNaTRSTCTL_STP_REQ, + LNaTRSTCTL_STP_REQ); + lynx_28g_lane_rmw(lane, LNaRRSTCTL, LNaRRSTCTL_STP_REQ, + LNaRRSTCTL_STP_REQ); + + /* Wait until the stop process is complete */ + err =3D read_poll_timeout(lynx_28g_lane_stop_done, done, done, + LYNX_28G_LANE_STOP_SLEEP_US, + LYNX_28G_LANE_STOP_TIMEOUT_US, + false, lane); + if (err) { + dev_err(&phy->dev, "Lane %c stop failed: %pe\n", + 'A' + lane->id, ERR_PTR(err)); return err; } =20 + /* Power down the RX and TX portions of the lane */ + lynx_28g_lane_rmw(lane, LNaRRSTCTL, LNaRRSTCTL_DIS, + LNaRRSTCTL_DIS); + lynx_28g_lane_rmw(lane, LNaTRSTCTL, LNaTRSTCTL_DIS, + LNaTRSTCTL_DIS); + + lane->powered_up =3D false; + + return 0; +} + +static int lynx_28g_power_on(struct phy *phy) +{ + struct lynx_28g_lane *lane =3D phy_get_drvdata(phy); + int err; + + if (lane->powered_up) + return 0; + + /* Power up the RX and TX portions of the lane */ + lynx_28g_lane_rmw(lane, LNaRRSTCTL, 0, LNaRRSTCTL_DIS); + lynx_28g_lane_rmw(lane, LNaTRSTCTL, 0, LNaTRSTCTL_DIS); + + err =3D lynx_28g_lane_reset(phy); + if (err) + return err; + lane->powered_up =3D true; =20 return 0; @@ -1167,7 +1233,7 @@ static int lynx_28g_set_mode(struct phy *phy, enum ph= y_mode mode, int submode) * the reconfiguration is being done. */ if (powered_up) { - err =3D lynx_28g_power_off(phy); + err =3D lynx_28g_lane_halt(phy); if (err) return err; } @@ -1183,12 +1249,13 @@ static int lynx_28g_set_mode(struct phy *phy, enum = phy_mode mode, int submode) lane->mode =3D lane_mode; =20 out: + /* Reset the lane if necessary */ if (powered_up) { - int err2 =3D lynx_28g_power_on(phy); + int err2 =3D lynx_28g_lane_reset(phy); /* * Don't overwrite a failed protocol converter disable error - * code with a successful lane power on error code, but - * propagate a failed lane power on error. + * code with a successful lane reset error code, but propagate + * a failed lane reset error. */ if (!err) err =3D err2; --=20 2.34.1 From nobody Sun Feb 8 23:27:08 2026 Received: from DUZPR83CU001.outbound.protection.outlook.com (mail-northeuropeazon11012009.outbound.protection.outlook.com [52.101.66.9]) (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 E52A0396B88; Wed, 14 Jan 2026 15:22:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.66.9 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768404133; cv=fail; b=MblOmMvGwwVlVuRDNQQIlrNWoRW/JzZRkC25KqLZAv26E4+7R4LjU80SsY5ApbqIN/LvwQC0N/S1CiFfXsFmTPEzR32vI3X4wHyy/4z8XiSb8hWytlEIpJe9t79LI+eLucZe+r2pTF9TskKZ7oIjEFbOVoQXdSATRrR/WrZW3CA= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768404133; c=relaxed/simple; bh=nhY2KadRSak0XxzWVfmtEkYbZTwt0IBcxekVUNA7lYo=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=dJwAT+jehAdzAegY3Pnqvs+0PwkNYBr6CeuKwRXqdK3nw2g88zBW6AUpflKQdCNKQIN5N3XI6pHxQsOWkP4kS/jAHZ9yQMZgW0m6Nf2LXmxDFyNc0i74vzLbVwSxnB25n+bA6SWQ7ZiP4gbgfbDW+PEc+gGgE+uYibT1gi51YCU= 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=Zkmmj6Bz; arc=fail smtp.client-ip=52.101.66.9 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="Zkmmj6Bz" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=sNioUC+Ob25MJLl8IBmHpfDfkTUBjjZKD9s+r9bcTfn7T1BwIE7YMODNnsVepH78TBmKRSH5G50PcT4cC8uf5cuO2yVdGcce7nS8sSWNi2bEYgKfTU1a1P5fGyE/GB1rHSyzvYvXX/HkqmeVkkjR2uu0bZVNGMgFk2RU3emTX2lOPX1z6dCeXep7InVtxAYdEvkx5B5X2Rr59Jdp47ORE98VcgzqfQRvjHzIgnzV6y4exWS43ZVQJ5b0zqWapkMySc5BHszHoOFahFR86olmTje4WsEXpe4NF61qyvF8yxaDGiJ2yOiv9bBtfaZmD83eyk0o70Cv9dzH8CTPJ2EMCg== 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=0BJjviLAL+lVnrshzrTAdtyUxHVfIjqf2nT9AUdZ9Ow=; b=tkPu4RyKwO9XYkmNJ/IZQgmLq8CJjdMUh/rS7kyxo8gOCdXeL6HevPdqiUGLoU8nf2sR18kxPIHcCMXeVfh2RmlhyY7QYyigF5Xxm2C8v7rdrpcl6xc5JKBEB7lCzbgqL5ItjS+HP4CZmgusffsgC/fSaKI/E41wHFQngYhFhAPtY9ZOfEq3GuZhV8XR1SVGpq88HAY9Db33ym5ypYvw2nmO+iwW4Fs/ufFC7YAJ1AJx+atvzX8KUbLTgcuvrJ18CUA1XmgkukyhiBskqIDnv8KqJfVRtiscnrvkHaIxt5oIjQ2WUYHR5bN10We5zqdmFn+ga55wUTKwGHI/uULVzA== 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=0BJjviLAL+lVnrshzrTAdtyUxHVfIjqf2nT9AUdZ9Ow=; b=Zkmmj6BzvjSbnNKWmCyT1W7CpMYGONZDZ9F05PxctfIPvkPAYv7zZF4tfNw/6AD7MnuIZ3MOe6rfTTgc3NIc4UZblkeu5Nk6x0YUU8Gry+NK1DmyTj3CjheKX7tM10xOwofJ9QZYj49UkuYOSimMyLZh+InUl3dQqDexo146FFdvmQAqamn9YysmSSysUBvPdT60Nb/MYUBewX2r6afVVzT+eOH8NCfmKZF/qAUV7pIe25bQceIT/9MC0Z0BZKu3EuYTEo/VXzT61iRcTtxrR7VuTB6m7QKOSKfQclhcU3othNYP1QktBx/xsFT1e2a+RRyTg7qmxJIv7KR45o9DyA== 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 DB8PR04MB7068.eurprd04.prod.outlook.com (2603:10a6:10:fe::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9520.5; Wed, 14 Jan 2026 15:21:29 +0000 Received: from AM9PR04MB8585.eurprd04.prod.outlook.com ([fe80::f010:fca8:7ef:62f4]) by AM9PR04MB8585.eurprd04.prod.outlook.com ([fe80::f010:fca8:7ef:62f4%4]) with mapi id 15.20.9520.003; Wed, 14 Jan 2026 15:21:29 +0000 From: Vladimir Oltean To: linux-phy@lists.infradead.org Cc: netdev@vger.kernel.org, Ioana Ciornei , Vinod Koul , Kishon Vijay Abraham I , Neil Armstrong , Josua Mayer , linux-kernel@vger.kernel.org Subject: [PATCH phy 8/8] phy: lynx-28g: implement phy_exit() operation Date: Wed, 14 Jan 2026 17:21:11 +0200 Message-Id: <20260114152111.625350-9-vladimir.oltean@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260114152111.625350-1-vladimir.oltean@nxp.com> References: <20260114152111.625350-1-vladimir.oltean@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM8P190CA0015.EURP190.PROD.OUTLOOK.COM (2603:10a6:20b:219::20) 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_|DB8PR04MB7068:EE_ X-MS-Office365-Filtering-Correlation-Id: 0554b3bc-b252-4bf1-560c-08de5380972c X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|376014|19092799006|52116014|38350700014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?wWR1M1El9G3Ml0qNCbGd5SSx2ZFxQvDV/prEPMzNVqCFDavCcMUkmErE3AEo?= =?us-ascii?Q?HmqICt6ST88L5QN0cocWs7s3OVYxW3OxG7RhNG4t4x+pbe+h384/2GuqlKX5?= =?us-ascii?Q?QvBE/9liKexAPWU3g56gnArgCpZTinwTRvQI2MT6UJ/ZgkYBGi/VID7GWOMM?= =?us-ascii?Q?3jJQ4M0Nh4FIqcDDa4qa+GAhltOGIlrwVKG5sx2uzW+CR7yJ+6R4d2KgbQTU?= =?us-ascii?Q?tkKRrAM9aixJK6bfBE4PScgf5hwMjX8kzJYXoptnLKDLggyJ7aYDN4w8URmG?= =?us-ascii?Q?l0JAM04iJ8vAjLdesk7Nmiq6PvS1n04XqqULJ0eodfdzingmcfYwYRCHxb3A?= =?us-ascii?Q?cdi/HBrRV+X8hCSYYwPXqD6dA0raoXDQGq/z3kqa45LGOxDqR8YBEb3Y8lkE?= =?us-ascii?Q?8ezrVvnYHfbzrcMQF6zW5mWgYUZTzxpnMrTzqRWwoHUJ57jSyxNfsXkMgxKY?= =?us-ascii?Q?hxmwzjG0mQoza0R1cqm7y87e+bjJSRYMW3cytmCR5Vl8+kkeiGTyRxcmYASG?= =?us-ascii?Q?C8R8/lrGSuuTxEbx200GNHl3xZ+jffPJtOxpgMHS7vk64v9j4YDClx5Uw3BW?= =?us-ascii?Q?/40VeSsP2T3kMcdklBBQPKftilhcxD/ivcT+scsdPHexfKTbnTUeaRM4sfHv?= =?us-ascii?Q?Tr8NNjObvohM+zbsqNchYZxazvko8sRroOrJBRFr0hWh1xkeBvuckl0HkQrA?= =?us-ascii?Q?UM1gDSVcZVgUXAeMNfZ1gLuhcrfWH/L+VfC0NU+F1jHGgkgSjSLAHlQSExmA?= =?us-ascii?Q?2P61pxUmsJKgBoitu2odd9I6qrQGdSBIe3nMEpkpUkYOocyWYPuXwrGMnBYt?= =?us-ascii?Q?8XVVrV3qRL3RaFxjLWN6k49IjuWqG/HD4SrRJ5XVYls7Qbay5Ojili4yTFLT?= =?us-ascii?Q?QRqid0Fh+O+HXbBmn4dpaJsW/hj1iSjnlsE0x++ve/FN/CPf8wqx3RVOVyiM?= =?us-ascii?Q?TylmMz31UyZBp4bAUXxQ88lIBJi7n3qMFHPbvUL/iJXXnZ6h3LW+dxD1YIf5?= =?us-ascii?Q?+hQJaJsREZuXpB2D55Nw4IOuqVUAmCcZ89nsiBy8X0eO7mzWgvDsYfnBd59g?= =?us-ascii?Q?72b/+ML15zpK5UNc2c4a4CDc6312OoHgJXp5uS71/fnhlXudrw/3JXRw5cMz?= =?us-ascii?Q?8TrTyroxcF65Qo0xcSDzzP4cvJtct6EG3mk+PS+9Y2lRjHz1cswBCmnuKTQ7?= =?us-ascii?Q?/kmH5Ef9kvaWKewR45az+ocLjluw30j3lVz4hPC4CKRp3jBhx3Yo3uZWRQmB?= =?us-ascii?Q?a1tUneRTu0/0m4UMoBXnnmVkDR+hcRHxgFoMoFrAw7Kxv384bRet2X1+bz6s?= =?us-ascii?Q?EMbzEMJ2LYG3spH0UDgiZcw+rBIe+g8eybHgUMwC6rBfgpeErDcD8pwh2Ya7?= =?us-ascii?Q?KvvMj5uvk/qq2M8TOZN5gIXWhPCdubBOsx1Y51xXw3DmvrI81SMJZ8vmL9J4?= =?us-ascii?Q?6A50Jlw/Xnzq13YizV8iGWszYUXb9HKs7pqtntNfW7IvpdE5wfue8ehAQNme?= =?us-ascii?Q?ZtzCLhxtmcncRmVN1OUa9GkW3ALjfqXLSjepqGCGfDg47TX5MxzJ/8lynlZb?= =?us-ascii?Q?6umYmgx/rmeVpEEZ1z152Uz38bRoQbG6d8wOTltvQv9m+ou787fLbvjvOVEO?= =?us-ascii?Q?Q8QT4p0YJ5/mleCdhzaKdp0=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)(366016)(376014)(19092799006)(52116014)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?chiTZJKyZIUzpmu7IaupwjhBQOI/nKtAGX1bLzeAbCxxdqmi+kI7iEEzMQcm?= =?us-ascii?Q?14z3+tBQFLh+UUhVqQhyYNlxXO7yUJmX4SlxempZsa00oeRpzt8N8RaiioXa?= =?us-ascii?Q?Zq0fr1qnUcWkgcpalv1+ZfAHgSTBepfj5+xgkhzO0YCPubUW+bvcngpBmebp?= =?us-ascii?Q?LdWuYI2dZGilZtSzQEmR6MolfKtrlp4IFsK01B5MW7nHmHXwSELa8/aIMfhW?= =?us-ascii?Q?41NyMda/Qq+2/MB/aW99iCjH81FV2SBkFhfdAF/EjOZzFnegVCpUXCFWZwGs?= =?us-ascii?Q?ahUhHYXF+W78L337wXhZFvHSmja9bT+Dv0dULHvPN7xtu+L0AHMXqodpV/Y9?= =?us-ascii?Q?tNRaCo+6juKrEFHAswtA8bYPA9InZO8TiMF6eiNE76ULzmUjXhB/tIXzjpaH?= =?us-ascii?Q?DIx5gtd1cPPKoQ68SyK7jZIX0go04sKDrw2CuQ9D5Mqys/+hYrQmcnk678so?= =?us-ascii?Q?QtzJyBe3Hq5nu88Qvy7qeqAhJM6y+fk/u1YUc5yGRuKA5VrPCiHr7DM54DpW?= =?us-ascii?Q?pWCo7CGhr+AAPzqqdTvYUhHP2N3Rn7ROxeRVS2ySjKdJHXrjnDytmNm8UVX4?= =?us-ascii?Q?SaVjh/JDKDdnJ5Osa8yfjuHKV07kJfeKX3NC8IegDia1MNKA3TjiqljfpfKX?= =?us-ascii?Q?Hf4C0nmP2565YyaL8/GJnkGRvZsKfH/NxBWdJqYwZqz3GBFAatNDjtmPBcjr?= =?us-ascii?Q?Yus0NkqNgX16Rsei4pXGskSYE9XyI9ZxiPMLBuzzgC6xtJ51JN6Q1Om6apgI?= =?us-ascii?Q?ND6E+BM/HBxvtswj0ivmA07VuekiTfj9inxbWS2MLzHip27AurourfBWl82h?= =?us-ascii?Q?5MdpLlYI0KXe5Xf3zxL8nYeJwWtNqvfLFm5+0MhUmOp1Zqrx+wc1I0uONYdF?= =?us-ascii?Q?ksiqv2cJtdTG6xdjKNKS+qxW/QEySTXfBvcRe8GNR+jEAAZNYVedhO1k5D33?= =?us-ascii?Q?LNQS6wdtevgE4X7O9cIJQL6mKCT+n46vWhtm2C5leY327o45Q4+1UtFRDS/1?= =?us-ascii?Q?txAQiaMo3oe+DD2yQzEGqVPTYtDyOXdFXZqGVYgcOxAZYNuqBz6IhOHqj6/I?= =?us-ascii?Q?L94QM+4UCqj1Ot7GbVdi6TA1FFVMhh6CW2Dgj6raHi/5jeZhLdOo6j8bt/RM?= =?us-ascii?Q?OYHe+PIiC2uiYOQxEL1DtvsS1DGBw3FTH6Jj0yLcm1uUs7wj9vF3ewoMdHX6?= =?us-ascii?Q?WIbcxEiKio5YFO6ptQvBg76ur14cPtBiTkEyWgb59iy7eJMF30HkqwZIeOUx?= =?us-ascii?Q?dI2+qOZntroks0c9yZFCIDhSXFMfZ3XEDWU3DCQY/kHuYm0XzBRTOxkl6oW4?= =?us-ascii?Q?64pLVuDSXx1gSuXJQJseW0dtli8y0QBjL2rS9N2YrZlrAvEVU2Y5ewGb+75q?= =?us-ascii?Q?DmJUf4ZrjnIHJ63aBZwnOqj/+aPO0Z1pN75/VNTOKtkQaYoV9iPxFGKFiFZ/?= =?us-ascii?Q?0gZyugbkWEl9Q6PKN6kQj/mMtypFsqmm/pnCY65rWP0Zj0f3l1LXjc2xeXbo?= =?us-ascii?Q?Q8VkrTI0u03e6+KCJaypv8lXpnPG1w2m4b/1BmxDQF49eSaafukjgviaqrRk?= =?us-ascii?Q?IdQNqrWC0IYHFVs2f4jRXPw1nphC7jWSMf9TkJBrJfvQ0FFkXOE52a0C4Kzy?= =?us-ascii?Q?dMSRKsU78SLgMqNaMMZZaXeWyLW050M0V9dRXyqoBFmqcYUaHs6JlKJFRPwK?= =?us-ascii?Q?4w/WOaUefwGJ+edP5I0PZzO0+VyHRRlGHXWSbNOcGhhIUG+hBVjeNZSbCKLC?= =?us-ascii?Q?GeFj0xOsSJ4QI5DNm80Brrc8tOfIDtI=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0554b3bc-b252-4bf1-560c-08de5380972c X-MS-Exchange-CrossTenant-AuthSource: AM9PR04MB8585.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Jan 2026 15:21:29.2419 (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: Q1aTupUINmyNRiX/sdAddnHGwZsbDh96hlyLArA3IwAJ6r9yHAHx3ODmB0azNyR3Z7IeqpfD7VcaCCKMnokhEQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB8PR04MB7068 Content-Type: text/plain; charset="utf-8" Managed lanes are supposed to have power management through phy_power_on() and phy_power_off(). Unmanaged lanes are supposed to be always powered on, because they might have a consumer which doesn't use this SerDes driver, and we don't want to break it. A lane is initially unmanaged, and becomes managed when phy_init() is called on it. It is normal for consumer drivers to call both phy_init() and phy_exit(), in a balanced way. This ensures the phy->init_count from the phy core is brought back to zero, for example during -EPROBE_DEFER in the consumer, the lane temporarily becomes unmanaged and then managed again. Given the above requirement for consumers, it also imposes a requirement for the SerDes driver to implement the exit() operation. Otherwise, a balanced set of phy_init() and phy_exit() calls from the consumer will effectively result in multiple lynx_28g_init() calls as seen by the SerDes and nothing else. That actually doesn't work - the driver can't power down a SerDes lane which is actually powered down, so such a call sequence would hang the kernel. No consumer driver currently uses phy_exit(), so the above problem does not yet trigger, but in preparation for its introduction without any regressions, it is necessary to add lynx_28g_exit() as the mirror of lynx_28g_init(). Signed-off-by: Vladimir Oltean --- part 1 -> part 2: none Patch last made its appearance in v3 from part 1: https://lore.kernel.org/linux-phy/20250926180505.760089-18-vladimir.oltean@= nxp.com/ (old) part 1 change log: v2->v3: propagate the potential -ETIMEDOUT error code from lynx_28g_power_on() to the caller v1->v2: slight commit message reword drivers/phy/freescale/phy-fsl-lynx-28g.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/drivers/phy/freescale/phy-fsl-lynx-28g.c b/drivers/phy/freesca= le/phy-fsl-lynx-28g.c index 4c20d5d42983..f1d0e0f29fcf 100644 --- a/drivers/phy/freescale/phy-fsl-lynx-28g.c +++ b/drivers/phy/freescale/phy-fsl-lynx-28g.c @@ -1296,8 +1296,23 @@ static int lynx_28g_init(struct phy *phy) return lynx_28g_power_off(phy); } =20 +static int lynx_28g_exit(struct phy *phy) +{ + struct lynx_28g_lane *lane =3D phy_get_drvdata(phy); + + /* The lane returns to the state where it isn't managed by the + * consumer, so we must treat is as if it isn't initialized, and always + * powered on. + */ + lane->init =3D false; + lane->powered_up =3D false; + + return lynx_28g_power_on(phy); +} + static const struct phy_ops lynx_28g_ops =3D { .init =3D lynx_28g_init, + .exit =3D lynx_28g_exit, .power_on =3D lynx_28g_power_on, .power_off =3D lynx_28g_power_off, .set_mode =3D lynx_28g_set_mode, --=20 2.34.1