On Thu, Aug 03, 2023 at 08:02:29PM -0500, Mario Limonciello wrote:
+/**
+ * acpi_pci_device_constraint - determine if the platform has a contraint for the device
+ * @dev: PCI device to check
+ * @result (out): the constraint specified by the platform
+ *
+ * If the platform has specified a constraint for a device, this function will
+ * return 0 and set @result to the constraint.
+ * Otherwise, it will return an error code.
+ */
+int acpi_pci_device_constraint(struct pci_dev *dev, int *result)
+{
+ int constraint;
+
+ constraint = acpi_get_lps0_constraint(&dev->dev);
+ pci_dbg(dev, "ACPI device constraint: %d\n", constraint);
+ if (constraint < 0)
+ return constraint;
+ *result = constraint;
Is there something preventing to return the constraint directly instead
of storing it into "result"?
+
+ return 0;
+}
+
static void acpi_pci_config_space_access(struct pci_dev *dev, bool enable)
{
int val = enable ? ACPI_REG_CONNECT : ACPI_REG_DISCONNECT;
diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
index 60230da957e0c..6c70f921467c6 100644
--- a/drivers/pci/pci.c
+++ b/drivers/pci/pci.c
@@ -1082,6 +1082,14 @@ static inline bool platform_pci_bridge_d3(struct pci_dev *dev)
return acpi_pci_bridge_d3(dev);
}
+static inline int platform_get_constraint(struct pci_dev *dev, int *result)
Ditto here.
+{
+ if (pci_use_mid_pm())
+ return -ENODEV;
+
+ return acpi_pci_device_constraint(dev, result);
+}
+