When a PSE controller driver is built as a module, it may not be probed yet when PHYs are registered on the MDIO bus. This causes fwnode_find_pse_control() -> of_pse_control_get() to return -EPROBE_DEFER, which currently propagates up and destroys the PHY device. Treat -EPROBE_DEFER as non-fatal, allowing the PHY to register successfully with psec=NULL. The PSE control can be resolved lazily when first needed. Signed-off-by: Carlo Szelinsky --- drivers/net/mdio/fwnode_mdio.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/drivers/net/mdio/fwnode_mdio.c b/drivers/net/mdio/fwnode_mdio.c index ba7091518265..2a03b3fc41e6 100644 --- a/drivers/net/mdio/fwnode_mdio.c +++ b/drivers/net/mdio/fwnode_mdio.c @@ -161,8 +161,12 @@ int fwnode_mdiobus_register_phy(struct mii_bus *bus, psec = fwnode_find_pse_control(child, phy); if (IS_ERR(psec)) { - rc = PTR_ERR(psec); - goto unregister_phy; + if (PTR_ERR(psec) == -EPROBE_DEFER) { + psec = NULL; + } else { + rc = PTR_ERR(psec); + goto unregister_phy; + } } phy->psec = psec; -- 2.43.0