Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 618073e3 authored by Mugunthan V N's avatar Mugunthan V N Committed by David S. Miller
Browse files

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: default avatarMugunthan V N <mugunthanvnm@ti.com>
Tested-by: default avatarNishanth Menon <nm@ti.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 0bc9b73b
Loading
Loading
Loading
Loading
+24 −5
Original line number Diff line number Diff line
@@ -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;
}