net: bcmgenet: power down and up GPHY during suspend/resume
authorFlorian Fainelli <f.fainelli@gmail.com>
Mon, 23 Mar 2015 22:09:57 +0000 (15:09 -0700)
committerDavid S. Miller <davem@davemloft.net>
Tue, 24 Mar 2015 02:10:43 +0000 (22:10 -0400)
In case the interface is not used, power down the integrated GPHY during
suspend. Similarly to bcmgenet_open(), bcmgenet_resume() powers on the GPHY
prior to any UniMAC activity.

Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/broadcom/genet/bcmgenet.c

index c6b15c3cf023dad63d51e0e66a0fc515035c16eb..c38d5429e27a7c17ae62c80d4d977ac5a4e7b6d7 100644 (file)
@@ -3107,6 +3107,8 @@ static int bcmgenet_suspend(struct device *d)
        if (device_may_wakeup(d) && priv->wolopts) {
                ret = bcmgenet_power_down(priv, GENET_POWER_WOL_MAGIC);
                clk_prepare_enable(priv->clk_wol);
+       } else if (phy_is_internal(priv->phydev)) {
+               ret = bcmgenet_power_down(priv, GENET_POWER_PASSIVE);
        }
 
        /* Turn off the clocks */
@@ -3131,6 +3133,12 @@ static int bcmgenet_resume(struct device *d)
        if (ret)
                return ret;
 
+       /* If this is an internal GPHY, power it back on now, before UniMAC is
+        * brought out of reset as absolutely no UniMAC activity is allowed
+        */
+       if (phy_is_internal(priv->phydev))
+               bcmgenet_power_up(priv, GENET_POWER_PASSIVE);
+
        bcmgenet_umac_reset(priv);
 
        ret = init_umac(priv);