Linux 5.8-rc4
[linux/fpc-iii.git] / kernel / dma / Kconfig
blob1da3f44f2565b4ff423ceb2ac027ea0cba4e9a47
1 # SPDX-License-Identifier: GPL-2.0-only
3 config HAS_DMA
4         bool
5         depends on !NO_DMA
6         default y
8 config NEED_SG_DMA_LENGTH
9         bool
11 config NEED_DMA_MAP_STATE
12         bool
14 config ARCH_DMA_ADDR_T_64BIT
15         def_bool 64BIT || PHYS_ADDR_T_64BIT
17 config ARCH_HAS_DMA_COHERENCE_H
18         bool
20 config ARCH_HAS_DMA_SET_MASK
21         bool
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.
29 config ARCH_HAS_DMA_WRITE_COMBINE
30         bool
32 config DMA_DECLARE_COHERENT
33         bool
35 config ARCH_HAS_SETUP_DMA_OPS
36         bool
38 config ARCH_HAS_TEARDOWN_DMA_OPS
39         bool
41 config ARCH_HAS_SYNC_DMA_FOR_DEVICE
42         bool
44 config ARCH_HAS_SYNC_DMA_FOR_CPU
45         bool
46         select NEED_DMA_MAP_STATE
48 config ARCH_HAS_SYNC_DMA_FOR_CPU_ALL
49         bool
51 config ARCH_HAS_DMA_PREP_COHERENT
52         bool
54 config ARCH_HAS_FORCE_DMA_UNENCRYPTED
55         bool
57 config DMA_NONCOHERENT_CACHE_SYNC
58         bool
60 config DMA_VIRT_OPS
61         bool
62         depends on HAS_DMA
64 config SWIOTLB
65         bool
66         select NEED_DMA_MAP_STATE
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
73 config DMA_NONCOHERENT_MMAP
74         default y if !MMU
75         bool
77 config DMA_COHERENT_POOL
78         select GENERIC_ALLOCATOR
79         bool
81 config DMA_REMAP
82         bool
83         depends on MMU
84         select DMA_NONCOHERENT_MMAP
86 config DMA_DIRECT_REMAP
87         bool
88         select DMA_REMAP
89         select DMA_COHERENT_POOL
91 config 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.
99           You can disable CMA by specifying "cma=0" on the kernel's command
100           line.
102           For more information see <include/linux/dma-contiguous.h>.
103           If unsure, say "n".
105 if  DMA_CMA
106 comment "Default contiguous memory area size:"
108 config 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.
119 config 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.
130 choice
131         prompt "Selected region size"
132         default CMA_SIZE_SEL_MBYTES
134 config CMA_SIZE_SEL_MBYTES
135         bool "Use mega bytes value only"
137 config CMA_SIZE_SEL_PERCENTAGE
138         bool "Use percentage value only"
140 config CMA_SIZE_SEL_MIN
141         bool "Use lower value (minimum)"
143 config CMA_SIZE_SEL_MAX
144         bool "Use higher value (maximum)"
146 endchoice
148 config 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.
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.
164           If unsure, leave the default value "8".
166 endif
168 config 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.
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.
182           This option causes a performance degradation.  Use only if you want to
183           debug device drivers and dma interactions.
185           If unsure, say N.
187 config 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.
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.
202           If unsure, say N.