scsi: mpi3mr: Support new power management framework

Switch to the new generic PCI power management framework. Also, remove
unnecessary calls to the PCI helper functions (such as
pci_set_power_state(), pci_enable_wake(), pci_save_state(),
pci_restore_state() etc).

Link: https://lore.kernel.org/r/20220912135742.11764-3-sreekanth.reddy@broadcom.com
Signed-off-by: Sreekanth Reddy <sreekanth.reddy@broadcom.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
Sreekanth Reddy 2022-09-12 19:27:35 +05:30 committed by Martin K. Petersen
parent ee6f2d6bb2
commit 47cd930ee6

View file

@ -5094,22 +5094,21 @@ static void mpi3mr_shutdown(struct pci_dev *pdev)
mpi3mr_cleanup_resources(mrioc); mpi3mr_cleanup_resources(mrioc);
} }
#ifdef CONFIG_PM
/** /**
* mpi3mr_suspend - PCI power management suspend callback * mpi3mr_suspend - PCI power management suspend callback
* @pdev: PCI device instance * @dev: Device struct
* @state: New power state
* *
* Change the power state to the given value and cleanup the IOC * Change the power state to the given value and cleanup the IOC
* by issuing MUR and shutdown notification * by issuing MUR and shutdown notification
* *
* Return: 0 always. * Return: 0 always.
*/ */
static int mpi3mr_suspend(struct pci_dev *pdev, pm_message_t state) static int __maybe_unused
mpi3mr_suspend(struct device *dev)
{ {
struct pci_dev *pdev = to_pci_dev(dev);
struct Scsi_Host *shost = pci_get_drvdata(pdev); struct Scsi_Host *shost = pci_get_drvdata(pdev);
struct mpi3mr_ioc *mrioc; struct mpi3mr_ioc *mrioc;
pci_power_t device_state;
if (!shost) if (!shost)
return 0; return 0;
@ -5123,27 +5122,26 @@ static int mpi3mr_suspend(struct pci_dev *pdev, pm_message_t state)
mpi3mr_stop_watchdog(mrioc); mpi3mr_stop_watchdog(mrioc);
mpi3mr_cleanup_ioc(mrioc); mpi3mr_cleanup_ioc(mrioc);
device_state = pci_choose_state(pdev, state); ioc_info(mrioc, "pdev=0x%p, slot=%s, entering operating state\n",
ioc_info(mrioc, "pdev=0x%p, slot=%s, entering operating state [D%d]\n", pdev, pci_name(pdev));
pdev, pci_name(pdev), device_state);
pci_save_state(pdev);
mpi3mr_cleanup_resources(mrioc); mpi3mr_cleanup_resources(mrioc);
pci_set_power_state(pdev, device_state);
return 0; return 0;
} }
/** /**
* mpi3mr_resume - PCI power management resume callback * mpi3mr_resume - PCI power management resume callback
* @pdev: PCI device instance * @dev: Device struct
* *
* Restore the power state to D0 and reinitialize the controller * Restore the power state to D0 and reinitialize the controller
* and resume I/O operations to the target devices * and resume I/O operations to the target devices
* *
* Return: 0 on success, non-zero on failure * Return: 0 on success, non-zero on failure
*/ */
static int mpi3mr_resume(struct pci_dev *pdev) static int __maybe_unused
mpi3mr_resume(struct device *dev)
{ {
struct pci_dev *pdev = to_pci_dev(dev);
struct Scsi_Host *shost = pci_get_drvdata(pdev); struct Scsi_Host *shost = pci_get_drvdata(pdev);
struct mpi3mr_ioc *mrioc; struct mpi3mr_ioc *mrioc;
pci_power_t device_state = pdev->current_state; pci_power_t device_state = pdev->current_state;
@ -5156,9 +5154,6 @@ static int mpi3mr_resume(struct pci_dev *pdev)
ioc_info(mrioc, "pdev=0x%p, slot=%s, previous operating state [D%d]\n", ioc_info(mrioc, "pdev=0x%p, slot=%s, previous operating state [D%d]\n",
pdev, pci_name(pdev), device_state); pdev, pci_name(pdev), device_state);
pci_set_power_state(pdev, PCI_D0);
pci_enable_wake(pdev, PCI_D0, 0);
pci_restore_state(pdev);
mrioc->pdev = pdev; mrioc->pdev = pdev;
mrioc->cpu_count = num_online_cpus(); mrioc->cpu_count = num_online_cpus();
r = mpi3mr_setup_resources(mrioc); r = mpi3mr_setup_resources(mrioc);
@ -5180,7 +5175,6 @@ static int mpi3mr_resume(struct pci_dev *pdev)
return 0; return 0;
} }
#endif
static const struct pci_device_id mpi3mr_pci_id_table[] = { static const struct pci_device_id mpi3mr_pci_id_table[] = {
{ {
@ -5191,16 +5185,15 @@ static const struct pci_device_id mpi3mr_pci_id_table[] = {
}; };
MODULE_DEVICE_TABLE(pci, mpi3mr_pci_id_table); MODULE_DEVICE_TABLE(pci, mpi3mr_pci_id_table);
static SIMPLE_DEV_PM_OPS(mpi3mr_pm_ops, mpi3mr_suspend, mpi3mr_resume);
static struct pci_driver mpi3mr_pci_driver = { static struct pci_driver mpi3mr_pci_driver = {
.name = MPI3MR_DRIVER_NAME, .name = MPI3MR_DRIVER_NAME,
.id_table = mpi3mr_pci_id_table, .id_table = mpi3mr_pci_id_table,
.probe = mpi3mr_probe, .probe = mpi3mr_probe,
.remove = mpi3mr_remove, .remove = mpi3mr_remove,
.shutdown = mpi3mr_shutdown, .shutdown = mpi3mr_shutdown,
#ifdef CONFIG_PM .driver.pm = &mpi3mr_pm_ops,
.suspend = mpi3mr_suspend,
.resume = mpi3mr_resume,
#endif
}; };
static ssize_t event_counter_show(struct device_driver *dd, char *buf) static ssize_t event_counter_show(struct device_driver *dd, char *buf)