mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-02 16:44:10 +08:00
mtip32xx: convert to generic power management
Convert mtip32xx from legacy PCI power management to the generic power management framework. Previously, mtip32xx used legacy PCI power management, where mtip_pci_suspend() and mtip_pci_resume() were responsible for both device-specific things and generic PCI things: mtip_pci_suspend mtip_block_suspend(dd) <-- device-specific pci_save_state(pdev) <-- generic PCI pci_set_power_state(pdev, pci_choose_state(pdev, state)) mtip_pci_resume pci_set_power_state(PCI_D0) <-- generic PCI pci_restore_state(pdev) <-- generic PCI pcim_enable_device(pdev) <-- generic PCI pci_set_master(pdev) <-- generic PCI mtip_block_resume(dd) <-- device-specific With generic power management, the PCI bus PM methods do the generic PCI things, and the driver needs only the device-specific part, i.e., suspend_devices_and_enter dpm_suspend_start(PMSG_SUSPEND) pci_pm_suspend # PCI bus .suspend() method mtip_pci_suspend # dev->driver->pm->suspend mtip_block_suspend <-- device-specific suspend_enter dpm_suspend_noirq(PMSG_SUSPEND) pci_pm_suspend_noirq # PCI bus .suspend_noirq() method pci_save_state <-- generic PCI pci_prepare_to_sleep <-- generic PCI pci_set_power_state ... dpm_resume_end(PMSG_RESUME) pci_pm_resume # PCI bus .resume() method pci_restore_standard_config pci_set_power_state(PCI_D0) <-- generic PCI pci_restore_state <-- generic PCI mtip_pci_resume # dev->driver->pm->resume mtip_block_resume <-- device-specific [bhelgaas: commit log] Link: https://lore.kernel.org/r/20210114115423.52414-2-vaibhavgupta40@gmail.com Signed-off-by: Vaibhav Gupta <vaibhavgupta40@gmail.com> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> Link: https://lore.kernel.org/r/20211208192449.146076-4-helgaas@kernel.org Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
9e541f142d
commit
cd97b7e0d7
@ -4144,30 +4144,17 @@ static void mtip_pci_remove(struct pci_dev *pdev)
|
||||
* 0 Success
|
||||
* <0 Error
|
||||
*/
|
||||
static int mtip_pci_suspend(struct pci_dev *pdev, pm_message_t mesg)
|
||||
static int __maybe_unused mtip_pci_suspend(struct device *dev)
|
||||
{
|
||||
int rv = 0;
|
||||
struct driver_data *dd = pci_get_drvdata(pdev);
|
||||
struct driver_data *dd = dev_get_drvdata(dev);
|
||||
|
||||
set_bit(MTIP_DDF_RESUME_BIT, &dd->dd_flag);
|
||||
|
||||
/* Disable ports & interrupts then send standby immediate */
|
||||
rv = mtip_block_suspend(dd);
|
||||
if (rv < 0) {
|
||||
dev_err(&pdev->dev,
|
||||
"Failed to suspend controller\n");
|
||||
return rv;
|
||||
}
|
||||
|
||||
/*
|
||||
* Save the pci config space to pdev structure &
|
||||
* disable the device
|
||||
*/
|
||||
pci_save_state(pdev);
|
||||
pci_disable_device(pdev);
|
||||
|
||||
/* Move to Low power state*/
|
||||
pci_set_power_state(pdev, PCI_D3hot);
|
||||
if (rv < 0)
|
||||
dev_err(dev, "Failed to suspend controller\n");
|
||||
|
||||
return rv;
|
||||
}
|
||||
@ -4179,25 +4166,10 @@ static int mtip_pci_suspend(struct pci_dev *pdev, pm_message_t mesg)
|
||||
* 0 Success
|
||||
* <0 Error
|
||||
*/
|
||||
static int mtip_pci_resume(struct pci_dev *pdev)
|
||||
static int __maybe_unused mtip_pci_resume(struct device *dev)
|
||||
{
|
||||
int rv = 0;
|
||||
struct driver_data *dd = pci_get_drvdata(pdev);
|
||||
|
||||
/* Move the device to active State */
|
||||
pci_set_power_state(pdev, PCI_D0);
|
||||
|
||||
/* Restore PCI configuration space */
|
||||
pci_restore_state(pdev);
|
||||
|
||||
/* Enable the PCI device*/
|
||||
rv = pcim_enable_device(pdev);
|
||||
if (rv < 0) {
|
||||
dev_err(&pdev->dev,
|
||||
"Failed to enable card during resume\n");
|
||||
goto err;
|
||||
}
|
||||
pci_set_master(pdev);
|
||||
struct driver_data *dd = dev_get_drvdata(dev);
|
||||
|
||||
/*
|
||||
* Calls hbaReset, initPort, & startPort function
|
||||
@ -4205,9 +4177,8 @@ static int mtip_pci_resume(struct pci_dev *pdev)
|
||||
*/
|
||||
rv = mtip_block_resume(dd);
|
||||
if (rv < 0)
|
||||
dev_err(&pdev->dev, "Unable to resume\n");
|
||||
dev_err(dev, "Unable to resume\n");
|
||||
|
||||
err:
|
||||
clear_bit(MTIP_DDF_RESUME_BIT, &dd->dd_flag);
|
||||
|
||||
return rv;
|
||||
@ -4238,14 +4209,15 @@ static const struct pci_device_id mtip_pci_tbl[] = {
|
||||
{ 0 }
|
||||
};
|
||||
|
||||
static SIMPLE_DEV_PM_OPS(mtip_pci_pm_ops, mtip_pci_suspend, mtip_pci_resume);
|
||||
|
||||
/* Structure that describes the PCI driver functions. */
|
||||
static struct pci_driver mtip_pci_driver = {
|
||||
.name = MTIP_DRV_NAME,
|
||||
.id_table = mtip_pci_tbl,
|
||||
.probe = mtip_pci_probe,
|
||||
.remove = mtip_pci_remove,
|
||||
.suspend = mtip_pci_suspend,
|
||||
.resume = mtip_pci_resume,
|
||||
.driver.pm = &mtip_pci_pm_ops,
|
||||
.shutdown = mtip_pci_shutdown,
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user