diff options
Diffstat (limited to 'drivers/pci/pci-acpi.c')
-rw-r--r-- | drivers/pci/pci-acpi.c | 19 |
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 | ||
792 | static 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 | |||
792 | static void pci_acpi_setup(struct device *dev) | 810 | static 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) |