From nobody Fri Dec 19 20:14:37 2025 Received: from mail-pg1-f169.google.com (mail-pg1-f169.google.com [209.85.215.169]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 940B5263C7F for ; Fri, 14 Nov 2025 00:38:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.169 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763080722; cv=none; b=CZHfAPfjTjyiOZkGiLqCLOhXRXUyZb+3T++A72ukIXze7706doCYU7CL6pq/MgLnelq4HH/KRc2V9ITzPHL/1xOX63joTrxL4Y6kPVbzU9FwZuus95DF5qEMVYpUTEA5i/P+K6IOZjBP6uZBm+zMKTlf1v/vLalNC1N4Y7IbGwE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763080722; c=relaxed/simple; bh=km+Q85CbXoWksNaZ7smPrMgV3IhcwRncYPUgD1dodvM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=TC4xc8xDA4CiWVUPUhFa326GRaWOL2e/qFCiy86R10R1frXZQG4U1q8ry94QBdLNSm6IHWz4RVaA2doxGSJ8QohzWfAyOfmFYLp7quHrv5tKj8ooq6/T4w4gMtmZYPcjB8DqR2iDTnxVOdnpTV5jyQh0QfTt4HpcRyO1dE08WZo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=eSeiBJmw; arc=none smtp.client-ip=209.85.215.169 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="eSeiBJmw" Received: by mail-pg1-f169.google.com with SMTP id 41be03b00d2f7-bc59a785697so665379a12.0 for ; Thu, 13 Nov 2025 16:38:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1763080720; x=1763685520; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=OAEkeQ8lL8zgGt9X5ptAhWwpyBVXGyV+fHaoeQsAx0w=; b=eSeiBJmwADQaAmW2siWb1cNJo96MWfyAHUdaktEO063SmLgtyAafudRkVb960CPxJi pVKgBBjW97J/E59vcW25YN5LT+mnikqedkxCWsBHyfdb/SC4npMEvzw3s1P1s/Xmixa3 uySaO0/n2oPxCsO5S02XktaD/QBYbeV2wfiekuEJk1za5DGokL2Fd2opWpOrgEAzC7Km 5wlMyz+rkl+bZDctie3Hznv4neIVNouYHNP6XUUKMEr+2zEhtd6ibHq50RbE+PU8uzLo 2i3TGNapcxsjwbr3+5dYtt8PGIhKShkMQINER0ibvHeARgHv04PqI8VLXQzlpLhhEhq5 vR6Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763080720; x=1763685520; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=OAEkeQ8lL8zgGt9X5ptAhWwpyBVXGyV+fHaoeQsAx0w=; b=XSVyn6Yey9GlxFnbTL+iOXXPpkgtL6u/1DlpZqiDzBKQ8z7FOXr8AVybhwgopsWAZb TbrfM/SM8k77LjwJHjucXR5kWHuQvPzUW1KYkDUoLwU/UfY15IBl0A41IYc978XWN4BE QX9ZRX8c3oziG+hxQ5R8EgQc1fQXsog+/8yLFw8UzCbNggEbx04NFur/eZcNr919FEdH 4ktmZpyXO77K9lUaTtpymh8eJgB/LR8hLQuOFmC9XAZPyV2+PBvAlRfmqjvnhiVH49lW SZxdJ5zoO9ICJgC3Ld7JnpeQxEV/8qEJEvzmla2oi2aIyXg2kV4mPeK6QU9hwuavta6V 1IVA== X-Forwarded-Encrypted: i=1; AJvYcCUmYvxE1hzgZpN/6SmTBWUj9vGSfUqfpUEXZVKNeQAUgzBaonPQj6dGx6d8fm7y7FVR/SjdEDhRnNBYXaU=@vger.kernel.org X-Gm-Message-State: AOJu0Yxw7nDGhg9q9OrBxnEsA73UVnEitcl65p2aZA5ozWDPUp+yxEuo ahJKPhLtDkb+vZFQKd4qFXEyAfISQ7zyvR3gk52BLSEPb0txxr4++u6i X-Gm-Gg: ASbGncvrBxpC9MkYB0sjWChaZXVxL9X8pAZ/4GSPuj/v6E20IxOiofYIfpcn6JnsdMq 3Q4i2OGDc8PsYOLR7TzdAcnF3H2ALNENGmpO0l2QtSIHqEf7Nqp2r09QqB7iIVI3ughiu6jIg8d yhv3ggCD3TFcpXtU6ujdJVLlEI/scgIqBtNuezBrzIIXcPromYuIIuR8AB3N475TaBXKpCds1df J/KqmVH4Pcs1/LAfeGwP0Zbm3tDDdJEX4d/DhsW6nUDBmf+0DNetGjm0UbaG884TF6GNTjEMZze BlkbnvIqGUhzEz2IHMIENS7qiqcWzjTmG38KkCHmHkhfgDfcYH5QihLn/tFhOzZV+ZiaYWoXrll MhLO4lMwv9s0qzJHte6U07Zqjxq4TQCmFUFWReYwx8t3diWiMh3iKKo5epbksCW9Tb/A/S2hEB6 VFa/hMdXMJWQ== X-Google-Smtp-Source: AGHT+IHhHMFOgdJTCCj2iz3xbNhHIo9j6lyjGd6SR7Dx1GmoSljn6NAypb01axUm/7zVz96HeKqrgg== X-Received: by 2002:a05:7022:6608:b0:11a:4b72:35e8 with SMTP id a92af1059eb24-11b40e81abamr546686c88.6.1763080719556; Thu, 13 Nov 2025 16:38:39 -0800 (PST) Received: from localhost ([2001:19f0:ac00:4eb8:5400:5ff:fe30:7df3]) by smtp.gmail.com with ESMTPSA id a92af1059eb24-11b06088625sm3368287c88.8.2025.11.13.16.38.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 13 Nov 2025 16:38:39 -0800 (PST) From: Inochi Amaoto To: Han Gao , Icenowy Zheng , Vivian Wang , Yao Zi , Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Chen Wang , Inochi Amaoto , Maxime Coquelin , Alexandre Torgue , Heiner Kallweit , Russell King , "Russell King (Oracle)" Cc: netdev@vger.kernel.org, devicetree@vger.kernel.org, sophgo@lists.linux.dev, linux-kernel@vger.kernel.org, linux-stm32@st-md-mailman.stormreply.com, linux-arm-kernel@lists.infradead.org, Yixun Lan , Longbin Li , Maxime Chevallier Subject: [PATCH v8 2/3] net: phy: Add helper for fixing RGMII PHY mode based on internal mac delay Date: Fri, 14 Nov 2025 08:38:04 +0800 Message-ID: <20251114003805.494387-3-inochiama@gmail.com> X-Mailer: git-send-email 2.51.2 In-Reply-To: <20251114003805.494387-1-inochiama@gmail.com> References: <20251114003805.494387-1-inochiama@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The "phy-mode" property of devicetree indicates whether the PCB has delay now, which means the mac needs to modify the PHY mode based on whether there is an internal delay in the mac. This modification is similar for many ethernet drivers. To simplify code, define the helper phy_fix_phy_mode_for_mac_delays(speed, mac_txid, mac_rxid) to fix PHY mode based on whether mac adds internal delay. Suggested-by: Russell King (Oracle) Signed-off-by: Inochi Amaoto Reviewed-by: Maxime Chevallier Reviewed-by: Simon Horman --- drivers/net/phy/phy-core.c | 43 ++++++++++++++++++++++++++++++++++++++ include/linux/phy.h | 3 +++ 2 files changed, 46 insertions(+) diff --git a/drivers/net/phy/phy-core.c b/drivers/net/phy/phy-core.c index 605ca20ae192..0c63e6ba2cb0 100644 --- a/drivers/net/phy/phy-core.c +++ b/drivers/net/phy/phy-core.c @@ -101,6 +101,49 @@ const char *phy_rate_matching_to_str(int rate_matching) } EXPORT_SYMBOL_GPL(phy_rate_matching_to_str); =20 +/** + * phy_fix_phy_mode_for_mac_delays - Convenience function for fixing PHY + * mode based on whether mac adds internal delay + * + * @interface: The current interface mode of the port + * @mac_txid: True if the mac adds internal tx delay + * @mac_rxid: True if the mac adds internal rx delay + * + * Return: fixed PHY mode, or PHY_INTERFACE_MODE_NA if the interface can + * not apply the internal delay + */ +phy_interface_t phy_fix_phy_mode_for_mac_delays(phy_interface_t interface, + bool mac_txid, bool mac_rxid) +{ + if (!phy_interface_mode_is_rgmii(interface)) + return interface; + + if (mac_txid && mac_rxid) { + if (interface =3D=3D PHY_INTERFACE_MODE_RGMII_ID) + return PHY_INTERFACE_MODE_RGMII; + return PHY_INTERFACE_MODE_NA; + } + + if (mac_txid) { + if (interface =3D=3D PHY_INTERFACE_MODE_RGMII_ID) + return PHY_INTERFACE_MODE_RGMII_RXID; + if (interface =3D=3D PHY_INTERFACE_MODE_RGMII_TXID) + return PHY_INTERFACE_MODE_RGMII; + return PHY_INTERFACE_MODE_NA; + } + + if (mac_rxid) { + if (interface =3D=3D PHY_INTERFACE_MODE_RGMII_ID) + return PHY_INTERFACE_MODE_RGMII_TXID; + if (interface =3D=3D PHY_INTERFACE_MODE_RGMII_RXID) + return PHY_INTERFACE_MODE_RGMII; + return PHY_INTERFACE_MODE_NA; + } + + return interface; +} +EXPORT_SYMBOL_GPL(phy_fix_phy_mode_for_mac_delays); + /** * phy_interface_num_ports - Return the number of links that can be carrie= d by * a given MAC-PHY physical link. Returns 0 if this is diff --git a/include/linux/phy.h b/include/linux/phy.h index 3c7634482356..0bc00a4cceb2 100644 --- a/include/linux/phy.h +++ b/include/linux/phy.h @@ -1813,6 +1813,9 @@ static inline bool phy_is_pseudo_fixed_link(struct ph= y_device *phydev) return phydev->is_pseudo_fixed_link; } =20 +phy_interface_t phy_fix_phy_mode_for_mac_delays(phy_interface_t interface, + bool mac_txid, bool mac_rxid); + int phy_save_page(struct phy_device *phydev); int phy_select_page(struct phy_device *phydev, int page); int phy_restore_page(struct phy_device *phydev, int oldpage, int ret); --=20 2.51.2