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