[openwrt/openwrt] realtek: enhance & harmonize dsa/phy max port patches
LEDE Commits
lede-commits at lists.infradead.org
Sat May 31 03:28:23 PDT 2025
robimarko pushed a commit to openwrt/openwrt.git, branch main:
https://git.openwrt.org/9716f89df6ed0d158e7048f085d5449568a8f37f
commit 9716f89df6ed0d158e7048f085d5449568a8f37f
Author: Markus Stockhausen <markus.stockhausen at gmx.de>
AuthorDate: Mon May 19 10:41:50 2025 -0400
realtek: enhance & harmonize dsa/phy max port patches
DSA silently drops internal phy access to ports >= 32 in dsa_user_phy_read()
and dsa_user_phy_write(). The code shows:
static int dsa_user_phy_read(struct mii_bus *bus, int addr, int reg)
{
struct dsa_switch *ds = bus->priv;
if (ds->phys_mii_mask & (1 << addr))
return ds->ops->phy_read(ds, addr, reg);
return 0xffff;
}
With ds->phys_mii_mask being a 32 bit variable the reason is clear. So do
not only increase the max values but also adapt the needed bitmasks in
the dsa and phy code. This fixes the dsa_user_ports() and dsa_cpu_ports()
too.
While we are here combine the old separated patches because dsa, mdio and
phy are tigthly coupled.
Signed-off-by: Markus Stockhausen <markus.stockhausen at gmx.de>
Link: https://github.com/openwrt/openwrt/pull/18846
Signed-off-by: Robert Marko <robimarko at gmail.com>
---
...io-increase-max-ports-for-rtl839x-rtl931x.patch | 132 +++++++++++++++++++++
...et-dsa-increase-dsa-max-ports-for-rtl838x.patch | 32 -----
...y-increase-phy-address-number-for-rtl839x.patch | 32 -----
3 files changed, 132 insertions(+), 64 deletions(-)
diff --git a/target/linux/realtek/patches-6.6/700-dsa-mdio-increase-max-ports-for-rtl839x-rtl931x.patch b/target/linux/realtek/patches-6.6/700-dsa-mdio-increase-max-ports-for-rtl839x-rtl931x.patch
new file mode 100644
index 0000000000..147e2c587b
--- /dev/null
+++ b/target/linux/realtek/patches-6.6/700-dsa-mdio-increase-max-ports-for-rtl839x-rtl931x.patch
@@ -0,0 +1,132 @@
+From 2b88563ee5aafd9571d965b7f2093a0f58d98a31 Mon Sep 17 00:00:00 2001
+From: John Crispin <john at phrozen.org>
+Date: Thu, 26 Nov 2020 12:02:21 +0100
+Subject: realtek dsa/phy: Increase max ports for RTL839X/RTL931X
+
+Linux standard can only support up to 32 devices per mdio bus and up to
+12 ports per DSA switch. This is not enough for the large RTL839X and
+RTL931X devices. Increase the max values accordingly. Additionally take
+care about the functions that work on bit masks.
+
+Submitted-by: Bert Vermeulen <bert at biot.com>
+Submitted-by: Birger Koblitz <mail at birger-koblitz.de>
+Submitted-by: Sander Vanheule <sander at svanheule.net>
+Submitted-by: Bjørn Mork <bjorn at mork.no>
+Submitted-by: John Crispin <john at phrozen.org>
+Signed-off-by: Markus Stockhausen <markus.stockhausen at gmx.de>
+---
+ drivers/net/mdio/fwnode_mdio.c | 2 +-
+ include/linux/phy.h | 6 +++---
+ include/linux/platform_data/dsa.h | 2 +-
+ include/net/dsa.h | 14 +++++++-------
+ net/dsa/slave.c | 4 ++--
+ 5 files changed, 14 insertions(+), 14 deletions(-)
+
+--- a/drivers/net/mdio/fwnode_mdio.c
++++ b/drivers/net/mdio/fwnode_mdio.c
+@@ -87,7 +87,7 @@ int fwnode_mdiobus_phy_device_register(s
+ }
+
+ if (fwnode_property_read_bool(child, "broken-turn-around"))
+- mdio->phy_ignore_ta_mask |= 1 << addr;
++ mdio->phy_ignore_ta_mask |= BIT_ULL(addr);
+
+ fwnode_property_read_u32(child, "reset-assert-us",
+ &phy->mdio.reset_assert_delay);
+--- a/include/linux/phy.h
++++ b/include/linux/phy.h
+@@ -294,7 +294,7 @@ static inline const char *phy_modes(phy_
+ #define PHY_INIT_TIMEOUT 100000
+ #define PHY_FORCE_TIMEOUT 10
+
+-#define PHY_MAX_ADDR 32
++#define PHY_MAX_ADDR 64
+
+ /* Used when trying to connect to a specific phy (mii bus id:phy device id) */
+ #define PHY_ID_FMT "%s:%02x"
+@@ -414,10 +414,10 @@ struct mii_bus {
+ struct mdio_device *mdio_map[PHY_MAX_ADDR];
+
+ /** @phy_mask: PHY addresses to be ignored when probing */
+- u32 phy_mask;
++ u64 phy_mask;
+
+ /** @phy_ignore_ta_mask: PHY addresses to ignore the TA/read failure */
+- u32 phy_ignore_ta_mask;
++ u64 phy_ignore_ta_mask;
+
+ /**
+ * @irq: An array of interrupts, each PHY's interrupt at the index
+--- a/include/linux/platform_data/dsa.h
++++ b/include/linux/platform_data/dsa.h
+@@ -6,7 +6,7 @@ struct device;
+ struct net_device;
+
+ #define DSA_MAX_SWITCHES 4
+-#define DSA_MAX_PORTS 12
++#define DSA_MAX_PORTS 54
+ #define DSA_RTABLE_NONE -1
+
+ struct dsa_chip_data {
+--- a/include/net/dsa.h
++++ b/include/net/dsa.h
+@@ -465,7 +465,7 @@ struct dsa_switch {
+ /*
+ * Slave mii_bus and devices for the individual ports.
+ */
+- u32 phys_mii_mask;
++ u64 phys_mii_mask;
+ struct mii_bus *slave_mii_bus;
+
+ /* Ageing Time limits in msecs */
+@@ -597,24 +597,24 @@ static inline bool dsa_is_user_port(stru
+ dsa_switch_for_each_port_continue_reverse((_dp), (_ds)) \
+ if (dsa_port_is_cpu((_dp)))
+
+-static inline u32 dsa_user_ports(struct dsa_switch *ds)
++static inline u64 dsa_user_ports(struct dsa_switch *ds)
+ {
+ struct dsa_port *dp;
+- u32 mask = 0;
++ u64 mask = 0;
+
+ dsa_switch_for_each_user_port(dp, ds)
+- mask |= BIT(dp->index);
++ mask |= BIT_ULL(dp->index);
+
+ return mask;
+ }
+
+-static inline u32 dsa_cpu_ports(struct dsa_switch *ds)
++static inline u64 dsa_cpu_ports(struct dsa_switch *ds)
+ {
+ struct dsa_port *cpu_dp;
+- u32 mask = 0;
++ u64 mask = 0;
+
+ dsa_switch_for_each_cpu_port(cpu_dp, ds)
+- mask |= BIT(cpu_dp->index);
++ mask |= BIT_ULL(cpu_dp->index);
+
+ return mask;
+ }
+--- a/net/dsa/slave.c
++++ b/net/dsa/slave.c
+@@ -320,7 +320,7 @@ static int dsa_slave_phy_read(struct mii
+ {
+ struct dsa_switch *ds = bus->priv;
+
+- if (ds->phys_mii_mask & (1 << addr))
++ if (ds->phys_mii_mask & BIT_ULL(addr))
+ return ds->ops->phy_read(ds, addr, reg);
+
+ return 0xffff;
+@@ -330,7 +330,7 @@ static int dsa_slave_phy_write(struct mi
+ {
+ struct dsa_switch *ds = bus->priv;
+
+- if (ds->phys_mii_mask & (1 << addr))
++ if (ds->phys_mii_mask & BIT_ULL(addr))
+ return ds->ops->phy_write(ds, addr, reg, val);
+
+ return 0;
diff --git a/target/linux/realtek/patches-6.6/700-net-dsa-increase-dsa-max-ports-for-rtl838x.patch b/target/linux/realtek/patches-6.6/700-net-dsa-increase-dsa-max-ports-for-rtl838x.patch
deleted file mode 100644
index 63991d373c..0000000000
--- a/target/linux/realtek/patches-6.6/700-net-dsa-increase-dsa-max-ports-for-rtl838x.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-From 2b88563ee5aafd9571d965b7f2093a0f58d98a31 Mon Sep 17 00:00:00 2001
-From: John Crispin <john at phrozen.org>
-Date: Thu, 26 Nov 2020 12:02:21 +0100
-Subject: net: dsa: Increase max ports for rtl838x
-
-* rename the target to realtek
-* add refactored DSA driver
-* add latest gpio driver
-* lots of arch cleanups
-* new irq driver
-* additional boards
-
-Submitted-by: Bert Vermeulen <bert at biot.com>
-Submitted-by: Birger Koblitz <mail at birger-koblitz.de>
-Submitted-by: Sander Vanheule <sander at svanheule.net>
-Submitted-by: Bjørn Mork <bjorn at mork.no>
-Submitted-by: John Crispin <john at phrozen.org>
----
- include/linux/platform_data/dsa.h | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
---- a/include/linux/platform_data/dsa.h
-+++ b/include/linux/platform_data/dsa.h
-@@ -6,7 +6,7 @@ struct device;
- struct net_device;
-
- #define DSA_MAX_SWITCHES 4
--#define DSA_MAX_PORTS 12
-+#define DSA_MAX_PORTS 54
- #define DSA_RTABLE_NONE -1
-
- struct dsa_chip_data {
diff --git a/target/linux/realtek/patches-6.6/704-include-linux-phy-increase-phy-address-number-for-rtl839x.patch b/target/linux/realtek/patches-6.6/704-include-linux-phy-increase-phy-address-number-for-rtl839x.patch
deleted file mode 100644
index f0fd702a6e..0000000000
--- a/target/linux/realtek/patches-6.6/704-include-linux-phy-increase-phy-address-number-for-rtl839x.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-From 2b88563ee5aafd9571d965b7f2093a0f58d98a31 Mon Sep 17 00:00:00 2001
-From: John Crispin <john at phrozen.org>
-Date: Thu, 26 Nov 2020 12:02:21 +0100
-Subject: PHY: Increase max PHY adddress number
-
-* rename the target to realtek
-* add refactored DSA driver
-* add latest gpio driver
-* lots of arch cleanups
-* new irq driver
-* additional boards
-
-Submitted-by: Bert Vermeulen <bert at biot.com>
-Submitted-by: Birger Koblitz <mail at birger-koblitz.de>
-Submitted-by: Sander Vanheule <sander at svanheule.net>
-Submitted-by: Bjørn Mork <bjorn at mork.no>
-Submitted-by: John Crispin <john at phrozen.org>
----
- include/linux/phy.h | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
---- a/include/linux/phy.h
-+++ b/include/linux/phy.h
-@@ -297,7 +297,7 @@ static inline const char *phy_modes(phy_
- #define PHY_INIT_TIMEOUT 100000
- #define PHY_FORCE_TIMEOUT 10
-
--#define PHY_MAX_ADDR 32
-+#define PHY_MAX_ADDR 64
-
- /* Used when trying to connect to a specific phy (mii bus id:phy device id) */
- #define PHY_ID_FMT "%s:%02x"
More information about the lede-commits
mailing list