| # SPDX-License-Identifier: GPL-2.0-only | |
| # The IOVA library may also be used by non-IOMMU_API users | |
| config IOMMU_IOVA | |
| tristate | |
| # The IOASID library may also be used by non-IOMMU_API users | |
| config IOASID | |
| tristate | |
| # 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 ARM || ARM64 || (COMPILE_TEST && !GENERIC_ATOMIC64) | |
| 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 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_DEBUGFS | |
| bool "Export IOMMU internals in DebugFS" | |
| depends on DEBUG_FS | |
| help | |
| Allows exposure of IOMMU device internals. This option enables | |
| the use of debugfs by IOMMU drivers as required. Devices can, | |
| at initialization time, cause the IOMMU code to create a top-level | |
| debug/iommu directory, and then populate a subdirectory with | |
| entries as required. | |
| choice | |
| prompt "IOMMU default domain type" | |
| depends on IOMMU_API | |
| default IOMMU_DEFAULT_DMA_LAZY if X86 || IA64 | |
| default IOMMU_DEFAULT_DMA_STRICT | |
| help | |
| Choose the type of IOMMU domain used to manage DMA API usage by | |
| device drivers. The options here typically represent different | |
| levels of tradeoff between robustness/security and performance, | |
| depending on the IOMMU driver. Not all IOMMUs support all options. | |
| This choice can be overridden at boot via the command line, and for | |
| some devices also at runtime via sysfs. | |
| If unsure, keep the default. | |
| config IOMMU_DEFAULT_DMA_STRICT | |
| bool "Translated - Strict" | |
| help | |
| Trusted devices use translation to restrict their access to only | |
| DMA-mapped pages, with strict TLB invalidation on unmap. Equivalent | |
| to passing "iommu.passthrough=0 iommu.strict=1" on the command line. | |
| Untrusted devices always use this mode, with an additional layer of | |
| bounce-buffering such that they cannot gain access to any unrelated | |
| data within a mapped page. | |
| config IOMMU_DEFAULT_DMA_LAZY | |
| bool "Translated - Lazy" | |
| help | |
| Trusted devices use translation to restrict their access to only | |
| DMA-mapped pages, but with "lazy" batched TLB invalidation. This | |
| mode allows higher performance with some IOMMUs due to reduced TLB | |
| flushing, but at the cost of reduced isolation since devices may be | |
| able to access memory for some time after it has been unmapped. | |
| Equivalent to passing "iommu.passthrough=0 iommu.strict=0" on the | |
| command line. | |
| If this mode is not supported by the IOMMU driver, the effective | |
| runtime default will fall back to IOMMU_DEFAULT_DMA_STRICT. | |
| config IOMMU_DEFAULT_PASSTHROUGH | |
| bool "Passthrough" | |
| help | |
| Trusted devices are identity-mapped, giving them unrestricted access | |
| to memory with minimal performance overhead. Equivalent to passing | |
| "iommu.passthrough=1" (historically "iommu=pt") on the command line. | |
| If this mode is not supported by the IOMMU driver, the effective | |
| runtime default will fall back to IOMMU_DEFAULT_DMA_STRICT. | |
| endchoice | |
| config OF_IOMMU | |
| def_bool y | |
| depends on OF && IOMMU_API | |
| # IOMMU-agnostic DMA-mapping layer | |
| config IOMMU_DMA | |
| bool | |
| select DMA_OPS | |
| select IOMMU_API | |
| select IOMMU_IOVA | |
| select IRQ_MSI_IOMMU | |
| select NEED_SG_DMA_LENGTH | |
| # Shared Virtual Addressing | |
| config IOMMU_SVA | |
| bool | |
| select IOASID | |
| config FSL_PAMU | |
| bool "Freescale IOMMU support" | |
| depends on PCI | |
| depends on PHYS_64BIT | |
| 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. | |
| source "drivers/iommu/amd/Kconfig" | |
| source "drivers/iommu/intel/Kconfig" | |
| 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 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 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 SUN50I_IOMMU | |
| bool "Allwinner H6 IOMMU Support" | |
| depends on HAS_DMA | |
| depends on ARCH_SUNXI || COMPILE_TEST | |
| select ARM_DMA_USE_IOMMU | |
| select IOMMU_API | |
| help | |
| Support for the IOMMU introduced in the Allwinner H6 SoCs. | |
| config TEGRA_IOMMU_GART | |
| bool "Tegra GART IOMMU Support" | |
| depends on ARCH_TEGRA_2x_SOC | |
| depends on TEGRA_MC | |
| 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 || COMPILE_TEST | |
| depends on !CPU_BIG_ENDIAN # revisit driver if we can enable big-endian ptes | |
| 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 ARCH_RENESAS || (COMPILE_TEST && !GENERIC_ATOMIC64) | |
| select IOMMU_API | |
| select IOMMU_IO_PGTABLE_LPAE | |
| select ARM_DMA_USE_IOMMU | |
| help | |
| Support for the Renesas VMSA-compatible IPMMU found in the R-Mobile | |
| APE6, R-Car Gen{2,3} and RZ/G{1,2} 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. | |
| config APPLE_DART | |
| tristate "Apple DART IOMMU Support" | |
| depends on ARCH_APPLE || (COMPILE_TEST && !GENERIC_ATOMIC64) | |
| select IOMMU_API | |
| select IOMMU_IO_PGTABLE_LPAE | |
| default ARCH_APPLE | |
| help | |
| Support for Apple DART (Device Address Resolution Table) IOMMUs | |
| found in Apple ARM SoCs like the M1. | |
| This IOMMU is required for most peripherals using DMA to access | |
| the main memory. | |
| Say Y here if you are using an Apple SoC. | |
| # ARM IOMMU support | |
| config ARM_SMMU | |
| tristate "ARM Ltd. System MMU (SMMU) Support" | |
| depends on ARM64 || ARM || (COMPILE_TEST && !GENERIC_ATOMIC64) | |
| 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_LEGACY_DT_BINDINGS | |
| bool "Support the legacy \"mmu-masters\" devicetree bindings" | |
| depends on ARM_SMMU=y && OF | |
| help | |
| Support for the badly designed and deprecated "mmu-masters" | |
| devicetree bindings. This allows some DMA masters to attach | |
| to the SMMU but does not provide any support via the DMA API. | |
| If you're lucky, you might be able to get VFIO up and running. | |
| If you say Y here then you'll make me very sad. Instead, say N | |
| and move your firmware to the utopian future that was 2016. | |
| config ARM_SMMU_DISABLE_BYPASS_BY_DEFAULT | |
| bool "Default to disabling bypass on ARM SMMU v1 and v2" | |
| depends on ARM_SMMU | |
| default y | |
| help | |
| Say Y here to (by default) disable bypass streams such that | |
| incoming transactions from devices that are not attached to | |
| an iommu domain will report an abort back to the device and | |
| will not be allowed to pass through the SMMU. | |
| Any old kernels that existed before this KConfig was | |
| introduced would default to _allowing_ bypass (AKA the | |
| equivalent of NO for this config). However the default for | |
| this option is YES because the old behavior is insecure. | |
| There are few reasons to allow unmatched stream bypass, and | |
| even fewer good ones. If saying YES here breaks your board | |
| you should work on fixing your board. This KConfig option | |
| is expected to be removed in the future and we'll simply | |
| hardcode the bypass disable in the code. | |
| NOTE: the kernel command line parameter | |
| 'arm-smmu.disable_bypass' will continue to override this | |
| config. | |
| config ARM_SMMU_QCOM | |
| def_tristate y | |
| depends on ARM_SMMU && ARCH_QCOM | |
| select QCOM_SCM | |
| help | |
| When running on a Qualcomm platform that has the custom variant | |
| of the ARM SMMU, this needs to be built into the SMMU driver. | |
| config ARM_SMMU_QCOM_DEBUG | |
| bool "ARM SMMU QCOM implementation defined debug support" | |
| depends on ARM_SMMU_QCOM | |
| help | |
| Support for implementation specific debug features in ARM SMMU | |
| hardware found in QTI platforms. | |
| Say Y here to enable debug for issues such as TLB sync timeouts | |
| which requires implementation defined register dumps. | |
| config ARM_SMMU_V3 | |
| tristate "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 ARM_SMMU_V3_SVA | |
| bool "Shared Virtual Addressing support for the ARM SMMUv3" | |
| depends on ARM_SMMU_V3 | |
| select IOMMU_SVA | |
| select MMU_NOTIFIER | |
| help | |
| Support for sharing process address spaces with devices using the | |
| SMMUv3. | |
| Say Y here if your system supports SVA extensions such as PCIe PASID | |
| and PRI. | |
| 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 S390_CCW_IOMMU | |
| bool "S390 CCW IOMMU Support" | |
| depends on S390 && CCW || COMPILE_TEST | |
| 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. | |
| config S390_AP_IOMMU | |
| bool "S390 AP IOMMU Support" | |
| depends on S390 && ZCRYPT || COMPILE_TEST | |
| 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. | |
| config MTK_IOMMU | |
| tristate "MediaTek IOMMU Support" | |
| depends on ARCH_MEDIATEK || COMPILE_TEST | |
| select ARM_DMA_USE_IOMMU | |
| select IOMMU_API | |
| 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 | |
| tristate "MediaTek 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 | |
| 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. | |
| config QCOM_IOMMU | |
| # Note: iommu drivers cannot (yet?) be built as modules | |
| bool "Qualcomm IOMMU Support" | |
| depends on ARCH_QCOM || (COMPILE_TEST && !GENERIC_ATOMIC64) | |
| select QCOM_SCM | |
| select IOMMU_API | |
| select IOMMU_IO_PGTABLE_LPAE | |
| select ARM_DMA_USE_IOMMU | |
| help | |
| Support for IOMMU on certain Qualcomm SoCs. | |
| config HYPERV_IOMMU | |
| bool "Hyper-V x2APIC IRQ Handling" | |
| depends on HYPERV && X86 | |
| select IOMMU_API | |
| default HYPERV | |
| help | |
| Stub IOMMU driver to handle IRQs as to allow Hyper-V Linux | |
| guests to run with x2APIC mode enabled. | |
| config VIRTIO_IOMMU | |
| tristate "Virtio IOMMU driver" | |
| depends on VIRTIO | |
| depends on (ARM64 || X86) | |
| select IOMMU_API | |
| select IOMMU_DMA | |
| select INTERVAL_TREE | |
| select ACPI_VIOT if ACPI | |
| help | |
| Para-virtualised IOMMU driver with virtio. | |
| Say Y here if you intend to run this kernel as a guest. | |
| config SPRD_IOMMU | |
| tristate "Unisoc IOMMU Support" | |
| depends on ARCH_SPRD || COMPILE_TEST | |
| select IOMMU_API | |
| help | |
| Support for IOMMU on Unisoc's SoCs, this IOMMU can be used by | |
| Unisoc's multimedia devices, such as display, Image codec(jpeg) | |
| and a few signal processors, including VSP(video), GSP(graphic), | |
| ISP(image), and CPP(camera pixel processor), etc. | |
| Say Y here if you want to use the multimedia devices listed above. | |
| endif # IOMMU_SUPPORT |