Acked-by: Balsundar P < balsunda...@microchip.com> -----Original Message----- From: Vaibhav Gupta <vaibhavgupt...@gmail.com> Sent: Monday, July 20, 2020 19:04 To: Bjorn Helgaas <helg...@kernel.org>; Bjorn Helgaas <bhelg...@google.com>; Bjorn Helgaas <bj...@helgaas.com>; Vaibhav Gupta <vaibhav.varo...@gmail.com>; Adam Radford <aradf...@gmail.com>; James E.J. Bottomley <j...@linux.ibm.com>; Martin K. Petersen <martin.peter...@oracle.com>; Adaptec OEM Raid Solutions <aacr...@microsemi.com>; Hannes Reinecke <h...@suse.com>; Bradley Grove <linuxdriv...@attotech.com>; John Garry <john.ga...@huawei.com>; Don Brace <don.br...@microsemi.com>; James Smart <james.sm...@broadcom.com>; Dick Kennedy <dick.kenn...@broadcom.com>; Kashyap Desai <kashyap.de...@broadcom.com>; Sumit Saxena <sumit.sax...@broadcom.com>; Shivasharan S <shivasharan.srikanteshw...@broadcom.com>; Sathya Prakash <sathya.prak...@broadcom.com>; Sreekanth Reddy <sreekanth.re...@broadcom.com>; Suganath Prabu Subramani <suganath-prabu.subram...@broadcom.com>; Jack Wang <jinpu.w...@cloud.ionos.com> Cc: Vaibhav Gupta <vaibhavgupt...@gmail.com>; Shuah Khan <sk...@linuxfoundation.org>; linux-kernel@vger.kernel.org; linux-kernel-ment...@lists.linuxfoundation.org; linux-s...@vger.kernel.org; esc.storage...@microsemi.com; megaraidlinux....@broadcom.com; mpt-fusionlinux....@broadcom.com Subject: [PATCH v2 02/15] scsi: aacraid: use generic power management
EXTERNAL EMAIL: Do not click links or open attachments unless you know the content is safe With legacy PM hooks, it was the responsibility of a driver to manage PCI states and also the device's power state. The generic approach is to let the PCI core handle the work. PCI core passes "struct device*" as an argument to the .suspend() and .resume() callbacks. Driver was using PCI helper functions like pci_save/restore_state(), pci_disable/enable_device(), pci_set_power_state() and pci_enable_wake(). They should not be invoked by the driver. Compile-tested only. Signed-off-by: Vaibhav Gupta <vaibhavgupt...@gmail.com> --- drivers/scsi/aacraid/linit.c | 34 ++++++++-------------------------- 1 file changed, 8 insertions(+), 26 deletions(-) diff --git a/drivers/scsi/aacraid/linit.c b/drivers/scsi/aacraid/linit.c index a308e86a97f1..1e44868ee953 100644 --- a/drivers/scsi/aacraid/linit.c +++ b/drivers/scsi/aacraid/linit.c @@ -1910,11 +1910,9 @@ static int aac_acquire_resources(struct aac_dev *dev) } -#if (defined(CONFIG_PM)) -static int aac_suspend(struct pci_dev *pdev, pm_message_t state) +static int __maybe_unused aac_suspend(struct device *dev) { - - struct Scsi_Host *shost = pci_get_drvdata(pdev); + struct Scsi_Host *shost = dev_get_drvdata(dev); struct aac_dev *aac = (struct aac_dev *)shost->hostdata; scsi_host_block(shost); @@ -1923,29 +1921,16 @@ static int aac_suspend(struct pci_dev *pdev, pm_message_t state) aac_release_resources(aac); - pci_set_drvdata(pdev, shost); - pci_save_state(pdev); - pci_disable_device(pdev); - pci_set_power_state(pdev, pci_choose_state(pdev, state)); - return 0; } -static int aac_resume(struct pci_dev *pdev) +static int __maybe_unused aac_resume(struct device *dev) { - struct Scsi_Host *shost = pci_get_drvdata(pdev); + struct Scsi_Host *shost = dev_get_drvdata(dev); struct aac_dev *aac = (struct aac_dev *)shost->hostdata; - int r; - pci_set_power_state(pdev, PCI_D0); - pci_enable_wake(pdev, PCI_D0, 0); - pci_restore_state(pdev); - r = pci_enable_device(pdev); + device_wakeup_disable(dev); - if (r) - goto fail_device; - - pci_set_master(pdev); if (aac_acquire_resources(aac)) goto fail_device; /* @@ -1960,10 +1945,8 @@ static int aac_resume(struct pci_dev *pdev) fail_device: printk(KERN_INFO "%s%d: resume failed.\n", aac->name, aac->id); scsi_host_put(shost); - pci_disable_device(pdev); return -ENODEV; } -#endif static void aac_shutdown(struct pci_dev *dev) { @@ -2108,15 +2091,14 @@ static struct pci_error_handlers aac_pci_err_handler = { .resume = aac_pci_resume, }; +static SIMPLE_DEV_PM_OPS(aac_pm_ops, aac_suspend, aac_resume); + static struct pci_driver aac_pci_driver = { .name = AAC_DRIVERNAME, .id_table = aac_pci_tbl, .probe = aac_probe_one, .remove = aac_remove_one, -#if (defined(CONFIG_PM)) - .suspend = aac_suspend, - .resume = aac_resume, -#endif + .driver.pm = &aac_pm_ops, .shutdown = aac_shutdown, .err_handler = &aac_pci_err_handler, }; -- 2.27.0