• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# SPDX-License-Identifier: GPL-2.0-only
2# The IOVA library may also be used by non-IOMMU_API users
3config IOMMU_IOVA
4	tristate
5
6# IOMMU_API always gets selected by whoever wants it.
7config IOMMU_API
8	bool
9
10config IOMMUFD_DRIVER
11	bool
12	default n
13
14menuconfig 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
24if IOMMU_SUPPORT
25
26menu "Generic IOMMU Pagetable Support"
27
28# Selected by the actual pagetable implementations
29config IOMMU_IO_PGTABLE
30	bool
31
32config 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
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
52config 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
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
71config 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
83endmenu
84
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
95choice
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
110config 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
121config 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
135config 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
145endchoice
146
147config OF_IOMMU
148	def_bool y
149	depends on OF && IOMMU_API
150
151# IOMMU-agnostic DMA-mapping layer
152config 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
162config IOMMU_SVA
163	select IOMMU_MM_DATA
164	bool
165
166config IOMMU_IOPF
167	bool
168
169config 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
182config 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
195source "drivers/iommu/amd/Kconfig"
196source "drivers/iommu/intel/Kconfig"
197source "drivers/iommu/iommufd/Kconfig"
198
199config IRQ_REMAP
200	bool "Support for Interrupt Remapping"
201	depends on X86_64 && X86_IO_APIC && PCI_MSI && ACPI
202	help
203	  Supports Interrupt remapping for IO-APIC and MSI devices.
204	  To use x2apic mode in the CPU's which support x2APIC enhancements or
205	  to support platforms with CPU's having > 8 bit APIC ID, say Y.
206
207# OMAP IOMMU support
208config OMAP_IOMMU
209	bool "OMAP IOMMU Support"
210	depends on ARCH_OMAP2PLUS || COMPILE_TEST
211	select IOMMU_API
212	help
213	  The OMAP3 media platform drivers depend on iommu support,
214	  if you need them say Y here.
215
216config OMAP_IOMMU_DEBUG
217	bool "Export OMAP IOMMU internals in DebugFS"
218	depends on OMAP_IOMMU && DEBUG_FS
219	help
220	  Select this to see extensive information about
221	  the internal state of OMAP IOMMU in debugfs.
222
223	  Say N unless you know you need this.
224
225config ROCKCHIP_IOMMU
226	bool "Rockchip IOMMU Support"
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 SUN50I_IOMMU
238	bool "Allwinner H6 IOMMU Support"
239	depends on HAS_DMA
240	depends on ARCH_SUNXI || COMPILE_TEST
241	select ARM_DMA_USE_IOMMU
242	select IOMMU_API
243	help
244	  Support for the IOMMU introduced in the Allwinner H6 SoCs.
245
246config TEGRA_IOMMU_SMMU
247	bool "NVIDIA Tegra SMMU Support"
248	depends on ARCH_TEGRA
249	depends on TEGRA_AHB
250	depends on TEGRA_MC
251	select IOMMU_API
252	help
253	  This driver supports the IOMMU hardware (SMMU) found on NVIDIA Tegra
254	  SoCs (Tegra30 up to Tegra210).
255
256config EXYNOS_IOMMU
257	bool "Exynos IOMMU Support"
258	depends on ARCH_EXYNOS || COMPILE_TEST
259	depends on !CPU_BIG_ENDIAN # revisit driver if we can enable big-endian ptes
260	select IOMMU_API
261	select ARM_DMA_USE_IOMMU
262	help
263	  Support for the IOMMU (System MMU) of Samsung Exynos application
264	  processor family. This enables H/W multimedia accelerators to see
265	  non-linear physical memory chunks as linear memory in their
266	  address space.
267
268	  If unsure, say N here.
269
270config EXYNOS_IOMMU_DEBUG
271	bool "Debugging log for Exynos IOMMU"
272	depends on EXYNOS_IOMMU
273	help
274	  Select this to see the detailed log message that shows what
275	  happens in the IOMMU driver.
276
277	  Say N unless you need kernel log message for IOMMU debugging.
278
279config IPMMU_VMSA
280	bool "Renesas VMSA-compatible IPMMU"
281	depends on ARCH_RENESAS || COMPILE_TEST
282	depends on ARM || ARM64 || COMPILE_TEST
283	depends on !GENERIC_ATOMIC64	# for IOMMU_IO_PGTABLE_LPAE
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 found in the R-Mobile
289	  APE6, R-Car Gen{2,3} and RZ/G{1,2} 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
301config APPLE_DART
302	tristate "Apple DART IOMMU Support"
303	depends on ARCH_APPLE || COMPILE_TEST
304	depends on !GENERIC_ATOMIC64	# for IOMMU_IO_PGTABLE_DART
305	select IOMMU_API
306	select IOMMU_IO_PGTABLE_DART
307	default ARCH_APPLE
308	help
309	  Support for Apple DART (Device Address Resolution Table) IOMMUs
310	  found in Apple ARM SoCs like the M1.
311	  This IOMMU is required for most peripherals using DMA to access
312	  the main memory.
313
314	  Say Y here if you are using an Apple SoC.
315
316# ARM IOMMU support
317config ARM_SMMU
318	tristate "ARM Ltd. System MMU (SMMU) Support"
319	depends on ARM64 || ARM || COMPILE_TEST
320	depends on !GENERIC_ATOMIC64	# for IOMMU_IO_PGTABLE_LPAE
321	select IOMMU_API
322	select IOMMU_IO_PGTABLE_LPAE
323	select ARM_DMA_USE_IOMMU if ARM
324	help
325	  Support for implementations of the ARM System MMU architecture
326	  versions 1 and 2.
327
328	  Say Y here if your SoC includes an IOMMU device implementing
329	  the ARM SMMU architecture.
330
331config ARM_SMMU_LEGACY_DT_BINDINGS
332	bool "Support the legacy \"mmu-masters\" devicetree bindings"
333	depends on ARM_SMMU=y && OF
334	help
335	  Support for the badly designed and deprecated "mmu-masters"
336	  devicetree bindings. This allows some DMA masters to attach
337	  to the SMMU but does not provide any support via the DMA API.
338	  If you're lucky, you might be able to get VFIO up and running.
339
340	  If you say Y here then you'll make me very sad. Instead, say N
341	  and move your firmware to the utopian future that was 2016.
342
343config ARM_SMMU_DISABLE_BYPASS_BY_DEFAULT
344	bool "Default to disabling bypass on ARM SMMU v1 and v2"
345	depends on ARM_SMMU
346	default y
347	help
348	  Say Y here to (by default) disable bypass streams such that
349	  incoming transactions from devices that are not attached to
350	  an iommu domain will report an abort back to the device and
351	  will not be allowed to pass through the SMMU.
352
353	  Any old kernels that existed before this KConfig was
354	  introduced would default to _allowing_ bypass (AKA the
355	  equivalent of NO for this config).  However the default for
356	  this option is YES because the old behavior is insecure.
357
358	  There are few reasons to allow unmatched stream bypass, and
359	  even fewer good ones.  If saying YES here breaks your board
360	  you should work on fixing your board.  This KConfig option
361	  is expected to be removed in the future and we'll simply
362	  hardcode the bypass disable in the code.
363
364	  NOTE: the kernel command line parameter
365	  'arm-smmu.disable_bypass' will continue to override this
366	  config.
367
368config ARM_SMMU_QCOM
369	def_tristate y
370	depends on ARM_SMMU && ARCH_QCOM
371	select QCOM_SCM
372	help
373	  When running on a Qualcomm platform that has the custom variant
374	  of the ARM SMMU, this needs to be built into the SMMU driver.
375
376config ARM_SMMU_QCOM_DEBUG
377	bool "ARM SMMU QCOM implementation defined debug support"
378	depends on ARM_SMMU_QCOM=y
379	help
380	  Support for implementation specific debug features in ARM SMMU
381	  hardware found in QTI platforms. This include support for
382	  the Translation Buffer Units (TBU) that can be used to obtain
383	  additional information when debugging memory management issues
384	  like context faults.
385
386	  Say Y here to enable debug for issues such as context faults
387	  or TLB sync timeouts which requires implementation defined
388	  register dumps.
389
390config ARM_SMMU_V3
391	tristate "ARM Ltd. System MMU Version 3 (SMMUv3) Support"
392	depends on ARM64
393	select IOMMU_API
394	select IOMMU_IO_PGTABLE_LPAE
395	select GENERIC_MSI_IRQ
396	select IOMMUFD_DRIVER if IOMMUFD
397	help
398	  Support for implementations of the ARM System MMU architecture
399	  version 3 providing translation support to a PCIe root complex.
400
401	  Say Y here if your system includes an IOMMU device implementing
402	  the ARM SMMUv3 architecture.
403
404if ARM_SMMU_V3
405config ARM_SMMU_V3_SVA
406	bool "Shared Virtual Addressing support for the ARM SMMUv3"
407	select IOMMU_SVA
408	select IOMMU_IOPF
409	select MMU_NOTIFIER
410	help
411	  Support for sharing process address spaces with devices using the
412	  SMMUv3.
413
414	  Say Y here if your system supports SVA extensions such as PCIe PASID
415	  and PRI.
416
417config ARM_SMMU_V3_KUNIT_TEST
418	tristate "KUnit tests for arm-smmu-v3 driver"  if !KUNIT_ALL_TESTS
419	depends on KUNIT
420	depends on ARM_SMMU_V3_SVA
421	default KUNIT_ALL_TESTS
422	help
423	  Enable this option to unit-test arm-smmu-v3 driver functions.
424
425	  If unsure, say N.
426
427config TEGRA241_CMDQV
428	bool "NVIDIA Tegra241 CMDQ-V extension support for ARM SMMUv3"
429	depends on ACPI
430	help
431	  Support for NVIDIA CMDQ-Virtualization extension for ARM SMMUv3. The
432	  CMDQ-V extension is similar to v3.3 ECMDQ for multi command queues
433	  support, except with virtualization capabilities.
434
435	  Say Y here if your system is NVIDIA Tegra241 (Grace) or it has the same
436	  CMDQ-V extension.
437endif
438
439config ARM_SMMU_V3_PKVM
440	tristate "ARM SMMUv3 support for protected Virtual Machines"
441	depends on KVM && ARM64
442	help
443	  Enable a SMMUv3 driver in the KVM hypervisor, to protect VMs against
444	  memory accesses from devices owned by the host.
445
446	  Say Y here if you intend to enable KVM in protected mode.
447
448config S390_IOMMU
449	def_bool y if S390 && PCI
450	depends on S390 && PCI
451	select IOMMU_API
452	help
453	  Support for the IOMMU API for s390 PCI devices.
454
455config MTK_IOMMU
456	tristate "MediaTek IOMMU Support"
457	depends on ARCH_MEDIATEK || COMPILE_TEST
458	select ARM_DMA_USE_IOMMU
459	select IOMMU_API
460	select IOMMU_IO_PGTABLE_ARMV7S
461	select MEMORY
462	select MTK_SMI
463	help
464	  Support for the M4U on certain Mediatek SOCs. M4U is MultiMedia
465	  Memory Management Unit. This option enables remapping of DMA memory
466	  accesses for the multimedia subsystem.
467
468	  If unsure, say N here.
469
470config MTK_IOMMU_V1
471	tristate "MediaTek IOMMU Version 1 (M4U gen1) Support"
472	depends on ARM
473	depends on ARCH_MEDIATEK || COMPILE_TEST
474	select ARM_DMA_USE_IOMMU
475	select IOMMU_API
476	select MEMORY
477	select MTK_SMI
478	help
479	  Support for the M4U on certain Mediatek SoCs. M4U generation 1 HW is
480	  Multimedia Memory Managememt Unit. This option enables remapping of
481	  DMA memory accesses for the multimedia subsystem.
482
483	  if unsure, say N here.
484
485config QCOM_IOMMU
486	# Note: iommu drivers cannot (yet?) be built as modules
487	bool "Qualcomm IOMMU Support"
488	depends on ARCH_QCOM || COMPILE_TEST
489	depends on !GENERIC_ATOMIC64	# for IOMMU_IO_PGTABLE_LPAE
490	select QCOM_SCM
491	select IOMMU_API
492	select IOMMU_IO_PGTABLE_LPAE
493	select ARM_DMA_USE_IOMMU
494	help
495	  Support for IOMMU on certain Qualcomm SoCs.
496
497config HYPERV_IOMMU
498	bool "Hyper-V IRQ Handling"
499	depends on HYPERV && X86
500	select IOMMU_API
501	default HYPERV
502	help
503	  Stub IOMMU driver to handle IRQs to support Hyper-V Linux
504	  guest and root partitions.
505
506config VIRTIO_IOMMU
507	tristate "Virtio IOMMU driver"
508	depends on VIRTIO
509	depends on (ARM64 || X86)
510	select IOMMU_API
511	select INTERVAL_TREE
512	select ACPI_VIOT if ACPI
513	help
514	  Para-virtualised IOMMU driver with virtio.
515
516	  Say Y here if you intend to run this kernel as a guest.
517
518config SPRD_IOMMU
519	tristate "Unisoc IOMMU Support"
520	depends on ARCH_SPRD || COMPILE_TEST
521	select IOMMU_API
522	help
523	  Support for IOMMU on Unisoc's SoCs, this IOMMU can be used by
524	  Unisoc's multimedia devices, such as display, Image codec(jpeg)
525	  and a few signal processors, including VSP(video), GSP(graphic),
526	  ISP(image), and CPP(camera pixel processor), etc.
527
528	  Say Y here if you want to use the multimedia devices listed above.
529
530config PKVM_PVIOMMU
531	tristate "pKVM pvIOMMU driver"
532	depends on ARM64
533	select IOMMU_API
534	help
535	  Para-virtualised IOMMU driver with pKVM.
536
537	  Say Y here if you intend to run this kernel as a guest.
538
539config PKVM_PVIOMMU_SELFTEST
540	bool "pKVM pvIOMMU selftest"
541	depends on PKVM_PVIOMMU
542	help
543	  Basic test for PKVM_PVIOMMU
544
545endif # IOMMU_SUPPORT
546