1 # SPDX-License-Identifier: GPL-2.0-only
2 # The IOVA library may also be used by non-IOMMU_API users
3 config IOMMU_IOVA
4 	tristate
5 
6 # IOMMU_API always gets selected by whoever wants it.
7 config IOMMU_API
8 	bool
9 
10 config IOMMUFD_DRIVER
11 	bool
12 	default n
13 
14 menuconfig 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 
24 if IOMMU_SUPPORT
25 
26 menu "Generic IOMMU Pagetable Support"
27 
28 # Selected by the actual pagetable implementations
29 config IOMMU_IO_PGTABLE
30 	bool
31 
32 config IOMMU_IO_PGTABLE_LPAE
33 	bool "ARMv7/v8 Long Descriptor Format"
34 	select IOMMU_IO_PGTABLE
35 	depends on ARM || ARM64 || COMPILE_TEST
36 	depends on !GENERIC_ATOMIC64	# for cmpxchg64()
37 	help
38 	  Enable support for the ARM long descriptor pagetable format.
39 	  This allocator supports 4K/2M/1G, 16K/32M and 64K/512M page
40 	  sizes at both stage-1 and stage-2, as well as address spaces
41 	  up to 48-bits in size.
42 
43 config IOMMU_IO_PGTABLE_LPAE_SELFTEST
44 	bool "LPAE selftests"
45 	depends on IOMMU_IO_PGTABLE_LPAE
46 	help
47 	  Enable self-tests for LPAE page table allocator. This performs
48 	  a series of page-table consistency checks during boot.
49 
50 	  If unsure, say N here.
51 
52 config IOMMU_IO_PGTABLE_ARMV7S
53 	bool "ARMv7/v8 Short Descriptor Format"
54 	select IOMMU_IO_PGTABLE
55 	depends on ARM || ARM64 || COMPILE_TEST
56 	help
57 	  Enable support for the ARM Short-descriptor pagetable format.
58 	  This supports 32-bit virtual and physical addresses mapped using
59 	  2-level tables with 4KB pages/1MB sections, and contiguous entries
60 	  for 64KB pages/16MB supersections if indicated by the IOMMU driver.
61 
62 config IOMMU_IO_PGTABLE_ARMV7S_SELFTEST
63 	bool "ARMv7s selftests"
64 	depends on IOMMU_IO_PGTABLE_ARMV7S
65 	help
66 	  Enable self-tests for ARMv7s page table allocator. This performs
67 	  a series of page-table consistency checks during boot.
68 
69 	  If unsure, say N here.
70 
71 config IOMMU_IO_PGTABLE_DART
72 	bool "Apple DART Formats"
73 	select IOMMU_IO_PGTABLE
74 	depends on ARM64 || COMPILE_TEST
75 	depends on !GENERIC_ATOMIC64	# for cmpxchg64()
76 	help
77 	  Enable support for the Apple DART pagetable formats. These include
78 	  the t8020 and t6000/t8110 DART formats used in Apple M1/M2 family
79 	  SoCs.
80 
81 	  If unsure, say N here.
82 
83 endmenu
84 
85 config IOMMU_DEBUGFS
86 	bool "Export IOMMU internals in DebugFS"
87 	depends on DEBUG_FS
88 	help
89 	  Allows exposure of IOMMU device internals. This option enables
90 	  the use of debugfs by IOMMU drivers as required. Devices can,
91 	  at initialization time, cause the IOMMU code to create a top-level
92 	  debug/iommu directory, and then populate a subdirectory with
93 	  entries as required.
94 
95 choice
96 	prompt "IOMMU default domain type"
97 	depends on IOMMU_API
98 	default IOMMU_DEFAULT_DMA_LAZY if X86 || S390
99 	default IOMMU_DEFAULT_DMA_STRICT
100 	help
101 	  Choose the type of IOMMU domain used to manage DMA API usage by
102 	  device drivers. The options here typically represent different
103 	  levels of tradeoff between robustness/security and performance,
104 	  depending on the IOMMU driver. Not all IOMMUs support all options.
105 	  This choice can be overridden at boot via the command line, and for
106 	  some devices also at runtime via sysfs.
107 
108 	  If unsure, keep the default.
109 
110 config IOMMU_DEFAULT_DMA_STRICT
111 	bool "Translated - Strict"
112 	help
113 	  Trusted devices use translation to restrict their access to only
114 	  DMA-mapped pages, with strict TLB invalidation on unmap. Equivalent
115 	  to passing "iommu.passthrough=0 iommu.strict=1" on the command line.
116 
117 	  Untrusted devices always use this mode, with an additional layer of
118 	  bounce-buffering such that they cannot gain access to any unrelated
119 	  data within a mapped page.
120 
121 config IOMMU_DEFAULT_DMA_LAZY
122 	bool "Translated - Lazy"
123 	help
124 	  Trusted devices use translation to restrict their access to only
125 	  DMA-mapped pages, but with "lazy" batched TLB invalidation. This
126 	  mode allows higher performance with some IOMMUs due to reduced TLB
127 	  flushing, but at the cost of reduced isolation since devices may be
128 	  able to access memory for some time after it has been unmapped.
129 	  Equivalent to passing "iommu.passthrough=0 iommu.strict=0" on the
130 	  command line.
131 
132 	  If this mode is not supported by the IOMMU driver, the effective
133 	  runtime default will fall back to IOMMU_DEFAULT_DMA_STRICT.
134 
135 config IOMMU_DEFAULT_PASSTHROUGH
136 	bool "Passthrough"
137 	help
138 	  Trusted devices are identity-mapped, giving them unrestricted access
139 	  to memory with minimal performance overhead. Equivalent to passing
140 	  "iommu.passthrough=1" (historically "iommu=pt") on the command line.
141 
142 	  If this mode is not supported by the IOMMU driver, the effective
143 	  runtime default will fall back to IOMMU_DEFAULT_DMA_STRICT.
144 
145 endchoice
146 
147 config OF_IOMMU
148 	def_bool y
149 	depends on OF && IOMMU_API
150 
151 # IOMMU-agnostic DMA-mapping layer
152 config IOMMU_DMA
153 	def_bool ARM64 || X86 || S390
154 	select DMA_OPS_HELPERS
155 	select IOMMU_API
156 	select IOMMU_IOVA
157 	select IRQ_MSI_IOMMU
158 	select NEED_SG_DMA_LENGTH
159 	select NEED_SG_DMA_FLAGS if SWIOTLB
160 
161 # Shared Virtual Addressing
162 config IOMMU_SVA
163 	select IOMMU_MM_DATA
164 	bool
165 
166 config IOMMU_IOPF
167 	bool
168 
169 config FSL_PAMU
170 	bool "Freescale IOMMU support"
171 	depends on PCI
172 	depends on PHYS_64BIT
173 	depends on PPC_E500MC || (COMPILE_TEST && PPC)
174 	select IOMMU_API
175 	select GENERIC_ALLOCATOR
176 	help
177 	  Freescale PAMU support. PAMU is the IOMMU present on Freescale QorIQ platforms.
178 	  PAMU can authorize memory access, remap the memory address, and remap I/O
179 	  transaction types.
180 
181 # MSM IOMMU support
182 config MSM_IOMMU
183 	bool "MSM IOMMU Support"
184 	depends on ARM
185 	depends on ARCH_QCOM || COMPILE_TEST
186 	select IOMMU_API
187 	select IOMMU_IO_PGTABLE_ARMV7S
188 	help
189 	  Support for the IOMMUs found on certain Qualcomm SOCs.
190 	  These IOMMUs allow virtualization of the address space used by most
191 	  cores within the multimedia subsystem.
192 
193 	  If unsure, say N here.
194 
195 source "drivers/iommu/amd/Kconfig"
196 source "drivers/iommu/intel/Kconfig"
197 source "drivers/iommu/iommufd/Kconfig"
198 
199 config IRQ_REMAP
200 	bool "Support for Interrupt Remapping"
201 	depends on X86_64 && X86_IO_APIC && PCI_MSI && ACPI
202 	select DMAR_TABLE if INTEL_IOMMU
203 	help
204 	  Supports Interrupt remapping for IO-APIC and MSI devices.
205 	  To use x2apic mode in the CPU's which support x2APIC enhancements or
206 	  to support platforms with CPU's having > 8 bit APIC ID, say Y.
207 
208 # OMAP IOMMU support
209 config OMAP_IOMMU
210 	bool "OMAP IOMMU Support"
211 	depends on ARCH_OMAP2PLUS || COMPILE_TEST
212 	select IOMMU_API
213 	help
214 	  The OMAP3 media platform drivers depend on iommu support,
215 	  if you need them say Y here.
216 
217 config OMAP_IOMMU_DEBUG
218 	bool "Export OMAP IOMMU internals in DebugFS"
219 	depends on OMAP_IOMMU && DEBUG_FS
220 	help
221 	  Select this to see extensive information about
222 	  the internal state of OMAP IOMMU in debugfs.
223 
224 	  Say N unless you know you need this.
225 
226 config ROCKCHIP_IOMMU
227 	bool "Rockchip IOMMU Support"
228 	depends on ARCH_ROCKCHIP || COMPILE_TEST
229 	select IOMMU_API
230 	select ARM_DMA_USE_IOMMU
231 	help
232 	  Support for IOMMUs found on Rockchip rk32xx SOCs.
233 	  These IOMMUs allow virtualization of the address space used by most
234 	  cores within the multimedia subsystem.
235 	  Say Y here if you are using a Rockchip SoC that includes an IOMMU
236 	  device.
237 
238 config SUN50I_IOMMU
239 	bool "Allwinner H6 IOMMU Support"
240 	depends on HAS_DMA
241 	depends on ARCH_SUNXI || COMPILE_TEST
242 	select ARM_DMA_USE_IOMMU
243 	select IOMMU_API
244 	help
245 	  Support for the IOMMU introduced in the Allwinner H6 SoCs.
246 
247 config 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 
257 config EXYNOS_IOMMU
258 	bool "Exynos IOMMU Support"
259 	depends on ARCH_EXYNOS || COMPILE_TEST
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 
271 config 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 
280 config IPMMU_VMSA
281 	bool "Renesas VMSA-compatible IPMMU"
282 	depends on ARCH_RENESAS || COMPILE_TEST
283 	depends on ARM || ARM64 || COMPILE_TEST
284 	depends on !GENERIC_ATOMIC64	# for IOMMU_IO_PGTABLE_LPAE
285 	select IOMMU_API
286 	select IOMMU_IO_PGTABLE_LPAE
287 	select ARM_DMA_USE_IOMMU
288 	help
289 	  Support for the Renesas VMSA-compatible IPMMU found in the R-Mobile
290 	  APE6, R-Car Gen{2,3} and RZ/G{1,2} SoCs.
291 
292 	  If unsure, say N.
293 
294 config SPAPR_TCE_IOMMU
295 	bool "sPAPR TCE IOMMU Support"
296 	depends on PPC_POWERNV || PPC_PSERIES
297 	select IOMMU_API
298 	help
299 	  Enables bits of IOMMU API required by VFIO. The iommu_ops
300 	  is not implemented as it is not necessary for VFIO.
301 
302 config APPLE_DART
303 	tristate "Apple DART IOMMU Support"
304 	depends on ARCH_APPLE || COMPILE_TEST
305 	depends on !GENERIC_ATOMIC64	# for IOMMU_IO_PGTABLE_DART
306 	select IOMMU_API
307 	select IOMMU_IO_PGTABLE_DART
308 	default ARCH_APPLE
309 	help
310 	  Support for Apple DART (Device Address Resolution Table) IOMMUs
311 	  found in Apple ARM SoCs like the M1.
312 	  This IOMMU is required for most peripherals using DMA to access
313 	  the main memory.
314 
315 	  Say Y here if you are using an Apple SoC.
316 
317 # ARM IOMMU support
318 config ARM_SMMU
319 	tristate "ARM Ltd. System MMU (SMMU) Support"
320 	depends on ARM64 || ARM || COMPILE_TEST
321 	depends on !GENERIC_ATOMIC64	# for IOMMU_IO_PGTABLE_LPAE
322 	select IOMMU_API
323 	select IOMMU_IO_PGTABLE_LPAE
324 	select ARM_DMA_USE_IOMMU if ARM
325 	help
326 	  Support for implementations of the ARM System MMU architecture
327 	  versions 1 and 2.
328 
329 	  Say Y here if your SoC includes an IOMMU device implementing
330 	  the ARM SMMU architecture.
331 
332 config ARM_SMMU_LEGACY_DT_BINDINGS
333 	bool "Support the legacy \"mmu-masters\" devicetree bindings"
334 	depends on ARM_SMMU=y && OF
335 	help
336 	  Support for the badly designed and deprecated "mmu-masters"
337 	  devicetree bindings. This allows some DMA masters to attach
338 	  to the SMMU but does not provide any support via the DMA API.
339 	  If you're lucky, you might be able to get VFIO up and running.
340 
341 	  If you say Y here then you'll make me very sad. Instead, say N
342 	  and move your firmware to the utopian future that was 2016.
343 
344 config ARM_SMMU_DISABLE_BYPASS_BY_DEFAULT
345 	bool "Default to disabling bypass on ARM SMMU v1 and v2"
346 	depends on ARM_SMMU
347 	default y
348 	help
349 	  Say Y here to (by default) disable bypass streams such that
350 	  incoming transactions from devices that are not attached to
351 	  an iommu domain will report an abort back to the device and
352 	  will not be allowed to pass through the SMMU.
353 
354 	  Any old kernels that existed before this KConfig was
355 	  introduced would default to _allowing_ bypass (AKA the
356 	  equivalent of NO for this config).  However the default for
357 	  this option is YES because the old behavior is insecure.
358 
359 	  There are few reasons to allow unmatched stream bypass, and
360 	  even fewer good ones.  If saying YES here breaks your board
361 	  you should work on fixing your board.  This KConfig option
362 	  is expected to be removed in the future and we'll simply
363 	  hardcode the bypass disable in the code.
364 
365 	  NOTE: the kernel command line parameter
366 	  'arm-smmu.disable_bypass' will continue to override this
367 	  config.
368 
369 config ARM_SMMU_QCOM
370 	def_tristate y
371 	depends on ARM_SMMU && ARCH_QCOM
372 	select QCOM_SCM
373 	help
374 	  When running on a Qualcomm platform that has the custom variant
375 	  of the ARM SMMU, this needs to be built into the SMMU driver.
376 
377 config ARM_SMMU_QCOM_DEBUG
378 	bool "ARM SMMU QCOM implementation defined debug support"
379 	depends on ARM_SMMU_QCOM=y
380 	help
381 	  Support for implementation specific debug features in ARM SMMU
382 	  hardware found in QTI platforms. This include support for
383 	  the Translation Buffer Units (TBU) that can be used to obtain
384 	  additional information when debugging memory management issues
385 	  like context faults.
386 
387 	  Say Y here to enable debug for issues such as context faults
388 	  or TLB sync timeouts which requires implementation defined
389 	  register dumps.
390 
391 config ARM_SMMU_V3
392 	tristate "ARM Ltd. System MMU Version 3 (SMMUv3) Support"
393 	depends on ARM64
394 	select IOMMU_API
395 	select IOMMU_IO_PGTABLE_LPAE
396 	select GENERIC_MSI_IRQ
397 	select IOMMUFD_DRIVER if IOMMUFD
398 	help
399 	  Support for implementations of the ARM System MMU architecture
400 	  version 3 providing translation support to a PCIe root complex.
401 
402 	  Say Y here if your system includes an IOMMU device implementing
403 	  the ARM SMMUv3 architecture.
404 
405 if ARM_SMMU_V3
406 config ARM_SMMU_V3_SVA
407 	bool "Shared Virtual Addressing support for the ARM SMMUv3"
408 	select IOMMU_SVA
409 	select IOMMU_IOPF
410 	select MMU_NOTIFIER
411 	help
412 	  Support for sharing process address spaces with devices using the
413 	  SMMUv3.
414 
415 	  Say Y here if your system supports SVA extensions such as PCIe PASID
416 	  and PRI.
417 
418 config ARM_SMMU_V3_KUNIT_TEST
419 	tristate "KUnit tests for arm-smmu-v3 driver"  if !KUNIT_ALL_TESTS
420 	depends on KUNIT
421 	depends on ARM_SMMU_V3_SVA
422 	default KUNIT_ALL_TESTS
423 	help
424 	  Enable this option to unit-test arm-smmu-v3 driver functions.
425 
426 	  If unsure, say N.
427 
428 config TEGRA241_CMDQV
429 	bool "NVIDIA Tegra241 CMDQ-V extension support for ARM SMMUv3"
430 	depends on ACPI
431 	help
432 	  Support for NVIDIA CMDQ-Virtualization extension for ARM SMMUv3. The
433 	  CMDQ-V extension is similar to v3.3 ECMDQ for multi command queues
434 	  support, except with virtualization capabilities.
435 
436 	  Say Y here if your system is NVIDIA Tegra241 (Grace) or it has the same
437 	  CMDQ-V extension.
438 endif
439 
440 config S390_IOMMU
441 	def_bool y if S390 && PCI
442 	depends on S390 && PCI
443 	select IOMMU_API
444 	help
445 	  Support for the IOMMU API for s390 PCI devices.
446 
447 config MTK_IOMMU
448 	tristate "MediaTek IOMMU Support"
449 	depends on ARCH_MEDIATEK || COMPILE_TEST
450 	select ARM_DMA_USE_IOMMU
451 	select IOMMU_API
452 	select IOMMU_IO_PGTABLE_ARMV7S
453 	select MEMORY
454 	select MTK_SMI
455 	help
456 	  Support for the M4U on certain Mediatek SOCs. M4U is MultiMedia
457 	  Memory Management Unit. This option enables remapping of DMA memory
458 	  accesses for the multimedia subsystem.
459 
460 	  If unsure, say N here.
461 
462 config MTK_IOMMU_V1
463 	tristate "MediaTek IOMMU Version 1 (M4U gen1) Support"
464 	depends on ARM
465 	depends on ARCH_MEDIATEK || COMPILE_TEST
466 	select ARM_DMA_USE_IOMMU
467 	select IOMMU_API
468 	select MEMORY
469 	select MTK_SMI
470 	help
471 	  Support for the M4U on certain Mediatek SoCs. M4U generation 1 HW is
472 	  Multimedia Memory Managememt Unit. This option enables remapping of
473 	  DMA memory accesses for the multimedia subsystem.
474 
475 	  if unsure, say N here.
476 
477 config QCOM_IOMMU
478 	# Note: iommu drivers cannot (yet?) be built as modules
479 	bool "Qualcomm IOMMU Support"
480 	depends on ARCH_QCOM || COMPILE_TEST
481 	depends on !GENERIC_ATOMIC64	# for IOMMU_IO_PGTABLE_LPAE
482 	select QCOM_SCM
483 	select IOMMU_API
484 	select IOMMU_IO_PGTABLE_LPAE
485 	select ARM_DMA_USE_IOMMU
486 	help
487 	  Support for IOMMU on certain Qualcomm SoCs.
488 
489 config HYPERV_IOMMU
490 	bool "Hyper-V IRQ Handling"
491 	depends on HYPERV && X86
492 	select IOMMU_API
493 	default HYPERV
494 	help
495 	  Stub IOMMU driver to handle IRQs to support Hyper-V Linux
496 	  guest and root partitions.
497 
498 config VIRTIO_IOMMU
499 	tristate "Virtio IOMMU driver"
500 	depends on VIRTIO
501 	depends on (ARM64 || X86)
502 	select IOMMU_API
503 	select INTERVAL_TREE
504 	select ACPI_VIOT if ACPI
505 	help
506 	  Para-virtualised IOMMU driver with virtio.
507 
508 	  Say Y here if you intend to run this kernel as a guest.
509 
510 config SPRD_IOMMU
511 	tristate "Unisoc IOMMU Support"
512 	depends on ARCH_SPRD || COMPILE_TEST
513 	select IOMMU_API
514 	help
515 	  Support for IOMMU on Unisoc's SoCs, this IOMMU can be used by
516 	  Unisoc's multimedia devices, such as display, Image codec(jpeg)
517 	  and a few signal processors, including VSP(video), GSP(graphic),
518 	  ISP(image), and CPP(camera pixel processor), etc.
519 
520 	  Say Y here if you want to use the multimedia devices listed above.
521 
522 endif # IOMMU_SUPPORT
523