Merge tag 'for-linus' of git://git.kernel.org/pub/scm/virt/kvm/kvm
[linux-2.6-microblaze.git] / kernel / dma / Kconfig
1 # SPDX-License-Identifier: GPL-2.0-only
2
3 config NO_DMA
4         bool
5
6 config HAS_DMA
7         bool
8         depends on !NO_DMA
9         default y
10
11 config DMA_OPS
12         depends on HAS_DMA
13         bool
14
15 #
16 # IOMMU drivers that can bypass the IOMMU code and optionally use the direct
17 # mapping fast path should select this option and set the dma_ops_bypass
18 # flag in struct device where applicable
19 #
20 config DMA_OPS_BYPASS
21         bool
22
23 # Lets platform IOMMU driver choose between bypass and IOMMU
24 config ARCH_HAS_DMA_MAP_DIRECT
25         bool
26
27 config NEED_SG_DMA_LENGTH
28         bool
29
30 config NEED_DMA_MAP_STATE
31         bool
32
33 config ARCH_DMA_ADDR_T_64BIT
34         def_bool 64BIT || PHYS_ADDR_T_64BIT
35
36 config ARCH_HAS_DMA_SET_MASK
37         bool
38
39 #
40 # Select this option if the architecture needs special handling for
41 # DMA_ATTR_WRITE_COMBINE.  Normally the "uncached" mapping should be what
42 # people thing of when saying write combine, so very few platforms should
43 # need to enable this.
44 #
45 config ARCH_HAS_DMA_WRITE_COMBINE
46         bool
47
48 #
49 # Select if the architectures provides the arch_dma_mark_clean hook
50 #
51 config ARCH_HAS_DMA_MARK_CLEAN
52         bool
53
54 config DMA_DECLARE_COHERENT
55         bool
56
57 config ARCH_HAS_SETUP_DMA_OPS
58         bool
59
60 config ARCH_HAS_TEARDOWN_DMA_OPS
61         bool
62
63 config ARCH_HAS_SYNC_DMA_FOR_DEVICE
64         bool
65
66 config ARCH_HAS_SYNC_DMA_FOR_CPU
67         bool
68         select NEED_DMA_MAP_STATE
69
70 config ARCH_HAS_SYNC_DMA_FOR_CPU_ALL
71         bool
72
73 config ARCH_HAS_DMA_PREP_COHERENT
74         bool
75
76 config ARCH_HAS_FORCE_DMA_UNENCRYPTED
77         bool
78
79 config SWIOTLB
80         bool
81         select NEED_DMA_MAP_STATE
82
83 #
84 # Should be selected if we can mmap non-coherent mappings to userspace.
85 # The only thing that is really required is a way to set an uncached bit
86 # in the pagetables
87 #
88 config DMA_NONCOHERENT_MMAP
89         default y if !MMU
90         bool
91
92 config DMA_COHERENT_POOL
93         select GENERIC_ALLOCATOR
94         bool
95
96 config DMA_REMAP
97         bool
98         depends on MMU
99         select DMA_NONCOHERENT_MMAP
100
101 config DMA_DIRECT_REMAP
102         bool
103         select DMA_REMAP
104         select DMA_COHERENT_POOL
105
106 config DMA_CMA
107         bool "DMA Contiguous Memory Allocator"
108         depends on HAVE_DMA_CONTIGUOUS && CMA
109         help
110           This enables the Contiguous Memory Allocator which allows drivers
111           to allocate big physically-contiguous blocks of memory for use with
112           hardware components that do not support I/O map nor scatter-gather.
113
114           You can disable CMA by specifying "cma=0" on the kernel's command
115           line.
116
117           For more information see <kernel/dma/contiguous.c>.
118           If unsure, say "n".
119
120 if  DMA_CMA
121
122 config DMA_PERNUMA_CMA
123         bool "Enable separate DMA Contiguous Memory Area for each NUMA Node"
124         default NUMA && ARM64
125         help
126           Enable this option to get pernuma CMA areas so that devices like
127           ARM64 SMMU can get local memory by DMA coherent APIs.
128
129           You can set the size of pernuma CMA by specifying "cma_pernuma=size"
130           on the kernel's command line.
131
132 comment "Default contiguous memory area size:"
133
134 config CMA_SIZE_MBYTES
135         int "Size in Mega Bytes"
136         depends on !CMA_SIZE_SEL_PERCENTAGE
137         default 0 if X86
138         default 16
139         help
140           Defines the size (in MiB) of the default memory area for Contiguous
141           Memory Allocator.  If the size of 0 is selected, CMA is disabled by
142           default, but it can be enabled by passing cma=size[MG] to the kernel.
143
144
145 config CMA_SIZE_PERCENTAGE
146         int "Percentage of total memory"
147         depends on !CMA_SIZE_SEL_MBYTES
148         default 0 if X86
149         default 10
150         help
151           Defines the size of the default memory area for Contiguous Memory
152           Allocator as a percentage of the total memory in the system.
153           If 0 percent is selected, CMA is disabled by default, but it can be
154           enabled by passing cma=size[MG] to the kernel.
155
156 choice
157         prompt "Selected region size"
158         default CMA_SIZE_SEL_MBYTES
159
160 config CMA_SIZE_SEL_MBYTES
161         bool "Use mega bytes value only"
162
163 config CMA_SIZE_SEL_PERCENTAGE
164         bool "Use percentage value only"
165
166 config CMA_SIZE_SEL_MIN
167         bool "Use lower value (minimum)"
168
169 config CMA_SIZE_SEL_MAX
170         bool "Use higher value (maximum)"
171
172 endchoice
173
174 config CMA_ALIGNMENT
175         int "Maximum PAGE_SIZE order of alignment for contiguous buffers"
176         range 2 12
177         default 8
178         help
179           DMA mapping framework by default aligns all buffers to the smallest
180           PAGE_SIZE order which is greater than or equal to the requested buffer
181           size. This works well for buffers up to a few hundreds kilobytes, but
182           for larger buffers it just a memory waste. With this parameter you can
183           specify the maximum PAGE_SIZE order for contiguous buffers. Larger
184           buffers will be aligned only to this specified order. The order is
185           expressed as a power of two multiplied by the PAGE_SIZE.
186
187           For example, if your system defaults to 4KiB pages, the order value
188           of 8 means that the buffers will be aligned up to 1MiB only.
189
190           If unsure, leave the default value "8".
191
192 endif
193
194 config DMA_API_DEBUG
195         bool "Enable debugging of DMA-API usage"
196         select NEED_DMA_MAP_STATE
197         help
198           Enable this option to debug the use of the DMA API by device drivers.
199           With this option you will be able to detect common bugs in device
200           drivers like double-freeing of DMA mappings or freeing mappings that
201           were never allocated.
202
203           This option causes a performance degradation.  Use only if you want to
204           debug device drivers and dma interactions.
205
206           If unsure, say N.
207
208 config DMA_API_DEBUG_SG
209         bool "Debug DMA scatter-gather usage"
210         default y
211         depends on DMA_API_DEBUG
212         help
213           Perform extra checking that callers of dma_map_sg() have respected the
214           appropriate segment length/boundary limits for the given device when
215           preparing DMA scatterlists.
216
217           This is particularly likely to have been overlooked in cases where the
218           dma_map_sg() API is used for general bulk mapping of pages rather than
219           preparing literal scatter-gather descriptors, where there is a risk of
220           unexpected behaviour from DMA API implementations if the scatterlist
221           is technically out-of-spec.
222
223           If unsure, say N.
224
225 config DMA_MAP_BENCHMARK
226         bool "Enable benchmarking of streaming DMA mapping"
227         depends on DEBUG_FS
228         help
229           Provides /sys/kernel/debug/dma_map_benchmark that helps with testing
230           performance of dma_(un)map_page.
231
232           See tools/testing/selftests/dma/dma_map_benchmark.c