Skip to content

Commit 8249c47

Browse files
jacob-kellerJeff Kirsher
authored andcommitted
fm10k: use generic PM hooks instead of legacy PCIe power hooks
Replace the PCI specific legacy power management hooks with the new generic power management hooks which work properly for both suspend and hibernate. The new generic system is better and properly handles the lower level PCIe power management rather than forcing the driver to handle it. Signed-off-by: Jacob Keller <[email protected]> Tested-by: Krishneil Singh <[email protected]> Signed-off-by: Jeff Kirsher <[email protected]>
1 parent b4fcd43 commit 8249c47

File tree

1 file changed

+22
-45
lines changed

1 file changed

+22
-45
lines changed

drivers/net/ethernet/intel/fm10k/fm10k_pci.c

Lines changed: 22 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -2264,36 +2264,19 @@ static int fm10k_handle_resume(struct fm10k_intfc *interface)
22642264

22652265
#ifdef CONFIG_PM
22662266
/**
2267-
* fm10k_resume - Restore device to pre-sleep state
2268-
* @pdev: PCI device information struct
2267+
* fm10k_resume - Generic PM resume hook
2268+
* @dev: generic device structure
22692269
*
2270-
* fm10k_resume is called after the system has powered back up from a sleep
2271-
* state and is ready to resume operation. This function is meant to restore
2272-
* the device back to its pre-sleep state.
2270+
* Generic PM hook used when waking the device from a low power state after
2271+
* suspend or hibernation. This function does not need to handle lower PCIe
2272+
* device state as the stack takes care of that for us.
22732273
**/
2274-
static int fm10k_resume(struct pci_dev *pdev)
2274+
static int fm10k_resume(struct device *dev)
22752275
{
2276-
struct fm10k_intfc *interface = pci_get_drvdata(pdev);
2276+
struct fm10k_intfc *interface = pci_get_drvdata(to_pci_dev(dev));
22772277
struct net_device *netdev = interface->netdev;
22782278
struct fm10k_hw *hw = &interface->hw;
2279-
u32 err;
2280-
2281-
pci_set_power_state(pdev, PCI_D0);
2282-
pci_restore_state(pdev);
2283-
2284-
/* pci_restore_state clears dev->state_saved so call
2285-
* pci_save_state to restore it.
2286-
*/
2287-
pci_save_state(pdev);
2288-
2289-
err = pci_enable_device_mem(pdev);
2290-
if (err) {
2291-
dev_err(&pdev->dev, "Cannot enable PCI device from suspend\n");
2292-
return err;
2293-
}
2294-
pci_set_master(pdev);
2295-
2296-
pci_wake_from_d3(pdev, false);
2279+
int err;
22972280

22982281
/* refresh hw_addr in case it was dropped */
22992282
hw->hw_addr = interface->uc_addr;
@@ -2308,36 +2291,27 @@ static int fm10k_resume(struct pci_dev *pdev)
23082291
}
23092292

23102293
/**
2311-
* fm10k_suspend - Prepare the device for a system sleep state
2312-
* @pdev: PCI device information struct
2294+
* fm10k_suspend - Generic PM suspend hook
2295+
* @dev: generic device structure
23132296
*
2314-
* fm10k_suspend is meant to shutdown the device prior to the system entering
2315-
* a sleep state. The fm10k hardware does not support wake on lan so the
2316-
* driver simply needs to shut down the device so it is in a low power state.
2297+
* Generic PM hook used when setting the device into a low power state for
2298+
* system suspend or hibernation. This function does not need to handle lower
2299+
* PCIe device state as the stack takes care of that for us.
23172300
**/
2318-
static int fm10k_suspend(struct pci_dev *pdev,
2319-
pm_message_t __always_unused state)
2301+
static int fm10k_suspend(struct device *dev)
23202302
{
2321-
struct fm10k_intfc *interface = pci_get_drvdata(pdev);
2303+
struct fm10k_intfc *interface = pci_get_drvdata(to_pci_dev(dev));
23222304
struct net_device *netdev = interface->netdev;
2323-
int err = 0;
23242305

23252306
netif_device_detach(netdev);
23262307

23272308
fm10k_prepare_suspend(interface);
23282309

2329-
err = pci_save_state(pdev);
2330-
if (err)
2331-
return err;
2332-
2333-
pci_disable_device(pdev);
2334-
pci_wake_from_d3(pdev, false);
2335-
pci_set_power_state(pdev, PCI_D3hot);
2336-
23372310
return 0;
23382311
}
23392312

23402313
#endif /* CONFIG_PM */
2314+
23412315
/**
23422316
* fm10k_io_error_detected - called when PCI error is detected
23432317
* @pdev: Pointer to PCI device
@@ -2447,15 +2421,18 @@ static const struct pci_error_handlers fm10k_err_handler = {
24472421
.reset_done = fm10k_io_reset_done,
24482422
};
24492423

2424+
static SIMPLE_DEV_PM_OPS(fm10k_pm_ops, fm10k_suspend, fm10k_resume);
2425+
24502426
static struct pci_driver fm10k_driver = {
24512427
.name = fm10k_driver_name,
24522428
.id_table = fm10k_pci_tbl,
24532429
.probe = fm10k_probe,
24542430
.remove = fm10k_remove,
24552431
#ifdef CONFIG_PM
2456-
.suspend = fm10k_suspend,
2457-
.resume = fm10k_resume,
2458-
#endif
2432+
.driver = {
2433+
.pm = &fm10k_pm_ops,
2434+
},
2435+
#endif /* CONFIG_PM */
24592436
.sriov_configure = fm10k_iov_configure,
24602437
.err_handler = &fm10k_err_handler
24612438
};

0 commit comments

Comments
 (0)