summaryrefslogtreecommitdiffstats
path: root/drivers/pci/pci-acpi.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/pci/pci-acpi.c')
-rw-r--r--drivers/pci/pci-acpi.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/drivers/pci/pci-acpi.c b/drivers/pci/pci-acpi.c
index 921db6f80340..e1949f7efd9c 100644
--- a/drivers/pci/pci-acpi.c
+++ b/drivers/pci/pci-acpi.c
@@ -789,6 +789,24 @@ static void pci_acpi_optimize_delay(struct pci_dev *pdev,
789 ACPI_FREE(obj); 789 ACPI_FREE(obj);
790} 790}
791 791
792static void pci_acpi_set_untrusted(struct pci_dev *dev)
793{
794 u8 val;
795
796 if (pci_pcie_type(dev) != PCI_EXP_TYPE_ROOT_PORT)
797 return;
798 if (device_property_read_u8(&dev->dev, "ExternalFacingPort", &val))
799 return;
800
801 /*
802 * These root ports expose PCIe (including DMA) outside of the
803 * system so make sure we treat them and everything behind as
804 * untrusted.
805 */
806 if (val)
807 dev->untrusted = 1;
808}
809
792static void pci_acpi_setup(struct device *dev) 810static void pci_acpi_setup(struct device *dev)
793{ 811{
794 struct pci_dev *pci_dev = to_pci_dev(dev); 812 struct pci_dev *pci_dev = to_pci_dev(dev);
@@ -798,6 +816,7 @@ static void pci_acpi_setup(struct device *dev)
798 return; 816 return;
799 817
800 pci_acpi_optimize_delay(pci_dev, adev->handle); 818 pci_acpi_optimize_delay(pci_dev, adev->handle);
819 pci_acpi_set_untrusted(pci_dev);
801 820
802 pci_acpi_add_pm_notifier(adev, pci_dev); 821 pci_acpi_add_pm_notifier(adev, pci_dev);
803 if (!adev->wakeup.flags.valid) 822 if (!adev->wakeup.flags.valid)