mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-14 15:54:15 +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 Success
|
||||||
* <0 Error
|
* <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;
|
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);
|
set_bit(MTIP_DDF_RESUME_BIT, &dd->dd_flag);
|
||||||
|
|
||||||
/* Disable ports & interrupts then send standby immediate */
|
/* Disable ports & interrupts then send standby immediate */
|
||||||
rv = mtip_block_suspend(dd);
|
rv = mtip_block_suspend(dd);
|
||||||
if (rv < 0) {
|
if (rv < 0)
|
||||||
dev_err(&pdev->dev,
|
dev_err(dev, "Failed to suspend controller\n");
|
||||||
"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);
|
|
||||||
|
|
||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
@ -4179,25 +4166,10 @@ static int mtip_pci_suspend(struct pci_dev *pdev, pm_message_t mesg)
|
|||||||
* 0 Success
|
* 0 Success
|
||||||
* <0 Error
|
* <0 Error
|
||||||
*/
|
*/
|
||||||
static int mtip_pci_resume(struct pci_dev *pdev)
|
static int __maybe_unused mtip_pci_resume(struct device *dev)
|
||||||
{
|
{
|
||||||
int rv = 0;
|
int rv = 0;
|
||||||
struct driver_data *dd = pci_get_drvdata(pdev);
|
struct driver_data *dd = dev_get_drvdata(dev);
|
||||||
|
|
||||||
/* 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);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Calls hbaReset, initPort, & startPort function
|
* Calls hbaReset, initPort, & startPort function
|
||||||
@ -4205,9 +4177,8 @@ static int mtip_pci_resume(struct pci_dev *pdev)
|
|||||||
*/
|
*/
|
||||||
rv = mtip_block_resume(dd);
|
rv = mtip_block_resume(dd);
|
||||||
if (rv < 0)
|
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);
|
clear_bit(MTIP_DDF_RESUME_BIT, &dd->dd_flag);
|
||||||
|
|
||||||
return rv;
|
return rv;
|
||||||
@ -4238,14 +4209,15 @@ static const struct pci_device_id mtip_pci_tbl[] = {
|
|||||||
{ 0 }
|
{ 0 }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static SIMPLE_DEV_PM_OPS(mtip_pci_pm_ops, mtip_pci_suspend, mtip_pci_resume);
|
||||||
|
|
||||||
/* Structure that describes the PCI driver functions. */
|
/* Structure that describes the PCI driver functions. */
|
||||||
static struct pci_driver mtip_pci_driver = {
|
static struct pci_driver mtip_pci_driver = {
|
||||||
.name = MTIP_DRV_NAME,
|
.name = MTIP_DRV_NAME,
|
||||||
.id_table = mtip_pci_tbl,
|
.id_table = mtip_pci_tbl,
|
||||||
.probe = mtip_pci_probe,
|
.probe = mtip_pci_probe,
|
||||||
.remove = mtip_pci_remove,
|
.remove = mtip_pci_remove,
|
||||||
.suspend = mtip_pci_suspend,
|
.driver.pm = &mtip_pci_pm_ops,
|
||||||
.resume = mtip_pci_resume,
|
|
||||||
.shutdown = mtip_pci_shutdown,
|
.shutdown = mtip_pci_shutdown,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user