Current code just bind mt7531 mdio with it's driver, so mdio device may not be probed and hense not usable.
This patch: * Forces probing of mt7531 mdio for GDM1 port * Renames the mt7531 mdio bus interface to 'mt7531-mdio'. We may have multiple available MDIO, so the name 'mdio' isn't descriptive enough. * Sets mdio bus for the GDM port device Signed-off-by: Mikhail Kshevetskiy <[email protected]> --- drivers/net/airoha_eth.c | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/drivers/net/airoha_eth.c b/drivers/net/airoha_eth.c index a0c1786c628..f60405392b6 100644 --- a/drivers/net/airoha_eth.c +++ b/drivers/net/airoha_eth.c @@ -12,6 +12,7 @@ #include <dm/device-internal.h> #include <dm/devres.h> #include <dm/lists.h> +#include <eth_phy.h> #include <mapmem.h> #include <miiphy.h> #include <net.h> @@ -334,6 +335,7 @@ struct airoha_gdm_port { struct airoha_eth { void __iomem *fe_regs; void __iomem *switch_regs; + struct udevice *switch_mdio_dev; struct reset_ctl_bulk rsts; struct reset_ctl_bulk xsi_rsts; @@ -933,6 +935,8 @@ static int airoha_eth_port_probe(struct udevice *dev) { struct airoha_eth *eth = (void *)dev_get_driver_data(dev); struct airoha_gdm_port *port = dev_get_priv(dev); + struct mdio_perdev_priv *pdata; + struct mii_dev *mdio_bus; int ret; port->qdma = ð->qdma[0]; @@ -941,6 +945,7 @@ static int airoha_eth_port_probe(struct udevice *dev) if (ret) return ret; + mdio_bus = NULL; if (port->id > 1) { #if defined(CONFIG_PCS_AIROHA) ret = airoha_pcs_init(dev); @@ -948,11 +953,24 @@ static int airoha_eth_port_probe(struct udevice *dev) return ret; port->phydev = dm_eth_phy_connect(dev); + if (port->phydev) + mdio_bus = port->phydev->bus; #else return -EINVAL; #endif + } else { + if (eth->switch_mdio_dev && + !device_probe(eth->switch_mdio_dev)) { + pdata = dev_get_uclass_priv(eth->switch_mdio_dev); + mdio_bus = pdata->mii_bus; + } } +#ifdef CONFIG_DM_ETH_PHY + if (!IS_ERR_OR_NULL(mdio_bus)) + eth_phy_set_mdio_bus(dev, mdio_bus); +#endif + return 0; } @@ -1197,9 +1215,9 @@ static int arht_eth_write_hwaddr(struct udevice *dev) static int airoha_eth_bind(struct udevice *dev) { struct airoha_eth_soc_data *data = (void *)dev_get_driver_data(dev); + struct airoha_eth *eth = dev_get_priv(dev); ofnode switch_node, mdio_node; - struct udevice *mdio_dev; - int ret = 0; + int ret; /* * Force Probe as we set the Main ETH driver as misc @@ -1223,8 +1241,8 @@ static int airoha_eth_bind(struct udevice *dev) return 0; } - ret = device_bind_driver_to_node(dev, "mt7531-mdio-mmio", "mdio", - mdio_node, &mdio_dev); + ret = device_bind_driver_to_node(dev, "mt7531-mdio-mmio", "mt7531-mdio", + mdio_node, ð->switch_mdio_dev); if (ret) debug("Warning: failed to bind mdio controller\n"); -- 2.51.0

