drivers: net: cpsw: dual_emac: in suspend/resume bring down/up all the netdev
During suspend and resume in Dual EMAC, second port is not working as in suspend/resume only the first slave netdev is closed and opened. So bring down and up all the interfaces that are up during suspend/resume. Signed-off-by: Mugunthan V N <mugunthanvnm@ti.com> Tested-by: Nishanth Menon <nm@ti.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Родитель
0bc9b73be4
Коммит
618073e30c
|
@ -2334,10 +2334,19 @@ static int cpsw_suspend(struct device *dev)
|
|||
struct net_device *ndev = platform_get_drvdata(pdev);
|
||||
struct cpsw_priv *priv = netdev_priv(ndev);
|
||||
|
||||
if (priv->data.dual_emac) {
|
||||
int i;
|
||||
|
||||
for (i = 0; i < priv->data.slaves; i++) {
|
||||
if (netif_running(priv->slaves[i].ndev))
|
||||
cpsw_ndo_stop(priv->slaves[i].ndev);
|
||||
soft_reset_slave(priv->slaves + i);
|
||||
}
|
||||
} else {
|
||||
if (netif_running(ndev))
|
||||
cpsw_ndo_stop(ndev);
|
||||
|
||||
for_each_slave(priv, soft_reset_slave);
|
||||
}
|
||||
|
||||
pm_runtime_put_sync(&pdev->dev);
|
||||
|
||||
|
@ -2351,14 +2360,24 @@ static int cpsw_resume(struct device *dev)
|
|||
{
|
||||
struct platform_device *pdev = to_platform_device(dev);
|
||||
struct net_device *ndev = platform_get_drvdata(pdev);
|
||||
struct cpsw_priv *priv = netdev_priv(ndev);
|
||||
|
||||
pm_runtime_get_sync(&pdev->dev);
|
||||
|
||||
/* Select default pin state */
|
||||
pinctrl_pm_select_default_state(&pdev->dev);
|
||||
|
||||
if (priv->data.dual_emac) {
|
||||
int i;
|
||||
|
||||
for (i = 0; i < priv->data.slaves; i++) {
|
||||
if (netif_running(priv->slaves[i].ndev))
|
||||
cpsw_ndo_open(priv->slaves[i].ndev);
|
||||
}
|
||||
} else {
|
||||
if (netif_running(ndev))
|
||||
cpsw_ndo_open(ndev);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче