Message ID | 20241104130147.440125-3-andyshrk@163.com (mailing list archive) |
---|---|
State | Accepted |
Commit | 0a1c7a7b0adbf595ce7f218609db53749e966573 |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | Fix the arc emac driver | expand |
On Mon, 4 Nov 2024 21:01:39 +0800 Andy Yan wrote: > From: Johan Jonker <jbx6244@gmail.com> > > The binding emac_rockchip.txt is converted to YAML. > Changed against the original binding is an added MDIO subnode. > This make the driver failed to find the PHY, and given the 'mdio > has invalid PHY address' it is probably looking in the wrong node. > Fix emac_mdio.c so that it can handle both old and new > device trees. Andrew, looks good?
On Wed, Nov 06, 2024 at 05:50:02PM -0800, Jakub Kicinski wrote: > On Mon, 4 Nov 2024 21:01:39 +0800 Andy Yan wrote: > > From: Johan Jonker <jbx6244@gmail.com> > > > > The binding emac_rockchip.txt is converted to YAML. > > Changed against the original binding is an added MDIO subnode. > > This make the driver failed to find the PHY, and given the 'mdio > > has invalid PHY address' it is probably looking in the wrong node. > > Fix emac_mdio.c so that it can handle both old and new > > device trees. > > Andrew, looks good? The MDIO patch looks correct. I cannot say anything about the DMA mapping. Reviewed-by: Andrew Lunn <andrew@lunn.ch> Andrew
diff --git a/drivers/net/ethernet/arc/emac_mdio.c b/drivers/net/ethernet/arc/emac_mdio.c index 87f40c2ba9040..078b1a72c1613 100644 --- a/drivers/net/ethernet/arc/emac_mdio.c +++ b/drivers/net/ethernet/arc/emac_mdio.c @@ -133,6 +133,7 @@ int arc_mdio_probe(struct arc_emac_priv *priv) struct arc_emac_mdio_bus_data *data = &priv->bus_data; struct device_node *np = priv->dev->of_node; const char *name = "Synopsys MII Bus"; + struct device_node *mdio_node; struct mii_bus *bus; int error; @@ -164,7 +165,13 @@ int arc_mdio_probe(struct arc_emac_priv *priv) snprintf(bus->id, MII_BUS_ID_SIZE, "%s", bus->name); - error = of_mdiobus_register(bus, priv->dev->of_node); + /* Backwards compatibility for EMAC nodes without MDIO subnode. */ + mdio_node = of_get_child_by_name(np, "mdio"); + if (!mdio_node) + mdio_node = of_node_get(np); + + error = of_mdiobus_register(bus, mdio_node); + of_node_put(mdio_node); if (error) { mdiobus_free(bus); return dev_err_probe(priv->dev, error,