On Mon, Jul 20, 2020 at 07:04:21PM +0530, Vaibhav Gupta wrote: > With legacy PM, drivers themselves were responsible for managing the > device's power states and takes care of register states. > > After upgrading to the generic structure, PCI core will take care of > required tasks and drivers should do only device-specific operations. > > The driver was calling pci_save/restore_state(), pci_choose_state(), > pci_enable/disable_device() and pci_set_power_state() which is no more > needed. > > Compile-tested only. > > Signed-off-by: Vaibhav Gupta <vaibhavgupta40@xxxxxxxxx> > --- > drivers/scsi/mpt3sas/mpt3sas_scsih.c | 36 +++++++++++----------------- > 1 file changed, 14 insertions(+), 22 deletions(-) > > diff --git a/drivers/scsi/mpt3sas/mpt3sas_scsih.c b/drivers/scsi/mpt3sas/mpt3sas_scsih.c > index 08fc4b381056..f3c6e68b2921 100644 > --- a/drivers/scsi/mpt3sas/mpt3sas_scsih.c > +++ b/drivers/scsi/mpt3sas/mpt3sas_scsih.c > @@ -10829,44 +10829,40 @@ _scsih_probe(struct pci_dev *pdev, const struct pci_device_id *id) > return rv; > } > > -#ifdef CONFIG_PM > /** > * scsih_suspend - power management suspend main entry point > - * @pdev: PCI device struct > - * @state: PM state change to (usually PCI_D3) > + * @dev: Device struct > * > * Return: 0 success, anything else error. > */ > -static int > -scsih_suspend(struct pci_dev *pdev, pm_message_t state) > +static int __maybe_unused > +scsih_suspend(struct device *dev) > { > + struct pci_dev *pdev = to_pci_dev(dev); > struct Scsi_Host *shost = pci_get_drvdata(pdev); > struct MPT3SAS_ADAPTER *ioc = shost_priv(shost); > - pci_power_t device_state; > > mpt3sas_base_stop_watchdog(ioc); > flush_scheduled_work(); > scsi_block_requests(shost); > _scsih_nvme_shutdown(ioc); > - device_state = pci_choose_state(pdev, state); > - ioc_info(ioc, "pdev=0x%p, slot=%s, entering operating state [D%d]\n", > - pdev, pci_name(pdev), device_state); > + ioc_info(ioc, "pdev=0x%p, slot=%s, entering suspended state\n", > + pdev, pci_name(pdev)); > > - pci_save_state(pdev); > mpt3sas_base_free_resources(ioc); > - pci_set_power_state(pdev, device_state); > return 0; > } > > /** > * scsih_resume - power management resume main entry point > - * @pdev: PCI device struct > + * @dev: Device struct > * > * Return: 0 success, anything else error. > */ > -static int > -scsih_resume(struct pci_dev *pdev) > +static int __maybe_unused > +scsih_resume(struct device *dev) > { > + struct pci_dev *pdev = to_pci_dev(dev); > struct Scsi_Host *shost = pci_get_drvdata(pdev); > struct MPT3SAS_ADAPTER *ioc = shost_priv(shost); > pci_power_t device_state = pdev->current_state; > @@ -10875,9 +10871,7 @@ scsih_resume(struct pci_dev *pdev) > ioc_info(ioc, "pdev=0x%p, slot=%s, previous operating state [D%d]\n", > pdev, pci_name(pdev), device_state); > > - pci_set_power_state(pdev, PCI_D0); > - pci_enable_wake(pdev, PCI_D0, 0); > - pci_restore_state(pdev); > + device_wakeup_disable(dev); > ioc->pdev = pdev; > r = mpt3sas_base_map_resources(ioc); > if (r) > @@ -10888,7 +10882,6 @@ scsih_resume(struct pci_dev *pdev) > mpt3sas_base_start_watchdog(ioc); > return 0; > } > -#endif /* CONFIG_PM */ > > /** > * scsih_pci_error_detected - Called when a PCI error is detected. > @@ -11162,6 +11155,8 @@ static struct pci_error_handlers _mpt3sas_err_handler = { > .resume = scsih_pci_resume, > }; > > +static SIMPLE_DEV_PM_OPS(scsih_pm_ops, scsih_suspend, scsih_resume); > + > static struct pci_driver mpt3sas_driver = { > .name = MPT3SAS_DRIVER_NAME, > .id_table = mpt3sas_pci_table, > @@ -11169,10 +11164,7 @@ static struct pci_driver mpt3sas_driver = { > .remove = scsih_remove, > .shutdown = scsih_shutdown, > .err_handler = &_mpt3sas_err_handler, > -#ifdef CONFIG_PM > - .suspend = scsih_suspend, > - .resume = scsih_resume, > -#endif > + .driver.pm = &scsih_pm_ops, > }; > > /** > -- > 2.27.0 > .