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 HAS_DMA && (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 HAS_DMA && (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_IOVA 64 tristate 65 66config OF_IOMMU 67 def_bool y 68 depends on OF && IOMMU_API 69 70# IOMMU-agnostic DMA-mapping layer 71config IOMMU_DMA 72 bool 73 select IOMMU_API 74 select IOMMU_IOVA 75 select NEED_SG_DMA_LENGTH 76 77config FSL_PAMU 78 bool "Freescale IOMMU support" 79 depends on PCI 80 depends on PHYS_64BIT 81 depends on PPC_E500MC || (COMPILE_TEST && PPC) 82 select IOMMU_API 83 select GENERIC_ALLOCATOR 84 help 85 Freescale PAMU support. PAMU is the IOMMU present on Freescale QorIQ platforms. 86 PAMU can authorize memory access, remap the memory address, and remap I/O 87 transaction types. 88 89# MSM IOMMU support 90config MSM_IOMMU 91 bool "MSM IOMMU Support" 92 depends on ARM 93 depends on ARCH_MSM8X60 || ARCH_MSM8960 || COMPILE_TEST 94 select IOMMU_API 95 select IOMMU_IO_PGTABLE_ARMV7S 96 help 97 Support for the IOMMUs found on certain Qualcomm SOCs. 98 These IOMMUs allow virtualization of the address space used by most 99 cores within the multimedia subsystem. 100 101 If unsure, say N here. 102 103config IOMMU_PGTABLES_L2 104 def_bool y 105 depends on MSM_IOMMU && MMU && SMP && CPU_DCACHE_DISABLE=n 106 107# AMD IOMMU support 108config AMD_IOMMU 109 bool "AMD IOMMU support" 110 select DMA_DIRECT_OPS 111 select SWIOTLB 112 select PCI_MSI 113 select PCI_ATS 114 select PCI_PRI 115 select PCI_PASID 116 select IOMMU_API 117 select IOMMU_IOVA 118 depends on X86_64 && PCI && ACPI 119 ---help--- 120 With this option you can enable support for AMD IOMMU hardware in 121 your system. An IOMMU is a hardware component which provides 122 remapping of DMA memory accesses from devices. With an AMD IOMMU you 123 can isolate the DMA memory of different devices and protect the 124 system from misbehaving device drivers or hardware. 125 126 You can find out if your system has an AMD IOMMU if you look into 127 your BIOS for an option to enable it or if you have an IVRS ACPI 128 table. 129 130config AMD_IOMMU_V2 131 tristate "AMD IOMMU Version 2 driver" 132 depends on AMD_IOMMU 133 select MMU_NOTIFIER 134 ---help--- 135 This option enables support for the AMD IOMMUv2 features of the IOMMU 136 hardware. Select this option if you want to use devices that support 137 the PCI PRI and PASID interface. 138 139# Intel IOMMU support 140config DMAR_TABLE 141 bool 142 143config INTEL_IOMMU 144 bool "Support for Intel IOMMU using DMA Remapping Devices" 145 depends on PCI_MSI && ACPI && (X86 || IA64_GENERIC) 146 select DMA_DIRECT_OPS 147 select IOMMU_API 148 select IOMMU_IOVA 149 select DMAR_TABLE 150 help 151 DMA remapping (DMAR) devices support enables independent address 152 translations for Direct Memory Access (DMA) from devices. 153 These DMA remapping devices are reported via ACPI tables 154 and include PCI device scope covered by these DMA 155 remapping devices. 156 157config INTEL_IOMMU_SVM 158 bool "Support for Shared Virtual Memory with Intel IOMMU" 159 depends on INTEL_IOMMU && X86 160 select PCI_PASID 161 select MMU_NOTIFIER 162 help 163 Shared Virtual Memory (SVM) provides a facility for devices 164 to access DMA resources through process address space by 165 means of a Process Address Space ID (PASID). 166 167config INTEL_IOMMU_DEFAULT_ON 168 def_bool y 169 prompt "Enable Intel DMA Remapping Devices by default" 170 depends on INTEL_IOMMU 171 help 172 Selecting this option will enable a DMAR device at boot time if 173 one is found. If this option is not selected, DMAR support can 174 be enabled by passing intel_iommu=on to the kernel. 175 176config INTEL_IOMMU_BROKEN_GFX_WA 177 bool "Workaround broken graphics drivers (going away soon)" 178 depends on INTEL_IOMMU && BROKEN && X86 179 ---help--- 180 Current Graphics drivers tend to use physical address 181 for DMA and avoid using DMA APIs. Setting this config 182 option permits the IOMMU driver to set a unity map for 183 all the OS-visible memory. Hence the driver can continue 184 to use physical addresses for DMA, at least until this 185 option is removed in the 2.6.32 kernel. 186 187config INTEL_IOMMU_FLOPPY_WA 188 def_bool y 189 depends on INTEL_IOMMU && X86 190 ---help--- 191 Floppy disk drivers are known to bypass DMA API calls 192 thereby failing to work when IOMMU is enabled. This 193 workaround will setup a 1:1 mapping for the first 194 16MiB to make floppy (an ISA device) work. 195 196config IRQ_REMAP 197 bool "Support for Interrupt Remapping" 198 depends on X86_64 && X86_IO_APIC && PCI_MSI && ACPI 199 select DMAR_TABLE 200 ---help--- 201 Supports Interrupt remapping for IO-APIC and MSI devices. 202 To use x2apic mode in the CPU's which support x2APIC enhancements or 203 to support platforms with CPU's having > 8 bit APIC ID, say Y. 204 205# OMAP IOMMU support 206config OMAP_IOMMU 207 bool "OMAP IOMMU Support" 208 depends on ARM && MMU 209 depends on ARCH_OMAP2PLUS || COMPILE_TEST 210 select IOMMU_API 211 ---help--- 212 The OMAP3 media platform drivers depend on iommu support, 213 if you need them say Y here. 214 215config OMAP_IOMMU_DEBUG 216 bool "Export OMAP IOMMU internals in DebugFS" 217 depends on OMAP_IOMMU && DEBUG_FS 218 ---help--- 219 Select this to see extensive information about 220 the internal state of OMAP IOMMU in debugfs. 221 222 Say N unless you know you need this. 223 224config ROCKCHIP_IOMMU 225 bool "Rockchip IOMMU Support" 226 depends on ARM || ARM64 227 depends on ARCH_ROCKCHIP || COMPILE_TEST 228 select IOMMU_API 229 select ARM_DMA_USE_IOMMU 230 help 231 Support for IOMMUs found on Rockchip rk32xx SOCs. 232 These IOMMUs allow virtualization of the address space used by most 233 cores within the multimedia subsystem. 234 Say Y here if you are using a Rockchip SoC that includes an IOMMU 235 device. 236 237config TEGRA_IOMMU_GART 238 bool "Tegra GART IOMMU Support" 239 depends on ARCH_TEGRA_2x_SOC 240 select IOMMU_API 241 help 242 Enables support for remapping discontiguous physical memory 243 shared with the operating system into contiguous I/O virtual 244 space through the GART (Graphics Address Relocation Table) 245 hardware included on Tegra SoCs. 246 247config TEGRA_IOMMU_SMMU 248 bool "NVIDIA Tegra SMMU Support" 249 depends on ARCH_TEGRA 250 depends on TEGRA_AHB 251 depends on TEGRA_MC 252 select IOMMU_API 253 help 254 This driver supports the IOMMU hardware (SMMU) found on NVIDIA Tegra 255 SoCs (Tegra30 up to Tegra210). 256 257config EXYNOS_IOMMU 258 bool "Exynos IOMMU Support" 259 depends on ARCH_EXYNOS && MMU 260 depends on !CPU_BIG_ENDIAN # revisit driver if we can enable big-endian ptes 261 select IOMMU_API 262 select ARM_DMA_USE_IOMMU 263 help 264 Support for the IOMMU (System MMU) of Samsung Exynos application 265 processor family. This enables H/W multimedia accelerators to see 266 non-linear physical memory chunks as linear memory in their 267 address space. 268 269 If unsure, say N here. 270 271config EXYNOS_IOMMU_DEBUG 272 bool "Debugging log for Exynos IOMMU" 273 depends on EXYNOS_IOMMU 274 help 275 Select this to see the detailed log message that shows what 276 happens in the IOMMU driver. 277 278 Say N unless you need kernel log message for IOMMU debugging. 279 280config IPMMU_VMSA 281 bool "Renesas VMSA-compatible IPMMU" 282 depends on ARM || IOMMU_DMA 283 depends on ARCH_RENESAS || (COMPILE_TEST && !GENERIC_ATOMIC64) 284 select IOMMU_API 285 select IOMMU_IO_PGTABLE_LPAE 286 select ARM_DMA_USE_IOMMU 287 help 288 Support for the Renesas VMSA-compatible IPMMU Renesas found in the 289 R-Mobile APE6 and R-Car H2/M2 SoCs. 290 291 If unsure, say N. 292 293config SPAPR_TCE_IOMMU 294 bool "sPAPR TCE IOMMU Support" 295 depends on PPC_POWERNV || PPC_PSERIES 296 select IOMMU_API 297 help 298 Enables bits of IOMMU API required by VFIO. The iommu_ops 299 is not implemented as it is not necessary for VFIO. 300 301# ARM IOMMU support 302config ARM_SMMU 303 bool "ARM Ltd. System MMU (SMMU) Support" 304 depends on (ARM64 || ARM) && MMU 305 select IOMMU_API 306 select IOMMU_IO_PGTABLE_LPAE 307 select ARM_DMA_USE_IOMMU if ARM 308 help 309 Support for implementations of the ARM System MMU architecture 310 versions 1 and 2. 311 312 Say Y here if your SoC includes an IOMMU device implementing 313 the ARM SMMU architecture. 314 315config ARM_SMMU_V3 316 bool "ARM Ltd. System MMU Version 3 (SMMUv3) Support" 317 depends on ARM64 318 select IOMMU_API 319 select IOMMU_IO_PGTABLE_LPAE 320 select GENERIC_MSI_IRQ_DOMAIN 321 help 322 Support for implementations of the ARM System MMU architecture 323 version 3 providing translation support to a PCIe root complex. 324 325 Say Y here if your system includes an IOMMU device implementing 326 the ARM SMMUv3 architecture. 327 328config S390_IOMMU 329 def_bool y if S390 && PCI 330 depends on S390 && PCI 331 select IOMMU_API 332 help 333 Support for the IOMMU API for s390 PCI devices. 334 335config S390_CCW_IOMMU 336 bool "S390 CCW IOMMU Support" 337 depends on S390 && CCW 338 select IOMMU_API 339 help 340 Enables bits of IOMMU API required by VFIO. The iommu_ops 341 is not implemented as it is not necessary for VFIO. 342 343config MTK_IOMMU 344 bool "MTK IOMMU Support" 345 depends on ARM || ARM64 346 depends on ARCH_MEDIATEK || COMPILE_TEST 347 select ARM_DMA_USE_IOMMU 348 select IOMMU_API 349 select IOMMU_DMA 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 depends on HAS_DMA 380 select IOMMU_API 381 select IOMMU_IO_PGTABLE_LPAE 382 select ARM_DMA_USE_IOMMU 383 help 384 Support for IOMMU on certain Qualcomm SoCs. 385 386endif # IOMMU_SUPPORT 387