@@ -2264,36 +2264,19 @@ static int fm10k_handle_resume(struct fm10k_intfc *interface)
2264
2264
2265
2265
#ifdef CONFIG_PM
2266
2266
/**
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
2269
2269
*
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 .
2273
2273
**/
2274
- static int fm10k_resume (struct pci_dev * pdev )
2274
+ static int fm10k_resume (struct device * dev )
2275
2275
{
2276
- struct fm10k_intfc * interface = pci_get_drvdata (pdev );
2276
+ struct fm10k_intfc * interface = pci_get_drvdata (to_pci_dev ( dev ) );
2277
2277
struct net_device * netdev = interface -> netdev ;
2278
2278
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 ;
2297
2280
2298
2281
/* refresh hw_addr in case it was dropped */
2299
2282
hw -> hw_addr = interface -> uc_addr ;
@@ -2308,36 +2291,27 @@ static int fm10k_resume(struct pci_dev *pdev)
2308
2291
}
2309
2292
2310
2293
/**
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
2313
2296
*
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 .
2317
2300
**/
2318
- static int fm10k_suspend (struct pci_dev * pdev ,
2319
- pm_message_t __always_unused state )
2301
+ static int fm10k_suspend (struct device * dev )
2320
2302
{
2321
- struct fm10k_intfc * interface = pci_get_drvdata (pdev );
2303
+ struct fm10k_intfc * interface = pci_get_drvdata (to_pci_dev ( dev ) );
2322
2304
struct net_device * netdev = interface -> netdev ;
2323
- int err = 0 ;
2324
2305
2325
2306
netif_device_detach (netdev );
2326
2307
2327
2308
fm10k_prepare_suspend (interface );
2328
2309
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
-
2337
2310
return 0 ;
2338
2311
}
2339
2312
2340
2313
#endif /* CONFIG_PM */
2314
+
2341
2315
/**
2342
2316
* fm10k_io_error_detected - called when PCI error is detected
2343
2317
* @pdev: Pointer to PCI device
@@ -2447,15 +2421,18 @@ static const struct pci_error_handlers fm10k_err_handler = {
2447
2421
.reset_done = fm10k_io_reset_done ,
2448
2422
};
2449
2423
2424
+ static SIMPLE_DEV_PM_OPS (fm10k_pm_ops , fm10k_suspend , fm10k_resume ) ;
2425
+
2450
2426
static struct pci_driver fm10k_driver = {
2451
2427
.name = fm10k_driver_name ,
2452
2428
.id_table = fm10k_pci_tbl ,
2453
2429
.probe = fm10k_probe ,
2454
2430
.remove = fm10k_remove ,
2455
2431
#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 */
2459
2436
.sriov_configure = fm10k_iov_configure ,
2460
2437
.err_handler = & fm10k_err_handler
2461
2438
};
0 commit comments