mirror of
https://github.com/torvalds/linux.git
synced 2024-11-26 06:02:05 +00:00
1e6d5dea34
- swiotlb cleanups (Petr Tesarik) - use kvmalloc_array (gaoxu) - a small step towards removing is_swiotlb_active (Christoph Hellwig) - fix a Kconfig typo Sui Jingfeng) -----BEGIN PGP SIGNATURE----- iQI/BAABCgApFiEEgdbnc3r/njty3Iq9D55TZVIEUYMFAmScHTELHGhjaEBsc3Qu ZGUACgkQD55TZVIEUYOoGhAAuKdcWAumhEuKXu/vuA4/xH5Kvn2uhrAVs/RSKKh7 Wbh2WXh+9GOQs4dwpYI5/chRmCJgyC2ics/E7dny2ovJumM/RGOR9zff/+zJk5yh 3tpiZ4VW/2x/9qmoRpdQVTaj1uB2Ug8wpztUohyeEYPpjLX0/Vq/zTItAyvQs4kO vskg2u9EGwzgV4qmHWq2fjowljHS1sMZq2URKGX8JDHrwOh0+uCke626ze/WznSQ 5quWW4mE0IYq/nldIMTvJxUx6273zBMm+yoZSfFY6K0VrP3WDE5endP5oYR7d251 zNRPyWqW78HQT0z/gntaPOKDB0t7YxsWVLwam98Yv8wl1wLJQYe5sRoL7qXL0yBz cu4uTOGU6Kvw3ZHWQOk2qkGxYAxDLnaFejz8ZDCycWQA7T2+TNdaVXNnl/vE+aRN 25mnT0JtClfZOvHihhHKaiRXMKE0WgPy4vBZBT0SAUVuUR7JwtYDv/5giGf6Bi3x QwNeXAmFD75VELJoqX1KL/UiJh8FzyWZMI7l7XmDVy9lJsA1P3PO+npI8SOmA+e8 q4GSD36BxDoDE06Hg/BQcRqPohDCEsrRgfvOaa7xld9SCwe1lGaN3kDsyv6HoBzX NRS3aishdqHf21dNctjX9f+II+30NFkPbAa64B8L4tP5aQLy3bgjNLweLP9fhKgl KQs= =yYCS -----END PGP SIGNATURE----- Merge tag 'dma-mapping-6.5-2023-06-28' of git://git.infradead.org/users/hch/dma-mapping Pull dma-mapping updates from Christoph Hellwig: - swiotlb cleanups (Petr Tesarik) - use kvmalloc_array (gaoxu) - a small step towards removing is_swiotlb_active (Christoph Hellwig) - fix a Kconfig typo Sui Jingfeng) * tag 'dma-mapping-6.5-2023-06-28' of git://git.infradead.org/users/hch/dma-mapping: drm/nouveau: stop using is_swiotlb_active swiotlb: use the atomic counter of total used slabs if available swiotlb: remove unused field "used" from struct io_tlb_mem dma-remap: use kvmalloc_array/kvfree for larger dma memory remap dma-mapping: fix a Kconfig typo
259 lines
6.5 KiB
Plaintext
259 lines
6.5 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_FLAGS
|
|
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 think 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
|
|
|
|
#
|
|
# Select this option if the architecture assumes DMA devices are coherent
|
|
# by default.
|
|
#
|
|
config ARCH_DMA_DEFAULT_COHERENT
|
|
bool
|
|
|
|
config SWIOTLB
|
|
bool
|
|
select NEED_DMA_MAP_STATE
|
|
|
|
config DMA_BOUNCE_UNALIGNED_KMALLOC
|
|
bool
|
|
depends on SWIOTLB
|
|
|
|
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
|