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