1ec8f24b7SThomas Gleixner# SPDX-License-Identifier: GPL-2.0-only 2cf65a0f6SChristoph Hellwig 3846f9e1fSChristoph Hellwigconfig NO_DMA 4846f9e1fSChristoph Hellwig bool 5846f9e1fSChristoph Hellwig 6cf65a0f6SChristoph Hellwigconfig HAS_DMA 7cf65a0f6SChristoph Hellwig bool 8cf65a0f6SChristoph Hellwig depends on !NO_DMA 9cf65a0f6SChristoph Hellwig default y 10cf65a0f6SChristoph Hellwig 112f9237d4SChristoph Hellwigconfig DMA_OPS 12ef1a85b6SChristoph Hellwig depends on HAS_DMA 132f9237d4SChristoph Hellwig bool 142f9237d4SChristoph Hellwig 15d35834c6SChristoph Hellwig# 16d35834c6SChristoph Hellwig# IOMMU drivers that can bypass the IOMMU code and optionally use the direct 17d35834c6SChristoph Hellwig# mapping fast path should select this option and set the dma_ops_bypass 18d35834c6SChristoph Hellwig# flag in struct device where applicable 19d35834c6SChristoph Hellwig# 20d35834c6SChristoph Hellwigconfig DMA_OPS_BYPASS 21d35834c6SChristoph Hellwig bool 22d35834c6SChristoph Hellwig 238d8d53cfSAlexey Kardashevskiy# Lets platform IOMMU driver choose between bypass and IOMMU 248d8d53cfSAlexey Kardashevskiyconfig ARCH_HAS_DMA_MAP_DIRECT 258d8d53cfSAlexey Kardashevskiy bool 268d8d53cfSAlexey Kardashevskiy 27cf65a0f6SChristoph Hellwigconfig NEED_SG_DMA_LENGTH 28cf65a0f6SChristoph Hellwig bool 29cf65a0f6SChristoph Hellwig 30cf65a0f6SChristoph Hellwigconfig NEED_DMA_MAP_STATE 31cf65a0f6SChristoph Hellwig bool 32cf65a0f6SChristoph Hellwig 33cf65a0f6SChristoph Hellwigconfig ARCH_DMA_ADDR_T_64BIT 34cf65a0f6SChristoph Hellwig def_bool 64BIT || PHYS_ADDR_T_64BIT 35cf65a0f6SChristoph Hellwig 3611ddce15SChristoph Hellwigconfig ARCH_HAS_DMA_SET_MASK 3711ddce15SChristoph Hellwig bool 3811ddce15SChristoph Hellwig 39419e2f18SChristoph Hellwig# 40419e2f18SChristoph Hellwig# Select this option if the architecture needs special handling for 41419e2f18SChristoph Hellwig# DMA_ATTR_WRITE_COMBINE. Normally the "uncached" mapping should be what 42*4d3af20eSSui Jingfeng# people think of when saying write combine, so very few platforms should 43419e2f18SChristoph Hellwig# need to enable this. 44419e2f18SChristoph Hellwig# 45419e2f18SChristoph Hellwigconfig ARCH_HAS_DMA_WRITE_COMBINE 46419e2f18SChristoph Hellwig bool 47419e2f18SChristoph Hellwig 48abdaf11aSChristoph Hellwig# 49abdaf11aSChristoph Hellwig# Select if the architectures provides the arch_dma_mark_clean hook 50abdaf11aSChristoph Hellwig# 51abdaf11aSChristoph Hellwigconfig ARCH_HAS_DMA_MARK_CLEAN 52abdaf11aSChristoph Hellwig bool 53abdaf11aSChristoph Hellwig 54ff4c25f2SChristoph Hellwigconfig DMA_DECLARE_COHERENT 55cf65a0f6SChristoph Hellwig bool 56cf65a0f6SChristoph Hellwig 57347cb6afSChristoph Hellwigconfig ARCH_HAS_SETUP_DMA_OPS 58347cb6afSChristoph Hellwig bool 59347cb6afSChristoph Hellwig 60dc2acdedSChristoph Hellwigconfig ARCH_HAS_TEARDOWN_DMA_OPS 61cf65a0f6SChristoph Hellwig bool 62cf65a0f6SChristoph Hellwig 63cf65a0f6SChristoph Hellwigconfig ARCH_HAS_SYNC_DMA_FOR_DEVICE 64cf65a0f6SChristoph Hellwig bool 65cf65a0f6SChristoph Hellwig 66cf65a0f6SChristoph Hellwigconfig ARCH_HAS_SYNC_DMA_FOR_CPU 67cf65a0f6SChristoph Hellwig bool 68cf65a0f6SChristoph Hellwig select NEED_DMA_MAP_STATE 69cf65a0f6SChristoph Hellwig 70684f7e91SChristoph Hellwigconfig ARCH_HAS_SYNC_DMA_FOR_CPU_ALL 71684f7e91SChristoph Hellwig bool 72684f7e91SChristoph Hellwig 7313bf5cedSChristoph Hellwigconfig ARCH_HAS_DMA_PREP_COHERENT 7413bf5cedSChristoph Hellwig bool 7513bf5cedSChristoph Hellwig 769087c375STom Lendackyconfig ARCH_HAS_FORCE_DMA_UNENCRYPTED 779087c375STom Lendacky bool 789087c375STom Lendacky 791d3f56b2SJiaxun Yang# 801d3f56b2SJiaxun Yang# Select this option if the architecture assumes DMA devices are coherent 811d3f56b2SJiaxun Yang# by default. 821d3f56b2SJiaxun Yang# 831d3f56b2SJiaxun Yangconfig ARCH_DMA_DEFAULT_COHERENT 841d3f56b2SJiaxun Yang bool 851d3f56b2SJiaxun Yang 86cf65a0f6SChristoph Hellwigconfig SWIOTLB 87cf65a0f6SChristoph Hellwig bool 88cf65a0f6SChristoph Hellwig select NEED_DMA_MAP_STATE 89f0edfea8SChristoph Hellwig 900b84e4f8SClaire Changconfig DMA_RESTRICTED_POOL 910b84e4f8SClaire Chang bool "DMA Restricted Pool" 92f3c4b134SClaire Chang depends on OF && OF_RESERVED_MEM && SWIOTLB 930b84e4f8SClaire Chang help 940b84e4f8SClaire Chang This enables support for restricted DMA pools which provide a level of 950b84e4f8SClaire Chang DMA memory protection on systems with limited hardware protection 960b84e4f8SClaire Chang capabilities, such as those lacking an IOMMU. 970b84e4f8SClaire Chang 980b84e4f8SClaire Chang For more information see 990b84e4f8SClaire Chang <Documentation/devicetree/bindings/reserved-memory/reserved-memory.txt> 1000b84e4f8SClaire Chang and <kernel/dma/swiotlb.c>. 1010b84e4f8SClaire Chang If unsure, say "n". 1020b84e4f8SClaire Chang 10334dc0ea6SChristoph Hellwig# 10434dc0ea6SChristoph Hellwig# Should be selected if we can mmap non-coherent mappings to userspace. 10534dc0ea6SChristoph Hellwig# The only thing that is really required is a way to set an uncached bit 10634dc0ea6SChristoph Hellwig# in the pagetables 10734dc0ea6SChristoph Hellwig# 10834dc0ea6SChristoph Hellwigconfig DMA_NONCOHERENT_MMAP 1091fbf57d0SChristoph Hellwig default y if !MMU 11034dc0ea6SChristoph Hellwig bool 11134dc0ea6SChristoph Hellwig 112dbed452aSDavid Rientjesconfig DMA_COHERENT_POOL 113d07ae4c4SChristoph Hellwig select GENERIC_ALLOCATOR 114dbed452aSDavid Rientjes bool 115dbed452aSDavid Rientjes 116faf4ef82SChristoph Hellwigconfig DMA_GLOBAL_POOL 117faf4ef82SChristoph Hellwig select DMA_DECLARE_COHERENT 118faf4ef82SChristoph Hellwig bool 119faf4ef82SChristoph Hellwig 120e860c299SDavid Rientjesconfig DMA_DIRECT_REMAP 121e860c299SDavid Rientjes bool 122e860c299SDavid Rientjes select DMA_COHERENT_POOL 123f5ff79fdSChristoph Hellwig select DMA_NONCOHERENT_MMAP 124e860c299SDavid Rientjes 125ddb26d8eSChristoph Hellwigconfig DMA_CMA 126ddb26d8eSChristoph Hellwig bool "DMA Contiguous Memory Allocator" 127ddb26d8eSChristoph Hellwig depends on HAVE_DMA_CONTIGUOUS && CMA 128ddb26d8eSChristoph Hellwig help 129ddb26d8eSChristoph Hellwig This enables the Contiguous Memory Allocator which allows drivers 130ddb26d8eSChristoph Hellwig to allocate big physically-contiguous blocks of memory for use with 131ddb26d8eSChristoph Hellwig hardware components that do not support I/O map nor scatter-gather. 132ddb26d8eSChristoph Hellwig 133ddb26d8eSChristoph Hellwig You can disable CMA by specifying "cma=0" on the kernel's command 134ddb26d8eSChristoph Hellwig line. 135ddb26d8eSChristoph Hellwig 1360b1abd1fSChristoph Hellwig For more information see <kernel/dma/contiguous.c>. 137ddb26d8eSChristoph Hellwig If unsure, say "n". 138ddb26d8eSChristoph Hellwig 139ddb26d8eSChristoph Hellwigif DMA_CMA 140b7176c26SBarry Song 141b7176c26SBarry Songconfig DMA_PERNUMA_CMA 142b7176c26SBarry Song bool "Enable separate DMA Contiguous Memory Area for each NUMA Node" 143b7176c26SBarry Song default NUMA && ARM64 144b7176c26SBarry Song help 145b7176c26SBarry Song Enable this option to get pernuma CMA areas so that devices like 146b7176c26SBarry Song ARM64 SMMU can get local memory by DMA coherent APIs. 147b7176c26SBarry Song 148b7176c26SBarry Song You can set the size of pernuma CMA by specifying "cma_pernuma=size" 149b7176c26SBarry Song on the kernel's command line. 150b7176c26SBarry Song 151ddb26d8eSChristoph Hellwigcomment "Default contiguous memory area size:" 152ddb26d8eSChristoph Hellwig 153ddb26d8eSChristoph Hellwigconfig CMA_SIZE_MBYTES 154ddb26d8eSChristoph Hellwig int "Size in Mega Bytes" 155ddb26d8eSChristoph Hellwig depends on !CMA_SIZE_SEL_PERCENTAGE 156ddb26d8eSChristoph Hellwig default 0 if X86 157ddb26d8eSChristoph Hellwig default 16 158ddb26d8eSChristoph Hellwig help 159ddb26d8eSChristoph Hellwig Defines the size (in MiB) of the default memory area for Contiguous 160ddb26d8eSChristoph Hellwig Memory Allocator. If the size of 0 is selected, CMA is disabled by 161ddb26d8eSChristoph Hellwig default, but it can be enabled by passing cma=size[MG] to the kernel. 162ddb26d8eSChristoph Hellwig 163ddb26d8eSChristoph Hellwig 164ddb26d8eSChristoph Hellwigconfig CMA_SIZE_PERCENTAGE 165ddb26d8eSChristoph Hellwig int "Percentage of total memory" 166ddb26d8eSChristoph Hellwig depends on !CMA_SIZE_SEL_MBYTES 167ddb26d8eSChristoph Hellwig default 0 if X86 168ddb26d8eSChristoph Hellwig default 10 169ddb26d8eSChristoph Hellwig help 170ddb26d8eSChristoph Hellwig Defines the size of the default memory area for Contiguous Memory 171ddb26d8eSChristoph Hellwig Allocator as a percentage of the total memory in the system. 172ddb26d8eSChristoph Hellwig If 0 percent is selected, CMA is disabled by default, but it can be 173ddb26d8eSChristoph Hellwig enabled by passing cma=size[MG] to the kernel. 174ddb26d8eSChristoph Hellwig 175ddb26d8eSChristoph Hellwigchoice 176ddb26d8eSChristoph Hellwig prompt "Selected region size" 177ddb26d8eSChristoph Hellwig default CMA_SIZE_SEL_MBYTES 178ddb26d8eSChristoph Hellwig 179ddb26d8eSChristoph Hellwigconfig CMA_SIZE_SEL_MBYTES 180ddb26d8eSChristoph Hellwig bool "Use mega bytes value only" 181ddb26d8eSChristoph Hellwig 182ddb26d8eSChristoph Hellwigconfig CMA_SIZE_SEL_PERCENTAGE 183ddb26d8eSChristoph Hellwig bool "Use percentage value only" 184ddb26d8eSChristoph Hellwig 185ddb26d8eSChristoph Hellwigconfig CMA_SIZE_SEL_MIN 186ddb26d8eSChristoph Hellwig bool "Use lower value (minimum)" 187ddb26d8eSChristoph Hellwig 188ddb26d8eSChristoph Hellwigconfig CMA_SIZE_SEL_MAX 189ddb26d8eSChristoph Hellwig bool "Use higher value (maximum)" 190ddb26d8eSChristoph Hellwig 191ddb26d8eSChristoph Hellwigendchoice 192ddb26d8eSChristoph Hellwig 193ddb26d8eSChristoph Hellwigconfig CMA_ALIGNMENT 194ddb26d8eSChristoph Hellwig int "Maximum PAGE_SIZE order of alignment for contiguous buffers" 1950de32796SPaul Cercueil range 2 12 196ddb26d8eSChristoph Hellwig default 8 197ddb26d8eSChristoph Hellwig help 198ddb26d8eSChristoph Hellwig DMA mapping framework by default aligns all buffers to the smallest 199ddb26d8eSChristoph Hellwig PAGE_SIZE order which is greater than or equal to the requested buffer 200ddb26d8eSChristoph Hellwig size. This works well for buffers up to a few hundreds kilobytes, but 201ddb26d8eSChristoph Hellwig for larger buffers it just a memory waste. With this parameter you can 202ddb26d8eSChristoph Hellwig specify the maximum PAGE_SIZE order for contiguous buffers. Larger 203ddb26d8eSChristoph Hellwig buffers will be aligned only to this specified order. The order is 204ddb26d8eSChristoph Hellwig expressed as a power of two multiplied by the PAGE_SIZE. 205ddb26d8eSChristoph Hellwig 206ddb26d8eSChristoph Hellwig For example, if your system defaults to 4KiB pages, the order value 207ddb26d8eSChristoph Hellwig of 8 means that the buffers will be aligned up to 1MiB only. 208ddb26d8eSChristoph Hellwig 209ddb26d8eSChristoph Hellwig If unsure, leave the default value "8". 210ddb26d8eSChristoph Hellwig 211ddb26d8eSChristoph Hellwigendif 212ddb26d8eSChristoph Hellwig 21370ca7ba2SAndy Shevchenkoconfig DMA_API_DEBUG 21470ca7ba2SAndy Shevchenko bool "Enable debugging of DMA-API usage" 21570ca7ba2SAndy Shevchenko select NEED_DMA_MAP_STATE 21670ca7ba2SAndy Shevchenko help 21770ca7ba2SAndy Shevchenko Enable this option to debug the use of the DMA API by device drivers. 21870ca7ba2SAndy Shevchenko With this option you will be able to detect common bugs in device 21970ca7ba2SAndy Shevchenko drivers like double-freeing of DMA mappings or freeing mappings that 22070ca7ba2SAndy Shevchenko were never allocated. 22170ca7ba2SAndy Shevchenko 22270ca7ba2SAndy Shevchenko This option causes a performance degradation. Use only if you want to 22370ca7ba2SAndy Shevchenko debug device drivers and dma interactions. 22470ca7ba2SAndy Shevchenko 22570ca7ba2SAndy Shevchenko If unsure, say N. 22670ca7ba2SAndy Shevchenko 22770ca7ba2SAndy Shevchenkoconfig DMA_API_DEBUG_SG 22870ca7ba2SAndy Shevchenko bool "Debug DMA scatter-gather usage" 22970ca7ba2SAndy Shevchenko default y 23070ca7ba2SAndy Shevchenko depends on DMA_API_DEBUG 23170ca7ba2SAndy Shevchenko help 23270ca7ba2SAndy Shevchenko Perform extra checking that callers of dma_map_sg() have respected the 23370ca7ba2SAndy Shevchenko appropriate segment length/boundary limits for the given device when 23470ca7ba2SAndy Shevchenko preparing DMA scatterlists. 23570ca7ba2SAndy Shevchenko 23670ca7ba2SAndy Shevchenko This is particularly likely to have been overlooked in cases where the 23770ca7ba2SAndy Shevchenko dma_map_sg() API is used for general bulk mapping of pages rather than 23870ca7ba2SAndy Shevchenko preparing literal scatter-gather descriptors, where there is a risk of 23970ca7ba2SAndy Shevchenko unexpected behaviour from DMA API implementations if the scatterlist 24070ca7ba2SAndy Shevchenko is technically out-of-spec. 24170ca7ba2SAndy Shevchenko 24270ca7ba2SAndy Shevchenko If unsure, say N. 24365789daaSBarry Song 24465789daaSBarry Songconfig DMA_MAP_BENCHMARK 24565789daaSBarry Song bool "Enable benchmarking of streaming DMA mapping" 24665789daaSBarry Song depends on DEBUG_FS 24765789daaSBarry Song help 24865789daaSBarry Song Provides /sys/kernel/debug/dma_map_benchmark that helps with testing 24965789daaSBarry Song performance of dma_(un)map_page. 25065789daaSBarry Song 25165789daaSBarry Song See tools/testing/selftests/dma/dma_map_benchmark.c 252