linux/kernel/dma/Kconfig
<<
>>
Prefs
   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