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