dma-debug: remove debug_dma_assert_idle() function
[linux-2.6-microblaze.git] / kernel / dma / Kconfig
1 # SPDX-License-Identifier: GPL-2.0-only
2
3 config HAS_DMA
4         bool
5         depends on !NO_DMA
6         default y
7
8 config 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 #
16 config DMA_OPS_BYPASS
17         bool
18
19 config NEED_SG_DMA_LENGTH
20         bool
21
22 config NEED_DMA_MAP_STATE
23         bool
24
25 config ARCH_DMA_ADDR_T_64BIT
26         def_bool 64BIT || PHYS_ADDR_T_64BIT
27
28 config ARCH_HAS_DMA_COHERENCE_H
29         bool
30
31 config 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 #
40 config ARCH_HAS_DMA_WRITE_COMBINE
41         bool
42
43 config DMA_DECLARE_COHERENT
44         bool
45
46 config ARCH_HAS_SETUP_DMA_OPS
47         bool
48
49 config ARCH_HAS_TEARDOWN_DMA_OPS
50         bool
51
52 config ARCH_HAS_SYNC_DMA_FOR_DEVICE
53         bool
54
55 config ARCH_HAS_SYNC_DMA_FOR_CPU
56         bool
57         select NEED_DMA_MAP_STATE
58
59 config ARCH_HAS_SYNC_DMA_FOR_CPU_ALL
60         bool
61
62 config ARCH_HAS_DMA_PREP_COHERENT
63         bool
64
65 config ARCH_HAS_FORCE_DMA_UNENCRYPTED
66         bool
67
68 config DMA_NONCOHERENT_CACHE_SYNC
69         bool
70
71 config DMA_VIRT_OPS
72         bool
73         depends on HAS_DMA
74         select DMA_OPS
75
76 config 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 #
85 config DMA_NONCOHERENT_MMAP
86         default y if !MMU
87         bool
88
89 config DMA_COHERENT_POOL
90         select GENERIC_ALLOCATOR
91         bool
92
93 config DMA_REMAP
94         bool
95         depends on MMU
96         select DMA_NONCOHERENT_MMAP
97
98 config DMA_DIRECT_REMAP
99         bool
100         select DMA_REMAP
101         select DMA_COHERENT_POOL
102
103 config 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
117 if  DMA_CMA
118 comment "Default contiguous memory area size:"
119
120 config 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
131 config 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
142 choice
143         prompt "Selected region size"
144         default CMA_SIZE_SEL_MBYTES
145
146 config CMA_SIZE_SEL_MBYTES
147         bool "Use mega bytes value only"
148
149 config CMA_SIZE_SEL_PERCENTAGE
150         bool "Use percentage value only"
151
152 config CMA_SIZE_SEL_MIN
153         bool "Use lower value (minimum)"
154
155 config CMA_SIZE_SEL_MAX
156         bool "Use higher value (maximum)"
157
158 endchoice
159
160 config 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
178 endif
179
180 config 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 option causes a performance degradation.  Use only if you want to
190           debug device drivers and dma interactions.
191
192           If unsure, say N.
193
194 config DMA_API_DEBUG_SG
195         bool "Debug DMA scatter-gather usage"
196         default y
197         depends on DMA_API_DEBUG
198         help
199           Perform extra checking that callers of dma_map_sg() have respected the
200           appropriate segment length/boundary limits for the given device when
201           preparing DMA scatterlists.
202
203           This is particularly likely to have been overlooked in cases where the
204           dma_map_sg() API is used for general bulk mapping of pages rather than
205           preparing literal scatter-gather descriptors, where there is a risk of
206           unexpected behaviour from DMA API implementations if the scatterlist
207           is technically out-of-spec.
208
209           If unsure, say N.