xref: /linux/kernel/dma/Kconfig (revision 3fd6c59042dbba50391e30862beac979491145fe)
1# SPDX-License-Identifier: GPL-2.0-only
2
3config NO_DMA
4	bool
5
6config HAS_DMA
7	bool
8	depends on !NO_DMA
9	default y
10
11config DMA_OPS_HELPERS
12	bool
13
14#
15# IOMMU drivers that can bypass the IOMMU code and optionally use the direct
16# mapping fast path should select this option and set the dma_ops_bypass
17# flag in struct device where applicable
18#
19config DMA_OPS_BYPASS
20	bool
21
22# Lets platform IOMMU driver choose between bypass and IOMMU
23config ARCH_HAS_DMA_MAP_DIRECT
24	bool
25
26config NEED_SG_DMA_FLAGS
27	bool
28
29config NEED_SG_DMA_LENGTH
30	bool
31
32config NEED_DMA_MAP_STATE
33	bool
34
35config ARCH_DMA_ADDR_T_64BIT
36	def_bool 64BIT || PHYS_ADDR_T_64BIT
37
38config ARCH_HAS_DMA_SET_MASK
39	bool
40
41#
42# Select this option if the architecture needs special handling for
43# DMA_ATTR_WRITE_COMBINE.  Normally the "uncached" mapping should be what
44# people think of when saying write combine, so very few platforms should
45# need to enable this.
46#
47config ARCH_HAS_DMA_WRITE_COMBINE
48	bool
49
50#
51# Select if the architectures provides the arch_dma_mark_clean hook
52#
53config ARCH_HAS_DMA_MARK_CLEAN
54	bool
55
56config DMA_DECLARE_COHERENT
57	bool
58
59config ARCH_HAS_SETUP_DMA_OPS
60	bool
61
62config ARCH_HAS_TEARDOWN_DMA_OPS
63	bool
64
65config ARCH_HAS_SYNC_DMA_FOR_DEVICE
66	bool
67
68config ARCH_HAS_SYNC_DMA_FOR_CPU
69	bool
70	select NEED_DMA_MAP_STATE
71
72config ARCH_HAS_SYNC_DMA_FOR_CPU_ALL
73	bool
74
75config ARCH_HAS_DMA_PREP_COHERENT
76	bool
77
78config ARCH_HAS_FORCE_DMA_UNENCRYPTED
79	bool
80
81#
82# Select this option if the architecture assumes DMA devices are coherent
83# by default.
84#
85config ARCH_DMA_DEFAULT_COHERENT
86	bool
87
88config SWIOTLB
89	bool
90	select NEED_DMA_MAP_STATE
91
92config SWIOTLB_DYNAMIC
93	bool "Dynamic allocation of DMA bounce buffers"
94	default n
95	depends on SWIOTLB
96	help
97	  This enables dynamic resizing of the software IO TLB. The kernel
98	  starts with one memory pool at boot and it will allocate additional
99	  pools as needed. To reduce run-time kernel memory requirements, you
100	  may have to specify a smaller size of the initial pool using
101	  "swiotlb=" on the kernel command line.
102
103	  If unsure, say N.
104
105config DMA_BOUNCE_UNALIGNED_KMALLOC
106	bool
107	depends on SWIOTLB
108
109config DMA_NEED_SYNC
110	def_bool ARCH_HAS_SYNC_DMA_FOR_DEVICE || ARCH_HAS_SYNC_DMA_FOR_CPU || \
111		 ARCH_HAS_SYNC_DMA_FOR_CPU_ALL || DMA_API_DEBUG || \
112		 ARCH_HAS_DMA_OPS || SWIOTLB
113
114config DMA_RESTRICTED_POOL
115	bool "DMA Restricted Pool"
116	depends on OF && OF_RESERVED_MEM && SWIOTLB
117	help
118	  This enables support for restricted DMA pools which provide a level of
119	  DMA memory protection on systems with limited hardware protection
120	  capabilities, such as those lacking an IOMMU.
121
122	  For more information see
123	  <Documentation/devicetree/bindings/reserved-memory/reserved-memory.txt>
124	  and <kernel/dma/swiotlb.c>.
125	  If unsure, say "n".
126
127#
128# Should be selected if we can mmap non-coherent mappings to userspace.
129# The only thing that is really required is a way to set an uncached bit
130# in the pagetables
131#
132config DMA_NONCOHERENT_MMAP
133	default y if !MMU
134	bool
135
136config DMA_COHERENT_POOL
137	select GENERIC_ALLOCATOR
138	bool
139
140config DMA_GLOBAL_POOL
141	select DMA_DECLARE_COHERENT
142	depends on !ARCH_HAS_DMA_SET_UNCACHED
143	depends on !DMA_DIRECT_REMAP
144	bool
145
146config DMA_DIRECT_REMAP
147	bool
148	select DMA_COHERENT_POOL
149	select DMA_NONCOHERENT_MMAP
150
151#
152# Fallback to arch code for DMA allocations.  This should eventually go away.
153#
154config ARCH_HAS_DMA_ALLOC
155	depends on !ARCH_HAS_DMA_SET_UNCACHED
156	depends on !DMA_DIRECT_REMAP
157	depends on !DMA_GLOBAL_POOL
158	bool
159
160config DMA_CMA
161	bool "DMA Contiguous Memory Allocator"
162	depends on HAVE_DMA_CONTIGUOUS && CMA
163	help
164	  This enables the Contiguous Memory Allocator which allows drivers
165	  to allocate big physically-contiguous blocks of memory for use with
166	  hardware components that do not support I/O map nor scatter-gather.
167
168	  You can disable CMA by specifying "cma=0" on the kernel's command
169	  line.
170
171	  For more information see <kernel/dma/contiguous.c>.
172	  If unsure, say "n".
173
174if  DMA_CMA
175
176config DMA_NUMA_CMA
177	bool "Enable separate DMA Contiguous Memory Area for NUMA Node"
178	depends on NUMA
179	help
180	  Enable this option to get numa CMA areas so that NUMA devices
181	  can get local memory by DMA coherent APIs.
182
183	  You can set the size of pernuma CMA by specifying "cma_pernuma=size"
184	  or set the node id and its size of CMA by specifying "numa_cma=
185	  <node>:size[,<node>:size]" on the kernel's command line.
186
187comment "Default contiguous memory area size:"
188
189config CMA_SIZE_MBYTES
190	int "Size in Mega Bytes"
191	depends on !CMA_SIZE_SEL_PERCENTAGE
192	default 0 if X86
193	default 16
194	help
195	  Defines the size (in MiB) of the default memory area for Contiguous
196	  Memory Allocator.  If the size of 0 is selected, CMA is disabled by
197	  default, but it can be enabled by passing cma=size[MG] to the kernel.
198
199
200config CMA_SIZE_PERCENTAGE
201	int "Percentage of total memory"
202	depends on !CMA_SIZE_SEL_MBYTES
203	default 0 if X86
204	default 10
205	help
206	  Defines the size of the default memory area for Contiguous Memory
207	  Allocator as a percentage of the total memory in the system.
208	  If 0 percent is selected, CMA is disabled by default, but it can be
209	  enabled by passing cma=size[MG] to the kernel.
210
211choice
212	prompt "Selected region size"
213	default CMA_SIZE_SEL_MBYTES
214
215config CMA_SIZE_SEL_MBYTES
216	bool "Use mega bytes value only"
217
218config CMA_SIZE_SEL_PERCENTAGE
219	bool "Use percentage value only"
220
221config CMA_SIZE_SEL_MIN
222	bool "Use lower value (minimum)"
223
224config CMA_SIZE_SEL_MAX
225	bool "Use higher value (maximum)"
226
227endchoice
228
229config CMA_ALIGNMENT
230	int "Maximum PAGE_SIZE order of alignment for contiguous buffers"
231	range 2 12
232	default 8
233	help
234	  DMA mapping framework by default aligns all buffers to the smallest
235	  PAGE_SIZE order which is greater than or equal to the requested buffer
236	  size. This works well for buffers up to a few hundreds kilobytes, but
237	  for larger buffers it just a memory waste. With this parameter you can
238	  specify the maximum PAGE_SIZE order for contiguous buffers. Larger
239	  buffers will be aligned only to this specified order. The order is
240	  expressed as a power of two multiplied by the PAGE_SIZE.
241
242	  For example, if your system defaults to 4KiB pages, the order value
243	  of 8 means that the buffers will be aligned up to 1MiB only.
244
245	  If unsure, leave the default value "8".
246
247endif
248
249config DMA_API_DEBUG
250	bool "Enable debugging of DMA-API usage"
251	select NEED_DMA_MAP_STATE
252	help
253	  Enable this option to debug the use of the DMA API by device drivers.
254	  With this option you will be able to detect common bugs in device
255	  drivers like double-freeing of DMA mappings or freeing mappings that
256	  were never allocated.
257
258	  This option causes a performance degradation.  Use only if you want to
259	  debug device drivers and dma interactions.
260
261	  If unsure, say N.
262
263config DMA_MAP_BENCHMARK
264	bool "Enable benchmarking of streaming DMA mapping"
265	depends on DEBUG_FS
266	help
267	  Provides /sys/kernel/debug/dma_map_benchmark that helps with testing
268	  performance of dma_(un)map_page.
269
270	  See tools/testing/selftests/dma/dma_map_benchmark.c
271