Message ID | 1515486819-8954-1-git-send-email-madalin.bucur@nxp.com |
---|---|
State | Superseded, archived |
Delegated to: | David Miller |
Headers | show |
Series | [net,v2] of_mdio: avoid MDIO bus removal when a PHY is missing | expand |
Hi Madalin, On Tue, Jan 9, 2018 at 9:33 AM, Madalin Bucur <madalin.bucur@nxp.com> wrote: > If one of the child devices is missing the of_mdiobus_register_phy() > call will return -ENODEV. When a missing device is encountered the > registration of the remaining PHYs is stopped and the MDIO bus will > fail to register. Propagate all errors except ENODEV to avoid it. > > Signed-off-by: Madalin Bucur <madalin.bucur@nxp.com> Thanks for your patch! > --- > v2: add an error print for the first change; the second place has > some noise aleady generated by the exing code > > drivers/of/of_mdio.c | 12 +++++++++--- > 1 file changed, 9 insertions(+), 3 deletions(-) > > diff --git a/drivers/of/of_mdio.c b/drivers/of/of_mdio.c > index 3481e69..a249370 100644 > --- a/drivers/of/of_mdio.c > +++ b/drivers/of/of_mdio.c > @@ -231,8 +231,14 @@ int of_mdiobus_register(struct mii_bus *mdio, struct device_node *np) > rc = of_mdiobus_register_phy(mdio, child, addr); > else > rc = of_mdiobus_register_device(mdio, child, addr); > - if (rc) > - goto unregister; > + > + if (rc == -ENODEV) > + dev_err(&mdio->dev, > + "MDIO device at address %d is missing.\n", > + addr); > + else > + if (rc) You can merge the two lines above into a single line. > + goto unregister; ... dropping the need to reindent the above line. > } Gr{oetje,eeting}s, Geert -- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org 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
diff --git a/drivers/of/of_mdio.c b/drivers/of/of_mdio.c index 3481e69..a249370 100644 --- a/drivers/of/of_mdio.c +++ b/drivers/of/of_mdio.c @@ -231,8 +231,14 @@ int of_mdiobus_register(struct mii_bus *mdio, struct device_node *np) rc = of_mdiobus_register_phy(mdio, child, addr); else rc = of_mdiobus_register_device(mdio, child, addr); - if (rc) - goto unregister; + + if (rc == -ENODEV) + dev_err(&mdio->dev, + "MDIO device at address %d is missing.\n", + addr); + else + if (rc) + goto unregister; } if (!scanphys) @@ -255,7 +261,7 @@ int of_mdiobus_register(struct mii_bus *mdio, struct device_node *np) if (of_mdiobus_child_is_phy(child)) { rc = of_mdiobus_register_phy(mdio, child, addr); - if (rc) + if (rc && rc != -ENODEV) goto unregister; } }
If one of the child devices is missing the of_mdiobus_register_phy() call will return -ENODEV. When a missing device is encountered the registration of the remaining PHYs is stopped and the MDIO bus will fail to register. Propagate all errors except ENODEV to avoid it. Signed-off-by: Madalin Bucur <madalin.bucur@nxp.com> --- v2: add an error print for the first change; the second place has some noise aleady generated by the exing code drivers/of/of_mdio.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-)