# SPDX-License-Identifier: GPL-2.0-only 
 | 
  
 | 
config NO_DMA 
 | 
    bool 
 | 
  
 | 
config HAS_DMA 
 | 
    bool 
 | 
    depends on !NO_DMA 
 | 
    default y 
 | 
  
 | 
config DMA_OPS 
 | 
    depends on HAS_DMA 
 | 
    bool 
 | 
  
 | 
# 
 | 
# IOMMU drivers that can bypass the IOMMU code and optionally use the direct 
 | 
# mapping fast path should select this option and set the dma_ops_bypass 
 | 
# flag in struct device where applicable 
 | 
# 
 | 
config DMA_OPS_BYPASS 
 | 
    bool 
 | 
  
 | 
config NEED_SG_DMA_LENGTH 
 | 
    bool 
 | 
  
 | 
config NEED_DMA_MAP_STATE 
 | 
    bool 
 | 
  
 | 
config ARCH_DMA_ADDR_T_64BIT 
 | 
    def_bool 64BIT || PHYS_ADDR_T_64BIT 
 | 
  
 | 
config ARCH_HAS_DMA_COHERENCE_H 
 | 
    bool 
 | 
  
 | 
config ARCH_HAS_DMA_SET_MASK 
 | 
    bool 
 | 
  
 | 
# 
 | 
# Select this option if the architecture needs special handling for 
 | 
# DMA_ATTR_WRITE_COMBINE.  Normally the "uncached" mapping should be what 
 | 
# people thing of when saying write combine, so very few platforms should 
 | 
# need to enable this. 
 | 
# 
 | 
config ARCH_HAS_DMA_WRITE_COMBINE 
 | 
    bool 
 | 
  
 | 
# 
 | 
# Select if the architectures provides the arch_dma_mark_clean hook 
 | 
# 
 | 
config ARCH_HAS_DMA_MARK_CLEAN 
 | 
    bool 
 | 
  
 | 
config DMA_DECLARE_COHERENT 
 | 
    bool 
 | 
  
 | 
config ARCH_HAS_SETUP_DMA_OPS 
 | 
    bool 
 | 
  
 | 
config ARCH_HAS_TEARDOWN_DMA_OPS 
 | 
    bool 
 | 
  
 | 
config ARCH_HAS_SYNC_DMA_FOR_DEVICE 
 | 
    bool 
 | 
  
 | 
config ARCH_HAS_SYNC_DMA_FOR_CPU 
 | 
    bool 
 | 
    select NEED_DMA_MAP_STATE 
 | 
  
 | 
config ARCH_HAS_SYNC_DMA_FOR_CPU_ALL 
 | 
    bool 
 | 
  
 | 
config ARCH_HAS_DMA_PREP_COHERENT 
 | 
    bool 
 | 
  
 | 
config ARCH_HAS_FORCE_DMA_UNENCRYPTED 
 | 
    bool 
 | 
  
 | 
config DMA_VIRT_OPS 
 | 
    bool 
 | 
    depends on HAS_DMA 
 | 
    select DMA_OPS 
 | 
  
 | 
config SWIOTLB 
 | 
    bool 
 | 
    select NEED_DMA_MAP_STATE 
 | 
  
 | 
# 
 | 
# Should be selected if we can mmap non-coherent mappings to userspace. 
 | 
# The only thing that is really required is a way to set an uncached bit 
 | 
# in the pagetables 
 | 
# 
 | 
config DMA_NONCOHERENT_MMAP 
 | 
    default y if !MMU 
 | 
    bool 
 | 
  
 | 
config DMA_COHERENT_POOL 
 | 
    select GENERIC_ALLOCATOR 
 | 
    bool 
 | 
  
 | 
config DMA_REMAP 
 | 
    bool 
 | 
    depends on MMU 
 | 
    select DMA_NONCOHERENT_MMAP 
 | 
  
 | 
config DMA_DIRECT_REMAP 
 | 
    bool 
 | 
    select DMA_REMAP 
 | 
    select DMA_COHERENT_POOL 
 | 
  
 | 
config DMA_CMA 
 | 
    bool "DMA Contiguous Memory Allocator" 
 | 
    depends on HAVE_DMA_CONTIGUOUS && CMA 
 | 
    help 
 | 
      This enables the Contiguous Memory Allocator which allows drivers 
 | 
      to allocate big physically-contiguous blocks of memory for use with 
 | 
      hardware components that do not support I/O map nor scatter-gather. 
 | 
  
 | 
      You can disable CMA by specifying "cma=0" on the kernel's command 
 | 
      line. 
 | 
  
 | 
      For more information see <kernel/dma/contiguous.c>. 
 | 
      If unsure, say "n". 
 | 
  
 | 
if  DMA_CMA 
 | 
  
 | 
config DMA_PERNUMA_CMA 
 | 
    bool "Enable separate DMA Contiguous Memory Area for each NUMA Node" 
 | 
    default NUMA && ARM64 
 | 
    help 
 | 
      Enable this option to get pernuma CMA areas so that devices like 
 | 
      ARM64 SMMU can get local memory by DMA coherent APIs. 
 | 
  
 | 
      You can set the size of pernuma CMA by specifying "cma_pernuma=size" 
 | 
      on the kernel's command line. 
 | 
  
 | 
comment "Default contiguous memory area size:" 
 | 
  
 | 
config CMA_SIZE_MBYTES 
 | 
    int "Size in Mega Bytes" 
 | 
    depends on !CMA_SIZE_SEL_PERCENTAGE 
 | 
    default 0 if X86 
 | 
    default 16 
 | 
    help 
 | 
      Defines the size (in MiB) of the default memory area for Contiguous 
 | 
      Memory Allocator.  If the size of 0 is selected, CMA is disabled by 
 | 
      default, but it can be enabled by passing cma=size[MG] to the kernel. 
 | 
  
 | 
  
 | 
config CMA_SIZE_PERCENTAGE 
 | 
    int "Percentage of total memory" 
 | 
    depends on !CMA_SIZE_SEL_MBYTES 
 | 
    default 0 if X86 
 | 
    default 10 
 | 
    help 
 | 
      Defines the size of the default memory area for Contiguous Memory 
 | 
      Allocator as a percentage of the total memory in the system. 
 | 
      If 0 percent is selected, CMA is disabled by default, but it can be 
 | 
      enabled by passing cma=size[MG] to the kernel. 
 | 
  
 | 
choice 
 | 
    prompt "Selected region size" 
 | 
    default CMA_SIZE_SEL_MBYTES 
 | 
  
 | 
config CMA_SIZE_SEL_MBYTES 
 | 
    bool "Use mega bytes value only" 
 | 
  
 | 
config CMA_SIZE_SEL_PERCENTAGE 
 | 
    bool "Use percentage value only" 
 | 
  
 | 
config CMA_SIZE_SEL_MIN 
 | 
    bool "Use lower value (minimum)" 
 | 
  
 | 
config CMA_SIZE_SEL_MAX 
 | 
    bool "Use higher value (maximum)" 
 | 
  
 | 
endchoice 
 | 
  
 | 
config CMA_ALIGNMENT 
 | 
    int "Maximum PAGE_SIZE order of alignment for contiguous buffers" 
 | 
    range 2 12 
 | 
    default 8 
 | 
    help 
 | 
      DMA mapping framework by default aligns all buffers to the smallest 
 | 
      PAGE_SIZE order which is greater than or equal to the requested buffer 
 | 
      size. This works well for buffers up to a few hundreds kilobytes, but 
 | 
      for larger buffers it just a memory waste. With this parameter you can 
 | 
      specify the maximum PAGE_SIZE order for contiguous buffers. Larger 
 | 
      buffers will be aligned only to this specified order. The order is 
 | 
      expressed as a power of two multiplied by the PAGE_SIZE. 
 | 
  
 | 
      For example, if your system defaults to 4KiB pages, the order value 
 | 
      of 8 means that the buffers will be aligned up to 1MiB only. 
 | 
  
 | 
      If unsure, leave the default value "8". 
 | 
  
 | 
endif 
 | 
  
 | 
config DMA_API_DEBUG 
 | 
    bool "Enable debugging of DMA-API usage" 
 | 
    select NEED_DMA_MAP_STATE 
 | 
    help 
 | 
      Enable this option to debug the use of the DMA API by device drivers. 
 | 
      With this option you will be able to detect common bugs in device 
 | 
      drivers like double-freeing of DMA mappings or freeing mappings that 
 | 
      were never allocated. 
 | 
  
 | 
      This option causes a performance degradation.  Use only if you want to 
 | 
      debug device drivers and dma interactions. 
 | 
  
 | 
      If unsure, say N. 
 | 
  
 | 
config DMA_API_DEBUG_SG 
 | 
    bool "Debug DMA scatter-gather usage" 
 | 
    default y 
 | 
    depends on DMA_API_DEBUG 
 | 
    help 
 | 
      Perform extra checking that callers of dma_map_sg() have respected the 
 | 
      appropriate segment length/boundary limits for the given device when 
 | 
      preparing DMA scatterlists. 
 | 
  
 | 
      This is particularly likely to have been overlooked in cases where the 
 | 
      dma_map_sg() API is used for general bulk mapping of pages rather than 
 | 
      preparing literal scatter-gather descriptors, where there is a risk of 
 | 
      unexpected behaviour from DMA API implementations if the scatterlist 
 | 
      is technically out-of-spec. 
 | 
  
 | 
      If unsure, say N. 
 |