Hi Niklas, On Sat, Mar 9, 2024 at 4:55 PM Niklas Söderlund <niklas.soderlund+renesas@xxxxxxxxxxxx> wrote: > The driver used the OF node of the device itself when registering the > MDIO bus. While this works it creates a problem, it forces any MDIO bus > properties to also be set on the devices OF node. This mixes the > properties of two distinctly different things and is confusing. > > This change adds support for an optional mdio node to be defined as a > child to the device OF node. The child node can then be used to describe > MDIO bus properties that the MDIO core can act on when registering the > bus. > > If no mdio child node is found the driver fallback to the old behavior > and register the MDIO bus using the device OF node. This change is > backward compatible with old bindings in use. > > Signed-off-by: Niklas Söderlund <niklas.soderlund+renesas@xxxxxxxxxxxx> Thanks for your patch! > --- a/drivers/net/ethernet/renesas/ravb_main.c > +++ b/drivers/net/ethernet/renesas/ravb_main.c > @@ -2582,8 +2583,20 @@ static int ravb_mdio_init(struct ravb_private *priv) > snprintf(priv->mii_bus->id, MII_BUS_ID_SIZE, "%s-%x", > pdev->name, pdev->id); > > - /* Register MDIO bus */ > - error = of_mdiobus_register(priv->mii_bus, dev->of_node); > + /* Register MDIO bus > + * > + * Look for a mdio child node, if it exist use it when registering the > + * MDIO bus. If no node is found fallback to old behavior and use the > + * device OF node. This is used to be able to describe MDIO bus > + * properties that are consumed when registering the MDIO bus. > + */ > + mdio_node = of_get_child_by_name(dev->of_node, "mdio"); > + if (mdio_node) { > + error = of_mdiobus_register(priv->mii_bus, mdio_node); > + of_node_put(mdio_node); > + } else { > + error = of_mdiobus_register(priv->mii_bus, dev->of_node); > + } > if (error) > goto out_free_bus; > Perhaps the code should be streamlined for the modern case? mdio_node = of_get_child_by_name(dev->of_node, "mdio"); if (!mdio_node) { /* backwards compatibility for DT lacking mdio subnode */ mdio_node = of_node_get(dev->of_node); } error = of_mdiobus_register(priv->mii_bus, mdio_node); of_node_put(mdio_node); When deemed necessary, you can easily replace the backwards compatibility handling by error handling later. Gr{oetje,eeting}s, Geert -- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@xxxxxxxxxxxxxx In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds