| From 9314eb0dd76b2002f5f5dcedde3a21a50beed9a6 Mon Sep 17 00:00:00 2001 |
| From: Kai-Heng Feng <kai.heng.feng@canonical.com> |
| Date: Fri, 18 Oct 2019 15:38:47 +0800 |
| Subject: [PATCH] PCI: Add a helper to check Power Resource Requirements _PR3 |
| existence |
| |
| commit 52525b7a3cf82adec5c6cf0ecbd23ff228badc94 upstream. |
| |
| A driver may want to know the existence of _PR3, to choose different |
| runtime suspend behavior. A user will be add in next patch. |
| |
| This is mostly the same as nouveau_pr3_present(). |
| |
| Signed-off-by: Kai-Heng Feng <kai.heng.feng@canonical.com> |
| Acked-by: Bjorn Helgaas <bhelgaas@google.com> |
| Link: https://lore.kernel.org/r/20191018073848.14590-1-kai.heng.feng@canonical.com |
| Signed-off-by: Takashi Iwai <tiwai@suse.de> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c |
| index 42922dae29be..58c945caa438 100644 |
| --- a/drivers/pci/pci.c |
| +++ b/drivers/pci/pci.c |
| @@ -5820,6 +5820,24 @@ int pci_set_vga_state(struct pci_dev *dev, bool decode, |
| return 0; |
| } |
| |
| +#ifdef CONFIG_ACPI |
| +bool pci_pr3_present(struct pci_dev *pdev) |
| +{ |
| + struct acpi_device *adev; |
| + |
| + if (acpi_disabled) |
| + return false; |
| + |
| + adev = ACPI_COMPANION(&pdev->dev); |
| + if (!adev) |
| + return false; |
| + |
| + return adev->power.flags.power_resources && |
| + acpi_has_method(adev->handle, "_PR3"); |
| +} |
| +EXPORT_SYMBOL_GPL(pci_pr3_present); |
| +#endif |
| + |
| /** |
| * pci_add_dma_alias - Add a DMA devfn alias for a device |
| * @dev: the PCI device for which alias is added |
| diff --git a/include/linux/pci.h b/include/linux/pci.h |
| index 9feb59ac8550..ab2a5a377cbd 100644 |
| --- a/include/linux/pci.h |
| +++ b/include/linux/pci.h |
| @@ -2288,9 +2288,11 @@ struct irq_domain *pci_host_bridge_acpi_msi_domain(struct pci_bus *bus); |
| |
| void |
| pci_msi_register_fwnode_provider(struct fwnode_handle *(*fn)(struct device *)); |
| +bool pci_pr3_present(struct pci_dev *pdev); |
| #else |
| static inline struct irq_domain * |
| pci_host_bridge_acpi_msi_domain(struct pci_bus *bus) { return NULL; } |
| +static bool pci_pr3_present(struct pci_dev *pdev) { return false; } |
| #endif |
| |
| #ifdef CONFIG_EEH |
| -- |
| 2.7.4 |
| |