Skip to content

Commit eb6779d

Browse files
VARoDeKJeff Kirsher
authored andcommitted
e1000: use generic power management
With legacy PM hooks, it was the responsibility of a driver to manage PCI states and also the device's power state. The generic approach is to let PCI core handle the work. e1000_suspend() calls __e1000_shutdown() to perform intermediate tasks. __e1000_shutdown() modifies the value of "wake" (device should be wakeup enabled or not), responsible for controlling the flow of legacy PM. Since, PCI core has no idea about the value of "wake", new code for generic PM may produce unexpected results. Thus, use "device_set_wakeup_enable()" to wakeup-enable the device accordingly. Signed-off-by: Vaibhav Gupta <vaibhavgupta40@gmail.com> Tested-by: Aaron Brown <aaron.f.brown@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
1 parent 6bf6be1 commit eb6779d

File tree

1 file changed

+13
-36
lines changed

1 file changed

+13
-36
lines changed

drivers/net/ethernet/intel/e1000/e1000_main.c

Lines changed: 13 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -151,10 +151,8 @@ static int e1000_vlan_rx_kill_vid(struct net_device *netdev,
151151
__be16 proto, u16 vid);
152152
static void e1000_restore_vlan(struct e1000_adapter *adapter);
153153

154-
#ifdef CONFIG_PM
155-
static int e1000_suspend(struct pci_dev *pdev, pm_message_t state);
156-
static int e1000_resume(struct pci_dev *pdev);
157-
#endif
154+
static int __maybe_unused e1000_suspend(struct device *dev);
155+
static int __maybe_unused e1000_resume(struct device *dev);
158156
static void e1000_shutdown(struct pci_dev *pdev);
159157

160158
#ifdef CONFIG_NET_POLL_CONTROLLER
@@ -179,16 +177,16 @@ static const struct pci_error_handlers e1000_err_handler = {
179177
.resume = e1000_io_resume,
180178
};
181179

180+
static SIMPLE_DEV_PM_OPS(e1000_pm_ops, e1000_suspend, e1000_resume);
181+
182182
static struct pci_driver e1000_driver = {
183183
.name = e1000_driver_name,
184184
.id_table = e1000_pci_tbl,
185185
.probe = e1000_probe,
186186
.remove = e1000_remove,
187-
#ifdef CONFIG_PM
188-
/* Power Management Hooks */
189-
.suspend = e1000_suspend,
190-
.resume = e1000_resume,
191-
#endif
187+
.driver = {
188+
.pm = &e1000_pm_ops,
189+
},
192190
.shutdown = e1000_shutdown,
193191
.err_handler = &e1000_err_handler
194192
};
@@ -5060,9 +5058,6 @@ static int __e1000_shutdown(struct pci_dev *pdev, bool *enable_wake)
50605058
struct e1000_hw *hw = &adapter->hw;
50615059
u32 ctrl, ctrl_ext, rctl, status;
50625060
u32 wufc = adapter->wol;
5063-
#ifdef CONFIG_PM
5064-
int retval = 0;
5065-
#endif
50665061

50675062
netif_device_detach(netdev);
50685063

@@ -5076,12 +5071,6 @@ static int __e1000_shutdown(struct pci_dev *pdev, bool *enable_wake)
50765071
e1000_down(adapter);
50775072
}
50785073

5079-
#ifdef CONFIG_PM
5080-
retval = pci_save_state(pdev);
5081-
if (retval)
5082-
return retval;
5083-
#endif
5084-
50855074
status = er32(STATUS);
50865075
if (status & E1000_STATUS_LU)
50875076
wufc &= ~E1000_WUFC_LNKC;
@@ -5142,37 +5131,26 @@ static int __e1000_shutdown(struct pci_dev *pdev, bool *enable_wake)
51425131
return 0;
51435132
}
51445133

5145-
#ifdef CONFIG_PM
5146-
static int e1000_suspend(struct pci_dev *pdev, pm_message_t state)
5134+
static int __maybe_unused e1000_suspend(struct device *dev)
51475135
{
51485136
int retval;
5137+
struct pci_dev *pdev = to_pci_dev(dev);
51495138
bool wake;
51505139

51515140
retval = __e1000_shutdown(pdev, &wake);
5152-
if (retval)
5153-
return retval;
5154-
5155-
if (wake) {
5156-
pci_prepare_to_sleep(pdev);
5157-
} else {
5158-
pci_wake_from_d3(pdev, false);
5159-
pci_set_power_state(pdev, PCI_D3hot);
5160-
}
5141+
device_set_wakeup_enable(dev, wake);
51615142

5162-
return 0;
5143+
return retval;
51635144
}
51645145

5165-
static int e1000_resume(struct pci_dev *pdev)
5146+
static int __maybe_unused e1000_resume(struct device *dev)
51665147
{
5148+
struct pci_dev *pdev = to_pci_dev(dev);
51675149
struct net_device *netdev = pci_get_drvdata(pdev);
51685150
struct e1000_adapter *adapter = netdev_priv(netdev);
51695151
struct e1000_hw *hw = &adapter->hw;
51705152
u32 err;
51715153

5172-
pci_set_power_state(pdev, PCI_D0);
5173-
pci_restore_state(pdev);
5174-
pci_save_state(pdev);
5175-
51765154
if (adapter->need_ioport)
51775155
err = pci_enable_device(pdev);
51785156
else
@@ -5209,7 +5187,6 @@ static int e1000_resume(struct pci_dev *pdev)
52095187

52105188
return 0;
52115189
}
5212-
#endif
52135190

52145191
static void e1000_shutdown(struct pci_dev *pdev)
52155192
{

0 commit comments

Comments
 (0)