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_SVM 190 bool "Support for Shared Virtual Memory with Intel IOMMU" 191 depends on INTEL_IOMMU && X86 192 select PCI_PASID 193 select MMU_NOTIFIER 194 help 195 Shared Virtual Memory (SVM) provides a facility for devices 196 to access DMA resources through process address space by 197 means of a Process Address Space ID (PASID). 198 199config INTEL_IOMMU_DEFAULT_ON 200 def_bool y 201 prompt "Enable Intel DMA Remapping Devices by default" 202 depends on INTEL_IOMMU 203 help 204 Selecting this option will enable a DMAR device at boot time if 205 one is found. If this option is not selected, DMAR support can 206 be enabled by passing intel_iommu=on to the kernel. 207 208config INTEL_IOMMU_BROKEN_GFX_WA 209 bool "Workaround broken graphics drivers (going away soon)" 210 depends on INTEL_IOMMU && BROKEN && X86 211 ---help--- 212 Current Graphics drivers tend to use physical address 213 for DMA and avoid using DMA APIs. Setting this config 214 option permits the IOMMU driver to set a unity map for 215 all the OS-visible memory. Hence the driver can continue 216 to use physical addresses for DMA, at least until this 217 option is removed in the 2.6.32 kernel. 218 219config INTEL_IOMMU_FLOPPY_WA 220 def_bool y 221 depends on INTEL_IOMMU && X86 222 ---help--- 223 Floppy disk drivers are known to bypass DMA API calls 224 thereby failing to work when IOMMU is enabled. This 225 workaround will setup a 1:1 mapping for the first 226 16MiB to make floppy (an ISA device) work. 227 228config IRQ_REMAP 229 bool "Support for Interrupt Remapping" 230 depends on X86_64 && X86_IO_APIC && PCI_MSI && ACPI 231 select DMAR_TABLE 232 ---help--- 233 Supports Interrupt remapping for IO-APIC and MSI devices. 234 To use x2apic mode in the CPU's which support x2APIC enhancements or 235 to support platforms with CPU's having > 8 bit APIC ID, say Y. 236 237# OMAP IOMMU support 238config OMAP_IOMMU 239 bool "OMAP IOMMU Support" 240 depends on ARM && MMU 241 depends on ARCH_OMAP2PLUS || COMPILE_TEST 242 select IOMMU_API 243 ---help--- 244 The OMAP3 media platform drivers depend on iommu support, 245 if you need them say Y here. 246 247config OMAP_IOMMU_DEBUG 248 bool "Export OMAP IOMMU internals in DebugFS" 249 depends on OMAP_IOMMU && DEBUG_FS 250 ---help--- 251 Select this to see extensive information about 252 the internal state of OMAP IOMMU in debugfs. 253 254 Say N unless you know you need this. 255 256config ROCKCHIP_IOMMU 257 bool "Rockchip IOMMU Support" 258 depends on ARM || ARM64 259 depends on ARCH_ROCKCHIP || COMPILE_TEST 260 select IOMMU_API 261 select ARM_DMA_USE_IOMMU 262 help 263 Support for IOMMUs found on Rockchip rk32xx SOCs. 264 These IOMMUs allow virtualization of the address space used by most 265 cores within the multimedia subsystem. 266 Say Y here if you are using a Rockchip SoC that includes an IOMMU 267 device. 268 269config TEGRA_IOMMU_GART 270 bool "Tegra GART IOMMU Support" 271 depends on ARCH_TEGRA_2x_SOC 272 select IOMMU_API 273 help 274 Enables support for remapping discontiguous physical memory 275 shared with the operating system into contiguous I/O virtual 276 space through the GART (Graphics Address Relocation Table) 277 hardware included on Tegra SoCs. 278 279config TEGRA_IOMMU_SMMU 280 bool "NVIDIA Tegra SMMU Support" 281 depends on ARCH_TEGRA 282 depends on TEGRA_AHB 283 depends on TEGRA_MC 284 select IOMMU_API 285 help 286 This driver supports the IOMMU hardware (SMMU) found on NVIDIA Tegra 287 SoCs (Tegra30 up to Tegra210). 288 289config EXYNOS_IOMMU 290 bool "Exynos IOMMU Support" 291 depends on ARCH_EXYNOS && MMU 292 depends on !CPU_BIG_ENDIAN # revisit driver if we can enable big-endian ptes 293 select IOMMU_API 294 select ARM_DMA_USE_IOMMU 295 help 296 Support for the IOMMU (System MMU) of Samsung Exynos application 297 processor family. This enables H/W multimedia accelerators to see 298 non-linear physical memory chunks as linear memory in their 299 address space. 300 301 If unsure, say N here. 302 303config EXYNOS_IOMMU_DEBUG 304 bool "Debugging log for Exynos IOMMU" 305 depends on EXYNOS_IOMMU 306 help 307 Select this to see the detailed log message that shows what 308 happens in the IOMMU driver. 309 310 Say N unless you need kernel log message for IOMMU debugging. 311 312config IPMMU_VMSA 313 bool "Renesas VMSA-compatible IPMMU" 314 depends on ARM || IOMMU_DMA 315 depends on ARCH_RENESAS || (COMPILE_TEST && !GENERIC_ATOMIC64) 316 select IOMMU_API 317 select IOMMU_IO_PGTABLE_LPAE 318 select ARM_DMA_USE_IOMMU 319 help 320 Support for the Renesas VMSA-compatible IPMMU found in the R-Mobile 321 APE6, R-Car Gen2, and R-Car Gen3 SoCs. 322 323 If unsure, say N. 324 325config SPAPR_TCE_IOMMU 326 bool "sPAPR TCE IOMMU Support" 327 depends on PPC_POWERNV || PPC_PSERIES 328 select IOMMU_API 329 help 330 Enables bits of IOMMU API required by VFIO. The iommu_ops 331 is not implemented as it is not necessary for VFIO. 332 333# ARM IOMMU support 334config ARM_SMMU 335 bool "ARM Ltd. System MMU (SMMU) Support" 336 depends on (ARM64 || ARM) && MMU 337 select IOMMU_API 338 select IOMMU_IO_PGTABLE_LPAE 339 select ARM_DMA_USE_IOMMU if ARM 340 help 341 Support for implementations of the ARM System MMU architecture 342 versions 1 and 2. 343 344 Say Y here if your SoC includes an IOMMU device implementing 345 the ARM SMMU architecture. 346 347config ARM_SMMU_V3 348 bool "ARM Ltd. System MMU Version 3 (SMMUv3) Support" 349 depends on ARM64 350 select IOMMU_API 351 select IOMMU_IO_PGTABLE_LPAE 352 select GENERIC_MSI_IRQ_DOMAIN 353 help 354 Support for implementations of the ARM System MMU architecture 355 version 3 providing translation support to a PCIe root complex. 356 357 Say Y here if your system includes an IOMMU device implementing 358 the ARM SMMUv3 architecture. 359 360config S390_IOMMU 361 def_bool y if S390 && PCI 362 depends on S390 && PCI 363 select IOMMU_API 364 help 365 Support for the IOMMU API for s390 PCI devices. 366 367config S390_CCW_IOMMU 368 bool "S390 CCW IOMMU Support" 369 depends on S390 && CCW 370 select IOMMU_API 371 help 372 Enables bits of IOMMU API required by VFIO. The iommu_ops 373 is not implemented as it is not necessary for VFIO. 374 375config MTK_IOMMU 376 bool "MTK IOMMU Support" 377 depends on ARM || ARM64 378 depends on ARCH_MEDIATEK || COMPILE_TEST 379 select ARM_DMA_USE_IOMMU 380 select IOMMU_API 381 select IOMMU_DMA 382 select IOMMU_IO_PGTABLE_ARMV7S 383 select MEMORY 384 select MTK_SMI 385 help 386 Support for the M4U on certain Mediatek SOCs. M4U is MultiMedia 387 Memory Management Unit. This option enables remapping of DMA memory 388 accesses for the multimedia subsystem. 389 390 If unsure, say N here. 391 392config MTK_IOMMU_V1 393 bool "MTK IOMMU Version 1 (M4U gen1) Support" 394 depends on ARM 395 depends on ARCH_MEDIATEK || COMPILE_TEST 396 select ARM_DMA_USE_IOMMU 397 select IOMMU_API 398 select MEMORY 399 select MTK_SMI 400 help 401 Support for the M4U on certain Mediatek SoCs. M4U generation 1 HW is 402 Multimedia Memory Managememt Unit. This option enables remapping of 403 DMA memory accesses for the multimedia subsystem. 404 405 if unsure, say N here. 406 407config QCOM_IOMMU 408 # Note: iommu drivers cannot (yet?) be built as modules 409 bool "Qualcomm IOMMU Support" 410 depends on ARCH_QCOM || (COMPILE_TEST && !GENERIC_ATOMIC64) 411 select IOMMU_API 412 select IOMMU_IO_PGTABLE_LPAE 413 select ARM_DMA_USE_IOMMU 414 help 415 Support for IOMMU on certain Qualcomm SoCs. 416 417endif # IOMMU_SUPPORT 418