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