[openwrt/openwrt] bmips: update BCM531x5 RGMII delays patch

LEDE Commits lede-commits at lists.infradead.org
Wed Jun 18 06:19:53 PDT 2025


noltari pushed a commit to openwrt/openwrt.git, branch main:
https://git.openwrt.org/3f69fe3907bfd1e9b53baa607470d3c612a3db3d

commit 3f69fe3907bfd1e9b53baa607470d3c612a3db3d
Author: Álvaro Fernández Rojas <noltari at gmail.com>
AuthorDate: Wed Jun 11 09:46:44 2025 +0200

    bmips: update BCM531x5 RGMII delays patch
    
    Replace BCM531x5 patch with the one sent upstream.
    
    Signed-off-by: Álvaro Fernández Rojas <noltari at gmail.com>
---
 target/linux/bmips/bcm6318/config-6.12             |   1 +
 target/linux/bmips/bcm63268/config-6.12            |   1 +
 target/linux/bmips/bcm6328/config-6.12             |   1 +
 target/linux/bmips/bcm6358/config-6.12             |   1 +
 target/linux/bmips/bcm6362/config-6.12             |   1 +
 target/linux/bmips/bcm6368/config-6.12             |   1 +
 ...cm531x5-fix-cpu-rgmii-mode-interpretation.patch | 111 +++++++++++++++++++++
 ...b53-invert-bcm531x5-rgmii-delay-heuristic.patch |  55 ----------
 8 files changed, 117 insertions(+), 55 deletions(-)

diff --git a/target/linux/bmips/bcm6318/config-6.12 b/target/linux/bmips/bcm6318/config-6.12
index 746ba1fc17..7113342957 100644
--- a/target/linux/bmips/bcm6318/config-6.12
+++ b/target/linux/bmips/bcm6318/config-6.12
@@ -7,6 +7,7 @@ CONFIG_ARCH_SUSPEND_POSSIBLE=y
 CONFIG_B53=y
 CONFIG_B53_MDIO_DRIVER=y
 CONFIG_B53_MMAP_DRIVER=y
+# CONFIG_B53_QUIRK_IMP_RGMII_IMPLIES_DELAYS is not set
 CONFIG_B53_SPI_DRIVER=y
 CONFIG_BCM6345_EXT_IRQ=y
 CONFIG_BCM6345_L1_IRQ=y
diff --git a/target/linux/bmips/bcm63268/config-6.12 b/target/linux/bmips/bcm63268/config-6.12
index 8d692322d8..29cfd9fc95 100644
--- a/target/linux/bmips/bcm63268/config-6.12
+++ b/target/linux/bmips/bcm63268/config-6.12
@@ -7,6 +7,7 @@ CONFIG_ARCH_SUSPEND_POSSIBLE=y
 CONFIG_B53=y
 CONFIG_B53_MDIO_DRIVER=y
 CONFIG_B53_MMAP_DRIVER=y
+# CONFIG_B53_QUIRK_IMP_RGMII_IMPLIES_DELAYS is not set
 CONFIG_B53_SPI_DRIVER=y
 CONFIG_BCM6345_EXT_IRQ=y
 CONFIG_BCM6345_L1_IRQ=y
diff --git a/target/linux/bmips/bcm6328/config-6.12 b/target/linux/bmips/bcm6328/config-6.12
index fd7a058381..20e365dfba 100644
--- a/target/linux/bmips/bcm6328/config-6.12
+++ b/target/linux/bmips/bcm6328/config-6.12
@@ -7,6 +7,7 @@ CONFIG_ARCH_SUSPEND_POSSIBLE=y
 CONFIG_B53=y
 CONFIG_B53_MDIO_DRIVER=y
 CONFIG_B53_MMAP_DRIVER=y
+# CONFIG_B53_QUIRK_IMP_RGMII_IMPLIES_DELAYS is not set
 CONFIG_B53_SPI_DRIVER=y
 CONFIG_BCM6345_EXT_IRQ=y
 CONFIG_BCM6345_L1_IRQ=y
diff --git a/target/linux/bmips/bcm6358/config-6.12 b/target/linux/bmips/bcm6358/config-6.12
index 7f5da92396..60e1f3ec8f 100644
--- a/target/linux/bmips/bcm6358/config-6.12
+++ b/target/linux/bmips/bcm6358/config-6.12
@@ -6,6 +6,7 @@ CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MAX=15
 CONFIG_ARCH_SUSPEND_POSSIBLE=y
 CONFIG_B53=y
 CONFIG_B53_MDIO_DRIVER=y
+# CONFIG_B53_QUIRK_IMP_RGMII_IMPLIES_DELAYS is not set
 CONFIG_B53_SPI_DRIVER=y
 CONFIG_BCM6345_EXT_IRQ=y
 CONFIG_BCM6345_L1_IRQ=y
diff --git a/target/linux/bmips/bcm6362/config-6.12 b/target/linux/bmips/bcm6362/config-6.12
index 2eef21a31a..68b1526b38 100644
--- a/target/linux/bmips/bcm6362/config-6.12
+++ b/target/linux/bmips/bcm6362/config-6.12
@@ -7,6 +7,7 @@ CONFIG_ARCH_SUSPEND_POSSIBLE=y
 CONFIG_B53=y
 CONFIG_B53_MDIO_DRIVER=y
 CONFIG_B53_MMAP_DRIVER=y
+# CONFIG_B53_QUIRK_IMP_RGMII_IMPLIES_DELAYS is not set
 CONFIG_B53_SPI_DRIVER=y
 CONFIG_BCM6345_EXT_IRQ=y
 CONFIG_BCM6345_L1_IRQ=y
diff --git a/target/linux/bmips/bcm6368/config-6.12 b/target/linux/bmips/bcm6368/config-6.12
index 9c7b27be44..7633c8e838 100644
--- a/target/linux/bmips/bcm6368/config-6.12
+++ b/target/linux/bmips/bcm6368/config-6.12
@@ -7,6 +7,7 @@ CONFIG_ARCH_SUSPEND_POSSIBLE=y
 CONFIG_B53=y
 CONFIG_B53_MDIO_DRIVER=y
 CONFIG_B53_MMAP_DRIVER=y
+# CONFIG_B53_QUIRK_IMP_RGMII_IMPLIES_DELAYS is not set
 CONFIG_B53_SPI_DRIVER=y
 CONFIG_BCM6345_EXT_IRQ=y
 CONFIG_BCM6345_L1_IRQ=y
diff --git a/target/linux/bmips/patches-6.12/110-net-dsa-b53-bcm531x5-fix-cpu-rgmii-mode-interpretation.patch b/target/linux/bmips/patches-6.12/110-net-dsa-b53-bcm531x5-fix-cpu-rgmii-mode-interpretation.patch
new file mode 100644
index 0000000000..30f346ff1e
--- /dev/null
+++ b/target/linux/bmips/patches-6.12/110-net-dsa-b53-bcm531x5-fix-cpu-rgmii-mode-interpretation.patch
@@ -0,0 +1,111 @@
+From d9fa3835bb8913757c74af96fa8db0d621e2e980 Mon Sep 17 00:00:00 2001
+From: Jonas Gorski <jonas.gorski at gmail.com>
+Date: Mon, 9 Jun 2025 11:18:24 +0200
+Subject: [PATCH] net: dsa: b53: bcm531x5: fix cpu rgmii mode interpretation
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+b53_adjust_531x5_rgmii() incorrectly enable delays in rgmii mode, but
+disables them in rgmii-id mode. Only rgmii-txid is correctly handled.
+
+Fix this by correctly enabling rx delay in rgmii-rxid and rgmii-id
+modes, and tx delay in rgmii-txid and rgmii-id modes.
+
+Since b53_adjust_531x5_rgmii() is only called for fixed-link ports,
+these are usually used as the CPU port, connected to a MAC. This means
+the chip is assuming the role of the PHY and enabling delays is
+expected.
+
+Since this has the potential to break existing setups, add a config
+options to treat rgmii as rgmii-id, and enable it by default.
+
+I only made the quirk fixup rgmii to rgmii-id, but not rgmii-id to
+rgmii, or no delays for rgmii-rxid. My reasoning is that
+
+a) Boards not requiring internal delays are probably rather seldom, so I
+   considered the likelyhood requiring/wrongly specifying rgmii-id when
+   they need rgmii as very unlikely.
+   And if they understand the difference enough to know to use the
+   "wrong" mode, they would have hopefully noticed the discrepancy and
+   reported the issue by now.
+b) I don't want to require new users to wrongly use rgmii to get
+   rgmii-id behavior with the quirk enabled.
+
+Fixes: 967dd82ffc52 ("net: dsa: b53: Add support for Broadcom RoboSwitch")
+Reported-by: Álvaro Fernández Rojas <noltari at gmail.com>
+Signed-off-by: Jonas Gorski <jonas.gorski at gmail.com>
+---
+ drivers/net/dsa/b53/Kconfig      | 10 ++++++++++
+ drivers/net/dsa/b53/b53_common.c | 33 +++++++++++++++++++++++---------
+ 2 files changed, 34 insertions(+), 9 deletions(-)
+
+--- a/drivers/net/dsa/b53/Kconfig
++++ b/drivers/net/dsa/b53/Kconfig
+@@ -47,3 +47,13 @@ config B53_SERDES
+ 	default ARCH_BCM_NSP
+ 	help
+ 	  Select to enable support for SerDes on e.g: Northstar Plus SoCs.
++
++config B53_QUIRK_IMP_RGMII_IMPLIES_DELAYS
++	bool "Treat RGMII as RGMII-ID for CPU port"
++	depends on B53
++	default y
++	help
++	  Select to enable RGMII delays also in RGMII (no ID) mode for the CPU
++	  port to mirror old driver behavior.
++	  Enable this if your board wrongly uses RGMII instead of RGMII-ID as
++	  the phy interface, but actually requires internal delays enabled.
+--- a/drivers/net/dsa/b53/b53_common.c
++++ b/drivers/net/dsa/b53/b53_common.c
+@@ -1426,6 +1426,16 @@ static void b53_adjust_531x5_rgmii(struc
+ 	else
+ 		off = B53_RGMII_CTRL_P(port);
+ 
++	if (IS_ENABLED(CONFIG_B53_QUIRK_IMP_RGMII_IMPLIES_DELAYS) &&
++	    interface == PHY_INTERFACE_MODE_RGMII) {
++		/* Older driver versions incorrectly applied delays in
++		 * PHY_INTERFACE_MODE_RGMII mode.
++		 *
++		 * So fixup the interface to match the old behavior.
++		 */
++		interface = PHY_INTERFACE_MODE_RGMII_ID;
++	}
++
+ 	/* Configure the port RGMII clock delay by DLL disabled and
+ 	 * tx_clk aligned timing (restoring to reset defaults)
+ 	 */
+@@ -1437,19 +1447,24 @@ static void b53_adjust_531x5_rgmii(struc
+ 	 * account for this internal delay that is inserted, otherwise
+ 	 * the switch won't be able to receive correctly.
+ 	 *
++	 * PHY_INTERFACE_MODE_RGMII_RXID means RX internal delay, make
++	 * sure that we enable the port RX clock internal sampling delay
++	 * to account for this internal delay that is inserted, otherwise
++	 * the switch won't be able to send correctly.
++	 *
++	 * PHY_INTERFACE_MODE_RGMII_ID means both RX and TX internal delay,
++	 * make sure that we enable delays for both.
++	 *
+ 	 * PHY_INTERFACE_MODE_RGMII means that we are not introducing
+ 	 * any delay neither on transmission nor reception, so the
+-	 * BCM53125 must also be configured accordingly to account for
+-	 * the lack of delay and introduce
+-	 *
+-	 * The BCM53125 switch has its RX clock and TX clock control
+-	 * swapped, hence the reason why we modify the TX clock path in
+-	 * the "RGMII" case
++	 * BCM53125 must also be configured accordingly.
+ 	 */
+-	if (interface == PHY_INTERFACE_MODE_RGMII_TXID)
++	if (interface == PHY_INTERFACE_MODE_RGMII_TXID ||
++	    interface == PHY_INTERFACE_MODE_RGMII_ID)
+ 		rgmii_ctrl |= RGMII_CTRL_DLL_TXC;
+-	if (interface == PHY_INTERFACE_MODE_RGMII)
+-		rgmii_ctrl |= RGMII_CTRL_DLL_TXC | RGMII_CTRL_DLL_RXC;
++	if (interface == PHY_INTERFACE_MODE_RGMII_RXID ||
++	    interface == PHY_INTERFACE_MODE_RGMII_ID)
++		rgmii_ctrl |= RGMII_CTRL_DLL_RXC;
+ 
+ 	if (dev->chip_id != BCM53115_DEVICE_ID)
+ 		rgmii_ctrl |= RGMII_CTRL_TIMING_SEL;
diff --git a/target/linux/bmips/patches-6.12/110-net-dsa-b53-invert-bcm531x5-rgmii-delay-heuristic.patch b/target/linux/bmips/patches-6.12/110-net-dsa-b53-invert-bcm531x5-rgmii-delay-heuristic.patch
deleted file mode 100644
index 2c3e27c45c..0000000000
--- a/target/linux/bmips/patches-6.12/110-net-dsa-b53-invert-bcm531x5-rgmii-delay-heuristic.patch
+++ /dev/null
@@ -1,55 +0,0 @@
-From eb9e6142ac5f42beee48c9ec8edf1da3a3d7ff81 Mon Sep 17 00:00:00 2001
-From: Jonas Gorski <jonas.gorski at gmail.com>
-Date: Thu, 5 Jun 2025 16:39:20 +0200
-Subject: [PATCH] net: dsa: b53: invert bcm531x5 rgmii delay heuristic
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-When configuring the RGMII port for BCM531x5, we are only doing so in
-MLO_AN_FIXED, i.e. fixed link mode. This implies this port is used as
-cpu port and thus connected to an ethernet mac, so the switch takes the
-role of the PHY.
-
-Therefore we need to enable delays when the interface mode is rgmii-id,
-and not rgmii. Enabling delays for rgmii is wrong in any case.
-
-Also update the comment with the incomplete sentence to match what we
-are now doing, and add a comment about rgmii-id.
-
-Luckily there are at least no in-tree users of rgmii or rgmii-id mode
-that would be affected, as the only user with a defined link mode uses
-rgmii-txid, which we already handle correctly.
-
-Fixes: 967dd82ffc52 ("net: dsa: b53: Add support for Broadcom RoboSwitch")
-Reported-by: Álvaro Fernández Rojas <noltari at gmail.com>
-Signed-off-by: Jonas Gorski <jonas.gorski at gmail.com>
----
- drivers/net/dsa/b53/b53_common.c | 13 ++++++-------
- 1 file changed, 6 insertions(+), 7 deletions(-)
-
---- a/drivers/net/dsa/b53/b53_common.c
-+++ b/drivers/net/dsa/b53/b53_common.c
-@@ -1363,16 +1363,15 @@ static void b53_adjust_531x5_rgmii(struc
- 	 *
- 	 * PHY_INTERFACE_MODE_RGMII means that we are not introducing
- 	 * any delay neither on transmission nor reception, so the
--	 * BCM53125 must also be configured accordingly to account for
--	 * the lack of delay and introduce
--	 *
--	 * The BCM53125 switch has its RX clock and TX clock control
--	 * swapped, hence the reason why we modify the TX clock path in
--	 * the "RGMII" case
-+	 * BCM53125 must also be configured accordingly, and not enable
-+	 * either delay.
-+	 * 
-+	 * PHY_INTERFACE_MODE_RGMII_ID means both TX internal delay and RX
-+	 * interal delay, so enable delay on both paths.
- 	 */
- 	if (interface == PHY_INTERFACE_MODE_RGMII_TXID)
- 		rgmii_ctrl |= RGMII_CTRL_DLL_TXC;
--	if (interface == PHY_INTERFACE_MODE_RGMII)
-+	if (interface == PHY_INTERFACE_MODE_RGMII_ID)
- 		rgmii_ctrl |= RGMII_CTRL_DLL_TXC | RGMII_CTRL_DLL_RXC;
- 
- 	if (dev->chip_id != BCM53115_DEVICE_ID)




More information about the lede-commits mailing list