Add an info level message when resetting a PHY before registration. Signed-off-by: Buday Csaba --- V4 -> V5: moved the info message to a separate commit --- drivers/net/mdio/fwnode_mdio.c | 9 +++++++-- drivers/net/phy/mdio_device.c | 13 +++++++++++++ include/linux/mdio.h | 1 + 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/drivers/net/mdio/fwnode_mdio.c b/drivers/net/mdio/fwnode_mdio.c index 9669da2b7..d753ebd37 100644 --- a/drivers/net/mdio/fwnode_mdio.c +++ b/drivers/net/mdio/fwnode_mdio.c @@ -133,8 +133,13 @@ static int fwnode_reset_phy(struct mii_bus *bus, u32 addr, return rc; } - mdio_device_reset(tmpdev, 1); - mdio_device_reset(tmpdev, 0); + if (mdio_device_has_reset(tmpdev)) { + dev_info(&bus->dev, + "PHY device at address %d not detected, resetting PHY.\n", + addr); + mdio_device_reset(tmpdev, 1); + mdio_device_reset(tmpdev, 0); + } mdio_device_unregister_reset(tmpdev); mdio_device_free(tmpdev); diff --git a/drivers/net/phy/mdio_device.c b/drivers/net/phy/mdio_device.c index e24bce474..f2cbcb6bb 100644 --- a/drivers/net/phy/mdio_device.c +++ b/drivers/net/phy/mdio_device.c @@ -171,6 +171,19 @@ void mdio_device_remove(struct mdio_device *mdiodev) } EXPORT_SYMBOL(mdio_device_remove); +/** + * mdio_device_has_reset - Check if an MDIO device has reset properties defined + * @mdiodev: mdio_device structure + * + * Return: non-zero if the device has a reset GPIO or reset controller, + * zero otherwise. + */ +int mdio_device_has_reset(struct mdio_device *mdiodev) +{ + return (mdiodev->reset_gpio || mdiodev->reset_ctrl); +} +EXPORT_SYMBOL(mdio_device_has_reset); + void mdio_device_reset(struct mdio_device *mdiodev, int value) { unsigned int d; diff --git a/include/linux/mdio.h b/include/linux/mdio.h index d81b63fc7..83cfc051e 100644 --- a/include/linux/mdio.h +++ b/include/linux/mdio.h @@ -92,6 +92,7 @@ void mdio_device_free(struct mdio_device *mdiodev); struct mdio_device *mdio_device_create(struct mii_bus *bus, int addr); int mdio_device_register_reset(struct mdio_device *mdiodev); void mdio_device_unregister_reset(struct mdio_device *mdiodev); +int mdio_device_has_reset(struct mdio_device *mdiodev); int mdio_device_register(struct mdio_device *mdiodev); void mdio_device_remove(struct mdio_device *mdiodev); void mdio_device_reset(struct mdio_device *mdiodev, int value); -- 2.39.5