of_mdio: avoid MDIO bus removal when a PHY is missing
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> Reviewed-by: Andrew Lunn <andrew@lunn.ch> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
b0d55b5bc7
commit
95f566de02
|
@ -231,7 +231,12 @@ int of_mdiobus_register(struct mii_bus *mdio, struct device_node *np)
|
||||||
rc = of_mdiobus_register_phy(mdio, child, addr);
|
rc = of_mdiobus_register_phy(mdio, child, addr);
|
||||||
else
|
else
|
||||||
rc = of_mdiobus_register_device(mdio, child, addr);
|
rc = of_mdiobus_register_device(mdio, child, addr);
|
||||||
if (rc)
|
|
||||||
|
if (rc == -ENODEV)
|
||||||
|
dev_err(&mdio->dev,
|
||||||
|
"MDIO device at address %d is missing.\n",
|
||||||
|
addr);
|
||||||
|
else if (rc)
|
||||||
goto unregister;
|
goto unregister;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -255,7 +260,7 @@ int of_mdiobus_register(struct mii_bus *mdio, struct device_node *np)
|
||||||
|
|
||||||
if (of_mdiobus_child_is_phy(child)) {
|
if (of_mdiobus_child_is_phy(child)) {
|
||||||
rc = of_mdiobus_register_phy(mdio, child, addr);
|
rc = of_mdiobus_register_phy(mdio, child, addr);
|
||||||
if (rc)
|
if (rc && rc != -ENODEV)
|
||||||
goto unregister;
|
goto unregister;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue