245 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			245 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
# 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
 | 
						|
 | 
						|
# Lets platform IOMMU driver choose between bypass and IOMMU
 | 
						|
config ARCH_HAS_DMA_MAP_DIRECT
 | 
						|
	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_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 SWIOTLB
 | 
						|
	bool
 | 
						|
	select NEED_DMA_MAP_STATE
 | 
						|
 | 
						|
config DMA_RESTRICTED_POOL
 | 
						|
	bool "DMA Restricted Pool"
 | 
						|
	depends on OF && OF_RESERVED_MEM && SWIOTLB
 | 
						|
	help
 | 
						|
	  This enables support for restricted DMA pools which provide a level of
 | 
						|
	  DMA memory protection on systems with limited hardware protection
 | 
						|
	  capabilities, such as those lacking an IOMMU.
 | 
						|
 | 
						|
	  For more information see
 | 
						|
	  <Documentation/devicetree/bindings/reserved-memory/reserved-memory.txt>
 | 
						|
	  and <kernel/dma/swiotlb.c>.
 | 
						|
	  If unsure, say "n".
 | 
						|
 | 
						|
#
 | 
						|
# 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_GLOBAL_POOL
 | 
						|
	select DMA_DECLARE_COHERENT
 | 
						|
	bool
 | 
						|
 | 
						|
config DMA_DIRECT_REMAP
 | 
						|
	bool
 | 
						|
	select DMA_COHERENT_POOL
 | 
						|
	select DMA_NONCOHERENT_MMAP
 | 
						|
 | 
						|
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.
 | 
						|
 | 
						|
config DMA_MAP_BENCHMARK
 | 
						|
	bool "Enable benchmarking of streaming DMA mapping"
 | 
						|
	depends on DEBUG_FS
 | 
						|
	help
 | 
						|
	  Provides /sys/kernel/debug/dma_map_benchmark that helps with testing
 | 
						|
	  performance of dma_(un)map_page.
 | 
						|
 | 
						|
	  See tools/testing/selftests/dma/dma_map_benchmark.c
 |