{
struct platform_device *pdev = to_platform_device(dev);
struct net_device *netdev = platform_get_drvdata(pdev);
+ struct macb *bp = netdev_priv(netdev);
+ unsigned long flags;
- if (netif_running(netdev))
- macb_close(netdev);
+ if (!netif_running(netdev))
+ return 0;
+
+ netif_device_detach(netdev);
+ napi_disable(&bp->napi);
+ phy_stop(bp->phy_dev);
+ spin_lock_irqsave(&bp->lock, flags);
+ macb_reset_hw(bp);
+ netif_carrier_off(netdev);
+ spin_unlock_irqrestore(&bp->lock, flags);
+ if ((gem_readl(bp, DCFG5) & GEM_BIT(TSU)) &&
+ (bp->caps & MACB_CAPS_TSU))
+ macb_ptp_close(bp);
+ pm_runtime_force_suspend(dev);
return 0;
}
{
struct platform_device *pdev = to_platform_device(dev);
struct net_device *netdev = platform_get_drvdata(pdev);
+ struct macb *bp = netdev_priv(netdev);
- if (netif_running(netdev))
- macb_open(netdev);
+ if (!netif_running(netdev))
+ return 0;
+
+ pm_runtime_force_resume(dev);
+ macb_writel(bp, NCR, MACB_BIT(MPE));
+ napi_enable(&bp->napi);
+ netif_carrier_on(netdev);
+ phy_start(bp->phy_dev);
+ bp->macbgem_ops.mog_init_rings(bp);
+ macb_init_hw(bp);
+ netif_device_attach(netdev);
return 0;
}