net: phy: avoid suspending twice a PHY
[linux-drm-fsl-dcu.git] / drivers / net / phy / mdio_bus.c
index 20447741893ab49933bd79b83826d9e10cecb314..095ef3fe369af5ebe08254384abc38176df1aef1 100644 (file)
@@ -443,9 +443,13 @@ static bool mdio_bus_phy_may_suspend(struct phy_device *phydev)
        if (!drv || !phydrv->suspend)
                return false;
 
-       /* PHY not attached? May suspend. */
+       /* PHY not attached? May suspend if the PHY has not already been
+        * suspended as part of a prior call to phy_disconnect() ->
+        * phy_detach() -> phy_suspend() because the parent netdev might be the
+        * MDIO bus driver and clock gated at this point.
+        */
        if (!netdev)
-               return true;
+               return !phydev->suspended;
 
        /* Don't suspend PHY if the attched netdev parent may wakeup.
         * The parent may point to a PCI device, as in tg3 driver.