xref: /openbmc/linux/kernel/dma/Kconfig (revision c900529f3d9161bfde5cca0754f83b4d3c3e0220)
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
27af2880ecSRobin Murphyconfig NEED_SG_DMA_FLAGS
28af2880ecSRobin Murphy	bool
29af2880ecSRobin Murphy
30cf65a0f6SChristoph Hellwigconfig NEED_SG_DMA_LENGTH
31cf65a0f6SChristoph Hellwig	bool
32cf65a0f6SChristoph Hellwig
33cf65a0f6SChristoph Hellwigconfig NEED_DMA_MAP_STATE
34cf65a0f6SChristoph Hellwig	bool
35cf65a0f6SChristoph Hellwig
36cf65a0f6SChristoph Hellwigconfig ARCH_DMA_ADDR_T_64BIT
37cf65a0f6SChristoph Hellwig	def_bool 64BIT || PHYS_ADDR_T_64BIT
38cf65a0f6SChristoph Hellwig
3911ddce15SChristoph Hellwigconfig ARCH_HAS_DMA_SET_MASK
4011ddce15SChristoph Hellwig	bool
4111ddce15SChristoph Hellwig
42419e2f18SChristoph Hellwig#
43419e2f18SChristoph Hellwig# Select this option if the architecture needs special handling for
44419e2f18SChristoph Hellwig# DMA_ATTR_WRITE_COMBINE.  Normally the "uncached" mapping should be what
454d3af20eSSui Jingfeng# people think of when saying write combine, so very few platforms should
46419e2f18SChristoph Hellwig# need to enable this.
47419e2f18SChristoph Hellwig#
48419e2f18SChristoph Hellwigconfig ARCH_HAS_DMA_WRITE_COMBINE
49419e2f18SChristoph Hellwig	bool
50419e2f18SChristoph Hellwig
51abdaf11aSChristoph Hellwig#
52abdaf11aSChristoph Hellwig# Select if the architectures provides the arch_dma_mark_clean hook
53abdaf11aSChristoph Hellwig#
54abdaf11aSChristoph Hellwigconfig ARCH_HAS_DMA_MARK_CLEAN
55abdaf11aSChristoph Hellwig	bool
56abdaf11aSChristoph Hellwig
57ff4c25f2SChristoph Hellwigconfig DMA_DECLARE_COHERENT
58cf65a0f6SChristoph Hellwig	bool
59cf65a0f6SChristoph Hellwig
60347cb6afSChristoph Hellwigconfig ARCH_HAS_SETUP_DMA_OPS
61347cb6afSChristoph Hellwig	bool
62347cb6afSChristoph Hellwig
63dc2acdedSChristoph Hellwigconfig ARCH_HAS_TEARDOWN_DMA_OPS
64cf65a0f6SChristoph Hellwig	bool
65cf65a0f6SChristoph Hellwig
66cf65a0f6SChristoph Hellwigconfig ARCH_HAS_SYNC_DMA_FOR_DEVICE
67cf65a0f6SChristoph Hellwig	bool
68cf65a0f6SChristoph Hellwig
69cf65a0f6SChristoph Hellwigconfig ARCH_HAS_SYNC_DMA_FOR_CPU
70cf65a0f6SChristoph Hellwig	bool
71cf65a0f6SChristoph Hellwig	select NEED_DMA_MAP_STATE
72cf65a0f6SChristoph Hellwig
73684f7e91SChristoph Hellwigconfig ARCH_HAS_SYNC_DMA_FOR_CPU_ALL
74684f7e91SChristoph Hellwig	bool
75684f7e91SChristoph Hellwig
7613bf5cedSChristoph Hellwigconfig ARCH_HAS_DMA_PREP_COHERENT
7713bf5cedSChristoph Hellwig	bool
7813bf5cedSChristoph Hellwig
799087c375STom Lendackyconfig ARCH_HAS_FORCE_DMA_UNENCRYPTED
809087c375STom Lendacky	bool
819087c375STom Lendacky
821d3f56b2SJiaxun Yang#
831d3f56b2SJiaxun Yang# Select this option if the architecture assumes DMA devices are coherent
841d3f56b2SJiaxun Yang# by default.
851d3f56b2SJiaxun Yang#
861d3f56b2SJiaxun Yangconfig ARCH_DMA_DEFAULT_COHERENT
871d3f56b2SJiaxun Yang	bool
881d3f56b2SJiaxun Yang
89cf65a0f6SChristoph Hellwigconfig SWIOTLB
90cf65a0f6SChristoph Hellwig	bool
91cf65a0f6SChristoph Hellwig	select NEED_DMA_MAP_STATE
92f0edfea8SChristoph Hellwig
9362708b2bSPetr Tesarikconfig SWIOTLB_DYNAMIC
9462708b2bSPetr Tesarik	bool "Dynamic allocation of DMA bounce buffers"
9562708b2bSPetr Tesarik	default n
9662708b2bSPetr Tesarik	depends on SWIOTLB
9762708b2bSPetr Tesarik	help
9862708b2bSPetr Tesarik	  This enables dynamic resizing of the software IO TLB. The kernel
9962708b2bSPetr Tesarik	  starts with one memory pool at boot and it will allocate additional
10062708b2bSPetr Tesarik	  pools as needed. To reduce run-time kernel memory requirements, you
10162708b2bSPetr Tesarik	  may have to specify a smaller size of the initial pool using
10262708b2bSPetr Tesarik	  "swiotlb=" on the kernel command line.
10362708b2bSPetr Tesarik
10462708b2bSPetr Tesarik	  If unsure, say N.
10562708b2bSPetr Tesarik
106370645f4SCatalin Marinasconfig DMA_BOUNCE_UNALIGNED_KMALLOC
107370645f4SCatalin Marinas	bool
108370645f4SCatalin Marinas	depends on SWIOTLB
109370645f4SCatalin Marinas
1100b84e4f8SClaire Changconfig DMA_RESTRICTED_POOL
1110b84e4f8SClaire Chang	bool "DMA Restricted Pool"
112f3c4b134SClaire Chang	depends on OF && OF_RESERVED_MEM && SWIOTLB
1130b84e4f8SClaire Chang	help
1140b84e4f8SClaire Chang	  This enables support for restricted DMA pools which provide a level of
1150b84e4f8SClaire Chang	  DMA memory protection on systems with limited hardware protection
1160b84e4f8SClaire Chang	  capabilities, such as those lacking an IOMMU.
1170b84e4f8SClaire Chang
1180b84e4f8SClaire Chang	  For more information see
1190b84e4f8SClaire Chang	  <Documentation/devicetree/bindings/reserved-memory/reserved-memory.txt>
1200b84e4f8SClaire Chang	  and <kernel/dma/swiotlb.c>.
1210b84e4f8SClaire Chang	  If unsure, say "n".
1220b84e4f8SClaire Chang
12334dc0ea6SChristoph Hellwig#
12434dc0ea6SChristoph Hellwig# Should be selected if we can mmap non-coherent mappings to userspace.
12534dc0ea6SChristoph Hellwig# The only thing that is really required is a way to set an uncached bit
12634dc0ea6SChristoph Hellwig# in the pagetables
12734dc0ea6SChristoph Hellwig#
12834dc0ea6SChristoph Hellwigconfig DMA_NONCOHERENT_MMAP
1291fbf57d0SChristoph Hellwig	default y if !MMU
13034dc0ea6SChristoph Hellwig	bool
13134dc0ea6SChristoph Hellwig
132dbed452aSDavid Rientjesconfig DMA_COHERENT_POOL
133d07ae4c4SChristoph Hellwig	select GENERIC_ALLOCATOR
134dbed452aSDavid Rientjes	bool
135dbed452aSDavid Rientjes
136faf4ef82SChristoph Hellwigconfig DMA_GLOBAL_POOL
137faf4ef82SChristoph Hellwig	select DMA_DECLARE_COHERENT
138faf4ef82SChristoph Hellwig	bool
139faf4ef82SChristoph Hellwig
140e860c299SDavid Rientjesconfig DMA_DIRECT_REMAP
141e860c299SDavid Rientjes	bool
142e860c299SDavid Rientjes	select DMA_COHERENT_POOL
143f5ff79fdSChristoph Hellwig	select DMA_NONCOHERENT_MMAP
144e860c299SDavid Rientjes
145ddb26d8eSChristoph Hellwigconfig DMA_CMA
146ddb26d8eSChristoph Hellwig	bool "DMA Contiguous Memory Allocator"
147ddb26d8eSChristoph Hellwig	depends on HAVE_DMA_CONTIGUOUS && CMA
148ddb26d8eSChristoph Hellwig	help
149ddb26d8eSChristoph Hellwig	  This enables the Contiguous Memory Allocator which allows drivers
150ddb26d8eSChristoph Hellwig	  to allocate big physically-contiguous blocks of memory for use with
151ddb26d8eSChristoph Hellwig	  hardware components that do not support I/O map nor scatter-gather.
152ddb26d8eSChristoph Hellwig
153ddb26d8eSChristoph Hellwig	  You can disable CMA by specifying "cma=0" on the kernel's command
154ddb26d8eSChristoph Hellwig	  line.
155ddb26d8eSChristoph Hellwig
1560b1abd1fSChristoph Hellwig	  For more information see <kernel/dma/contiguous.c>.
157ddb26d8eSChristoph Hellwig	  If unsure, say "n".
158ddb26d8eSChristoph Hellwig
159ddb26d8eSChristoph Hellwigif  DMA_CMA
160b7176c26SBarry Song
161bf29bfaaSYajun Dengconfig DMA_NUMA_CMA
162bf29bfaaSYajun Deng	bool "Enable separate DMA Contiguous Memory Area for NUMA Node"
163*2dcdf8c1SChristoph Hellwig	depends on NUMA
164b7176c26SBarry Song	help
165bf29bfaaSYajun Deng	  Enable this option to get numa CMA areas so that NUMA devices
16622e4a348SYajun Deng	  can get local memory by DMA coherent APIs.
167b7176c26SBarry Song
168b7176c26SBarry Song	  You can set the size of pernuma CMA by specifying "cma_pernuma=size"
169bf29bfaaSYajun Deng	  or set the node id and its size of CMA by specifying "numa_cma=
170bf29bfaaSYajun Deng	  <node>:size[,<node>:size]" on the kernel's command line.
171b7176c26SBarry Song
172ddb26d8eSChristoph Hellwigcomment "Default contiguous memory area size:"
173ddb26d8eSChristoph Hellwig
174ddb26d8eSChristoph Hellwigconfig CMA_SIZE_MBYTES
175ddb26d8eSChristoph Hellwig	int "Size in Mega Bytes"
176ddb26d8eSChristoph Hellwig	depends on !CMA_SIZE_SEL_PERCENTAGE
177ddb26d8eSChristoph Hellwig	default 0 if X86
178ddb26d8eSChristoph Hellwig	default 16
179ddb26d8eSChristoph Hellwig	help
180ddb26d8eSChristoph Hellwig	  Defines the size (in MiB) of the default memory area for Contiguous
181ddb26d8eSChristoph Hellwig	  Memory Allocator.  If the size of 0 is selected, CMA is disabled by
182ddb26d8eSChristoph Hellwig	  default, but it can be enabled by passing cma=size[MG] to the kernel.
183ddb26d8eSChristoph Hellwig
184ddb26d8eSChristoph Hellwig
185ddb26d8eSChristoph Hellwigconfig CMA_SIZE_PERCENTAGE
186ddb26d8eSChristoph Hellwig	int "Percentage of total memory"
187ddb26d8eSChristoph Hellwig	depends on !CMA_SIZE_SEL_MBYTES
188ddb26d8eSChristoph Hellwig	default 0 if X86
189ddb26d8eSChristoph Hellwig	default 10
190ddb26d8eSChristoph Hellwig	help
191ddb26d8eSChristoph Hellwig	  Defines the size of the default memory area for Contiguous Memory
192ddb26d8eSChristoph Hellwig	  Allocator as a percentage of the total memory in the system.
193ddb26d8eSChristoph Hellwig	  If 0 percent is selected, CMA is disabled by default, but it can be
194ddb26d8eSChristoph Hellwig	  enabled by passing cma=size[MG] to the kernel.
195ddb26d8eSChristoph Hellwig
196ddb26d8eSChristoph Hellwigchoice
197ddb26d8eSChristoph Hellwig	prompt "Selected region size"
198ddb26d8eSChristoph Hellwig	default CMA_SIZE_SEL_MBYTES
199ddb26d8eSChristoph Hellwig
200ddb26d8eSChristoph Hellwigconfig CMA_SIZE_SEL_MBYTES
201ddb26d8eSChristoph Hellwig	bool "Use mega bytes value only"
202ddb26d8eSChristoph Hellwig
203ddb26d8eSChristoph Hellwigconfig CMA_SIZE_SEL_PERCENTAGE
204ddb26d8eSChristoph Hellwig	bool "Use percentage value only"
205ddb26d8eSChristoph Hellwig
206ddb26d8eSChristoph Hellwigconfig CMA_SIZE_SEL_MIN
207ddb26d8eSChristoph Hellwig	bool "Use lower value (minimum)"
208ddb26d8eSChristoph Hellwig
209ddb26d8eSChristoph Hellwigconfig CMA_SIZE_SEL_MAX
210ddb26d8eSChristoph Hellwig	bool "Use higher value (maximum)"
211ddb26d8eSChristoph Hellwig
212ddb26d8eSChristoph Hellwigendchoice
213ddb26d8eSChristoph Hellwig
214ddb26d8eSChristoph Hellwigconfig CMA_ALIGNMENT
215ddb26d8eSChristoph Hellwig	int "Maximum PAGE_SIZE order of alignment for contiguous buffers"
2160de32796SPaul Cercueil	range 2 12
217ddb26d8eSChristoph Hellwig	default 8
218ddb26d8eSChristoph Hellwig	help
219ddb26d8eSChristoph Hellwig	  DMA mapping framework by default aligns all buffers to the smallest
220ddb26d8eSChristoph Hellwig	  PAGE_SIZE order which is greater than or equal to the requested buffer
221ddb26d8eSChristoph Hellwig	  size. This works well for buffers up to a few hundreds kilobytes, but
222ddb26d8eSChristoph Hellwig	  for larger buffers it just a memory waste. With this parameter you can
223ddb26d8eSChristoph Hellwig	  specify the maximum PAGE_SIZE order for contiguous buffers. Larger
224ddb26d8eSChristoph Hellwig	  buffers will be aligned only to this specified order. The order is
225ddb26d8eSChristoph Hellwig	  expressed as a power of two multiplied by the PAGE_SIZE.
226ddb26d8eSChristoph Hellwig
227ddb26d8eSChristoph Hellwig	  For example, if your system defaults to 4KiB pages, the order value
228ddb26d8eSChristoph Hellwig	  of 8 means that the buffers will be aligned up to 1MiB only.
229ddb26d8eSChristoph Hellwig
230ddb26d8eSChristoph Hellwig	  If unsure, leave the default value "8".
231ddb26d8eSChristoph Hellwig
232ddb26d8eSChristoph Hellwigendif
233ddb26d8eSChristoph Hellwig
23470ca7ba2SAndy Shevchenkoconfig DMA_API_DEBUG
23570ca7ba2SAndy Shevchenko	bool "Enable debugging of DMA-API usage"
23670ca7ba2SAndy Shevchenko	select NEED_DMA_MAP_STATE
23770ca7ba2SAndy Shevchenko	help
23870ca7ba2SAndy Shevchenko	  Enable this option to debug the use of the DMA API by device drivers.
23970ca7ba2SAndy Shevchenko	  With this option you will be able to detect common bugs in device
24070ca7ba2SAndy Shevchenko	  drivers like double-freeing of DMA mappings or freeing mappings that
24170ca7ba2SAndy Shevchenko	  were never allocated.
24270ca7ba2SAndy Shevchenko
24370ca7ba2SAndy Shevchenko	  This option causes a performance degradation.  Use only if you want to
24470ca7ba2SAndy Shevchenko	  debug device drivers and dma interactions.
24570ca7ba2SAndy Shevchenko
24670ca7ba2SAndy Shevchenko	  If unsure, say N.
24770ca7ba2SAndy Shevchenko
24870ca7ba2SAndy Shevchenkoconfig DMA_API_DEBUG_SG
24970ca7ba2SAndy Shevchenko	bool "Debug DMA scatter-gather usage"
25070ca7ba2SAndy Shevchenko	default y
25170ca7ba2SAndy Shevchenko	depends on DMA_API_DEBUG
25270ca7ba2SAndy Shevchenko	help
25370ca7ba2SAndy Shevchenko	  Perform extra checking that callers of dma_map_sg() have respected the
25470ca7ba2SAndy Shevchenko	  appropriate segment length/boundary limits for the given device when
25570ca7ba2SAndy Shevchenko	  preparing DMA scatterlists.
25670ca7ba2SAndy Shevchenko
25770ca7ba2SAndy Shevchenko	  This is particularly likely to have been overlooked in cases where the
25870ca7ba2SAndy Shevchenko	  dma_map_sg() API is used for general bulk mapping of pages rather than
25970ca7ba2SAndy Shevchenko	  preparing literal scatter-gather descriptors, where there is a risk of
26070ca7ba2SAndy Shevchenko	  unexpected behaviour from DMA API implementations if the scatterlist
26170ca7ba2SAndy Shevchenko	  is technically out-of-spec.
26270ca7ba2SAndy Shevchenko
26370ca7ba2SAndy Shevchenko	  If unsure, say N.
26465789daaSBarry Song
26565789daaSBarry Songconfig DMA_MAP_BENCHMARK
26665789daaSBarry Song	bool "Enable benchmarking of streaming DMA mapping"
26765789daaSBarry Song	depends on DEBUG_FS
26865789daaSBarry Song	help
26965789daaSBarry Song	  Provides /sys/kernel/debug/dma_map_benchmark that helps with testing
27065789daaSBarry Song	  performance of dma_(un)map_page.
27165789daaSBarry Song
27265789daaSBarry Song	  See tools/testing/selftests/dma/dma_map_benchmark.c
273