]> Git Repo - linux.git/blame - drivers/iommu/Kconfig
Merge tag 'vfs-6.9-rc6.fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/vfs/vfs
[linux.git] / drivers / iommu / Kconfig
CommitLineData
ec8f24b7 1# SPDX-License-Identifier: GPL-2.0-only
bd3c2e66
SA
2# The IOVA library may also be used by non-IOMMU_API users
3config IOMMU_IOVA
4 tristate
5
ab493a0f
OBC
6# IOMMU_API always gets selected by whoever wants it.
7config IOMMU_API
8 bool
b10f127e 9
8c9c727b
JM
10config IOMMUFD_DRIVER
11 bool
12 default n
13
68255b62
JR
14menuconfig IOMMU_SUPPORT
15 bool "IOMMU Hardware Support"
e5144c93 16 depends on MMU
68255b62 17 default y
a7f7f624 18 help
68255b62
JR
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
fdb1d7be
WD
26menu "Generic IOMMU Pagetable Support"
27
28# Selected by the actual pagetable implementations
29config IOMMU_IO_PGTABLE
30 bool
31
e1d3c0fd
WD
32config IOMMU_IO_PGTABLE_LPAE
33 bool "ARMv7/v8 Long Descriptor Format"
34 select IOMMU_IO_PGTABLE
d286a58b 35 depends on ARM || ARM64 || COMPILE_TEST
1b0b5f50 36 depends on !GENERIC_ATOMIC64 # for cmpxchg64()
e1d3c0fd
WD
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
fe4b991d
WD
43config 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
e5fc9753
RM
52config IOMMU_IO_PGTABLE_ARMV7S
53 bool "ARMv7/v8 Short Descriptor Format"
54 select IOMMU_IO_PGTABLE
48e6f765 55 depends on ARM || ARM64 || COMPILE_TEST
e5fc9753
RM
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
62config 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
745ef109
JG
71config IOMMU_IO_PGTABLE_DART
72 bool "Apple DART Formats"
73 select IOMMU_IO_PGTABLE
d286a58b 74 depends on ARM64 || COMPILE_TEST
1b0b5f50 75 depends on !GENERIC_ATOMIC64 # for cmpxchg64()
745ef109
JG
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
fdb1d7be
WD
83endmenu
84
bad614b2
GH
85config 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
e96763ec
RM
95choice
96 prompt "IOMMU default domain type"
58d11317 97 depends on IOMMU_API
4bbdb725 98 default IOMMU_DEFAULT_DMA_LAZY if X86 || S390
e96763ec 99 default IOMMU_DEFAULT_DMA_STRICT
d0432345 100 help
e96763ec
RM
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.
58d11317 107
e96763ec 108 If unsure, keep the default.
712d8f20 109
e96763ec
RM
110config IOMMU_DEFAULT_DMA_STRICT
111 bool "Translated - Strict"
712d8f20 112 help
e96763ec
RM
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.
712d8f20 116
e96763ec
RM
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.
712d8f20 120
e96763ec
RM
121config IOMMU_DEFAULT_DMA_LAZY
122 bool "Translated - Lazy"
712d8f20 123 help
e96763ec
RM
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.
712d8f20 134
e96763ec
RM
135config IOMMU_DEFAULT_PASSTHROUGH
136 bool "Passthrough"
712d8f20 137 help
e96763ec
RM
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.
712d8f20
ZL
144
145endchoice
58d11317 146
4e0ee78f 147config OF_IOMMU
d0432345
KK
148 def_bool y
149 depends on OF && IOMMU_API
4e0ee78f 150
0db2e5d1
RM
151# IOMMU-agnostic DMA-mapping layer
152config IOMMU_DMA
4bbdb725 153 def_bool ARM64 || X86 || S390
2f9237d4 154 select DMA_OPS
0db2e5d1
RM
155 select IOMMU_API
156 select IOMMU_IOVA
ece6e6f0 157 select IRQ_MSI_IOMMU
59a68eb8 158 select NEED_SG_DMA_LENGTH
861370f4 159 select NEED_SG_DMA_FLAGS if SWIOTLB
0db2e5d1 160
7ba56472
FY
161# Shared Virtual Addressing
162config IOMMU_SVA
8f23f5db 163 select IOMMU_MM_DATA
cfc78dfd 164 bool
cfc78dfd 165
17c51a0e
LB
166config IOMMU_IOPF
167 bool
168
695093e3
VS
169config FSL_PAMU
170 bool "Freescale IOMMU support"
a4d98fb3 171 depends on PCI
af29d9fa 172 depends on PHYS_64BIT
a0d284d2 173 depends on PPC_E500MC || (COMPILE_TEST && PPC)
695093e3
VS
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
b10f127e
OBC
181# MSM IOMMU support
182config MSM_IOMMU
183 bool "MSM IOMMU Support"
477ab7a1 184 depends on ARM
18368ee2 185 depends on ARCH_QCOM || COMPILE_TEST
b10f127e 186 select IOMMU_API
c9220fbd 187 select IOMMU_IO_PGTABLE_ARMV7S
b10f127e
OBC
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
cbe94c6e 195source "drivers/iommu/amd/Kconfig"
ab65ba57 196source "drivers/iommu/intel/Kconfig"
2ff4bed7 197source "drivers/iommu/iommufd/Kconfig"
04618252 198
d3f13810 199config IRQ_REMAP
a446e219
KC
200 bool "Support for Interrupt Remapping"
201 depends on X86_64 && X86_IO_APIC && PCI_MSI && ACPI
70bad345 202 select DMAR_TABLE if INTEL_IOMMU
a7f7f624 203 help
166e9278
OBC
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.
68255b62 207
fcf3a6ef
OBC
208# OMAP IOMMU support
209config OMAP_IOMMU
210 bool "OMAP IOMMU Support"
477ab7a1 211 depends on ARCH_OMAP2PLUS || COMPILE_TEST
fcf3a6ef 212 select IOMMU_API
a7f7f624 213 help
06b718c0
GH
214 The OMAP3 media platform drivers depend on iommu support,
215 if you need them say Y here.
fcf3a6ef 216
fcf3a6ef 217config OMAP_IOMMU_DEBUG
61c75352
SA
218 bool "Export OMAP IOMMU internals in DebugFS"
219 depends on OMAP_IOMMU && DEBUG_FS
a7f7f624 220 help
61c75352
SA
221 Select this to see extensive information about
222 the internal state of OMAP IOMMU in debugfs.
fcf3a6ef 223
61c75352 224 Say N unless you know you need this.
fcf3a6ef 225
c68a2921
DK
226config ROCKCHIP_IOMMU
227 bool "Rockchip IOMMU Support"
11175886 228 depends on ARCH_ROCKCHIP || COMPILE_TEST
c68a2921
DK
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.
fcf3a6ef 237
4100b8c2
MR
238config SUN50I_IOMMU
239 bool "Allwinner H6 IOMMU Support"
c7451e49 240 depends on HAS_DMA
4100b8c2
MR
241 depends on ARCH_SUNXI || COMPILE_TEST
242 select ARM_DMA_USE_IOMMU
243 select IOMMU_API
4100b8c2
MR
244 help
245 Support for the IOMMU introduced in the Allwinner H6 SoCs.
246
7a31f6f4 247config TEGRA_IOMMU_SMMU
89184651
TR
248 bool "NVIDIA Tegra SMMU Support"
249 depends on ARCH_TEGRA
250 depends on TEGRA_AHB
251 depends on TEGRA_MC
7a31f6f4
HD
252 select IOMMU_API
253 help
89184651 254 This driver supports the IOMMU hardware (SMMU) found on NVIDIA Tegra
588c43a7 255 SoCs (Tegra30 up to Tegra210).
7a31f6f4 256
2a96536e
KC
257config EXYNOS_IOMMU
258 bool "Exynos IOMMU Support"
b4ceb4a5 259 depends on ARCH_EXYNOS || COMPILE_TEST
db3a7fd7 260 depends on !CPU_BIG_ENDIAN # revisit driver if we can enable big-endian ptes
2a96536e 261 select IOMMU_API
4802c1d0 262 select ARM_DMA_USE_IOMMU
2a96536e 263 help
5455d700
SK
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.
2a96536e
KC
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
5455d700 276 happens in the IOMMU driver.
2a96536e 277
5455d700 278 Say N unless you need kernel log message for IOMMU debugging.
2a96536e 279
d25a2a16
LP
280config IPMMU_VMSA
281 bool "Renesas VMSA-compatible IPMMU"
d286a58b 282 depends on ARCH_RENESAS || COMPILE_TEST
e332003b 283 depends on ARM || ARM64 || COMPILE_TEST
d286a58b 284 depends on !GENERIC_ATOMIC64 # for IOMMU_IO_PGTABLE_LPAE
d25a2a16 285 select IOMMU_API
f20ed39f 286 select IOMMU_IO_PGTABLE_LPAE
d25a2a16
LP
287 select ARM_DMA_USE_IOMMU
288 help
15021d36 289 Support for the Renesas VMSA-compatible IPMMU found in the R-Mobile
d714aaa7 290 APE6, R-Car Gen{2,3} and RZ/G{1,2} SoCs.
d25a2a16
LP
291
292 If unsure, say N.
293
4e13c1ac
AK
294config SPAPR_TCE_IOMMU
295 bool "sPAPR TCE IOMMU Support"
9dd124b6 296 depends on PPC_POWERNV || PPC_PSERIES
4e13c1ac
AK
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
46d1fb07
SP
302config APPLE_DART
303 tristate "Apple DART IOMMU Support"
d286a58b
RM
304 depends on ARCH_APPLE || COMPILE_TEST
305 depends on !GENERIC_ATOMIC64 # for IOMMU_IO_PGTABLE_DART
46d1fb07 306 select IOMMU_API
745ef109 307 select IOMMU_IO_PGTABLE_DART
46d1fb07
SP
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
48ec83bc 317# ARM IOMMU support
45ae7cff 318config ARM_SMMU
cd221bd2 319 tristate "ARM Ltd. System MMU (SMMU) Support"
d286a58b
RM
320 depends on ARM64 || ARM || COMPILE_TEST
321 depends on !GENERIC_ATOMIC64 # for IOMMU_IO_PGTABLE_LPAE
45ae7cff 322 select IOMMU_API
518f7136 323 select IOMMU_IO_PGTABLE_LPAE
45ae7cff
WD
324 select ARM_DMA_USE_IOMMU if ARM
325 help
326 Support for implementations of the ARM System MMU architecture
518f7136 327 versions 1 and 2.
45ae7cff
WD
328
329 Say Y here if your SoC includes an IOMMU device implementing
330 the ARM SMMU architecture.
331
cd221bd2
WD
332config 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
954a03be
DA
344config 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
0f0f80d9
AB
369config 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
b9b721d1
SPR
377config ARM_SMMU_QCOM_DEBUG
378 bool "ARM SMMU QCOM implementation defined debug support"
379 depends on ARM_SMMU_QCOM
380 help
381 Support for implementation specific debug features in ARM SMMU
382 hardware found in QTI platforms.
383
384 Say Y here to enable debug for issues such as TLB sync timeouts
385 which requires implementation defined register dumps.
386
48ec83bc 387config ARM_SMMU_V3
2852ad05 388 tristate "ARM Ltd. System MMU Version 3 (SMMUv3) Support"
08d4ca2a 389 depends on ARM64
48ec83bc
WD
390 select IOMMU_API
391 select IOMMU_IO_PGTABLE_LPAE
13e7accb 392 select GENERIC_MSI_IRQ
48ec83bc
WD
393 help
394 Support for implementations of the ARM System MMU architecture
395 version 3 providing translation support to a PCIe root complex.
396
397 Say Y here if your system includes an IOMMU device implementing
398 the ARM SMMUv3 architecture.
399
3f1ce8e8
JPB
400config ARM_SMMU_V3_SVA
401 bool "Shared Virtual Addressing support for the ARM SMMUv3"
402 depends on ARM_SMMU_V3
7ba56472 403 select IOMMU_SVA
17c51a0e 404 select IOMMU_IOPF
32784a95 405 select MMU_NOTIFIER
3f1ce8e8
JPB
406 help
407 Support for sharing process address spaces with devices using the
408 SMMUv3.
409
410 Say Y here if your system supports SVA extensions such as PCIe PASID
411 and PRI.
412
8128f23c
GS
413config S390_IOMMU
414 def_bool y if S390 && PCI
415 depends on S390 && PCI
416 select IOMMU_API
417 help
418 Support for the IOMMU API for s390 PCI devices.
419
0df4fabe 420config MTK_IOMMU
18d8c74e 421 tristate "MediaTek IOMMU Support"
0df4fabe 422 depends on ARCH_MEDIATEK || COMPILE_TEST
1928832f 423 select ARM_DMA_USE_IOMMU
0df4fabe 424 select IOMMU_API
0df4fabe
YW
425 select IOMMU_IO_PGTABLE_ARMV7S
426 select MEMORY
427 select MTK_SMI
428 help
429 Support for the M4U on certain Mediatek SOCs. M4U is MultiMedia
430 Memory Management Unit. This option enables remapping of DMA memory
431 accesses for the multimedia subsystem.
432
433 If unsure, say N here.
434
b17336c5 435config MTK_IOMMU_V1
8de000cf 436 tristate "MediaTek IOMMU Version 1 (M4U gen1) Support"
b17336c5
HZ
437 depends on ARM
438 depends on ARCH_MEDIATEK || COMPILE_TEST
439 select ARM_DMA_USE_IOMMU
440 select IOMMU_API
441 select MEMORY
442 select MTK_SMI
b17336c5
HZ
443 help
444 Support for the M4U on certain Mediatek SoCs. M4U generation 1 HW is
445 Multimedia Memory Managememt Unit. This option enables remapping of
446 DMA memory accesses for the multimedia subsystem.
447
448 if unsure, say N here.
449
0ae349a0
RC
450config QCOM_IOMMU
451 # Note: iommu drivers cannot (yet?) be built as modules
452 bool "Qualcomm IOMMU Support"
d286a58b
RM
453 depends on ARCH_QCOM || COMPILE_TEST
454 depends on !GENERIC_ATOMIC64 # for IOMMU_IO_PGTABLE_LPAE
424953cf 455 select QCOM_SCM
0ae349a0
RC
456 select IOMMU_API
457 select IOMMU_IO_PGTABLE_LPAE
458 select ARM_DMA_USE_IOMMU
459 help
460 Support for IOMMU on certain Qualcomm SoCs.
461
29217a47 462config HYPERV_IOMMU
fea858dc 463 bool "Hyper-V IRQ Handling"
d7f0b2e4 464 depends on HYPERV && X86
29217a47
LT
465 select IOMMU_API
466 default HYPERV
467 help
fea858dc
NDN
468 Stub IOMMU driver to handle IRQs to support Hyper-V Linux
469 guest and root partitions.
29217a47 470
edcd69ab 471config VIRTIO_IOMMU
fa4afd78
JPB
472 tristate "Virtio IOMMU driver"
473 depends on VIRTIO
8ce4904b 474 depends on (ARM64 || X86)
edcd69ab
JPB
475 select IOMMU_API
476 select INTERVAL_TREE
3cf48554 477 select ACPI_VIOT if ACPI
edcd69ab
JPB
478 help
479 Para-virtualised IOMMU driver with virtio.
480
481 Say Y here if you intend to run this kernel as a guest.
482
b23e4fc4
CZ
483config SPRD_IOMMU
484 tristate "Unisoc IOMMU Support"
485 depends on ARCH_SPRD || COMPILE_TEST
486 select IOMMU_API
487 help
488 Support for IOMMU on Unisoc's SoCs, this IOMMU can be used by
489 Unisoc's multimedia devices, such as display, Image codec(jpeg)
490 and a few signal processors, including VSP(video), GSP(graphic),
491 ISP(image), and CPP(camera pixel processor), etc.
492
493 Say Y here if you want to use the multimedia devices listed above.
494
68255b62 495endif # IOMMU_SUPPORT
This page took 1.986506 seconds and 4 git commands to generate.