treewide: Add SPDX license identifier - Makefile/Kconfig
[sfrench/cifs-2.6.git] / drivers / iommu / Kconfig
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 menuconfig IOMMU_SUPPORT
11         bool "IOMMU Hardware Support"
12         depends on MMU
13         default y
14         ---help---
15           Say Y here if you want to compile device drivers for IO Memory
16           Management Units into the kernel. These devices usually allow to
17           remap DMA requests and/or remap interrupts from other devices on the
18           system.
19
20 if IOMMU_SUPPORT
21
22 menu "Generic IOMMU Pagetable Support"
23
24 # Selected by the actual pagetable implementations
25 config IOMMU_IO_PGTABLE
26         bool
27
28 config IOMMU_IO_PGTABLE_LPAE
29         bool "ARMv7/v8 Long Descriptor Format"
30         select IOMMU_IO_PGTABLE
31         depends on ARM || ARM64 || (COMPILE_TEST && !GENERIC_ATOMIC64)
32         help
33           Enable support for the ARM long descriptor pagetable format.
34           This allocator supports 4K/2M/1G, 16K/32M and 64K/512M page
35           sizes at both stage-1 and stage-2, as well as address spaces
36           up to 48-bits in size.
37
38 config IOMMU_IO_PGTABLE_LPAE_SELFTEST
39         bool "LPAE selftests"
40         depends on IOMMU_IO_PGTABLE_LPAE
41         help
42           Enable self-tests for LPAE page table allocator. This performs
43           a series of page-table consistency checks during boot.
44
45           If unsure, say N here.
46
47 config IOMMU_IO_PGTABLE_ARMV7S
48         bool "ARMv7/v8 Short Descriptor Format"
49         select IOMMU_IO_PGTABLE
50         depends on ARM || ARM64 || COMPILE_TEST
51         help
52           Enable support for the ARM Short-descriptor pagetable format.
53           This supports 32-bit virtual and physical addresses mapped using
54           2-level tables with 4KB pages/1MB sections, and contiguous entries
55           for 64KB pages/16MB supersections if indicated by the IOMMU driver.
56
57 config IOMMU_IO_PGTABLE_ARMV7S_SELFTEST
58         bool "ARMv7s selftests"
59         depends on IOMMU_IO_PGTABLE_ARMV7S
60         help
61           Enable self-tests for ARMv7s page table allocator. This performs
62           a series of page-table consistency checks during boot.
63
64           If unsure, say N here.
65
66 endmenu
67
68 config IOMMU_DEBUGFS
69         bool "Export IOMMU internals in DebugFS"
70         depends on DEBUG_FS
71         help
72           Allows exposure of IOMMU device internals. This option enables
73           the use of debugfs by IOMMU drivers as required. Devices can,
74           at initialization time, cause the IOMMU code to create a top-level
75           debug/iommu directory, and then populate a subdirectory with
76           entries as required.
77
78 config IOMMU_DEFAULT_PASSTHROUGH
79         bool "IOMMU passthrough by default"
80         depends on IOMMU_API
81         help
82           Enable passthrough by default, removing the need to pass in
83           iommu.passthrough=on or iommu=pt through command line. If this
84           is enabled, you can still disable with iommu.passthrough=off
85           or iommu=nopt depending on the architecture.
86
87           If unsure, say N here.
88
89 config OF_IOMMU
90        def_bool y
91        depends on OF && IOMMU_API
92
93 # IOMMU-agnostic DMA-mapping layer
94 config IOMMU_DMA
95         bool
96         select IOMMU_API
97         select IOMMU_IOVA
98         select IRQ_MSI_IOMMU
99         select NEED_SG_DMA_LENGTH
100
101 config FSL_PAMU
102         bool "Freescale IOMMU support"
103         depends on PCI
104         depends on PHYS_64BIT
105         depends on PPC_E500MC || (COMPILE_TEST && PPC)
106         select IOMMU_API
107         select GENERIC_ALLOCATOR
108         help
109           Freescale PAMU support. PAMU is the IOMMU present on Freescale QorIQ platforms.
110           PAMU can authorize memory access, remap the memory address, and remap I/O
111           transaction types.
112
113 # MSM IOMMU support
114 config MSM_IOMMU
115         bool "MSM IOMMU Support"
116         depends on ARM
117         depends on ARCH_MSM8X60 || ARCH_MSM8960 || COMPILE_TEST
118         select IOMMU_API
119         select IOMMU_IO_PGTABLE_ARMV7S
120         help
121           Support for the IOMMUs found on certain Qualcomm SOCs.
122           These IOMMUs allow virtualization of the address space used by most
123           cores within the multimedia subsystem.
124
125           If unsure, say N here.
126
127 config IOMMU_PGTABLES_L2
128         def_bool y
129         depends on MSM_IOMMU && MMU && SMP && CPU_DCACHE_DISABLE=n
130
131 # AMD IOMMU support
132 config AMD_IOMMU
133         bool "AMD IOMMU support"
134         select SWIOTLB
135         select PCI_MSI
136         select PCI_ATS
137         select PCI_PRI
138         select PCI_PASID
139         select IOMMU_API
140         select IOMMU_IOVA
141         depends on X86_64 && PCI && ACPI
142         ---help---
143           With this option you can enable support for AMD IOMMU hardware in
144           your system. An IOMMU is a hardware component which provides
145           remapping of DMA memory accesses from devices. With an AMD IOMMU you
146           can isolate the DMA memory of different devices and protect the
147           system from misbehaving device drivers or hardware.
148
149           You can find out if your system has an AMD IOMMU if you look into
150           your BIOS for an option to enable it or if you have an IVRS ACPI
151           table.
152
153 config AMD_IOMMU_V2
154         tristate "AMD IOMMU Version 2 driver"
155         depends on AMD_IOMMU
156         select MMU_NOTIFIER
157         ---help---
158           This option enables support for the AMD IOMMUv2 features of the IOMMU
159           hardware. Select this option if you want to use devices that support
160           the PCI PRI and PASID interface.
161
162 config AMD_IOMMU_DEBUGFS
163         bool "Enable AMD IOMMU internals in DebugFS"
164         depends on AMD_IOMMU && IOMMU_DEBUGFS
165         ---help---
166           !!!WARNING!!!  !!!WARNING!!!  !!!WARNING!!!  !!!WARNING!!!
167
168           DO NOT ENABLE THIS OPTION UNLESS YOU REALLY, -REALLY- KNOW WHAT YOU ARE DOING!!!
169           Exposes AMD IOMMU device internals in DebugFS.
170
171           This option is -NOT- intended for production environments, and should
172           not generally be enabled.
173
174 # Intel IOMMU support
175 config DMAR_TABLE
176         bool
177
178 config INTEL_IOMMU
179         bool "Support for Intel IOMMU using DMA Remapping Devices"
180         depends on PCI_MSI && ACPI && (X86 || IA64_GENERIC)
181         select IOMMU_API
182         select IOMMU_IOVA
183         select NEED_DMA_MAP_STATE
184         select DMAR_TABLE
185         help
186           DMA remapping (DMAR) devices support enables independent address
187           translations for Direct Memory Access (DMA) from devices.
188           These DMA remapping devices are reported via ACPI tables
189           and include PCI device scope covered by these DMA
190           remapping devices.
191
192 config INTEL_IOMMU_DEBUGFS
193         bool "Export Intel IOMMU internals in Debugfs"
194         depends on INTEL_IOMMU && IOMMU_DEBUGFS
195         help
196           !!!WARNING!!!
197
198           DO NOT ENABLE THIS OPTION UNLESS YOU REALLY KNOW WHAT YOU ARE DOING!!!
199
200           Expose Intel IOMMU internals in Debugfs.
201
202           This option is -NOT- intended for production environments, and should
203           only be enabled for debugging Intel IOMMU.
204
205 config INTEL_IOMMU_SVM
206         bool "Support for Shared Virtual Memory with Intel IOMMU"
207         depends on INTEL_IOMMU && X86
208         select PCI_PASID
209         select MMU_NOTIFIER
210         help
211           Shared Virtual Memory (SVM) provides a facility for devices
212           to access DMA resources through process address space by
213           means of a Process Address Space ID (PASID).
214
215 config INTEL_IOMMU_DEFAULT_ON
216         def_bool y
217         prompt "Enable Intel DMA Remapping Devices by default"
218         depends on INTEL_IOMMU
219         help
220           Selecting this option will enable a DMAR device at boot time if
221           one is found. If this option is not selected, DMAR support can
222           be enabled by passing intel_iommu=on to the kernel.
223
224 config INTEL_IOMMU_BROKEN_GFX_WA
225         bool "Workaround broken graphics drivers (going away soon)"
226         depends on INTEL_IOMMU && BROKEN && X86
227         ---help---
228           Current Graphics drivers tend to use physical address
229           for DMA and avoid using DMA APIs. Setting this config
230           option permits the IOMMU driver to set a unity map for
231           all the OS-visible memory. Hence the driver can continue
232           to use physical addresses for DMA, at least until this
233           option is removed in the 2.6.32 kernel.
234
235 config INTEL_IOMMU_FLOPPY_WA
236         def_bool y
237         depends on INTEL_IOMMU && X86
238         ---help---
239           Floppy disk drivers are known to bypass DMA API calls
240           thereby failing to work when IOMMU is enabled. This
241           workaround will setup a 1:1 mapping for the first
242           16MiB to make floppy (an ISA device) work.
243
244 config IRQ_REMAP
245         bool "Support for Interrupt Remapping"
246         depends on X86_64 && X86_IO_APIC && PCI_MSI && ACPI
247         select DMAR_TABLE
248         ---help---
249           Supports Interrupt remapping for IO-APIC and MSI devices.
250           To use x2apic mode in the CPU's which support x2APIC enhancements or
251           to support platforms with CPU's having > 8 bit APIC ID, say Y.
252
253 # OMAP IOMMU support
254 config OMAP_IOMMU
255         bool "OMAP IOMMU Support"
256         depends on ARM && MMU
257         depends on ARCH_OMAP2PLUS || COMPILE_TEST
258         select IOMMU_API
259         ---help---
260           The OMAP3 media platform drivers depend on iommu support,
261           if you need them say Y here.
262
263 config OMAP_IOMMU_DEBUG
264         bool "Export OMAP IOMMU internals in DebugFS"
265         depends on OMAP_IOMMU && DEBUG_FS
266         ---help---
267           Select this to see extensive information about
268           the internal state of OMAP IOMMU in debugfs.
269
270           Say N unless you know you need this.
271
272 config ROCKCHIP_IOMMU
273         bool "Rockchip IOMMU Support"
274         depends on ARM || ARM64
275         depends on ARCH_ROCKCHIP || COMPILE_TEST
276         select IOMMU_API
277         select ARM_DMA_USE_IOMMU
278         help
279           Support for IOMMUs found on Rockchip rk32xx SOCs.
280           These IOMMUs allow virtualization of the address space used by most
281           cores within the multimedia subsystem.
282           Say Y here if you are using a Rockchip SoC that includes an IOMMU
283           device.
284
285 config TEGRA_IOMMU_GART
286         bool "Tegra GART IOMMU Support"
287         depends on ARCH_TEGRA_2x_SOC
288         depends on TEGRA_MC
289         select IOMMU_API
290         help
291           Enables support for remapping discontiguous physical memory
292           shared with the operating system into contiguous I/O virtual
293           space through the GART (Graphics Address Relocation Table)
294           hardware included on Tegra SoCs.
295
296 config TEGRA_IOMMU_SMMU
297         bool "NVIDIA Tegra SMMU Support"
298         depends on ARCH_TEGRA
299         depends on TEGRA_AHB
300         depends on TEGRA_MC
301         select IOMMU_API
302         help
303           This driver supports the IOMMU hardware (SMMU) found on NVIDIA Tegra
304           SoCs (Tegra30 up to Tegra210).
305
306 config EXYNOS_IOMMU
307         bool "Exynos IOMMU Support"
308         depends on ARCH_EXYNOS && MMU
309         depends on !CPU_BIG_ENDIAN # revisit driver if we can enable big-endian ptes
310         select IOMMU_API
311         select ARM_DMA_USE_IOMMU
312         help
313           Support for the IOMMU (System MMU) of Samsung Exynos application
314           processor family. This enables H/W multimedia accelerators to see
315           non-linear physical memory chunks as linear memory in their
316           address space.
317
318           If unsure, say N here.
319
320 config EXYNOS_IOMMU_DEBUG
321         bool "Debugging log for Exynos IOMMU"
322         depends on EXYNOS_IOMMU
323         help
324           Select this to see the detailed log message that shows what
325           happens in the IOMMU driver.
326
327           Say N unless you need kernel log message for IOMMU debugging.
328
329 config IPMMU_VMSA
330         bool "Renesas VMSA-compatible IPMMU"
331         depends on ARM || IOMMU_DMA
332         depends on ARCH_RENESAS || (COMPILE_TEST && !GENERIC_ATOMIC64)
333         select IOMMU_API
334         select IOMMU_IO_PGTABLE_LPAE
335         select ARM_DMA_USE_IOMMU
336         help
337           Support for the Renesas VMSA-compatible IPMMU found in the R-Mobile
338           APE6, R-Car Gen2, and R-Car Gen3 SoCs.
339
340           If unsure, say N.
341
342 config SPAPR_TCE_IOMMU
343         bool "sPAPR TCE IOMMU Support"
344         depends on PPC_POWERNV || PPC_PSERIES
345         select IOMMU_API
346         help
347           Enables bits of IOMMU API required by VFIO. The iommu_ops
348           is not implemented as it is not necessary for VFIO.
349
350 # ARM IOMMU support
351 config ARM_SMMU
352         bool "ARM Ltd. System MMU (SMMU) Support"
353         depends on (ARM64 || ARM) && MMU
354         select IOMMU_API
355         select IOMMU_IO_PGTABLE_LPAE
356         select ARM_DMA_USE_IOMMU if ARM
357         help
358           Support for implementations of the ARM System MMU architecture
359           versions 1 and 2.
360
361           Say Y here if your SoC includes an IOMMU device implementing
362           the ARM SMMU architecture.
363
364 config ARM_SMMU_DISABLE_BYPASS_BY_DEFAULT
365         bool "Default to disabling bypass on ARM SMMU v1 and v2"
366         depends on ARM_SMMU
367         default y
368         help
369           Say Y here to (by default) disable bypass streams such that
370           incoming transactions from devices that are not attached to
371           an iommu domain will report an abort back to the device and
372           will not be allowed to pass through the SMMU.
373
374           Any old kernels that existed before this KConfig was
375           introduced would default to _allowing_ bypass (AKA the
376           equivalent of NO for this config).  However the default for
377           this option is YES because the old behavior is insecure.
378
379           There are few reasons to allow unmatched stream bypass, and
380           even fewer good ones.  If saying YES here breaks your board
381           you should work on fixing your board.  This KConfig option
382           is expected to be removed in the future and we'll simply
383           hardcode the bypass disable in the code.
384
385           NOTE: the kernel command line parameter
386           'arm-smmu.disable_bypass' will continue to override this
387           config.
388
389 config ARM_SMMU_V3
390         bool "ARM Ltd. System MMU Version 3 (SMMUv3) Support"
391         depends on ARM64
392         select IOMMU_API
393         select IOMMU_IO_PGTABLE_LPAE
394         select GENERIC_MSI_IRQ_DOMAIN
395         help
396           Support for implementations of the ARM System MMU architecture
397           version 3 providing translation support to a PCIe root complex.
398
399           Say Y here if your system includes an IOMMU device implementing
400           the ARM SMMUv3 architecture.
401
402 config S390_IOMMU
403         def_bool y if S390 && PCI
404         depends on S390 && PCI
405         select IOMMU_API
406         help
407           Support for the IOMMU API for s390 PCI devices.
408
409 config S390_CCW_IOMMU
410         bool "S390 CCW IOMMU Support"
411         depends on S390 && CCW
412         select IOMMU_API
413         help
414           Enables bits of IOMMU API required by VFIO. The iommu_ops
415           is not implemented as it is not necessary for VFIO.
416
417 config S390_AP_IOMMU
418         bool "S390 AP IOMMU Support"
419         depends on S390 && ZCRYPT
420         select IOMMU_API
421         help
422           Enables bits of IOMMU API required by VFIO. The iommu_ops
423           is not implemented as it is not necessary for VFIO.
424
425 config MTK_IOMMU
426         bool "MTK IOMMU Support"
427         depends on ARM || ARM64
428         depends on ARCH_MEDIATEK || COMPILE_TEST
429         select ARM_DMA_USE_IOMMU
430         select IOMMU_API
431         select IOMMU_DMA
432         select IOMMU_IO_PGTABLE_ARMV7S
433         select MEMORY
434         select MTK_SMI
435         help
436           Support for the M4U on certain Mediatek SOCs. M4U is MultiMedia
437           Memory Management Unit. This option enables remapping of DMA memory
438           accesses for the multimedia subsystem.
439
440           If unsure, say N here.
441
442 config MTK_IOMMU_V1
443         bool "MTK IOMMU Version 1 (M4U gen1) Support"
444         depends on ARM
445         depends on ARCH_MEDIATEK || COMPILE_TEST
446         select ARM_DMA_USE_IOMMU
447         select IOMMU_API
448         select MEMORY
449         select MTK_SMI
450         help
451           Support for the M4U on certain Mediatek SoCs. M4U generation 1 HW is
452           Multimedia Memory Managememt Unit. This option enables remapping of
453           DMA memory accesses for the multimedia subsystem.
454
455           if unsure, say N here.
456
457 config QCOM_IOMMU
458         # Note: iommu drivers cannot (yet?) be built as modules
459         bool "Qualcomm IOMMU Support"
460         depends on ARCH_QCOM || (COMPILE_TEST && !GENERIC_ATOMIC64)
461         select IOMMU_API
462         select IOMMU_IO_PGTABLE_LPAE
463         select ARM_DMA_USE_IOMMU
464         help
465           Support for IOMMU on certain Qualcomm SoCs.
466
467 config HYPERV_IOMMU
468         bool "Hyper-V x2APIC IRQ Handling"
469         depends on HYPERV
470         select IOMMU_API
471         default HYPERV
472         help
473           Stub IOMMU driver to handle IRQs as to allow Hyper-V Linux
474           guests to run with x2APIC mode enabled.
475
476 endif # IOMMU_SUPPORT