On Mon, Jul 20, 2020 at 07:04:27PM +0530, Vaibhav Gupta wrote: > Drivers using legacy PM have to manage PCI states and device's PM states > themselves. They also need to take care of configuration registers. > > With improved and powerful support of generic PM, PCI Core takes care of > above mentioned, device-independent, jobs. > > This driver makes use of PCI helper functions like > pci_save/restore_state(), pci_enable/disable_device(), > pci_set_power_state() and pci_set_master() to do required operations. In > generic mode, they are no longer needed. > > Change function parameter in both .suspend() and .resume() to > "struct device*" type. Use dev_get_drvdata() to get drv data. > > Compile-tested only. > > Signed-off-by: Vaibhav Gupta <vaibhavgupta40@xxxxxxxxx> > --- > drivers/scsi/mvumi.c | 49 ++++++++++---------------------------------- > 1 file changed, 11 insertions(+), 38 deletions(-) > > diff --git a/drivers/scsi/mvumi.c b/drivers/scsi/mvumi.c > index 8906aceda4c4..7a6ef8264e47 100644 > --- a/drivers/scsi/mvumi.c > +++ b/drivers/scsi/mvumi.c > @@ -2558,7 +2558,7 @@ static void mvumi_detach_one(struct pci_dev *pdev) > > /** > * mvumi_shutdown - Shutdown entry point > - * @device: Generic device structure > + * @pdev: PCI device structure > */ > static void mvumi_shutdown(struct pci_dev *pdev) > { > @@ -2567,47 +2567,28 @@ static void mvumi_shutdown(struct pci_dev *pdev) > mvumi_flush_cache(mhba); > } > > -static int __maybe_unused mvumi_suspend(struct pci_dev *pdev, pm_message_t state) > +static int __maybe_unused mvumi_suspend(struct device *dev) > { > - struct mvumi_hba *mhba = NULL; > + struct pci_dev *pdev = to_pci_dev(dev); > > - mhba = pci_get_drvdata(pdev); > + struct mvumi_hba *mhba = pci_get_drvdata(pdev); > mvumi_flush_cache(mhba); > > - pci_set_drvdata(pdev, mhba); > mhba->instancet->disable_intr(mhba); > - free_irq(mhba->pdev->irq, mhba); > mvumi_unmap_pci_addr(pdev, mhba->base_addr); > - pci_release_regions(pdev); > - pci_save_state(pdev); > - pci_disable_device(pdev); > - pci_set_power_state(pdev, pci_choose_state(pdev, state)); > > return 0; > } > > -static int __maybe_unused mvumi_resume(struct pci_dev *pdev) > +static int __maybe_unused mvumi_resume(struct device *dev) > { > int ret; > - struct mvumi_hba *mhba = NULL; > - > - mhba = pci_get_drvdata(pdev); > - > - pci_set_power_state(pdev, PCI_D0); > - pci_enable_wake(pdev, PCI_D0, 0); > - pci_restore_state(pdev); > + struct pci_dev *pdev = to_pci_dev(dev); > + struct mvumi_hba *mhba = pci_get_drvdata(pdev); > > - ret = pci_enable_device(pdev); > - if (ret) { > - dev_err(&pdev->dev, "enable device failed\n"); > - return ret; > - } > + device_wakeup_disable(dev); > > - ret = mvumi_pci_set_master(pdev); > ret = dma_set_mask(&pdev->dev, DMA_BIT_MASK(32)); > - if (ret) > - goto fail; > - ret = pci_request_regions(mhba->pdev, MV_DRIVER_NAME); > if (ret) > goto fail; > ret = mvumi_map_pci_addr(mhba->pdev, mhba->base_addr); > @@ -2627,12 +2608,6 @@ static int __maybe_unused mvumi_resume(struct pci_dev *pdev) > goto unmap_pci_addr; > } > > - ret = request_irq(mhba->pdev->irq, mvumi_isr_handler, IRQF_SHARED, > - "mvumi", mhba); > - if (ret) { > - dev_err(&pdev->dev, "failed to register IRQ\n"); > - goto unmap_pci_addr; > - } > mhba->instancet->enable_intr(mhba); > > return 0; > @@ -2642,11 +2617,12 @@ static int __maybe_unused mvumi_resume(struct pci_dev *pdev) > release_regions: > pci_release_regions(pdev); > fail: > - pci_disable_device(pdev); > > return ret; > } > > +static SIMPLE_DEV_PM_OPS(mvumi_pm_ops, mvumi_suspend, mvumi_resume); > + > static struct pci_driver mvumi_pci_driver = { > > .name = MV_DRIVER_NAME, > @@ -2654,10 +2630,7 @@ static struct pci_driver mvumi_pci_driver = { > .probe = mvumi_probe_one, > .remove = mvumi_detach_one, > .shutdown = mvumi_shutdown, > -#ifdef CONFIG_PM > - .suspend = mvumi_suspend, > - .resume = mvumi_resume, > -#endif > + .driver.pm = &mvumi_pm_ops, > }; > > module_pci_driver(mvumi_pci_driver); > -- > 2.27.0 > .