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