1# IOMMU_API always gets selected by whoever wants it. 2config IOMMU_API 3 bool 4 5menuconfig IOMMU_SUPPORT 6 bool "IOMMU Hardware Support" 7 depends on MMU 8 default y 9 ---help--- 10 Say Y here if you want to compile device drivers for IO Memory 11 Management Units into the kernel. These devices usually allow to 12 remap DMA requests and/or remap interrupts from other devices on the 13 system. 14 15if IOMMU_SUPPORT 16 17menu "Generic IOMMU Pagetable Support" 18 19# Selected by the actual pagetable implementations 20config IOMMU_IO_PGTABLE 21 bool 22 23config IOMMU_IO_PGTABLE_LPAE 24 bool "ARMv7/v8 Long Descriptor Format" 25 select IOMMU_IO_PGTABLE 26 depends on ARM || ARM64 || (COMPILE_TEST && !GENERIC_ATOMIC64) 27 help 28 Enable support for the ARM long descriptor pagetable format. 29 This allocator supports 4K/2M/1G, 16K/32M and 64K/512M page 30 sizes at both stage-1 and stage-2, as well as address spaces 31 up to 48-bits in size. 32 33config IOMMU_IO_PGTABLE_LPAE_SELFTEST 34 bool "LPAE selftests" 35 depends on IOMMU_IO_PGTABLE_LPAE 36 help 37 Enable self-tests for LPAE page table allocator. This performs 38 a series of page-table consistency checks during boot. 39 40 If unsure, say N here. 41 42config IOMMU_IO_PGTABLE_ARMV7S 43 bool "ARMv7/v8 Short Descriptor Format" 44 select IOMMU_IO_PGTABLE 45 depends on ARM || ARM64 || COMPILE_TEST 46 help 47 Enable support for the ARM Short-descriptor pagetable format. 48 This supports 32-bit virtual and physical addresses mapped using 49 2-level tables with 4KB pages/1MB sections, and contiguous entries 50 for 64KB pages/16MB supersections if indicated by the IOMMU driver. 51 52config IOMMU_IO_PGTABLE_ARMV7S_SELFTEST 53 bool "ARMv7s selftests" 54 depends on IOMMU_IO_PGTABLE_ARMV7S 55 help 56 Enable self-tests for ARMv7s page table allocator. This performs 57 a series of page-table consistency checks during boot. 58 59 If unsure, say N here. 60 61endmenu 62 63config IOMMU_DEBUGFS 64 bool "Export IOMMU internals in DebugFS" 65 depends on DEBUG_FS 66 help 67 Allows exposure of IOMMU device internals. This option enables 68 the use of debugfs by IOMMU drivers as required. Devices can, 69 at initialization time, cause the IOMMU code to create a top-level 70 debug/iommu directory, and then populate a subdirectory with 71 entries as required. 72 73config IOMMU_DEFAULT_PASSTHROUGH 74 bool "IOMMU passthrough by default" 75 depends on IOMMU_API 76 help 77 Enable passthrough by default, removing the need to pass in 78 iommu.passthrough=on or iommu=pt through command line. If this 79 is enabled, you can still disable with iommu.passthrough=off 80 or iommu=nopt depending on the architecture. 81 82 If unsure, say N here. 83 84config IOMMU_IOVA 85 tristate 86 87config OF_IOMMU 88 def_bool y 89 depends on OF && IOMMU_API 90 91# IOMMU-agnostic DMA-mapping layer 92config IOMMU_DMA 93 bool 94 select IOMMU_API 95 select IOMMU_IOVA 96 select NEED_SG_DMA_LENGTH 97 98config FSL_PAMU 99 bool "Freescale IOMMU support" 100 depends on PCI 101 depends on PHYS_64BIT 102 depends on PPC_E500MC || (COMPILE_TEST && PPC) 103 select IOMMU_API 104 select GENERIC_ALLOCATOR 105 help 106 Freescale PAMU support. PAMU is the IOMMU present on Freescale QorIQ platforms. 107 PAMU can authorize memory access, remap the memory address, and remap I/O 108 transaction types. 109 110# MSM IOMMU support 111config MSM_IOMMU 112 bool "MSM IOMMU Support" 113 depends on ARM 114 depends on ARCH_MSM8X60 || ARCH_MSM8960 || COMPILE_TEST 115 select IOMMU_API 116 select IOMMU_IO_PGTABLE_ARMV7S 117 help 118 Support for the IOMMUs found on certain Qualcomm SOCs. 119 These IOMMUs allow virtualization of the address space used by most 120 cores within the multimedia subsystem. 121 122 If unsure, say N here. 123 124config IOMMU_PGTABLES_L2 125 def_bool y 126 depends on MSM_IOMMU && MMU && SMP && CPU_DCACHE_DISABLE=n 127 128# AMD IOMMU support 129config AMD_IOMMU 130 bool "AMD IOMMU support" 131 select SWIOTLB 132 select PCI_MSI 133 select PCI_ATS 134 select PCI_PRI 135 select PCI_PASID 136 select IOMMU_API 137 select IOMMU_IOVA 138 depends on X86_64 && PCI && ACPI 139 ---help--- 140 With this option you can enable support for AMD IOMMU hardware in 141 your system. An IOMMU is a hardware component which provides 142 remapping of DMA memory accesses from devices. With an AMD IOMMU you 143 can isolate the DMA memory of different devices and protect the 144 system from misbehaving device drivers or hardware. 145 146 You can find out if your system has an AMD IOMMU if you look into 147 your BIOS for an option to enable it or if you have an IVRS ACPI 148 table. 149 150config AMD_IOMMU_V2 151 tristate "AMD IOMMU Version 2 driver" 152 depends on AMD_IOMMU 153 select MMU_NOTIFIER 154 ---help--- 155 This option enables support for the AMD IOMMUv2 features of the IOMMU 156 hardware. Select this option if you want to use devices that support 157 the PCI PRI and PASID interface. 158 159config AMD_IOMMU_DEBUGFS 160 bool "Enable AMD IOMMU internals in DebugFS" 161 depends on AMD_IOMMU && IOMMU_DEBUGFS 162 ---help--- 163 !!!WARNING!!! !!!WARNING!!! !!!WARNING!!! !!!WARNING!!! 164 165 DO NOT ENABLE THIS OPTION UNLESS YOU REALLY, -REALLY- KNOW WHAT YOU ARE DOING!!! 166 Exposes AMD IOMMU device internals in DebugFS. 167 168 This option is -NOT- intended for production environments, and should 169 not generally be enabled. 170 171# Intel IOMMU support 172config DMAR_TABLE 173 bool 174 175config INTEL_IOMMU 176 bool "Support for Intel IOMMU using DMA Remapping Devices" 177 depends on PCI_MSI && ACPI && (X86 || IA64_GENERIC) 178 select IOMMU_API 179 select IOMMU_IOVA 180 select NEED_DMA_MAP_STATE 181 select DMAR_TABLE 182 help 183 DMA remapping (DMAR) devices support enables independent address 184 translations for Direct Memory Access (DMA) from devices. 185 These DMA remapping devices are reported via ACPI tables 186 and include PCI device scope covered by these DMA 187 remapping devices. 188 189config INTEL_IOMMU_DEBUGFS 190 bool "Export Intel IOMMU internals in Debugfs" 191 depends on INTEL_IOMMU && IOMMU_DEBUGFS 192 help 193 !!!WARNING!!! 194 195 DO NOT ENABLE THIS OPTION UNLESS YOU REALLY KNOW WHAT YOU ARE DOING!!! 196 197 Expose Intel IOMMU internals in Debugfs. 198 199 This option is -NOT- intended for production environments, and should 200 only be enabled for debugging Intel IOMMU. 201 202config INTEL_IOMMU_SVM 203 bool "Support for Shared Virtual Memory with Intel IOMMU" 204 depends on INTEL_IOMMU && X86 205 select PCI_PASID 206 select MMU_NOTIFIER 207 help 208 Shared Virtual Memory (SVM) provides a facility for devices 209 to access DMA resources through process address space by 210 means of a Process Address Space ID (PASID). 211 212config INTEL_IOMMU_DEFAULT_ON 213 def_bool y 214 prompt "Enable Intel DMA Remapping Devices by default" 215 depends on INTEL_IOMMU 216 help 217 Selecting this option will enable a DMAR device at boot time if 218 one is found. If this option is not selected, DMAR support can 219 be enabled by passing intel_iommu=on to the kernel. 220 221config INTEL_IOMMU_BROKEN_GFX_WA 222 bool "Workaround broken graphics drivers (going away soon)" 223 depends on INTEL_IOMMU && BROKEN && X86 224 ---help--- 225 Current Graphics drivers tend to use physical address 226 for DMA and avoid using DMA APIs. Setting this config 227 option permits the IOMMU driver to set a unity map for 228 all the OS-visible memory. Hence the driver can continue 229 to use physical addresses for DMA, at least until this 230 option is removed in the 2.6.32 kernel. 231 232config INTEL_IOMMU_FLOPPY_WA 233 def_bool y 234 depends on INTEL_IOMMU && X86 235 ---help--- 236 Floppy disk drivers are known to bypass DMA API calls 237 thereby failing to work when IOMMU is enabled. This 238 workaround will setup a 1:1 mapping for the first 239 16MiB to make floppy (an ISA device) work. 240 241config IRQ_REMAP 242 bool "Support for Interrupt Remapping" 243 depends on X86_64 && X86_IO_APIC && PCI_MSI && ACPI 244 select DMAR_TABLE 245 ---help--- 246 Supports Interrupt remapping for IO-APIC and MSI devices. 247 To use x2apic mode in the CPU's which support x2APIC enhancements or 248 to support platforms with CPU's having > 8 bit APIC ID, say Y. 249 250# OMAP IOMMU support 251config OMAP_IOMMU 252 bool "OMAP IOMMU Support" 253 depends on ARM && MMU 254 depends on ARCH_OMAP2PLUS || COMPILE_TEST 255 select IOMMU_API 256 ---help--- 257 The OMAP3 media platform drivers depend on iommu support, 258 if you need them say Y here. 259 260config OMAP_IOMMU_DEBUG 261 bool "Export OMAP IOMMU internals in DebugFS" 262 depends on OMAP_IOMMU && DEBUG_FS 263 ---help--- 264 Select this to see extensive information about 265 the internal state of OMAP IOMMU in debugfs. 266 267 Say N unless you know you need this. 268 269config ROCKCHIP_IOMMU 270 bool "Rockchip IOMMU Support" 271 depends on ARM || ARM64 272 depends on ARCH_ROCKCHIP || COMPILE_TEST 273 select IOMMU_API 274 select ARM_DMA_USE_IOMMU 275 help 276 Support for IOMMUs found on Rockchip rk32xx SOCs. 277 These IOMMUs allow virtualization of the address space used by most 278 cores within the multimedia subsystem. 279 Say Y here if you are using a Rockchip SoC that includes an IOMMU 280 device. 281 282config TEGRA_IOMMU_GART 283 bool "Tegra GART IOMMU Support" 284 depends on ARCH_TEGRA_2x_SOC 285 select IOMMU_API 286 help 287 Enables support for remapping discontiguous physical memory 288 shared with the operating system into contiguous I/O virtual 289 space through the GART (Graphics Address Relocation Table) 290 hardware included on Tegra SoCs. 291 292config TEGRA_IOMMU_SMMU 293 bool "NVIDIA Tegra SMMU Support" 294 depends on ARCH_TEGRA 295 depends on TEGRA_AHB 296 depends on TEGRA_MC 297 select IOMMU_API 298 help 299 This driver supports the IOMMU hardware (SMMU) found on NVIDIA Tegra 300 SoCs (Tegra30 up to Tegra210). 301 302config EXYNOS_IOMMU 303 bool "Exynos IOMMU Support" 304 depends on ARCH_EXYNOS && MMU 305 depends on !CPU_BIG_ENDIAN # revisit driver if we can enable big-endian ptes 306 select IOMMU_API 307 select ARM_DMA_USE_IOMMU 308 help 309 Support for the IOMMU (System MMU) of Samsung Exynos application 310 processor family. This enables H/W multimedia accelerators to see 311 non-linear physical memory chunks as linear memory in their 312 address space. 313 314 If unsure, say N here. 315 316config EXYNOS_IOMMU_DEBUG 317 bool "Debugging log for Exynos IOMMU" 318 depends on EXYNOS_IOMMU 319 help 320 Select this to see the detailed log message that shows what 321 happens in the IOMMU driver. 322 323 Say N unless you need kernel log message for IOMMU debugging. 324 325config IPMMU_VMSA 326 bool "Renesas VMSA-compatible IPMMU" 327 depends on ARM || IOMMU_DMA 328 depends on ARCH_RENESAS || (COMPILE_TEST && !GENERIC_ATOMIC64) 329 select IOMMU_API 330 select IOMMU_IO_PGTABLE_LPAE 331 select ARM_DMA_USE_IOMMU 332 help 333 Support for the Renesas VMSA-compatible IPMMU found in the R-Mobile 334 APE6, R-Car Gen2, and R-Car Gen3 SoCs. 335 336 If unsure, say N. 337 338config SPAPR_TCE_IOMMU 339 bool "sPAPR TCE IOMMU Support" 340 depends on PPC_POWERNV || PPC_PSERIES 341 select IOMMU_API 342 help 343 Enables bits of IOMMU API required by VFIO. The iommu_ops 344 is not implemented as it is not necessary for VFIO. 345 346# ARM IOMMU support 347config ARM_SMMU 348 bool "ARM Ltd. System MMU (SMMU) Support" 349 depends on (ARM64 || ARM) && MMU 350 select IOMMU_API 351 select IOMMU_IO_PGTABLE_LPAE 352 select ARM_DMA_USE_IOMMU if ARM 353 help 354 Support for implementations of the ARM System MMU architecture 355 versions 1 and 2. 356 357 Say Y here if your SoC includes an IOMMU device implementing 358 the ARM SMMU architecture. 359 360config ARM_SMMU_V3 361 bool "ARM Ltd. System MMU Version 3 (SMMUv3) Support" 362 depends on ARM64 363 select IOMMU_API 364 select IOMMU_IO_PGTABLE_LPAE 365 select GENERIC_MSI_IRQ_DOMAIN 366 help 367 Support for implementations of the ARM System MMU architecture 368 version 3 providing translation support to a PCIe root complex. 369 370 Say Y here if your system includes an IOMMU device implementing 371 the ARM SMMUv3 architecture. 372 373config S390_IOMMU 374 def_bool y if S390 && PCI 375 depends on S390 && PCI 376 select IOMMU_API 377 help 378 Support for the IOMMU API for s390 PCI devices. 379 380config S390_CCW_IOMMU 381 bool "S390 CCW IOMMU Support" 382 depends on S390 && CCW 383 select IOMMU_API 384 help 385 Enables bits of IOMMU API required by VFIO. The iommu_ops 386 is not implemented as it is not necessary for VFIO. 387 388config S390_AP_IOMMU 389 bool "S390 AP IOMMU Support" 390 depends on S390 && ZCRYPT 391 select IOMMU_API 392 help 393 Enables bits of IOMMU API required by VFIO. The iommu_ops 394 is not implemented as it is not necessary for VFIO. 395 396config MTK_IOMMU 397 bool "MTK IOMMU Support" 398 depends on ARM || ARM64 399 depends on ARCH_MEDIATEK || COMPILE_TEST 400 select ARM_DMA_USE_IOMMU 401 select IOMMU_API 402 select IOMMU_DMA 403 select IOMMU_IO_PGTABLE_ARMV7S 404 select MEMORY 405 select MTK_SMI 406 help 407 Support for the M4U on certain Mediatek SOCs. M4U is MultiMedia 408 Memory Management Unit. This option enables remapping of DMA memory 409 accesses for the multimedia subsystem. 410 411 If unsure, say N here. 412 413config MTK_IOMMU_V1 414 bool "MTK IOMMU Version 1 (M4U gen1) Support" 415 depends on ARM 416 depends on ARCH_MEDIATEK || COMPILE_TEST 417 select ARM_DMA_USE_IOMMU 418 select IOMMU_API 419 select MEMORY 420 select MTK_SMI 421 help 422 Support for the M4U on certain Mediatek SoCs. M4U generation 1 HW is 423 Multimedia Memory Managememt Unit. This option enables remapping of 424 DMA memory accesses for the multimedia subsystem. 425 426 if unsure, say N here. 427 428config QCOM_IOMMU 429 # Note: iommu drivers cannot (yet?) be built as modules 430 bool "Qualcomm IOMMU Support" 431 depends on ARCH_QCOM || (COMPILE_TEST && !GENERIC_ATOMIC64) 432 select IOMMU_API 433 select IOMMU_IO_PGTABLE_LPAE 434 select ARM_DMA_USE_IOMMU 435 help 436 Support for IOMMU on certain Qualcomm SoCs. 437 438endif # IOMMU_SUPPORT 439