|
|
@@ -8754,9 +8754,7 @@ static int __igb_shutdown(struct pci_dev *pdev, bool *enable_wake,
|
|
|
struct e1000_hw *hw = &adapter->hw;
|
|
|
u32 ctrl, rctl, status;
|
|
|
u32 wufc = runtime ? E1000_WUFC_LNKC : adapter->wol;
|
|
|
-#ifdef CONFIG_PM
|
|
|
- int retval = 0;
|
|
|
-#endif
|
|
|
+ bool wake;
|
|
|
|
|
|
rtnl_lock();
|
|
|
netif_device_detach(netdev);
|
|
|
@@ -8769,14 +8767,6 @@ static int __igb_shutdown(struct pci_dev *pdev, bool *enable_wake,
|
|
|
igb_clear_interrupt_scheme(adapter);
|
|
|
rtnl_unlock();
|
|
|
|
|
|
-#ifdef CONFIG_PM
|
|
|
- if (!runtime) {
|
|
|
- retval = pci_save_state(pdev);
|
|
|
- if (retval)
|
|
|
- return retval;
|
|
|
- }
|
|
|
-#endif
|
|
|
-
|
|
|
status = rd32(E1000_STATUS);
|
|
|
if (status & E1000_STATUS_LU)
|
|
|
wufc &= ~E1000_WUFC_LNKC;
|
|
|
@@ -8793,10 +8783,6 @@ static int __igb_shutdown(struct pci_dev *pdev, bool *enable_wake,
|
|
|
}
|
|
|
|
|
|
ctrl = rd32(E1000_CTRL);
|
|
|
- /* advertise wake from D3Cold */
|
|
|
- #define E1000_CTRL_ADVD3WUC 0x00100000
|
|
|
- /* phy power management enable */
|
|
|
- #define E1000_CTRL_EN_PHY_PWR_MGMT 0x00200000
|
|
|
ctrl |= E1000_CTRL_ADVD3WUC;
|
|
|
wr32(E1000_CTRL, ctrl);
|
|
|
|
|
|
@@ -8810,12 +8796,15 @@ static int __igb_shutdown(struct pci_dev *pdev, bool *enable_wake,
|
|
|
wr32(E1000_WUFC, 0);
|
|
|
}
|
|
|
|
|
|
- *enable_wake = wufc || adapter->en_mng_pt;
|
|
|
- if (!*enable_wake)
|
|
|
+ wake = wufc || adapter->en_mng_pt;
|
|
|
+ if (!wake)
|
|
|
igb_power_down_link(adapter);
|
|
|
else
|
|
|
igb_power_up_link(adapter);
|
|
|
|
|
|
+ if (enable_wake)
|
|
|
+ *enable_wake = wake;
|
|
|
+
|
|
|
/* Release control of h/w to f/w. If f/w is AMT enabled, this
|
|
|
* would have already happened in close and is redundant.
|
|
|
*/
|
|
|
@@ -8858,22 +8847,7 @@ static void igb_deliver_wake_packet(struct net_device *netdev)
|
|
|
|
|
|
static int __maybe_unused igb_suspend(struct device *dev)
|
|
|
{
|
|
|
- int retval;
|
|
|
- bool wake;
|
|
|
- struct pci_dev *pdev = to_pci_dev(dev);
|
|
|
-
|
|
|
- retval = __igb_shutdown(pdev, &wake, 0);
|
|
|
- if (retval)
|
|
|
- return retval;
|
|
|
-
|
|
|
- if (wake) {
|
|
|
- pci_prepare_to_sleep(pdev);
|
|
|
- } else {
|
|
|
- pci_wake_from_d3(pdev, false);
|
|
|
- pci_set_power_state(pdev, PCI_D3hot);
|
|
|
- }
|
|
|
-
|
|
|
- return 0;
|
|
|
+ return __igb_shutdown(to_pci_dev(dev), NULL, 0);
|
|
|
}
|
|
|
|
|
|
static int __maybe_unused igb_resume(struct device *dev)
|
|
|
@@ -8944,22 +8918,7 @@ static int __maybe_unused igb_runtime_idle(struct device *dev)
|
|
|
|
|
|
static int __maybe_unused igb_runtime_suspend(struct device *dev)
|
|
|
{
|
|
|
- struct pci_dev *pdev = to_pci_dev(dev);
|
|
|
- int retval;
|
|
|
- bool wake;
|
|
|
-
|
|
|
- retval = __igb_shutdown(pdev, &wake, 1);
|
|
|
- if (retval)
|
|
|
- return retval;
|
|
|
-
|
|
|
- if (wake) {
|
|
|
- pci_prepare_to_sleep(pdev);
|
|
|
- } else {
|
|
|
- pci_wake_from_d3(pdev, false);
|
|
|
- pci_set_power_state(pdev, PCI_D3hot);
|
|
|
- }
|
|
|
-
|
|
|
- return 0;
|
|
|
+ return __igb_shutdown(to_pci_dev(dev), NULL, 1);
|
|
|
}
|
|
|
|
|
|
static int __maybe_unused igb_runtime_resume(struct device *dev)
|