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 tristate "Rockchip IOMMU Support" 164 depends on ARM || ARM64 165 depends on ARCH_ROCKCHIP || COMPILE_TEST 166 select IOMMU_API 167 select ARM_DMA_USE_IOMMU 168 help 169 Support for IOMMUs found on Rockchip rk32xx SOCs. 170 These IOMMUs allow virtualization of the address space used by most 171 cores within the multimedia subsystem. 172 Say Y here if you are using a Rockchip SoC that includes an IOMMU 173 device. 174 175config SUN50I_IOMMU 176 bool "Allwinner H6 IOMMU Support" 177 depends on HAS_DMA 178 depends on ARCH_SUNXI || COMPILE_TEST 179 select ARM_DMA_USE_IOMMU 180 select IOMMU_API 181 help 182 Support for the IOMMU introduced in the Allwinner H6 SoCs. 183 184config TEGRA_IOMMU_GART 185 bool "Tegra GART IOMMU Support" 186 depends on ARCH_TEGRA_2x_SOC 187 depends on TEGRA_MC 188 select IOMMU_API 189 help 190 Enables support for remapping discontiguous physical memory 191 shared with the operating system into contiguous I/O virtual 192 space through the GART (Graphics Address Relocation Table) 193 hardware included on Tegra SoCs. 194 195config TEGRA_IOMMU_SMMU 196 bool "NVIDIA Tegra SMMU Support" 197 depends on ARCH_TEGRA 198 depends on TEGRA_AHB 199 depends on TEGRA_MC 200 select IOMMU_API 201 help 202 This driver supports the IOMMU hardware (SMMU) found on NVIDIA Tegra 203 SoCs (Tegra30 up to Tegra210). 204 205config EXYNOS_IOMMU 206 bool "Exynos IOMMU Support" 207 depends on ARCH_EXYNOS || COMPILE_TEST 208 depends on !CPU_BIG_ENDIAN # revisit driver if we can enable big-endian ptes 209 select IOMMU_API 210 select ARM_DMA_USE_IOMMU 211 help 212 Support for the IOMMU (System MMU) of Samsung Exynos application 213 processor family. This enables H/W multimedia accelerators to see 214 non-linear physical memory chunks as linear memory in their 215 address space. 216 217 If unsure, say N here. 218 219config EXYNOS_IOMMU_DEBUG 220 bool "Debugging log for Exynos IOMMU" 221 depends on EXYNOS_IOMMU 222 help 223 Select this to see the detailed log message that shows what 224 happens in the IOMMU driver. 225 226 Say N unless you need kernel log message for IOMMU debugging. 227 228config IPMMU_VMSA 229 bool "Renesas VMSA-compatible IPMMU" 230 depends on ARCH_RENESAS || (COMPILE_TEST && !GENERIC_ATOMIC64) 231 select IOMMU_API 232 select IOMMU_IO_PGTABLE_LPAE 233 select ARM_DMA_USE_IOMMU 234 help 235 Support for the Renesas VMSA-compatible IPMMU found in the R-Mobile 236 APE6, R-Car Gen{2,3} and RZ/G{1,2} SoCs. 237 238 If unsure, say N. 239 240config SPAPR_TCE_IOMMU 241 bool "sPAPR TCE IOMMU Support" 242 depends on PPC_POWERNV || PPC_PSERIES 243 select IOMMU_API 244 help 245 Enables bits of IOMMU API required by VFIO. The iommu_ops 246 is not implemented as it is not necessary for VFIO. 247 248# ARM IOMMU support 249config ARM_SMMU 250 tristate "ARM Ltd. System MMU (SMMU) Support" 251 depends on ARM64 || ARM || (COMPILE_TEST && !GENERIC_ATOMIC64) 252 select IOMMU_API 253 select IOMMU_IO_PGTABLE_LPAE 254 select ARM_DMA_USE_IOMMU if ARM 255 help 256 Support for implementations of the ARM System MMU architecture 257 versions 1 and 2. 258 259 Say Y here if your SoC includes an IOMMU device implementing 260 the ARM SMMU architecture. 261 262config ARM_SMMU_LEGACY_DT_BINDINGS 263 bool "Support the legacy \"mmu-masters\" devicetree bindings" 264 depends on ARM_SMMU=y && OF 265 help 266 Support for the badly designed and deprecated "mmu-masters" 267 devicetree bindings. This allows some DMA masters to attach 268 to the SMMU but does not provide any support via the DMA API. 269 If you're lucky, you might be able to get VFIO up and running. 270 271 If you say Y here then you'll make me very sad. Instead, say N 272 and move your firmware to the utopian future that was 2016. 273 274config ARM_SMMU_DISABLE_BYPASS_BY_DEFAULT 275 bool "Default to disabling bypass on ARM SMMU v1 and v2" 276 depends on ARM_SMMU 277 default y 278 help 279 Say Y here to (by default) disable bypass streams such that 280 incoming transactions from devices that are not attached to 281 an iommu domain will report an abort back to the device and 282 will not be allowed to pass through the SMMU. 283 284 Any old kernels that existed before this KConfig was 285 introduced would default to _allowing_ bypass (AKA the 286 equivalent of NO for this config). However the default for 287 this option is YES because the old behavior is insecure. 288 289 There are few reasons to allow unmatched stream bypass, and 290 even fewer good ones. If saying YES here breaks your board 291 you should work on fixing your board. This KConfig option 292 is expected to be removed in the future and we'll simply 293 hardcode the bypass disable in the code. 294 295 NOTE: the kernel command line parameter 296 'arm-smmu.disable_bypass' will continue to override this 297 config. 298 299config ARM_SMMU_V3 300 tristate "ARM Ltd. System MMU Version 3 (SMMUv3) Support" 301 depends on ARM64 302 select IOMMU_API 303 select IOMMU_IO_PGTABLE_LPAE 304 select GENERIC_MSI_IRQ_DOMAIN 305 help 306 Support for implementations of the ARM System MMU architecture 307 version 3 providing translation support to a PCIe root complex. 308 309 Say Y here if your system includes an IOMMU device implementing 310 the ARM SMMUv3 architecture. 311 312config ARM_SMMU_V3_SVA 313 bool "Shared Virtual Addressing support for the ARM SMMUv3" 314 depends on ARM_SMMU_V3 315 help 316 Support for sharing process address spaces with devices using the 317 SMMUv3. 318 319 Say Y here if your system supports SVA extensions such as PCIe PASID 320 and PRI. 321 322config S390_IOMMU 323 def_bool y if S390 && PCI 324 depends on S390 && PCI 325 select IOMMU_API 326 help 327 Support for the IOMMU API for s390 PCI devices. 328 329config S390_CCW_IOMMU 330 bool "S390 CCW IOMMU Support" 331 depends on S390 && CCW || COMPILE_TEST 332 select IOMMU_API 333 help 334 Enables bits of IOMMU API required by VFIO. The iommu_ops 335 is not implemented as it is not necessary for VFIO. 336 337config S390_AP_IOMMU 338 bool "S390 AP IOMMU Support" 339 depends on S390 && ZCRYPT || COMPILE_TEST 340 select IOMMU_API 341 help 342 Enables bits of IOMMU API required by VFIO. The iommu_ops 343 is not implemented as it is not necessary for VFIO. 344 345config MTK_IOMMU 346 bool "MTK IOMMU Support" 347 depends on ARCH_MEDIATEK || COMPILE_TEST 348 select ARM_DMA_USE_IOMMU 349 select IOMMU_API 350 select IOMMU_IO_PGTABLE_ARMV7S 351 select MEMORY 352 select MTK_SMI 353 help 354 Support for the M4U on certain Mediatek SOCs. M4U is MultiMedia 355 Memory Management Unit. This option enables remapping of DMA memory 356 accesses for the multimedia subsystem. 357 358 If unsure, say N here. 359 360config MTK_IOMMU_V1 361 bool "MTK IOMMU Version 1 (M4U gen1) Support" 362 depends on ARM 363 depends on ARCH_MEDIATEK || COMPILE_TEST 364 select ARM_DMA_USE_IOMMU 365 select IOMMU_API 366 select MEMORY 367 select MTK_SMI 368 help 369 Support for the M4U on certain Mediatek SoCs. M4U generation 1 HW is 370 Multimedia Memory Managememt Unit. This option enables remapping of 371 DMA memory accesses for the multimedia subsystem. 372 373 if unsure, say N here. 374 375config QCOM_IOMMU 376 # Note: iommu drivers cannot (yet?) be built as modules 377 bool "Qualcomm IOMMU Support" 378 depends on ARCH_QCOM || (COMPILE_TEST && !GENERIC_ATOMIC64) 379 select IOMMU_API 380 select IOMMU_IO_PGTABLE_LPAE 381 select ARM_DMA_USE_IOMMU 382 help 383 Support for IOMMU on certain Qualcomm SoCs. 384 385config HYPERV_IOMMU 386 bool "Hyper-V x2APIC IRQ Handling" 387 depends on HYPERV && X86 388 select IOMMU_API 389 default HYPERV 390 help 391 Stub IOMMU driver to handle IRQs as to allow Hyper-V Linux 392 guests to run with x2APIC mode enabled. 393 394config VIRTIO_IOMMU 395 tristate "Virtio IOMMU driver" 396 depends on VIRTIO 397 depends on ARM64 398 select IOMMU_API 399 select INTERVAL_TREE 400 help 401 Para-virtualised IOMMU driver with virtio. 402 403 Say Y here if you intend to run this kernel as a guest. 404 405endif # IOMMU_SUPPORT 406