On Mon, Jul 20, 2020 at 07:04:23PM +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/pm8001/pm8001_init.c | 46 ++++++++++++------------------- > 1 file changed, 17 insertions(+), 29 deletions(-) > > diff --git a/drivers/scsi/pm8001/pm8001_init.c b/drivers/scsi/pm8001/pm8001_init.c > index 9e99262a2b9d..d7d664b87720 100644 > --- a/drivers/scsi/pm8001/pm8001_init.c > +++ b/drivers/scsi/pm8001/pm8001_init.c > @@ -1178,23 +1178,21 @@ static void pm8001_pci_remove(struct pci_dev *pdev) > > /** > * pm8001_pci_suspend - power management suspend main entry point > - * @pdev: PCI device struct > - * @state: PM state change to (usually PCI_D3) > + * @dev: Device struct > * > * Returns 0 success, anything else error. > */ > -static int pm8001_pci_suspend(struct pci_dev *pdev, pm_message_t state) > +static int __maybe_unused pm8001_pci_suspend(struct device *dev) > { > + struct pci_dev *pdev = to_pci_dev(dev); > struct sas_ha_struct *sha = pci_get_drvdata(pdev); > - struct pm8001_hba_info *pm8001_ha; > + struct pm8001_hba_info *pm8001_ha = sha->lldd_ha; > int i, j; > - u32 device_state; > - pm8001_ha = sha->lldd_ha; > sas_suspend_ha(sha); > flush_workqueue(pm8001_wq); > scsi_block_requests(pm8001_ha->shost); > if (!pdev->pm_cap) { > - dev_err(&pdev->dev, " PCI PM not supported\n"); > + dev_err(dev, " PCI PM not supported\n"); > return -ENODEV; > } > PM8001_CHIP_DISP->interrupt_disable(pm8001_ha, 0xFF); > @@ -1217,24 +1215,21 @@ static int pm8001_pci_suspend(struct pci_dev *pdev, pm_message_t state) > for (j = 0; j < PM8001_MAX_MSIX_VEC; j++) > tasklet_kill(&pm8001_ha->tasklet[j]); > #endif > - device_state = pci_choose_state(pdev, state); > pm8001_printk("pdev=0x%p, slot=%s, entering " > - "operating state [D%d]\n", pdev, > - pm8001_ha->name, device_state); > - pci_save_state(pdev); > - pci_disable_device(pdev); > - pci_set_power_state(pdev, device_state); > + "suspended state\n", pdev, > + pm8001_ha->name); > return 0; > } > > /** > * pm8001_pci_resume - power management resume main entry point > - * @pdev: PCI device struct > + * @dev: Device struct > * > * Returns 0 success, anything else error. > */ > -static int pm8001_pci_resume(struct pci_dev *pdev) > +static int __maybe_unused pm8001_pci_resume(struct device *dev) > { > + struct pci_dev *pdev = to_pci_dev(dev); > struct sas_ha_struct *sha = pci_get_drvdata(pdev); > struct pm8001_hba_info *pm8001_ha; > int rc; > @@ -1247,17 +1242,8 @@ static int pm8001_pci_resume(struct pci_dev *pdev) > pm8001_printk("pdev=0x%p, slot=%s, resuming from previous " > "operating state [D%d]\n", pdev, pm8001_ha->name, device_state); > > - pci_set_power_state(pdev, PCI_D0); > - pci_enable_wake(pdev, PCI_D0, 0); > - pci_restore_state(pdev); > - rc = pci_enable_device(pdev); > - if (rc) { > - pm8001_printk("slot=%s Enable device failed during resume\n", > - pm8001_ha->name); > - goto err_out_enable; > - } > + device_wakeup_disable(dev); > > - pci_set_master(pdev); > rc = pci_go_44(pdev); > if (rc) > goto err_out_disable; > @@ -1318,8 +1304,7 @@ static int pm8001_pci_resume(struct pci_dev *pdev) > > err_out_disable: > scsi_remove_host(pm8001_ha->shost); > - pci_disable_device(pdev); > -err_out_enable: > + > return rc; > } > > @@ -1402,13 +1387,16 @@ static struct pci_device_id pm8001_pci_table[] = { > {} /* terminate list */ > }; > > +static SIMPLE_DEV_PM_OPS(pm8001_pci_pm_ops, > + pm8001_pci_suspend, > + pm8001_pci_resume); > + > static struct pci_driver pm8001_pci_driver = { > .name = DRV_NAME, > .id_table = pm8001_pci_table, > .probe = pm8001_pci_probe, > .remove = pm8001_pci_remove, > - .suspend = pm8001_pci_suspend, > - .resume = pm8001_pci_resume, > + .driver.pm = &pm8001_pci_pm_ops, > }; > > /** > -- > 2.27.0 > .