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