xref: /openbmc/linux/drivers/iommu/Kconfig (revision 56d06fa2)
1# IOMMU_API always gets selected by whoever wants it.
2config IOMMU_API
3	bool
4
5menuconfig IOMMU_SUPPORT
6	bool "IOMMU Hardware Support"
7	depends on MMU
8	default y
9	---help---
10	  Say Y here if you want to compile device drivers for IO Memory
11	  Management Units into the kernel. These devices usually allow to
12	  remap DMA requests and/or remap interrupts from other devices on the
13	  system.
14
15if IOMMU_SUPPORT
16
17menu "Generic IOMMU Pagetable Support"
18
19# Selected by the actual pagetable implementations
20config IOMMU_IO_PGTABLE
21	bool
22
23config IOMMU_IO_PGTABLE_LPAE
24	bool "ARMv7/v8 Long Descriptor Format"
25	select IOMMU_IO_PGTABLE
26	depends on HAS_DMA && (ARM || ARM64 || COMPILE_TEST)
27	help
28	  Enable support for the ARM long descriptor pagetable format.
29	  This allocator supports 4K/2M/1G, 16K/32M and 64K/512M page
30	  sizes at both stage-1 and stage-2, as well as address spaces
31	  up to 48-bits in size.
32
33config IOMMU_IO_PGTABLE_LPAE_SELFTEST
34	bool "LPAE selftests"
35	depends on IOMMU_IO_PGTABLE_LPAE
36	help
37	  Enable self-tests for LPAE page table allocator. This performs
38	  a series of page-table consistency checks during boot.
39
40	  If unsure, say N here.
41
42config IOMMU_IO_PGTABLE_ARMV7S
43	bool "ARMv7/v8 Short Descriptor Format"
44	select IOMMU_IO_PGTABLE
45	depends on HAS_DMA && (ARM || ARM64 || COMPILE_TEST)
46	help
47	  Enable support for the ARM Short-descriptor pagetable format.
48	  This supports 32-bit virtual and physical addresses mapped using
49	  2-level tables with 4KB pages/1MB sections, and contiguous entries
50	  for 64KB pages/16MB supersections if indicated by the IOMMU driver.
51
52config IOMMU_IO_PGTABLE_ARMV7S_SELFTEST
53	bool "ARMv7s selftests"
54	depends on IOMMU_IO_PGTABLE_ARMV7S
55	help
56	  Enable self-tests for ARMv7s page table allocator. This performs
57	  a series of page-table consistency checks during boot.
58
59	  If unsure, say N here.
60
61endmenu
62
63config IOMMU_IOVA
64	tristate
65
66config OF_IOMMU
67       def_bool y
68       depends on OF && IOMMU_API
69
70# IOMMU-agnostic DMA-mapping layer
71config IOMMU_DMA
72	bool
73	select IOMMU_API
74	select IOMMU_IOVA
75	select NEED_SG_DMA_LENGTH
76
77config FSL_PAMU
78	bool "Freescale IOMMU support"
79	depends on PPC32
80	depends on PPC_E500MC || COMPILE_TEST
81	select IOMMU_API
82	select GENERIC_ALLOCATOR
83	help
84	  Freescale PAMU support. PAMU is the IOMMU present on Freescale QorIQ platforms.
85	  PAMU can authorize memory access, remap the memory address, and remap I/O
86	  transaction types.
87
88# MSM IOMMU support
89config MSM_IOMMU
90	bool "MSM IOMMU Support"
91	depends on ARM
92	depends on ARCH_MSM8X60 || ARCH_MSM8960 || COMPILE_TEST
93	depends on BROKEN
94	select IOMMU_API
95	help
96	  Support for the IOMMUs found on certain Qualcomm SOCs.
97	  These IOMMUs allow virtualization of the address space used by most
98	  cores within the multimedia subsystem.
99
100	  If unsure, say N here.
101
102config IOMMU_PGTABLES_L2
103	def_bool y
104	depends on MSM_IOMMU && MMU && SMP && CPU_DCACHE_DISABLE=n
105
106# AMD IOMMU support
107config AMD_IOMMU
108	bool "AMD IOMMU support"
109	select SWIOTLB
110	select PCI_MSI
111	select PCI_ATS
112	select PCI_PRI
113	select PCI_PASID
114	select IOMMU_API
115	depends on X86_64 && PCI && ACPI
116	---help---
117	  With this option you can enable support for AMD IOMMU hardware in
118	  your system. An IOMMU is a hardware component which provides
119	  remapping of DMA memory accesses from devices. With an AMD IOMMU you
120	  can isolate the DMA memory of different devices and protect the
121	  system from misbehaving device drivers or hardware.
122
123	  You can find out if your system has an AMD IOMMU if you look into
124	  your BIOS for an option to enable it or if you have an IVRS ACPI
125	  table.
126
127config AMD_IOMMU_STATS
128	bool "Export AMD IOMMU statistics to debugfs"
129	depends on AMD_IOMMU
130	select DEBUG_FS
131	---help---
132	  This option enables code in the AMD IOMMU driver to collect various
133	  statistics about whats happening in the driver and exports that
134	  information to userspace via debugfs.
135	  If unsure, say N.
136
137config AMD_IOMMU_V2
138	tristate "AMD IOMMU Version 2 driver"
139	depends on AMD_IOMMU
140	select MMU_NOTIFIER
141	---help---
142	  This option enables support for the AMD IOMMUv2 features of the IOMMU
143	  hardware. Select this option if you want to use devices that support
144	  the PCI PRI and PASID interface.
145
146# Intel IOMMU support
147config DMAR_TABLE
148	bool
149
150config INTEL_IOMMU
151	bool "Support for Intel IOMMU using DMA Remapping Devices"
152	depends on PCI_MSI && ACPI && (X86 || IA64_GENERIC)
153	select IOMMU_API
154	select IOMMU_IOVA
155	select DMAR_TABLE
156	help
157	  DMA remapping (DMAR) devices support enables independent address
158	  translations for Direct Memory Access (DMA) from devices.
159	  These DMA remapping devices are reported via ACPI tables
160	  and include PCI device scope covered by these DMA
161	  remapping devices.
162
163config INTEL_IOMMU_SVM
164	bool "Support for Shared Virtual Memory with Intel IOMMU"
165	depends on INTEL_IOMMU && X86
166	select PCI_PASID
167	select MMU_NOTIFIER
168	help
169	  Shared Virtual Memory (SVM) provides a facility for devices
170	  to access DMA resources through process address space by
171	  means of a Process Address Space ID (PASID).
172
173config INTEL_IOMMU_DEFAULT_ON
174	def_bool y
175	prompt "Enable Intel DMA Remapping Devices by default"
176	depends on INTEL_IOMMU
177	help
178	  Selecting this option will enable a DMAR device at boot time if
179	  one is found. If this option is not selected, DMAR support can
180	  be enabled by passing intel_iommu=on to the kernel.
181
182config INTEL_IOMMU_BROKEN_GFX_WA
183	bool "Workaround broken graphics drivers (going away soon)"
184	depends on INTEL_IOMMU && BROKEN && X86
185	---help---
186	  Current Graphics drivers tend to use physical address
187	  for DMA and avoid using DMA APIs. Setting this config
188	  option permits the IOMMU driver to set a unity map for
189	  all the OS-visible memory. Hence the driver can continue
190	  to use physical addresses for DMA, at least until this
191	  option is removed in the 2.6.32 kernel.
192
193config INTEL_IOMMU_FLOPPY_WA
194	def_bool y
195	depends on INTEL_IOMMU && X86
196	---help---
197	  Floppy disk drivers are known to bypass DMA API calls
198	  thereby failing to work when IOMMU is enabled. This
199	  workaround will setup a 1:1 mapping for the first
200	  16MiB to make floppy (an ISA device) work.
201
202config IRQ_REMAP
203	bool "Support for Interrupt Remapping"
204	depends on X86_64 && X86_IO_APIC && PCI_MSI && ACPI
205	select DMAR_TABLE
206	---help---
207	  Supports Interrupt remapping for IO-APIC and MSI devices.
208	  To use x2apic mode in the CPU's which support x2APIC enhancements or
209	  to support platforms with CPU's having > 8 bit APIC ID, say Y.
210
211# OMAP IOMMU support
212config OMAP_IOMMU
213	bool "OMAP IOMMU Support"
214	depends on ARM && MMU
215	depends on ARCH_OMAP2PLUS || COMPILE_TEST
216	select IOMMU_API
217	---help---
218	  The OMAP3 media platform drivers depend on iommu support,
219	  if you need them say Y here.
220
221config OMAP_IOMMU_DEBUG
222	bool "Export OMAP IOMMU internals in DebugFS"
223	depends on OMAP_IOMMU && DEBUG_FS
224	---help---
225	  Select this to see extensive information about
226	  the internal state of OMAP IOMMU in debugfs.
227
228	  Say N unless you know you need this.
229
230config ROCKCHIP_IOMMU
231	bool "Rockchip IOMMU Support"
232	depends on ARM
233	depends on ARCH_ROCKCHIP || COMPILE_TEST
234	select IOMMU_API
235	select ARM_DMA_USE_IOMMU
236	help
237	  Support for IOMMUs found on Rockchip rk32xx SOCs.
238	  These IOMMUs allow virtualization of the address space used by most
239	  cores within the multimedia subsystem.
240	  Say Y here if you are using a Rockchip SoC that includes an IOMMU
241	  device.
242
243config TEGRA_IOMMU_GART
244	bool "Tegra GART IOMMU Support"
245	depends on ARCH_TEGRA_2x_SOC
246	select IOMMU_API
247	help
248	  Enables support for remapping discontiguous physical memory
249	  shared with the operating system into contiguous I/O virtual
250	  space through the GART (Graphics Address Relocation Table)
251	  hardware included on Tegra SoCs.
252
253config TEGRA_IOMMU_SMMU
254	bool "NVIDIA Tegra SMMU Support"
255	depends on ARCH_TEGRA
256	depends on TEGRA_AHB
257	depends on TEGRA_MC
258	select IOMMU_API
259	help
260	  This driver supports the IOMMU hardware (SMMU) found on NVIDIA Tegra
261	  SoCs (Tegra30 up to Tegra210).
262
263config EXYNOS_IOMMU
264	bool "Exynos IOMMU Support"
265	depends on ARCH_EXYNOS && MMU
266	select IOMMU_API
267	select ARM_DMA_USE_IOMMU
268	help
269	  Support for the IOMMU (System MMU) of Samsung Exynos application
270	  processor family. This enables H/W multimedia accelerators to see
271	  non-linear physical memory chunks as linear memory in their
272	  address space.
273
274	  If unsure, say N here.
275
276config EXYNOS_IOMMU_DEBUG
277	bool "Debugging log for Exynos IOMMU"
278	depends on EXYNOS_IOMMU
279	help
280	  Select this to see the detailed log message that shows what
281	  happens in the IOMMU driver.
282
283	  Say N unless you need kernel log message for IOMMU debugging.
284
285config IPMMU_VMSA
286	bool "Renesas VMSA-compatible IPMMU"
287	depends on ARM_LPAE
288	depends on ARCH_RENESAS || COMPILE_TEST
289	select IOMMU_API
290	select IOMMU_IO_PGTABLE_LPAE
291	select ARM_DMA_USE_IOMMU
292	help
293	  Support for the Renesas VMSA-compatible IPMMU Renesas found in the
294	  R-Mobile APE6 and R-Car H2/M2 SoCs.
295
296	  If unsure, say N.
297
298config SPAPR_TCE_IOMMU
299	bool "sPAPR TCE IOMMU Support"
300	depends on PPC_POWERNV || PPC_PSERIES
301	select IOMMU_API
302	help
303	  Enables bits of IOMMU API required by VFIO. The iommu_ops
304	  is not implemented as it is not necessary for VFIO.
305
306# ARM IOMMU support
307config ARM_SMMU
308	bool "ARM Ltd. System MMU (SMMU) Support"
309	depends on (ARM64 || ARM) && MMU
310	select IOMMU_API
311	select IOMMU_IO_PGTABLE_LPAE
312	select ARM_DMA_USE_IOMMU if ARM
313	help
314	  Support for implementations of the ARM System MMU architecture
315	  versions 1 and 2.
316
317	  Say Y here if your SoC includes an IOMMU device implementing
318	  the ARM SMMU architecture.
319
320config ARM_SMMU_V3
321	bool "ARM Ltd. System MMU Version 3 (SMMUv3) Support"
322	depends on ARM64 && PCI
323	select IOMMU_API
324	select IOMMU_IO_PGTABLE_LPAE
325	select GENERIC_MSI_IRQ_DOMAIN
326	help
327	  Support for implementations of the ARM System MMU architecture
328	  version 3 providing translation support to a PCIe root complex.
329
330	  Say Y here if your system includes an IOMMU device implementing
331	  the ARM SMMUv3 architecture.
332
333config S390_IOMMU
334	def_bool y if S390 && PCI
335	depends on S390 && PCI
336	select IOMMU_API
337	help
338	  Support for the IOMMU API for s390 PCI devices.
339
340config MTK_IOMMU
341	bool "MTK IOMMU Support"
342	depends on ARM || ARM64
343	depends on ARCH_MEDIATEK || COMPILE_TEST
344	select ARM_DMA_USE_IOMMU
345	select IOMMU_API
346	select IOMMU_DMA
347	select IOMMU_IO_PGTABLE_ARMV7S
348	select MEMORY
349	select MTK_SMI
350	help
351	  Support for the M4U on certain Mediatek SOCs. M4U is MultiMedia
352	  Memory Management Unit. This option enables remapping of DMA memory
353	  accesses for the multimedia subsystem.
354
355	  If unsure, say N here.
356
357endif # IOMMU_SUPPORT
358