[PATCH net-next] net: mdio: add fwnode compatible matching to mdio_bus_match()

Serapheim Dimitropoulos via B4 Relay posted 1 patch 1 month, 1 week ago
drivers/net/phy/mdio_bus.c | 15 +++++++++++++++
1 file changed, 15 insertions(+)
[PATCH net-next] net: mdio: add fwnode compatible matching to mdio_bus_match()
Posted by Serapheim Dimitropoulos via B4 Relay 1 month, 1 week ago
From: Serapheim Dimitropoulos <sdimitropoulos@coreweave.com>

The MDIO bus match function currently only supports Device Tree
(of_driver_match_device) and PHY-ID-based matching (bus_match callback).
This means MDIO drivers that rely on compatible-string matching, such as
the mv88e6xxx DSA switch driver, cannot bind on systems that describe
hardware topology via firmware nodes (fwnode/software nodes) rather than
Device Tree.

This is a problem for x86/ACPI platforms where MDIO buses are created
dynamically (e.g., USB-to-MDIO bridges) and have no Device Tree
representation. On these systems, kernel modules or ACPI tables can
describe the MDIO device topology using software nodes with a
"compatible" property, but mdio_bus_match() never checks it.

Add a fallback matching path that iterates the driver's of_match_table
and checks each compatible string against the device's fwnode using the
existing device_is_compatible() helper. This is placed after the OF
match (which handles DT natively) and before the bus_match callback
(which handles PHY-ID matching), so existing match behavior is
unchanged.

This enables DSA switch drivers like mv88e6xxx to bind on x86 systems
where the switch topology is described via software nodes or ACPI,
closing a gap in MDIO bus support for non-DT platforms.

Signed-off-by: Serapheim Dimitropoulos <sdimitropoulos@coreweave.com>
---
 drivers/net/phy/mdio_bus.c | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/drivers/net/phy/mdio_bus.c b/drivers/net/phy/mdio_bus.c
index afdf1ad6c0e61..4575122edb475 100644
--- a/drivers/net/phy/mdio_bus.c
+++ b/drivers/net/phy/mdio_bus.c
@@ -23,6 +23,7 @@
 #include <linux/of_device.h>
 #include <linux/of_mdio.h>
 #include <linux/phy.h>
+#include <linux/property.h>
 #include <linux/reset.h>
 #include <linux/slab.h>
 #include <linux/spinlock.h>
@@ -959,6 +960,7 @@ static int mdio_bus_match(struct device *dev, const struct device_driver *drv)
 {
 	const struct mdio_driver *mdiodrv = to_mdio_driver(drv);
 	struct mdio_device *mdio = to_mdio_device(dev);
+	const struct of_device_id *id;
 
 	/* Both the driver and device must type-match */
 	if (!(mdiodrv->mdiodrv.flags & MDIO_DEVICE_IS_PHY) !=
@@ -968,6 +970,19 @@ static int mdio_bus_match(struct device *dev, const struct device_driver *drv)
 	if (of_driver_match_device(dev, drv))
 		return 1;
 
+	/*
+	 * Fall back to fwnode compatible matching for non-DT systems.
+	 * This enables MDIO drivers (e.g., DSA switch drivers) to bind
+	 * on platforms using software nodes or ACPI to describe the
+	 * MDIO device topology.
+	 */
+	if (dev_fwnode(dev) && !dev->of_node && drv->of_match_table) {
+		for (id = drv->of_match_table; id->compatible[0]; id++) {
+			if (device_is_compatible(dev, id->compatible))
+				return 1;
+		}
+	}
+
 	if (mdio->bus_match)
 		return mdio->bus_match(dev, drv);
 

---
base-commit: fd6dad4e1ae296b67b87291256878a58dad36c93
change-id: 20260227-mdio-fwnode-match-b29eb4de7af0

Best regards,
-- 
Serapheim Dimitropoulos <sdimitropoulos@coreweave.com>
Re: [PATCH net-next] net: mdio: add fwnode compatible matching to mdio_bus_match()
Posted by Andrew Lunn 1 month, 1 week ago
On Mon, Mar 02, 2026 at 10:10:59AM -0500, Serapheim Dimitropoulos via B4 Relay wrote:
> From: Serapheim Dimitropoulos <sdimitropoulos@coreweave.com>
> 
> The MDIO bus match function currently only supports Device Tree
> (of_driver_match_device) and PHY-ID-based matching (bus_match callback).
> This means MDIO drivers that rely on compatible-string matching, such as
> the mv88e6xxx DSA switch driver, cannot bind on systems that describe
> hardware topology via firmware nodes (fwnode/software nodes) rather than
> Device Tree.
> 
> This is a problem for x86/ACPI platforms where MDIO buses are created
> dynamically (e.g., USB-to-MDIO bridges) and have no Device Tree
> representation. On these systems, kernel modules or ACPI tables can
> describe the MDIO device topology using software nodes with a
> "compatible" property, but mdio_bus_match() never checks it.
> 
> Add a fallback matching path that iterates the driver's of_match_table
> and checks each compatible string against the device's fwnode using the
> existing device_is_compatible() helper. This is placed after the OF
> match (which handles DT natively) and before the bus_match callback
> (which handles PHY-ID matching), so existing match behavior is
> unchanged.
> 
> This enables DSA switch drivers like mv88e6xxx to bind on x86 systems
> where the switch topology is described via software nodes or ACPI,
> closing a gap in MDIO bus support for non-DT platforms.

Please make this patch part of a full series adding support for your
board. I presume you have something in drivers/platform? Or maybe
drivers/net/usb or drivers/net/mdio? I would like to see how this is
used.

I should also not that mv88e6xxx supports platform data. That is how
the x86 platforms i've seen do it.

    Andrew

---
pw-bot: cr