1# SPDX-License-Identifier: GPL-2.0-only 2# The IOVA library may also be used by non-IOMMU_API users 3config IOMMU_IOVA 4 tristate 5 6# The IOASID library may also be used by non-IOMMU_API users 7config IOASID 8 tristate 9 10# IOMMU_API always gets selected by whoever wants it. 11config IOMMU_API 12 bool 13 14menuconfig IOMMU_SUPPORT 15 bool "IOMMU Hardware Support" 16 depends on MMU 17 default y 18 help 19 Say Y here if you want to compile device drivers for IO Memory 20 Management Units into the kernel. These devices usually allow to 21 remap DMA requests and/or remap interrupts from other devices on the 22 system. 23 24if IOMMU_SUPPORT 25 26menu "Generic IOMMU Pagetable Support" 27 28# Selected by the actual pagetable implementations 29config IOMMU_IO_PGTABLE 30 bool 31 32config IOMMU_IO_PGTABLE_LPAE 33 bool "ARMv7/v8 Long Descriptor Format" 34 select IOMMU_IO_PGTABLE 35 depends on ARM || ARM64 || (COMPILE_TEST && !GENERIC_ATOMIC64) 36 help 37 Enable support for the ARM long descriptor pagetable format. 38 This allocator supports 4K/2M/1G, 16K/32M and 64K/512M page 39 sizes at both stage-1 and stage-2, as well as address spaces 40 up to 48-bits in size. 41 42config IOMMU_IO_PGTABLE_LPAE_SELFTEST 43 bool "LPAE selftests" 44 depends on IOMMU_IO_PGTABLE_LPAE 45 help 46 Enable self-tests for LPAE page table allocator. This performs 47 a series of page-table consistency checks during boot. 48 49 If unsure, say N here. 50 51config IOMMU_IO_PGTABLE_ARMV7S 52 bool "ARMv7/v8 Short Descriptor Format" 53 select IOMMU_IO_PGTABLE 54 depends on ARM || ARM64 || COMPILE_TEST 55 help 56 Enable support for the ARM Short-descriptor pagetable format. 57 This supports 32-bit virtual and physical addresses mapped using 58 2-level tables with 4KB pages/1MB sections, and contiguous entries 59 for 64KB pages/16MB supersections if indicated by the IOMMU driver. 60 61config IOMMU_IO_PGTABLE_ARMV7S_SELFTEST 62 bool "ARMv7s selftests" 63 depends on IOMMU_IO_PGTABLE_ARMV7S 64 help 65 Enable self-tests for ARMv7s page table allocator. This performs 66 a series of page-table consistency checks during boot. 67 68 If unsure, say N here. 69 70endmenu 71 72config IOMMU_DEBUGFS 73 bool "Export IOMMU internals in DebugFS" 74 depends on DEBUG_FS 75 help 76 Allows exposure of IOMMU device internals. This option enables 77 the use of debugfs by IOMMU drivers as required. Devices can, 78 at initialization time, cause the IOMMU code to create a top-level 79 debug/iommu directory, and then populate a subdirectory with 80 entries as required. 81 82config IOMMU_DEFAULT_PASSTHROUGH 83 bool "IOMMU passthrough by default" 84 depends on IOMMU_API 85 help 86 Enable passthrough by default, removing the need to pass in 87 iommu.passthrough=on or iommu=pt through command line. If this 88 is enabled, you can still disable with iommu.passthrough=off 89 or iommu=nopt depending on the architecture. 90 91 If unsure, say N here. 92 93config OF_IOMMU 94 def_bool y 95 depends on OF && IOMMU_API 96 97# IOMMU-agnostic DMA-mapping layer 98config IOMMU_DMA 99 bool 100 select DMA_OPS 101 select IOMMU_API 102 select IOMMU_IOVA 103 select IRQ_MSI_IOMMU 104 select NEED_SG_DMA_LENGTH 105 106config FSL_PAMU 107 bool "Freescale IOMMU support" 108 depends on PCI 109 depends on PHYS_64BIT 110 depends on PPC_E500MC || (COMPILE_TEST && PPC) 111 select IOMMU_API 112 select GENERIC_ALLOCATOR 113 help 114 Freescale PAMU support. PAMU is the IOMMU present on Freescale QorIQ platforms. 115 PAMU can authorize memory access, remap the memory address, and remap I/O 116 transaction types. 117 118# MSM IOMMU support 119config MSM_IOMMU 120 bool "MSM IOMMU Support" 121 depends on ARM 122 depends on ARCH_MSM8X60 || ARCH_MSM8960 || COMPILE_TEST 123 select IOMMU_API 124 select IOMMU_IO_PGTABLE_ARMV7S 125 help 126 Support for the IOMMUs found on certain Qualcomm SOCs. 127 These IOMMUs allow virtualization of the address space used by most 128 cores within the multimedia subsystem. 129 130 If unsure, say N here. 131 132source "drivers/iommu/amd/Kconfig" 133source "drivers/iommu/intel/Kconfig" 134 135config IRQ_REMAP 136 bool "Support for Interrupt Remapping" 137 depends on X86_64 && X86_IO_APIC && PCI_MSI && ACPI 138 select DMAR_TABLE 139 help 140 Supports Interrupt remapping for IO-APIC and MSI devices. 141 To use x2apic mode in the CPU's which support x2APIC enhancements or 142 to support platforms with CPU's having > 8 bit APIC ID, say Y. 143 144# OMAP IOMMU support 145config OMAP_IOMMU 146 bool "OMAP IOMMU Support" 147 depends on ARCH_OMAP2PLUS || COMPILE_TEST 148 select IOMMU_API 149 help 150 The OMAP3 media platform drivers depend on iommu support, 151 if you need them say Y here. 152 153config OMAP_IOMMU_DEBUG 154 bool "Export OMAP IOMMU internals in DebugFS" 155 depends on OMAP_IOMMU && DEBUG_FS 156 help 157 Select this to see extensive information about 158 the internal state of OMAP IOMMU in debugfs. 159 160 Say N unless you know you need this. 161 162config ROCKCHIP_IOMMU 163 bool "Rockchip IOMMU Support" 164 depends on ARCH_ROCKCHIP || COMPILE_TEST 165 select IOMMU_API 166 select ARM_DMA_USE_IOMMU 167 help 168 Support for IOMMUs found on Rockchip rk32xx SOCs. 169 These IOMMUs allow virtualization of the address space used by most 170 cores within the multimedia subsystem. 171 Say Y here if you are using a Rockchip SoC that includes an IOMMU 172 device. 173 174config SUN50I_IOMMU 175 bool "Allwinner H6 IOMMU Support" 176 depends on HAS_DMA 177 depends on ARCH_SUNXI || COMPILE_TEST 178 select ARM_DMA_USE_IOMMU 179 select IOMMU_API 180 help 181 Support for the IOMMU introduced in the Allwinner H6 SoCs. 182 183config TEGRA_IOMMU_GART 184 bool "Tegra GART IOMMU Support" 185 depends on ARCH_TEGRA_2x_SOC 186 depends on TEGRA_MC 187 select IOMMU_API 188 help 189 Enables support for remapping discontiguous physical memory 190 shared with the operating system into contiguous I/O virtual 191 space through the GART (Graphics Address Relocation Table) 192 hardware included on Tegra SoCs. 193 194config TEGRA_IOMMU_SMMU 195 bool "NVIDIA Tegra SMMU Support" 196 depends on ARCH_TEGRA 197 depends on TEGRA_AHB 198 depends on TEGRA_MC 199 select IOMMU_API 200 help 201 This driver supports the IOMMU hardware (SMMU) found on NVIDIA Tegra 202 SoCs (Tegra30 up to Tegra210). 203 204config EXYNOS_IOMMU 205 bool "Exynos IOMMU Support" 206 depends on ARCH_EXYNOS || COMPILE_TEST 207 depends on !CPU_BIG_ENDIAN # revisit driver if we can enable big-endian ptes 208 select IOMMU_API 209 select ARM_DMA_USE_IOMMU 210 help 211 Support for the IOMMU (System MMU) of Samsung Exynos application 212 processor family. This enables H/W multimedia accelerators to see 213 non-linear physical memory chunks as linear memory in their 214 address space. 215 216 If unsure, say N here. 217 218config EXYNOS_IOMMU_DEBUG 219 bool "Debugging log for Exynos IOMMU" 220 depends on EXYNOS_IOMMU 221 help 222 Select this to see the detailed log message that shows what 223 happens in the IOMMU driver. 224 225 Say N unless you need kernel log message for IOMMU debugging. 226 227config IPMMU_VMSA 228 bool "Renesas VMSA-compatible IPMMU" 229 depends on ARCH_RENESAS || (COMPILE_TEST && !GENERIC_ATOMIC64) 230 select IOMMU_API 231 select IOMMU_IO_PGTABLE_LPAE 232 select ARM_DMA_USE_IOMMU 233 help 234 Support for the Renesas VMSA-compatible IPMMU found in the R-Mobile 235 APE6, R-Car Gen2, and R-Car Gen3 SoCs. 236 237 If unsure, say N. 238 239config SPAPR_TCE_IOMMU 240 bool "sPAPR TCE IOMMU Support" 241 depends on PPC_POWERNV || PPC_PSERIES 242 select IOMMU_API 243 help 244 Enables bits of IOMMU API required by VFIO. The iommu_ops 245 is not implemented as it is not necessary for VFIO. 246 247# ARM IOMMU support 248config ARM_SMMU 249 tristate "ARM Ltd. System MMU (SMMU) Support" 250 depends on ARM64 || ARM || (COMPILE_TEST && !GENERIC_ATOMIC64) 251 select IOMMU_API 252 select IOMMU_IO_PGTABLE_LPAE 253 select ARM_DMA_USE_IOMMU if ARM 254 help 255 Support for implementations of the ARM System MMU architecture 256 versions 1 and 2. 257 258 Say Y here if your SoC includes an IOMMU device implementing 259 the ARM SMMU architecture. 260 261config ARM_SMMU_LEGACY_DT_BINDINGS 262 bool "Support the legacy \"mmu-masters\" devicetree bindings" 263 depends on ARM_SMMU=y && OF 264 help 265 Support for the badly designed and deprecated "mmu-masters" 266 devicetree bindings. This allows some DMA masters to attach 267 to the SMMU but does not provide any support via the DMA API. 268 If you're lucky, you might be able to get VFIO up and running. 269 270 If you say Y here then you'll make me very sad. Instead, say N 271 and move your firmware to the utopian future that was 2016. 272 273config ARM_SMMU_DISABLE_BYPASS_BY_DEFAULT 274 bool "Default to disabling bypass on ARM SMMU v1 and v2" 275 depends on ARM_SMMU 276 default y 277 help 278 Say Y here to (by default) disable bypass streams such that 279 incoming transactions from devices that are not attached to 280 an iommu domain will report an abort back to the device and 281 will not be allowed to pass through the SMMU. 282 283 Any old kernels that existed before this KConfig was 284 introduced would default to _allowing_ bypass (AKA the 285 equivalent of NO for this config). However the default for 286 this option is YES because the old behavior is insecure. 287 288 There are few reasons to allow unmatched stream bypass, and 289 even fewer good ones. If saying YES here breaks your board 290 you should work on fixing your board. This KConfig option 291 is expected to be removed in the future and we'll simply 292 hardcode the bypass disable in the code. 293 294 NOTE: the kernel command line parameter 295 'arm-smmu.disable_bypass' will continue to override this 296 config. 297 298config ARM_SMMU_V3 299 tristate "ARM Ltd. System MMU Version 3 (SMMUv3) Support" 300 depends on ARM64 301 select IOMMU_API 302 select IOMMU_IO_PGTABLE_LPAE 303 select GENERIC_MSI_IRQ_DOMAIN 304 help 305 Support for implementations of the ARM System MMU architecture 306 version 3 providing translation support to a PCIe root complex. 307 308 Say Y here if your system includes an IOMMU device implementing 309 the ARM SMMUv3 architecture. 310 311config S390_IOMMU 312 def_bool y if S390 && PCI 313 depends on S390 && PCI 314 select IOMMU_API 315 help 316 Support for the IOMMU API for s390 PCI devices. 317 318config S390_CCW_IOMMU 319 bool "S390 CCW IOMMU Support" 320 depends on S390 && CCW || COMPILE_TEST 321 select IOMMU_API 322 help 323 Enables bits of IOMMU API required by VFIO. The iommu_ops 324 is not implemented as it is not necessary for VFIO. 325 326config S390_AP_IOMMU 327 bool "S390 AP IOMMU Support" 328 depends on S390 && ZCRYPT || COMPILE_TEST 329 select IOMMU_API 330 help 331 Enables bits of IOMMU API required by VFIO. The iommu_ops 332 is not implemented as it is not necessary for VFIO. 333 334config MTK_IOMMU 335 bool "MTK IOMMU Support" 336 depends on ARCH_MEDIATEK || COMPILE_TEST 337 select ARM_DMA_USE_IOMMU 338 select IOMMU_API 339 select IOMMU_IO_PGTABLE_ARMV7S 340 select MEMORY 341 select MTK_SMI 342 help 343 Support for the M4U on certain Mediatek SOCs. M4U is MultiMedia 344 Memory Management Unit. This option enables remapping of DMA memory 345 accesses for the multimedia subsystem. 346 347 If unsure, say N here. 348 349config MTK_IOMMU_V1 350 bool "MTK IOMMU Version 1 (M4U gen1) Support" 351 depends on ARM 352 depends on ARCH_MEDIATEK || COMPILE_TEST 353 select ARM_DMA_USE_IOMMU 354 select IOMMU_API 355 select MEMORY 356 select MTK_SMI 357 help 358 Support for the M4U on certain Mediatek SoCs. M4U generation 1 HW is 359 Multimedia Memory Managememt Unit. This option enables remapping of 360 DMA memory accesses for the multimedia subsystem. 361 362 if unsure, say N here. 363 364config QCOM_IOMMU 365 # Note: iommu drivers cannot (yet?) be built as modules 366 bool "Qualcomm IOMMU Support" 367 depends on ARCH_QCOM || (COMPILE_TEST && !GENERIC_ATOMIC64) 368 select IOMMU_API 369 select IOMMU_IO_PGTABLE_LPAE 370 select ARM_DMA_USE_IOMMU 371 help 372 Support for IOMMU on certain Qualcomm SoCs. 373 374config HYPERV_IOMMU 375 bool "Hyper-V x2APIC IRQ Handling" 376 depends on HYPERV && X86 377 select IOMMU_API 378 default HYPERV 379 help 380 Stub IOMMU driver to handle IRQs as to allow Hyper-V Linux 381 guests to run with x2APIC mode enabled. 382 383config VIRTIO_IOMMU 384 tristate "Virtio IOMMU driver" 385 depends on VIRTIO 386 depends on ARM64 387 select IOMMU_API 388 select INTERVAL_TREE 389 help 390 Para-virtualised IOMMU driver with virtio. 391 392 Say Y here if you intend to run this kernel as a guest. 393 394endif # IOMMU_SUPPORT 395