net: stmmac: Do not stop PHY if WoL is enabled

If WoL is enabled we can't really stop the PHY, otherwise we will not
receive the WoL packet. Fix this by telling phylink that only the MAC is
down and only stop the PHY if WoL is not enabled.

Fixes: 74371272f9 ("net: stmmac: Convert to phylink and remove phylib logic")
Signed-off-by: Jose Abreu <Jose.Abreu@synopsys.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Jose Abreu 2019-09-30 10:19:10 +02:00 committed by David S. Miller
parent 14f347334b
commit 3e2bf04fb0
1 changed files with 12 additions and 6 deletions

View File

@ -4718,9 +4718,7 @@ int stmmac_suspend(struct device *dev)
mutex_lock(&priv->lock);
rtnl_lock();
phylink_stop(priv->phylink);
rtnl_unlock();
phylink_mac_change(priv->phylink, false);
netif_device_detach(ndev);
stmmac_stop_all_queues(priv);
@ -4735,6 +4733,10 @@ int stmmac_suspend(struct device *dev)
stmmac_pmt(priv, priv->hw, priv->wolopts);
priv->irq_wake = 1;
} else {
rtnl_lock();
phylink_stop(priv->phylink);
rtnl_unlock();
stmmac_mac_set(priv, priv->ioaddr, false);
pinctrl_pm_select_sleep_state(priv->device);
/* Disable clock in case of PWM is off */
@ -4825,9 +4827,13 @@ int stmmac_resume(struct device *dev)
stmmac_start_all_queues(priv);
rtnl_lock();
phylink_start(priv->phylink);
rtnl_unlock();
if (!device_may_wakeup(priv->device)) {
rtnl_lock();
phylink_start(priv->phylink);
rtnl_unlock();
}
phylink_mac_change(priv->phylink, true);
mutex_unlock(&priv->lock);