mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-05 08:26:59 +00:00
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:
parent
ee6f2d6bb2
commit
47cd930ee6
1 changed files with 13 additions and 20 deletions
|
@ -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)
|
||||||
|
|
Loading…
Reference in a new issue