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