summaryrefslogtreecommitdiff
path: root/drivers/pci/pci.c
diff options
context:
space:
mode:
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>2021-09-20 21:17:08 +0200
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>2021-09-29 21:17:20 +0200
commitd97c5d4c622f6acfd5eddac81799d37c9a4e6a92 (patch)
treeda3770809682d5d6efe645b39eebf66541a78be3 /drivers/pci/pci.c
parentd5b0d88385f5a5f865f6761d7c93e373221914a4 (diff)
PCI: ACPI: PM: Do not use pci_platform_pm_ops for ACPI
Using struct pci_platform_pm_ops for ACPI adds unnecessary indirection to the interactions between the PCI core and ACPI PM, which is also subject to retpolines. Moreover, it is not particularly clear from the current code that, as far as PCI PM is concerned, "platform" really means just ACPI except for the special casess when Intel MID PCI PM is used or when ACPI support is disabled (through the kernel config or command line, or because there are no usable ACPI tables on the system). To address the above, rework the PCI PM code to invoke ACPI PM functions directly as needed and drop the acpi_pci_platform_pm object that is not necessary any more. Accordingly, update some of the ACPI PM functions in question to do extra checks in case the ACPI support is disabled (which previously was taken care of by avoiding to set the pci_platform_ops pointer in those cases). Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> Tested-by: Ferry Toth <fntoth@gmail.com>
Diffstat (limited to 'drivers/pci/pci.c')
-rw-r--r--drivers/pci/pci.c22
1 files changed, 9 insertions, 13 deletions
diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
index d4438e7bb761..925f275daa54 100644
--- a/drivers/pci/pci.c
+++ b/drivers/pci/pci.c
@@ -988,7 +988,7 @@ static inline bool platform_pci_power_manageable(struct pci_dev *dev)
if (pci_use_mid_pm())
return true;
- return pci_platform_pm ? pci_platform_pm->is_manageable(dev) : false;
+ return acpi_pci_power_manageable(dev);
}
static inline int platform_pci_set_power_state(struct pci_dev *dev,
@@ -997,7 +997,7 @@ static inline int platform_pci_set_power_state(struct pci_dev *dev,
if (pci_use_mid_pm())
return mid_pci_set_power_state(dev, t);
- return pci_platform_pm ? pci_platform_pm->set_state(dev, t) : -ENOSYS;
+ return acpi_pci_set_power_state(dev, t);
}
static inline pci_power_t platform_pci_get_power_state(struct pci_dev *dev)
@@ -1005,13 +1005,13 @@ static inline pci_power_t platform_pci_get_power_state(struct pci_dev *dev)
if (pci_use_mid_pm())
return mid_pci_get_power_state(dev);
- return pci_platform_pm ? pci_platform_pm->get_state(dev) : PCI_UNKNOWN;
+ return acpi_pci_get_power_state(dev);
}
static inline void platform_pci_refresh_power_state(struct pci_dev *dev)
{
- if (!pci_use_mid_pm() && pci_platform_pm && pci_platform_pm->refresh_state)
- pci_platform_pm->refresh_state(dev);
+ if (!pci_use_mid_pm())
+ acpi_pci_refresh_power_state(dev);
}
static inline pci_power_t platform_pci_choose_state(struct pci_dev *dev)
@@ -1019,8 +1019,7 @@ static inline pci_power_t platform_pci_choose_state(struct pci_dev *dev)
if (pci_use_mid_pm())
return PCI_POWER_ERROR;
- return pci_platform_pm ?
- pci_platform_pm->choose_state(dev) : PCI_POWER_ERROR;
+ return acpi_pci_choose_state(dev);
}
static inline int platform_pci_set_wakeup(struct pci_dev *dev, bool enable)
@@ -1028,8 +1027,7 @@ static inline int platform_pci_set_wakeup(struct pci_dev *dev, bool enable)
if (pci_use_mid_pm())
return PCI_POWER_ERROR;
- return pci_platform_pm ?
- pci_platform_pm->set_wakeup(dev, enable) : -ENODEV;
+ return acpi_pci_wakeup(dev, enable);
}
static inline bool platform_pci_need_resume(struct pci_dev *dev)
@@ -1037,7 +1035,7 @@ static inline bool platform_pci_need_resume(struct pci_dev *dev)
if (pci_use_mid_pm())
return false;
- return pci_platform_pm ? pci_platform_pm->need_resume(dev) : false;
+ return acpi_pci_need_resume(dev);
}
static inline bool platform_pci_bridge_d3(struct pci_dev *dev)
@@ -1045,9 +1043,7 @@ static inline bool platform_pci_bridge_d3(struct pci_dev *dev)
if (pci_use_mid_pm())
return false;
- if (pci_platform_pm && pci_platform_pm->bridge_d3)
- return pci_platform_pm->bridge_d3(dev);
- return false;
+ return acpi_pci_bridge_d3(dev);
}
/**