bnx2x_schedule_sp_rtnl(bp, BNX2X_SP_RTNL_TX_TIMEOUT, 0);
 }
 
-int bnx2x_suspend(struct pci_dev *pdev, pm_message_t state)
+static int __maybe_unused bnx2x_suspend(struct device *dev_d)
 {
+       struct pci_dev *pdev = to_pci_dev(dev_d);
        struct net_device *dev = pci_get_drvdata(pdev);
        struct bnx2x *bp;
 
 
        rtnl_lock();
 
-       pci_save_state(pdev);
-
        if (!netif_running(dev)) {
                rtnl_unlock();
                return 0;
 
        bnx2x_nic_unload(bp, UNLOAD_CLOSE, false);
 
-       bnx2x_set_power_state(bp, pci_choose_state(pdev, state));
-
        rtnl_unlock();
 
        return 0;
 }
 
-int bnx2x_resume(struct pci_dev *pdev)
+static int __maybe_unused bnx2x_resume(struct device *dev_d)
 {
+       struct pci_dev *pdev = to_pci_dev(dev_d);
        struct net_device *dev = pci_get_drvdata(pdev);
        struct bnx2x *bp;
        int rc;
 
        rtnl_lock();
 
-       pci_restore_state(pdev);
-
        if (!netif_running(dev)) {
                rtnl_unlock();
                return 0;
        }
 
-       bnx2x_set_power_state(bp, PCI_D0);
        netif_device_attach(dev);
 
        rc = bnx2x_nic_load(bp, LOAD_OPEN);
        return rc;
 }
 
+SIMPLE_DEV_PM_OPS(bnx2x_pm_ops, bnx2x_suspend, bnx2x_resume);
+
 void bnx2x_set_ctx_validation(struct bnx2x *bp, struct eth_context *cxt,
                              u32 cid)
 {
 
 /* NAPI poll Tx part */
 int bnx2x_tx_int(struct bnx2x *bp, struct bnx2x_fp_txdata *txdata);
 
-/* suspend/resume callbacks */
-int bnx2x_suspend(struct pci_dev *pdev, pm_message_t state);
-int bnx2x_resume(struct pci_dev *pdev);
+extern const struct dev_pm_ops bnx2x_pm_ops;
 
 /* Release IRQ vectors */
 void bnx2x_free_irq(struct bnx2x *bp);
 
        .id_table    = bnx2x_pci_tbl,
        .probe       = bnx2x_init_one,
        .remove      = bnx2x_remove_one,
-       .suspend     = bnx2x_suspend,
-       .resume      = bnx2x_resume,
+       .driver.pm   = &bnx2x_pm_ops,
        .err_handler = &bnx2x_err_handler,
 #ifdef CONFIG_BNX2X_SRIOV
        .sriov_configure = bnx2x_sriov_configure,