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