if (phydev->suspended)
                return 0;
 
-       /* If the device has WOL enabled, we cannot suspend the PHY */
        phy_ethtool_get_wol(phydev, &wol);
-       if (wol.wolopts || (netdev && netdev->wol_enabled))
+       phydev->wol_enabled = wol.wolopts || (netdev && netdev->wol_enabled);
+       /* If the device has WOL enabled, we cannot suspend the PHY */
+       if (phydev->wol_enabled && !(phydrv->flags & PHY_ALWAYS_CALL_SUSPEND))
                return -EBUSY;
 
        if (!phydrv || !phydrv->suspend)
 
 #define PHY_IS_INTERNAL                0x00000001
 #define PHY_RST_AFTER_CLK_EN   0x00000002
 #define PHY_POLL_CABLE_TEST    0x00000004
+#define PHY_ALWAYS_CALL_SUSPEND        0x00000008
 #define MDIO_DEVICE_IS_PHY     0x80000000
 
 /**
  * @downshifted_rate: Set true if link speed has been downshifted.
  * @is_on_sfp_module: Set true if PHY is located on an SFP module.
  * @mac_managed_pm: Set true if MAC driver takes of suspending/resuming PHY
+ * @wol_enabled: Set to true if the PHY or the attached MAC have Wake-on-LAN
+ *              enabled.
  * @state: State of the PHY for management purposes
  * @dev_flags: Device-specific flags used by the PHY driver.
  *
        unsigned downshifted_rate:1;
        unsigned is_on_sfp_module:1;
        unsigned mac_managed_pm:1;
+       unsigned wol_enabled:1;
 
        unsigned autoneg:1;
        /* The most recently read link state */