xref: /openbmc/linux/drivers/iommu/Kconfig (revision c0c74acb)
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 PPC_E500MC || (COMPILE_TEST && PPC)
80	select IOMMU_API
81	select GENERIC_ALLOCATOR
82	help
83	  Freescale PAMU support. PAMU is the IOMMU present on Freescale QorIQ platforms.
84	  PAMU can authorize memory access, remap the memory address, and remap I/O
85	  transaction types.
86
87# MSM IOMMU support
88config MSM_IOMMU
89	bool "MSM IOMMU Support"
90	depends on ARM
91	depends on ARCH_MSM8X60 || ARCH_MSM8960 || COMPILE_TEST
92	select IOMMU_API
93	select IOMMU_IO_PGTABLE_ARMV7S
94	help
95	  Support for the IOMMUs found on certain Qualcomm SOCs.
96	  These IOMMUs allow virtualization of the address space used by most
97	  cores within the multimedia subsystem.
98
99	  If unsure, say N here.
100
101config IOMMU_PGTABLES_L2
102	def_bool y
103	depends on MSM_IOMMU && MMU && SMP && CPU_DCACHE_DISABLE=n
104
105# AMD IOMMU support
106config AMD_IOMMU
107	bool "AMD IOMMU support"
108	select SWIOTLB
109	select PCI_MSI
110	select PCI_ATS
111	select PCI_PRI
112	select PCI_PASID
113	select IOMMU_API
114	select IOMMU_IOVA
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_V2
128	tristate "AMD IOMMU Version 2 driver"
129	depends on AMD_IOMMU
130	select MMU_NOTIFIER
131	---help---
132	  This option enables support for the AMD IOMMUv2 features of the IOMMU
133	  hardware. Select this option if you want to use devices that support
134	  the PCI PRI and PASID interface.
135
136# Intel IOMMU support
137config DMAR_TABLE
138	bool
139
140config INTEL_IOMMU
141	bool "Support for Intel IOMMU using DMA Remapping Devices"
142	depends on PCI_MSI && ACPI && (X86 || IA64_GENERIC)
143	select IOMMU_API
144	select IOMMU_IOVA
145	select DMAR_TABLE
146	help
147	  DMA remapping (DMAR) devices support enables independent address
148	  translations for Direct Memory Access (DMA) from devices.
149	  These DMA remapping devices are reported via ACPI tables
150	  and include PCI device scope covered by these DMA
151	  remapping devices.
152
153config INTEL_IOMMU_SVM
154	bool "Support for Shared Virtual Memory with Intel IOMMU"
155	depends on INTEL_IOMMU && X86
156	select PCI_PASID
157	select MMU_NOTIFIER
158	help
159	  Shared Virtual Memory (SVM) provides a facility for devices
160	  to access DMA resources through process address space by
161	  means of a Process Address Space ID (PASID).
162
163config INTEL_IOMMU_DEFAULT_ON
164	def_bool y
165	prompt "Enable Intel DMA Remapping Devices by default"
166	depends on INTEL_IOMMU
167	help
168	  Selecting this option will enable a DMAR device at boot time if
169	  one is found. If this option is not selected, DMAR support can
170	  be enabled by passing intel_iommu=on to the kernel.
171
172config INTEL_IOMMU_BROKEN_GFX_WA
173	bool "Workaround broken graphics drivers (going away soon)"
174	depends on INTEL_IOMMU && BROKEN && X86
175	---help---
176	  Current Graphics drivers tend to use physical address
177	  for DMA and avoid using DMA APIs. Setting this config
178	  option permits the IOMMU driver to set a unity map for
179	  all the OS-visible memory. Hence the driver can continue
180	  to use physical addresses for DMA, at least until this
181	  option is removed in the 2.6.32 kernel.
182
183config INTEL_IOMMU_FLOPPY_WA
184	def_bool y
185	depends on INTEL_IOMMU && X86
186	---help---
187	  Floppy disk drivers are known to bypass DMA API calls
188	  thereby failing to work when IOMMU is enabled. This
189	  workaround will setup a 1:1 mapping for the first
190	  16MiB to make floppy (an ISA device) work.
191
192config IRQ_REMAP
193	bool "Support for Interrupt Remapping"
194	depends on X86_64 && X86_IO_APIC && PCI_MSI && ACPI
195	select DMAR_TABLE
196	---help---
197	  Supports Interrupt remapping for IO-APIC and MSI devices.
198	  To use x2apic mode in the CPU's which support x2APIC enhancements or
199	  to support platforms with CPU's having > 8 bit APIC ID, say Y.
200
201# OMAP IOMMU support
202config OMAP_IOMMU
203	bool "OMAP IOMMU Support"
204	depends on ARM && MMU
205	depends on ARCH_OMAP2PLUS || COMPILE_TEST
206	select IOMMU_API
207	---help---
208	  The OMAP3 media platform drivers depend on iommu support,
209	  if you need them say Y here.
210
211config OMAP_IOMMU_DEBUG
212	bool "Export OMAP IOMMU internals in DebugFS"
213	depends on OMAP_IOMMU && DEBUG_FS
214	---help---
215	  Select this to see extensive information about
216	  the internal state of OMAP IOMMU in debugfs.
217
218	  Say N unless you know you need this.
219
220config ROCKCHIP_IOMMU
221	bool "Rockchip IOMMU Support"
222	depends on ARM
223	depends on ARCH_ROCKCHIP || COMPILE_TEST
224	select IOMMU_API
225	select ARM_DMA_USE_IOMMU
226	help
227	  Support for IOMMUs found on Rockchip rk32xx SOCs.
228	  These IOMMUs allow virtualization of the address space used by most
229	  cores within the multimedia subsystem.
230	  Say Y here if you are using a Rockchip SoC that includes an IOMMU
231	  device.
232
233config TEGRA_IOMMU_GART
234	bool "Tegra GART IOMMU Support"
235	depends on ARCH_TEGRA_2x_SOC
236	select IOMMU_API
237	help
238	  Enables support for remapping discontiguous physical memory
239	  shared with the operating system into contiguous I/O virtual
240	  space through the GART (Graphics Address Relocation Table)
241	  hardware included on Tegra SoCs.
242
243config TEGRA_IOMMU_SMMU
244	bool "NVIDIA Tegra SMMU Support"
245	depends on ARCH_TEGRA
246	depends on TEGRA_AHB
247	depends on TEGRA_MC
248	select IOMMU_API
249	help
250	  This driver supports the IOMMU hardware (SMMU) found on NVIDIA Tegra
251	  SoCs (Tegra30 up to Tegra210).
252
253config EXYNOS_IOMMU
254	bool "Exynos IOMMU Support"
255	depends on ARCH_EXYNOS && MMU
256	select IOMMU_API
257	select ARM_DMA_USE_IOMMU
258	help
259	  Support for the IOMMU (System MMU) of Samsung Exynos application
260	  processor family. This enables H/W multimedia accelerators to see
261	  non-linear physical memory chunks as linear memory in their
262	  address space.
263
264	  If unsure, say N here.
265
266config EXYNOS_IOMMU_DEBUG
267	bool "Debugging log for Exynos IOMMU"
268	depends on EXYNOS_IOMMU
269	help
270	  Select this to see the detailed log message that shows what
271	  happens in the IOMMU driver.
272
273	  Say N unless you need kernel log message for IOMMU debugging.
274
275config IPMMU_VMSA
276	bool "Renesas VMSA-compatible IPMMU"
277	depends on ARM_LPAE
278	depends on ARCH_RENESAS || COMPILE_TEST
279	select IOMMU_API
280	select IOMMU_IO_PGTABLE_LPAE
281	select ARM_DMA_USE_IOMMU
282	help
283	  Support for the Renesas VMSA-compatible IPMMU Renesas found in the
284	  R-Mobile APE6 and R-Car H2/M2 SoCs.
285
286	  If unsure, say N.
287
288config SPAPR_TCE_IOMMU
289	bool "sPAPR TCE IOMMU Support"
290	depends on PPC_POWERNV || PPC_PSERIES
291	select IOMMU_API
292	help
293	  Enables bits of IOMMU API required by VFIO. The iommu_ops
294	  is not implemented as it is not necessary for VFIO.
295
296# ARM IOMMU support
297config ARM_SMMU
298	bool "ARM Ltd. System MMU (SMMU) Support"
299	depends on (ARM64 || ARM) && MMU
300	select IOMMU_API
301	select IOMMU_IO_PGTABLE_LPAE
302	select ARM_DMA_USE_IOMMU if ARM
303	help
304	  Support for implementations of the ARM System MMU architecture
305	  versions 1 and 2.
306
307	  Say Y here if your SoC includes an IOMMU device implementing
308	  the ARM SMMU architecture.
309
310config ARM_SMMU_V3
311	bool "ARM Ltd. System MMU Version 3 (SMMUv3) Support"
312	depends on ARM64
313	select IOMMU_API
314	select IOMMU_IO_PGTABLE_LPAE
315	select GENERIC_MSI_IRQ_DOMAIN
316	help
317	  Support for implementations of the ARM System MMU architecture
318	  version 3 providing translation support to a PCIe root complex.
319
320	  Say Y here if your system includes an IOMMU device implementing
321	  the ARM SMMUv3 architecture.
322
323config S390_IOMMU
324	def_bool y if S390 && PCI
325	depends on S390 && PCI
326	select IOMMU_API
327	help
328	  Support for the IOMMU API for s390 PCI devices.
329
330config MTK_IOMMU
331	bool "MTK IOMMU Support"
332	depends on ARM || ARM64
333	depends on ARCH_MEDIATEK || COMPILE_TEST
334	select ARM_DMA_USE_IOMMU
335	select IOMMU_API
336	select IOMMU_DMA
337	select IOMMU_IO_PGTABLE_ARMV7S
338	select MEMORY
339	select MTK_SMI
340	help
341	  Support for the M4U on certain Mediatek SOCs. M4U is MultiMedia
342	  Memory Management Unit. This option enables remapping of DMA memory
343	  accesses for the multimedia subsystem.
344
345	  If unsure, say N here.
346
347config MTK_IOMMU_V1
348	bool "MTK IOMMU Version 1 (M4U gen1) Support"
349	depends on ARM
350	depends on ARCH_MEDIATEK || COMPILE_TEST
351	select ARM_DMA_USE_IOMMU
352	select IOMMU_API
353	select MEMORY
354	select MTK_SMI
355	help
356	  Support for the M4U on certain Mediatek SoCs. M4U generation 1 HW is
357	  Multimedia Memory Managememt Unit. This option enables remapping of
358	  DMA memory accesses for the multimedia subsystem.
359
360	  if unsure, say N here.
361
362endif # IOMMU_SUPPORT
363