[openwrt/openwrt] realtek: 6.12: proper mdio c45 handling in DSA driver

LEDE Commits lede-commits at lists.infradead.org
Wed Jun 11 13:27:52 PDT 2025


robimarko pushed a commit to openwrt/openwrt.git, branch main:
https://git.openwrt.org/30fae30e038ba6a5fe8184fa339355cfcfd15c43

commit 30fae30e038ba6a5fe8184fa339355cfcfd15c43
Author: Markus Stockhausen <markus.stockhausen at gmx.de>
AuthorDate: Tue Jun 3 10:46:00 2025 -0400

    realtek: 6.12: proper mdio c45 handling in DSA driver
    
    As the mdio bus has been hardened and can now handle c45 requests
    the DSA driver must honor that as well. For this
    
    - add proper upstreamed bus read_c45 and write_c45 functions
    - take over the disabled port mask from upstream bus
    
    Signed-off-by: Markus Stockhausen <markus.stockhausen at gmx.de>
    Link: https://github.com/openwrt/openwrt/pull/18935
    Signed-off-by: Robert Marko <robimarko at gmail.com>
---
 .../files-6.12/drivers/net/dsa/rtl83xx/common.c    | 25 ++++++++++++++++++----
 1 file changed, 21 insertions(+), 4 deletions(-)

diff --git a/target/linux/realtek/files-6.12/drivers/net/dsa/rtl83xx/common.c b/target/linux/realtek/files-6.12/drivers/net/dsa/rtl83xx/common.c
index 9aa847d9c4..411ee7f5e3 100644
--- a/target/linux/realtek/files-6.12/drivers/net/dsa/rtl83xx/common.c
+++ b/target/linux/realtek/files-6.12/drivers/net/dsa/rtl83xx/common.c
@@ -272,20 +272,34 @@ int write_phy(u32 port, u32 page, u32 reg, u32 val)
 	return -1;
 }
 
-static int rtldsa_mdio_read(struct mii_bus *bus, int addr, int regnum)
+static int rtldsa_bus_read(struct mii_bus *bus, int addr, int regnum)
 {
 	struct rtl838x_switch_priv *priv = bus->priv;
 
 	return mdiobus_read_nested(priv->parent_bus, addr, regnum);
 }
 
-static int rtldsa_mdio_write(struct mii_bus *bus, int addr, int regnum, u16 val)
+static int rtldsa_bus_write(struct mii_bus *bus, int addr, int regnum, u16 val)
 {
 	struct rtl838x_switch_priv *priv = bus->priv;
 
 	return mdiobus_write_nested(priv->parent_bus, addr, regnum, val);
 }
 
+static int rtldsa_bus_c45_read(struct mii_bus *bus, int addr, int devad, int regnum)
+{
+	struct rtl838x_switch_priv *priv = bus->priv;
+
+	return mdiobus_c45_read_nested(priv->parent_bus, addr, devad, regnum);
+}
+
+static int rtldsa_bus_c45_write(struct mii_bus *bus, int addr, int devad, int regnum, u16 val)
+{
+	struct rtl838x_switch_priv *priv = bus->priv;
+
+	return mdiobus_c45_write_nested(priv->parent_bus, addr, devad, regnum, val);
+}
+
 static int __init rtl83xx_mdio_probe(struct rtl838x_switch_priv *priv)
 {
 	struct device *dev = priv->dev;
@@ -316,8 +330,11 @@ static int __init rtl83xx_mdio_probe(struct rtl838x_switch_priv *priv)
 		return -ENOMEM;
 
 	bus->name = "rtldsa_mdio";
-	bus->read = rtldsa_mdio_read;
-	bus->write = rtldsa_mdio_write;
+	bus->read = rtldsa_bus_read;
+	bus->write = rtldsa_bus_write;
+	bus->read_c45 = rtldsa_bus_c45_read;
+	bus->write_c45 = rtldsa_bus_c45_write;
+	bus->phy_mask = priv->parent_bus->phy_mask;
 	snprintf(bus->id, MII_BUS_ID_SIZE, "%s-%d", bus->name, dev->id);
 
 	bus->parent = dev;




More information about the lede-commits mailing list