提交 8a0b6dc9 编写于 作者: G Grygorii Strashko 提交者: David S. Miller

drivers: net: cpsw: fix wrong regs access in cpsw_remove

The L3 error will be generated and system will crash during unloading
of CPSW driver if CPSW is used as module and ethX devices are down.
This happens because CPSW can be power off by PM runtime now when ethX
devices are down.

Hence, ensure that CPSW powered up by PM runtime before performing any
deinitialization actions which require CPSW registers access. In case
of PM runtime error just leave cpsw_remove() as we can't do anything
anymore.
Signed-off-by: NGrygorii Strashko <grygorii.strashko@ti.com>
Reviewed-by: NMugunthan V N <mugunthanvnm@ti.com>
Signed-off-by: NDavid S. Miller <davem@davemloft.net>
上级 fccd5bad
...@@ -2577,6 +2577,13 @@ static int cpsw_remove(struct platform_device *pdev) ...@@ -2577,6 +2577,13 @@ static int cpsw_remove(struct platform_device *pdev)
{ {
struct net_device *ndev = platform_get_drvdata(pdev); struct net_device *ndev = platform_get_drvdata(pdev);
struct cpsw_priv *priv = netdev_priv(ndev); struct cpsw_priv *priv = netdev_priv(ndev);
int ret;
ret = pm_runtime_get_sync(&pdev->dev);
if (ret < 0) {
pm_runtime_put_noidle(&pdev->dev);
return ret;
}
if (priv->data.dual_emac) if (priv->data.dual_emac)
unregister_netdev(cpsw_get_slave_ndev(priv, 1)); unregister_netdev(cpsw_get_slave_ndev(priv, 1));
...@@ -2584,8 +2591,9 @@ static int cpsw_remove(struct platform_device *pdev) ...@@ -2584,8 +2591,9 @@ static int cpsw_remove(struct platform_device *pdev)
cpsw_ale_destroy(priv->ale); cpsw_ale_destroy(priv->ale);
cpdma_ctlr_destroy(priv->dma); cpdma_ctlr_destroy(priv->dma);
pm_runtime_disable(&pdev->dev);
device_for_each_child(&pdev->dev, NULL, cpsw_remove_child_device); device_for_each_child(&pdev->dev, NULL, cpsw_remove_child_device);
pm_runtime_put_sync(&pdev->dev);
pm_runtime_disable(&pdev->dev);
if (priv->data.dual_emac) if (priv->data.dual_emac)
free_netdev(cpsw_get_slave_ndev(priv, 1)); free_netdev(cpsw_get_slave_ndev(priv, 1));
free_netdev(ndev); free_netdev(ndev);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册