![Robin Murphy](/assets/img/avatar_default.png)
With the device <-> stream ID relationship suitably abstracted and of_xlate() hooked up, the PCI dependency now looks, and is, entirely arbitrary. Any bus using the of_dma_configure() mechanism will work, so extend support to the platform and AMBA buses which do just that. Acked-by: Will Deacon <will.deacon@arm.com> Tested-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com> Signed-off-by: Robin Murphy <robin.murphy@arm.com> Signed-off-by: Will Deacon <will.deacon@arm.com>
366 lines
11 KiB
Plaintext
366 lines
11 KiB
Plaintext
# IOMMU_API always gets selected by whoever wants it.
|
|
config IOMMU_API
|
|
bool
|
|
|
|
menuconfig IOMMU_SUPPORT
|
|
bool "IOMMU Hardware Support"
|
|
depends on MMU
|
|
default y
|
|
---help---
|
|
Say Y here if you want to compile device drivers for IO Memory
|
|
Management Units into the kernel. These devices usually allow to
|
|
remap DMA requests and/or remap interrupts from other devices on the
|
|
system.
|
|
|
|
if IOMMU_SUPPORT
|
|
|
|
menu "Generic IOMMU Pagetable Support"
|
|
|
|
# Selected by the actual pagetable implementations
|
|
config IOMMU_IO_PGTABLE
|
|
bool
|
|
|
|
config IOMMU_IO_PGTABLE_LPAE
|
|
bool "ARMv7/v8 Long Descriptor Format"
|
|
select IOMMU_IO_PGTABLE
|
|
depends on HAS_DMA && (ARM || ARM64 || COMPILE_TEST)
|
|
help
|
|
Enable support for the ARM long descriptor pagetable format.
|
|
This allocator supports 4K/2M/1G, 16K/32M and 64K/512M page
|
|
sizes at both stage-1 and stage-2, as well as address spaces
|
|
up to 48-bits in size.
|
|
|
|
config IOMMU_IO_PGTABLE_LPAE_SELFTEST
|
|
bool "LPAE selftests"
|
|
depends on IOMMU_IO_PGTABLE_LPAE
|
|
help
|
|
Enable self-tests for LPAE page table allocator. This performs
|
|
a series of page-table consistency checks during boot.
|
|
|
|
If unsure, say N here.
|
|
|
|
config IOMMU_IO_PGTABLE_ARMV7S
|
|
bool "ARMv7/v8 Short Descriptor Format"
|
|
select IOMMU_IO_PGTABLE
|
|
depends on HAS_DMA && (ARM || ARM64 || COMPILE_TEST)
|
|
help
|
|
Enable support for the ARM Short-descriptor pagetable format.
|
|
This supports 32-bit virtual and physical addresses mapped using
|
|
2-level tables with 4KB pages/1MB sections, and contiguous entries
|
|
for 64KB pages/16MB supersections if indicated by the IOMMU driver.
|
|
|
|
config IOMMU_IO_PGTABLE_ARMV7S_SELFTEST
|
|
bool "ARMv7s selftests"
|
|
depends on IOMMU_IO_PGTABLE_ARMV7S
|
|
help
|
|
Enable self-tests for ARMv7s page table allocator. This performs
|
|
a series of page-table consistency checks during boot.
|
|
|
|
If unsure, say N here.
|
|
|
|
endmenu
|
|
|
|
config IOMMU_IOVA
|
|
tristate
|
|
|
|
config OF_IOMMU
|
|
def_bool y
|
|
depends on OF && IOMMU_API
|
|
|
|
# IOMMU-agnostic DMA-mapping layer
|
|
config IOMMU_DMA
|
|
bool
|
|
select IOMMU_API
|
|
select IOMMU_IOVA
|
|
select NEED_SG_DMA_LENGTH
|
|
|
|
config FSL_PAMU
|
|
bool "Freescale IOMMU support"
|
|
depends on PPC_E500MC || (COMPILE_TEST && PPC)
|
|
select IOMMU_API
|
|
select GENERIC_ALLOCATOR
|
|
help
|
|
Freescale PAMU support. PAMU is the IOMMU present on Freescale QorIQ platforms.
|
|
PAMU can authorize memory access, remap the memory address, and remap I/O
|
|
transaction types.
|
|
|
|
# MSM IOMMU support
|
|
config MSM_IOMMU
|
|
bool "MSM IOMMU Support"
|
|
depends on ARM
|
|
depends on ARCH_MSM8X60 || ARCH_MSM8960 || COMPILE_TEST
|
|
select IOMMU_API
|
|
select IOMMU_IO_PGTABLE_ARMV7S
|
|
help
|
|
Support for the IOMMUs found on certain Qualcomm SOCs.
|
|
These IOMMUs allow virtualization of the address space used by most
|
|
cores within the multimedia subsystem.
|
|
|
|
If unsure, say N here.
|
|
|
|
config IOMMU_PGTABLES_L2
|
|
def_bool y
|
|
depends on MSM_IOMMU && MMU && SMP && CPU_DCACHE_DISABLE=n
|
|
|
|
# AMD IOMMU support
|
|
config AMD_IOMMU
|
|
bool "AMD IOMMU support"
|
|
select SWIOTLB
|
|
select PCI_MSI
|
|
select PCI_ATS
|
|
select PCI_PRI
|
|
select PCI_PASID
|
|
select IOMMU_API
|
|
select IOMMU_IOVA
|
|
depends on X86_64 && PCI && ACPI
|
|
---help---
|
|
With this option you can enable support for AMD IOMMU hardware in
|
|
your system. An IOMMU is a hardware component which provides
|
|
remapping of DMA memory accesses from devices. With an AMD IOMMU you
|
|
can isolate the DMA memory of different devices and protect the
|
|
system from misbehaving device drivers or hardware.
|
|
|
|
You can find out if your system has an AMD IOMMU if you look into
|
|
your BIOS for an option to enable it or if you have an IVRS ACPI
|
|
table.
|
|
|
|
config AMD_IOMMU_V2
|
|
tristate "AMD IOMMU Version 2 driver"
|
|
depends on AMD_IOMMU
|
|
select MMU_NOTIFIER
|
|
---help---
|
|
This option enables support for the AMD IOMMUv2 features of the IOMMU
|
|
hardware. Select this option if you want to use devices that support
|
|
the PCI PRI and PASID interface.
|
|
|
|
# Intel IOMMU support
|
|
config DMAR_TABLE
|
|
bool
|
|
|
|
config INTEL_IOMMU
|
|
bool "Support for Intel IOMMU using DMA Remapping Devices"
|
|
depends on PCI_MSI && ACPI && (X86 || IA64_GENERIC)
|
|
select IOMMU_API
|
|
select IOMMU_IOVA
|
|
select DMAR_TABLE
|
|
help
|
|
DMA remapping (DMAR) devices support enables independent address
|
|
translations for Direct Memory Access (DMA) from devices.
|
|
These DMA remapping devices are reported via ACPI tables
|
|
and include PCI device scope covered by these DMA
|
|
remapping devices.
|
|
|
|
config INTEL_IOMMU_SVM
|
|
bool "Support for Shared Virtual Memory with Intel IOMMU"
|
|
depends on INTEL_IOMMU && X86
|
|
select PCI_PASID
|
|
select MMU_NOTIFIER
|
|
help
|
|
Shared Virtual Memory (SVM) provides a facility for devices
|
|
to access DMA resources through process address space by
|
|
means of a Process Address Space ID (PASID).
|
|
|
|
config INTEL_IOMMU_DEFAULT_ON
|
|
def_bool y
|
|
prompt "Enable Intel DMA Remapping Devices by default"
|
|
depends on INTEL_IOMMU
|
|
help
|
|
Selecting this option will enable a DMAR device at boot time if
|
|
one is found. If this option is not selected, DMAR support can
|
|
be enabled by passing intel_iommu=on to the kernel.
|
|
|
|
config INTEL_IOMMU_BROKEN_GFX_WA
|
|
bool "Workaround broken graphics drivers (going away soon)"
|
|
depends on INTEL_IOMMU && BROKEN && X86
|
|
---help---
|
|
Current Graphics drivers tend to use physical address
|
|
for DMA and avoid using DMA APIs. Setting this config
|
|
option permits the IOMMU driver to set a unity map for
|
|
all the OS-visible memory. Hence the driver can continue
|
|
to use physical addresses for DMA, at least until this
|
|
option is removed in the 2.6.32 kernel.
|
|
|
|
config INTEL_IOMMU_FLOPPY_WA
|
|
def_bool y
|
|
depends on INTEL_IOMMU && X86
|
|
---help---
|
|
Floppy disk drivers are known to bypass DMA API calls
|
|
thereby failing to work when IOMMU is enabled. This
|
|
workaround will setup a 1:1 mapping for the first
|
|
16MiB to make floppy (an ISA device) work.
|
|
|
|
config IRQ_REMAP
|
|
bool "Support for Interrupt Remapping"
|
|
depends on X86_64 && X86_IO_APIC && PCI_MSI && ACPI
|
|
select DMAR_TABLE
|
|
---help---
|
|
Supports Interrupt remapping for IO-APIC and MSI devices.
|
|
To use x2apic mode in the CPU's which support x2APIC enhancements or
|
|
to support platforms with CPU's having > 8 bit APIC ID, say Y.
|
|
|
|
# OMAP IOMMU support
|
|
config OMAP_IOMMU
|
|
bool "OMAP IOMMU Support"
|
|
depends on ARM && MMU
|
|
depends on ARCH_OMAP2PLUS || COMPILE_TEST
|
|
select IOMMU_API
|
|
---help---
|
|
The OMAP3 media platform drivers depend on iommu support,
|
|
if you need them say Y here.
|
|
|
|
config OMAP_IOMMU_DEBUG
|
|
bool "Export OMAP IOMMU internals in DebugFS"
|
|
depends on OMAP_IOMMU && DEBUG_FS
|
|
---help---
|
|
Select this to see extensive information about
|
|
the internal state of OMAP IOMMU in debugfs.
|
|
|
|
Say N unless you know you need this.
|
|
|
|
config ROCKCHIP_IOMMU
|
|
bool "Rockchip IOMMU Support"
|
|
depends on ARM
|
|
depends on ARCH_ROCKCHIP || COMPILE_TEST
|
|
select IOMMU_API
|
|
select ARM_DMA_USE_IOMMU
|
|
help
|
|
Support for IOMMUs found on Rockchip rk32xx SOCs.
|
|
These IOMMUs allow virtualization of the address space used by most
|
|
cores within the multimedia subsystem.
|
|
Say Y here if you are using a Rockchip SoC that includes an IOMMU
|
|
device.
|
|
|
|
config TEGRA_IOMMU_GART
|
|
bool "Tegra GART IOMMU Support"
|
|
depends on ARCH_TEGRA_2x_SOC
|
|
select IOMMU_API
|
|
help
|
|
Enables support for remapping discontiguous physical memory
|
|
shared with the operating system into contiguous I/O virtual
|
|
space through the GART (Graphics Address Relocation Table)
|
|
hardware included on Tegra SoCs.
|
|
|
|
config TEGRA_IOMMU_SMMU
|
|
bool "NVIDIA Tegra SMMU Support"
|
|
depends on ARCH_TEGRA
|
|
depends on TEGRA_AHB
|
|
depends on TEGRA_MC
|
|
select IOMMU_API
|
|
help
|
|
This driver supports the IOMMU hardware (SMMU) found on NVIDIA Tegra
|
|
SoCs (Tegra30 up to Tegra210).
|
|
|
|
config EXYNOS_IOMMU
|
|
bool "Exynos IOMMU Support"
|
|
depends on ARCH_EXYNOS && MMU
|
|
select IOMMU_API
|
|
select ARM_DMA_USE_IOMMU
|
|
help
|
|
Support for the IOMMU (System MMU) of Samsung Exynos application
|
|
processor family. This enables H/W multimedia accelerators to see
|
|
non-linear physical memory chunks as linear memory in their
|
|
address space.
|
|
|
|
If unsure, say N here.
|
|
|
|
config EXYNOS_IOMMU_DEBUG
|
|
bool "Debugging log for Exynos IOMMU"
|
|
depends on EXYNOS_IOMMU
|
|
help
|
|
Select this to see the detailed log message that shows what
|
|
happens in the IOMMU driver.
|
|
|
|
Say N unless you need kernel log message for IOMMU debugging.
|
|
|
|
config IPMMU_VMSA
|
|
bool "Renesas VMSA-compatible IPMMU"
|
|
depends on ARM_LPAE
|
|
depends on ARCH_RENESAS || COMPILE_TEST
|
|
select IOMMU_API
|
|
select IOMMU_IO_PGTABLE_LPAE
|
|
select ARM_DMA_USE_IOMMU
|
|
help
|
|
Support for the Renesas VMSA-compatible IPMMU Renesas found in the
|
|
R-Mobile APE6 and R-Car H2/M2 SoCs.
|
|
|
|
If unsure, say N.
|
|
|
|
config SPAPR_TCE_IOMMU
|
|
bool "sPAPR TCE IOMMU Support"
|
|
depends on PPC_POWERNV || PPC_PSERIES
|
|
select IOMMU_API
|
|
help
|
|
Enables bits of IOMMU API required by VFIO. The iommu_ops
|
|
is not implemented as it is not necessary for VFIO.
|
|
|
|
# ARM IOMMU support
|
|
config ARM_SMMU
|
|
bool "ARM Ltd. System MMU (SMMU) Support"
|
|
depends on (ARM64 || ARM) && MMU
|
|
select IOMMU_API
|
|
select IOMMU_IO_PGTABLE_LPAE
|
|
select ARM_DMA_USE_IOMMU if ARM
|
|
help
|
|
Support for implementations of the ARM System MMU architecture
|
|
versions 1 and 2.
|
|
|
|
Say Y here if your SoC includes an IOMMU device implementing
|
|
the ARM SMMU architecture.
|
|
|
|
config ARM_SMMU_V3
|
|
bool "ARM Ltd. System MMU Version 3 (SMMUv3) Support"
|
|
depends on ARM64
|
|
select IOMMU_API
|
|
select IOMMU_IO_PGTABLE_LPAE
|
|
select GENERIC_MSI_IRQ_DOMAIN
|
|
help
|
|
Support for implementations of the ARM System MMU architecture
|
|
version 3 providing translation support to a PCIe root complex.
|
|
|
|
Say Y here if your system includes an IOMMU device implementing
|
|
the ARM SMMUv3 architecture.
|
|
|
|
config S390_IOMMU
|
|
def_bool y if S390 && PCI
|
|
depends on S390 && PCI
|
|
select IOMMU_API
|
|
help
|
|
Support for the IOMMU API for s390 PCI devices.
|
|
|
|
config MTK_IOMMU
|
|
bool "MTK IOMMU Support"
|
|
depends on ARM || ARM64
|
|
depends on ARCH_MEDIATEK || COMPILE_TEST
|
|
select ARM_DMA_USE_IOMMU
|
|
select IOMMU_API
|
|
select IOMMU_DMA
|
|
select IOMMU_IO_PGTABLE_ARMV7S
|
|
select MEMORY
|
|
select MTK_SMI
|
|
help
|
|
Support for the M4U on certain Mediatek SOCs. M4U is MultiMedia
|
|
Memory Management Unit. This option enables remapping of DMA memory
|
|
accesses for the multimedia subsystem.
|
|
|
|
If unsure, say N here.
|
|
|
|
config MTK_IOMMU_V1
|
|
bool "MTK IOMMU Version 1 (M4U gen1) Support"
|
|
depends on ARM
|
|
depends on ARCH_MEDIATEK || COMPILE_TEST
|
|
select ARM_DMA_USE_IOMMU
|
|
select IOMMU_API
|
|
select MEMORY
|
|
select MTK_SMI
|
|
select COMMON_CLK_MT2701_MMSYS
|
|
select COMMON_CLK_MT2701_IMGSYS
|
|
select COMMON_CLK_MT2701_VDECSYS
|
|
help
|
|
Support for the M4U on certain Mediatek SoCs. M4U generation 1 HW is
|
|
Multimedia Memory Managememt Unit. This option enables remapping of
|
|
DMA memory accesses for the multimedia subsystem.
|
|
|
|
if unsure, say N here.
|
|
|
|
endif # IOMMU_SUPPORT
|