]> git.baikalelectronics.ru Git - kernel.git/commit
PCI/ACS: Enable Translation Blocking for external devices
authorRajat Jain <rajatja@google.com>
Tue, 7 Jul 2020 22:46:04 +0000 (15:46 -0700)
committerBjorn Helgaas <bhelgaas@google.com>
Wed, 16 Sep 2020 21:42:22 +0000 (16:42 -0500)
commit5cd7d2bfa85a578b75d1f25846567ba1cc192636
tree8d7a2c6761c426cab67e039d0cec47d0341083bc
parente5f0bf958198ed018c9fdf06e8d307ced9af9c95
PCI/ACS: Enable Translation Blocking for external devices

Translation Blocking is a required feature for Downstream Ports (Root
Ports or Switch Downstream Ports) that implement ACS.  When enabled, the
Port checks the Address Type (AT) of each upstream Memory Request it
receives.

The default AT (00b) means "untranslated" and the IOMMU can decide whether
to treat the address as I/O virtual or physical.

If AT is not the default, i.e., if the Memory Request contains an
already-translated (physical) address, the Port blocks the request and
reports an ACS error.

When enabling ACS, enable Translation Blocking for external-facing ports
and untrusted (external) devices.  This is to help prevent attacks from
external devices that initiate DMA with physical addresses that bypass the
IOMMU.

[bhelgaas: commit log, simplify setting bit and drop warning; TB is
required for Downstream Ports with ACS, so we should never see the warning]
Link: https://lore.kernel.org/r/20200707224604.3737893-4-rajatja@google.com
Signed-off-by: Rajat Jain <rajatja@google.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
drivers/pci/pci.c
drivers/pci/quirks.c