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 Gen{2,3} and RZ/G{1,2} 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 ARM_SMMU_V3_SVA 312 bool "Shared Virtual Addressing support for the ARM SMMUv3" 313 depends on ARM_SMMU_V3 314 help 315 Support for sharing process address spaces with devices using the 316 SMMUv3. 317 318 Say Y here if your system supports SVA extensions such as PCIe PASID 319 and PRI. 320 321config S390_IOMMU 322 def_bool y if S390 && PCI 323 depends on S390 && PCI 324 select IOMMU_API 325 help 326 Support for the IOMMU API for s390 PCI devices. 327 328config S390_CCW_IOMMU 329 bool "S390 CCW IOMMU Support" 330 depends on S390 && CCW || COMPILE_TEST 331 select IOMMU_API 332 help 333 Enables bits of IOMMU API required by VFIO. The iommu_ops 334 is not implemented as it is not necessary for VFIO. 335 336config S390_AP_IOMMU 337 bool "S390 AP IOMMU Support" 338 depends on S390 && ZCRYPT || COMPILE_TEST 339 select IOMMU_API 340 help 341 Enables bits of IOMMU API required by VFIO. The iommu_ops 342 is not implemented as it is not necessary for VFIO. 343 344config MTK_IOMMU 345 bool "MTK IOMMU Support" 346 depends on ARCH_MEDIATEK || COMPILE_TEST 347 select ARM_DMA_USE_IOMMU 348 select IOMMU_API 349 select IOMMU_IO_PGTABLE_ARMV7S 350 select MEMORY 351 select MTK_SMI 352 help 353 Support for the M4U on certain Mediatek SOCs. M4U is MultiMedia 354 Memory Management Unit. This option enables remapping of DMA memory 355 accesses for the multimedia subsystem. 356 357 If unsure, say N here. 358 359config MTK_IOMMU_V1 360 bool "MTK IOMMU Version 1 (M4U gen1) Support" 361 depends on ARM 362 depends on ARCH_MEDIATEK || COMPILE_TEST 363 select ARM_DMA_USE_IOMMU 364 select IOMMU_API 365 select MEMORY 366 select MTK_SMI 367 help 368 Support for the M4U on certain Mediatek SoCs. M4U generation 1 HW is 369 Multimedia Memory Managememt Unit. This option enables remapping of 370 DMA memory accesses for the multimedia subsystem. 371 372 if unsure, say N here. 373 374config QCOM_IOMMU 375 # Note: iommu drivers cannot (yet?) be built as modules 376 bool "Qualcomm IOMMU Support" 377 depends on ARCH_QCOM || (COMPILE_TEST && !GENERIC_ATOMIC64) 378 select IOMMU_API 379 select IOMMU_IO_PGTABLE_LPAE 380 select ARM_DMA_USE_IOMMU 381 help 382 Support for IOMMU on certain Qualcomm SoCs. 383 384config HYPERV_IOMMU 385 bool "Hyper-V x2APIC IRQ Handling" 386 depends on HYPERV && X86 387 select IOMMU_API 388 default HYPERV 389 help 390 Stub IOMMU driver to handle IRQs as to allow Hyper-V Linux 391 guests to run with x2APIC mode enabled. 392 393config VIRTIO_IOMMU 394 tristate "Virtio IOMMU driver" 395 depends on VIRTIO 396 depends on ARM64 397 select IOMMU_API 398 select INTERVAL_TREE 399 help 400 Para-virtualised IOMMU driver with virtio. 401 402 Say Y here if you intend to run this kernel as a guest. 403 404endif # IOMMU_SUPPORT 405