|
@@ -1068,8 +1068,10 @@ static void fec_enet_work(struct work_struct *work)
|
|
|
|
|
|
if (fep->delay_work.timeout) {
|
|
|
fep->delay_work.timeout = false;
|
|
|
+ rtnl_lock();
|
|
|
fec_restart(fep->netdev, fep->full_duplex);
|
|
|
netif_wake_queue(fep->netdev);
|
|
|
+ rtnl_unlock();
|
|
|
}
|
|
|
|
|
|
if (fep->delay_work.trig_tx) {
|
|
@@ -2680,11 +2682,14 @@ fec_suspend(struct device *dev)
|
|
|
struct net_device *ndev = dev_get_drvdata(dev);
|
|
|
struct fec_enet_private *fep = netdev_priv(ndev);
|
|
|
|
|
|
+ rtnl_lock();
|
|
|
if (netif_running(ndev)) {
|
|
|
phy_stop(fep->phy_dev);
|
|
|
fec_stop(ndev);
|
|
|
netif_device_detach(ndev);
|
|
|
}
|
|
|
+ rtnl_unlock();
|
|
|
+
|
|
|
fec_enet_clk_enable(ndev, false);
|
|
|
pinctrl_pm_select_sleep_state(&fep->pdev->dev);
|
|
|
|
|
@@ -2712,11 +2717,13 @@ fec_resume(struct device *dev)
|
|
|
if (ret)
|
|
|
goto failed_clk;
|
|
|
|
|
|
+ rtnl_lock();
|
|
|
if (netif_running(ndev)) {
|
|
|
fec_restart(ndev, fep->full_duplex);
|
|
|
netif_device_attach(ndev);
|
|
|
phy_start(fep->phy_dev);
|
|
|
}
|
|
|
+ rtnl_unlock();
|
|
|
|
|
|
return 0;
|
|
|
|