]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
bnxt_en: Add suspend/resume callbacks.
authorMichael Chan <michael.chan@broadcom.com>
Tue, 4 Apr 2017 22:14:11 +0000 (18:14 -0400)
committerSomasundaram Krishnasamy <somasundaram.krishnasamy@oracle.com>
Tue, 11 Jul 2017 00:04:09 +0000 (17:04 -0700)
Orabug: 264025332632559926366387

Add suspend/resume callbacks using the newer dev_pm_ops method.

Signed-off-by: Michael Chan <michael.chan@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
(cherry picked from commit f65a2044a8c988adf16788c51c04ac10dbbdb494)
Signed-off-by: Brian Maly <brian.maly@oracle.com>
Signed-off-by: Somasundaram Krishnasamy <somasundaram.krishnasamy@oracle.com>
drivers/net/ethernet/broadcom/bnxt/bnxt.c

index bbe063b36893884d34018dfe4caa9e49ed2dfe2b..508ac00e5b2afe9f18fe8e532964093885adc778 100644 (file)
@@ -7789,6 +7789,62 @@ shutdown_exit:
        rtnl_unlock();
 }
 
+#ifdef CONFIG_PM_SLEEP
+static int bnxt_suspend(struct device *device)
+{
+       struct pci_dev *pdev = to_pci_dev(device);
+       struct net_device *dev = pci_get_drvdata(pdev);
+       struct bnxt *bp = netdev_priv(dev);
+       int rc = 0;
+
+       rtnl_lock();
+       if (netif_running(dev)) {
+               netif_device_detach(dev);
+               rc = bnxt_close(dev);
+       }
+       bnxt_hwrm_func_drv_unrgtr(bp);
+       rtnl_unlock();
+       return rc;
+}
+
+static int bnxt_resume(struct device *device)
+{
+       struct pci_dev *pdev = to_pci_dev(device);
+       struct net_device *dev = pci_get_drvdata(pdev);
+       struct bnxt *bp = netdev_priv(dev);
+       int rc = 0;
+
+       rtnl_lock();
+       if (bnxt_hwrm_ver_get(bp) || bnxt_hwrm_func_drv_rgtr(bp)) {
+               rc = -ENODEV;
+               goto resume_exit;
+       }
+       rc = bnxt_hwrm_func_reset(bp);
+       if (rc) {
+               rc = -EBUSY;
+               goto resume_exit;
+       }
+       bnxt_get_wol_settings(bp);
+       if (netif_running(dev)) {
+               rc = bnxt_open(dev);
+               if (!rc)
+                       netif_device_attach(dev);
+       }
+
+resume_exit:
+       rtnl_unlock();
+       return rc;
+}
+
+static SIMPLE_DEV_PM_OPS(bnxt_pm_ops, bnxt_suspend, bnxt_resume);
+#define BNXT_PM_OPS (&bnxt_pm_ops)
+
+#else
+
+#define BNXT_PM_OPS NULL
+
+#endif /* CONFIG_PM_SLEEP */
+
 /**
  * bnxt_io_error_detected - called when PCI error is detected
  * @pdev: Pointer to PCI device
@@ -7906,6 +7962,7 @@ static struct pci_driver bnxt_pci_driver = {
        .probe          = bnxt_init_one,
        .remove         = bnxt_remove_one,
        .shutdown       = bnxt_shutdown,
+       .driver.pm      = BNXT_PM_OPS,
        .err_handler    = &bnxt_err_handler,
 #if defined(CONFIG_BNXT_SRIOV)
        .sriov_configure = bnxt_sriov_configure,