Skip to content

Commit

Permalink
net: bcmgenet: correctly suspend and resume PHY device
Browse files Browse the repository at this point in the history
Make sure that we properly suspend and resume the PHY device when we
enter low power modes. We had two calls to bcmgenet_mii_reset() which
will issue a software-reset to the PHY without using the PHY library,
get rid of them since they are completely bogus and mess up with the PHY
library state. Make sure that we reset the PHY library cached values
(link, pause and duplex) to allow the link adjustment callback to be
invoked when needed.

Fixes: b6e978e ("net: bcmgenet: add suspend/resume callbacks")
Fixes: 1c1008c ("net: bcmgenet: add main driver file")
Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Florian Fainelli authored and David S. Miller committed Aug 11, 2014
1 parent e4a60a9 commit cc013fb
Showing 1 changed file with 11 additions and 2 deletions.
13 changes: 11 additions & 2 deletions drivers/net/ethernet/broadcom/genet/bcmgenet.c
Original file line number Diff line number Diff line change
Expand Up @@ -739,7 +739,6 @@ static void bcmgenet_power_down(struct bcmgenet_priv *priv,

case GENET_POWER_PASSIVE:
/* Power down LED */
bcmgenet_mii_reset(priv->dev);
if (priv->hw_params->flags & GENET_HAS_EXT) {
reg = bcmgenet_ext_readl(priv, EXT_EXT_PWR_MGMT);
reg |= (EXT_PWR_DOWN_PHY |
Expand Down Expand Up @@ -779,7 +778,9 @@ static void bcmgenet_power_up(struct bcmgenet_priv *priv,
}

bcmgenet_ext_writel(priv, reg, EXT_EXT_PWR_MGMT);
bcmgenet_mii_reset(priv->dev);

if (mode == GENET_POWER_PASSIVE)
bcmgenet_mii_reset(priv->dev);
}

/* ioctl handle special commands that are not present in ethtool. */
Expand Down Expand Up @@ -2164,6 +2165,10 @@ static void bcmgenet_netif_stop(struct net_device *dev)
* disabled no new work will be scheduled.
*/
cancel_work_sync(&priv->bcmgenet_irq_work);

priv->old_pause = -1;
priv->old_link = -1;
priv->old_duplex = -1;
}

static int bcmgenet_close(struct net_device *dev)
Expand Down Expand Up @@ -2611,6 +2616,8 @@ static int bcmgenet_suspend(struct device *d)

bcmgenet_netif_stop(dev);

phy_suspend(priv->phydev);

netif_device_detach(dev);

/* Disable MAC receive */
Expand Down Expand Up @@ -2693,6 +2700,8 @@ static int bcmgenet_resume(struct device *d)

netif_device_attach(dev);

phy_resume(priv->phydev);

bcmgenet_netif_start(dev);

return 0;
Expand Down

0 comments on commit cc013fb

Please sign in to comment.