xref: /linux-6.15/kernel/dma/Kconfig (revision faf4ef82)
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
42419e2f18SChristoph Hellwig# people thing 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
79cf65a0f6SChristoph Hellwigconfig SWIOTLB
80cf65a0f6SChristoph Hellwig	bool
81cf65a0f6SChristoph Hellwig	select NEED_DMA_MAP_STATE
82f0edfea8SChristoph Hellwig
8334dc0ea6SChristoph Hellwig#
8434dc0ea6SChristoph Hellwig# Should be selected if we can mmap non-coherent mappings to userspace.
8534dc0ea6SChristoph Hellwig# The only thing that is really required is a way to set an uncached bit
8634dc0ea6SChristoph Hellwig# in the pagetables
8734dc0ea6SChristoph Hellwig#
8834dc0ea6SChristoph Hellwigconfig DMA_NONCOHERENT_MMAP
891fbf57d0SChristoph Hellwig	default y if !MMU
9034dc0ea6SChristoph Hellwig	bool
9134dc0ea6SChristoph Hellwig
92dbed452aSDavid Rientjesconfig DMA_COHERENT_POOL
93d07ae4c4SChristoph Hellwig	select GENERIC_ALLOCATOR
94dbed452aSDavid Rientjes	bool
95dbed452aSDavid Rientjes
96*faf4ef82SChristoph Hellwigconfig DMA_GLOBAL_POOL
97*faf4ef82SChristoph Hellwig	select DMA_DECLARE_COHERENT
98*faf4ef82SChristoph Hellwig	bool
99*faf4ef82SChristoph Hellwig
100f0edfea8SChristoph Hellwigconfig DMA_REMAP
101dbed452aSDavid Rientjes	bool
102f0edfea8SChristoph Hellwig	depends on MMU
10334dc0ea6SChristoph Hellwig	select DMA_NONCOHERENT_MMAP
10470ca7ba2SAndy Shevchenko
105e860c299SDavid Rientjesconfig DMA_DIRECT_REMAP
106e860c299SDavid Rientjes	bool
107dbed452aSDavid Rientjes	select DMA_REMAP
108e860c299SDavid Rientjes	select DMA_COHERENT_POOL
109e860c299SDavid Rientjes
110ddb26d8eSChristoph Hellwigconfig DMA_CMA
111ddb26d8eSChristoph Hellwig	bool "DMA Contiguous Memory Allocator"
112ddb26d8eSChristoph Hellwig	depends on HAVE_DMA_CONTIGUOUS && CMA
113ddb26d8eSChristoph Hellwig	help
114ddb26d8eSChristoph Hellwig	  This enables the Contiguous Memory Allocator which allows drivers
115ddb26d8eSChristoph Hellwig	  to allocate big physically-contiguous blocks of memory for use with
116ddb26d8eSChristoph Hellwig	  hardware components that do not support I/O map nor scatter-gather.
117ddb26d8eSChristoph Hellwig
118ddb26d8eSChristoph Hellwig	  You can disable CMA by specifying "cma=0" on the kernel's command
119ddb26d8eSChristoph Hellwig	  line.
120ddb26d8eSChristoph Hellwig
1210b1abd1fSChristoph Hellwig	  For more information see <kernel/dma/contiguous.c>.
122ddb26d8eSChristoph Hellwig	  If unsure, say "n".
123ddb26d8eSChristoph Hellwig
124ddb26d8eSChristoph Hellwigif  DMA_CMA
125b7176c26SBarry Song
126b7176c26SBarry Songconfig DMA_PERNUMA_CMA
127b7176c26SBarry Song	bool "Enable separate DMA Contiguous Memory Area for each NUMA Node"
128b7176c26SBarry Song	default NUMA && ARM64
129b7176c26SBarry Song	help
130b7176c26SBarry Song	  Enable this option to get pernuma CMA areas so that devices like
131b7176c26SBarry Song	  ARM64 SMMU can get local memory by DMA coherent APIs.
132b7176c26SBarry Song
133b7176c26SBarry Song	  You can set the size of pernuma CMA by specifying "cma_pernuma=size"
134b7176c26SBarry Song	  on the kernel's command line.
135b7176c26SBarry Song
136ddb26d8eSChristoph Hellwigcomment "Default contiguous memory area size:"
137ddb26d8eSChristoph Hellwig
138ddb26d8eSChristoph Hellwigconfig CMA_SIZE_MBYTES
139ddb26d8eSChristoph Hellwig	int "Size in Mega Bytes"
140ddb26d8eSChristoph Hellwig	depends on !CMA_SIZE_SEL_PERCENTAGE
141ddb26d8eSChristoph Hellwig	default 0 if X86
142ddb26d8eSChristoph Hellwig	default 16
143ddb26d8eSChristoph Hellwig	help
144ddb26d8eSChristoph Hellwig	  Defines the size (in MiB) of the default memory area for Contiguous
145ddb26d8eSChristoph Hellwig	  Memory Allocator.  If the size of 0 is selected, CMA is disabled by
146ddb26d8eSChristoph Hellwig	  default, but it can be enabled by passing cma=size[MG] to the kernel.
147ddb26d8eSChristoph Hellwig
148ddb26d8eSChristoph Hellwig
149ddb26d8eSChristoph Hellwigconfig CMA_SIZE_PERCENTAGE
150ddb26d8eSChristoph Hellwig	int "Percentage of total memory"
151ddb26d8eSChristoph Hellwig	depends on !CMA_SIZE_SEL_MBYTES
152ddb26d8eSChristoph Hellwig	default 0 if X86
153ddb26d8eSChristoph Hellwig	default 10
154ddb26d8eSChristoph Hellwig	help
155ddb26d8eSChristoph Hellwig	  Defines the size of the default memory area for Contiguous Memory
156ddb26d8eSChristoph Hellwig	  Allocator as a percentage of the total memory in the system.
157ddb26d8eSChristoph Hellwig	  If 0 percent is selected, CMA is disabled by default, but it can be
158ddb26d8eSChristoph Hellwig	  enabled by passing cma=size[MG] to the kernel.
159ddb26d8eSChristoph Hellwig
160ddb26d8eSChristoph Hellwigchoice
161ddb26d8eSChristoph Hellwig	prompt "Selected region size"
162ddb26d8eSChristoph Hellwig	default CMA_SIZE_SEL_MBYTES
163ddb26d8eSChristoph Hellwig
164ddb26d8eSChristoph Hellwigconfig CMA_SIZE_SEL_MBYTES
165ddb26d8eSChristoph Hellwig	bool "Use mega bytes value only"
166ddb26d8eSChristoph Hellwig
167ddb26d8eSChristoph Hellwigconfig CMA_SIZE_SEL_PERCENTAGE
168ddb26d8eSChristoph Hellwig	bool "Use percentage value only"
169ddb26d8eSChristoph Hellwig
170ddb26d8eSChristoph Hellwigconfig CMA_SIZE_SEL_MIN
171ddb26d8eSChristoph Hellwig	bool "Use lower value (minimum)"
172ddb26d8eSChristoph Hellwig
173ddb26d8eSChristoph Hellwigconfig CMA_SIZE_SEL_MAX
174ddb26d8eSChristoph Hellwig	bool "Use higher value (maximum)"
175ddb26d8eSChristoph Hellwig
176ddb26d8eSChristoph Hellwigendchoice
177ddb26d8eSChristoph Hellwig
178ddb26d8eSChristoph Hellwigconfig CMA_ALIGNMENT
179ddb26d8eSChristoph Hellwig	int "Maximum PAGE_SIZE order of alignment for contiguous buffers"
1800de32796SPaul Cercueil	range 2 12
181ddb26d8eSChristoph Hellwig	default 8
182ddb26d8eSChristoph Hellwig	help
183ddb26d8eSChristoph Hellwig	  DMA mapping framework by default aligns all buffers to the smallest
184ddb26d8eSChristoph Hellwig	  PAGE_SIZE order which is greater than or equal to the requested buffer
185ddb26d8eSChristoph Hellwig	  size. This works well for buffers up to a few hundreds kilobytes, but
186ddb26d8eSChristoph Hellwig	  for larger buffers it just a memory waste. With this parameter you can
187ddb26d8eSChristoph Hellwig	  specify the maximum PAGE_SIZE order for contiguous buffers. Larger
188ddb26d8eSChristoph Hellwig	  buffers will be aligned only to this specified order. The order is
189ddb26d8eSChristoph Hellwig	  expressed as a power of two multiplied by the PAGE_SIZE.
190ddb26d8eSChristoph Hellwig
191ddb26d8eSChristoph Hellwig	  For example, if your system defaults to 4KiB pages, the order value
192ddb26d8eSChristoph Hellwig	  of 8 means that the buffers will be aligned up to 1MiB only.
193ddb26d8eSChristoph Hellwig
194ddb26d8eSChristoph Hellwig	  If unsure, leave the default value "8".
195ddb26d8eSChristoph Hellwig
196ddb26d8eSChristoph Hellwigendif
197ddb26d8eSChristoph Hellwig
19870ca7ba2SAndy Shevchenkoconfig DMA_API_DEBUG
19970ca7ba2SAndy Shevchenko	bool "Enable debugging of DMA-API usage"
20070ca7ba2SAndy Shevchenko	select NEED_DMA_MAP_STATE
20170ca7ba2SAndy Shevchenko	help
20270ca7ba2SAndy Shevchenko	  Enable this option to debug the use of the DMA API by device drivers.
20370ca7ba2SAndy Shevchenko	  With this option you will be able to detect common bugs in device
20470ca7ba2SAndy Shevchenko	  drivers like double-freeing of DMA mappings or freeing mappings that
20570ca7ba2SAndy Shevchenko	  were never allocated.
20670ca7ba2SAndy Shevchenko
20770ca7ba2SAndy Shevchenko	  This option causes a performance degradation.  Use only if you want to
20870ca7ba2SAndy Shevchenko	  debug device drivers and dma interactions.
20970ca7ba2SAndy Shevchenko
21070ca7ba2SAndy Shevchenko	  If unsure, say N.
21170ca7ba2SAndy Shevchenko
21270ca7ba2SAndy Shevchenkoconfig DMA_API_DEBUG_SG
21370ca7ba2SAndy Shevchenko	bool "Debug DMA scatter-gather usage"
21470ca7ba2SAndy Shevchenko	default y
21570ca7ba2SAndy Shevchenko	depends on DMA_API_DEBUG
21670ca7ba2SAndy Shevchenko	help
21770ca7ba2SAndy Shevchenko	  Perform extra checking that callers of dma_map_sg() have respected the
21870ca7ba2SAndy Shevchenko	  appropriate segment length/boundary limits for the given device when
21970ca7ba2SAndy Shevchenko	  preparing DMA scatterlists.
22070ca7ba2SAndy Shevchenko
22170ca7ba2SAndy Shevchenko	  This is particularly likely to have been overlooked in cases where the
22270ca7ba2SAndy Shevchenko	  dma_map_sg() API is used for general bulk mapping of pages rather than
22370ca7ba2SAndy Shevchenko	  preparing literal scatter-gather descriptors, where there is a risk of
22470ca7ba2SAndy Shevchenko	  unexpected behaviour from DMA API implementations if the scatterlist
22570ca7ba2SAndy Shevchenko	  is technically out-of-spec.
22670ca7ba2SAndy Shevchenko
22770ca7ba2SAndy Shevchenko	  If unsure, say N.
22865789daaSBarry Song
22965789daaSBarry Songconfig DMA_MAP_BENCHMARK
23065789daaSBarry Song	bool "Enable benchmarking of streaming DMA mapping"
23165789daaSBarry Song	depends on DEBUG_FS
23265789daaSBarry Song	help
23365789daaSBarry Song	  Provides /sys/kernel/debug/dma_map_benchmark that helps with testing
23465789daaSBarry Song	  performance of dma_(un)map_page.
23565789daaSBarry Song
23665789daaSBarry Song	  See tools/testing/selftests/dma/dma_map_benchmark.c
237