Thomas Gleixner | ec8f24b | 2019-05-19 13:07:45 +0100 | [diff] [blame] | 1 | # SPDX-License-Identifier: GPL-2.0-only |
Christoph Hellwig | cf65a0f | 2018-06-12 19:01:45 +0200 | [diff] [blame] | 2 | |
| 3 | config HAS_DMA |
| 4 | bool |
| 5 | depends on !NO_DMA |
| 6 | default y |
| 7 | |
| 8 | config NEED_SG_DMA_LENGTH |
| 9 | bool |
| 10 | |
| 11 | config NEED_DMA_MAP_STATE |
| 12 | bool |
| 13 | |
| 14 | config ARCH_DMA_ADDR_T_64BIT |
| 15 | def_bool 64BIT || PHYS_ADDR_T_64BIT |
| 16 | |
Christoph Hellwig | f3ecc0f | 2018-08-19 14:53:20 +0200 | [diff] [blame] | 17 | config ARCH_HAS_DMA_COHERENCE_H |
| 18 | bool |
| 19 | |
Christoph Hellwig | 11ddce1 | 2019-02-13 08:01:22 +0100 | [diff] [blame] | 20 | config ARCH_HAS_DMA_SET_MASK |
| 21 | bool |
| 22 | |
Christoph Hellwig | 419e2f1 | 2019-08-26 09:03:44 +0200 | [diff] [blame] | 23 | # |
| 24 | # Select this option if the architecture needs special handling for |
| 25 | # DMA_ATTR_WRITE_COMBINE. Normally the "uncached" mapping should be what |
| 26 | # people thing of when saying write combine, so very few platforms should |
| 27 | # need to enable this. |
| 28 | # |
| 29 | config ARCH_HAS_DMA_WRITE_COMBINE |
| 30 | bool |
| 31 | |
Christoph Hellwig | ff4c25f | 2019-02-03 20:12:02 +0100 | [diff] [blame] | 32 | config DMA_DECLARE_COHERENT |
Christoph Hellwig | cf65a0f | 2018-06-12 19:01:45 +0200 | [diff] [blame] | 33 | bool |
| 34 | |
Christoph Hellwig | 347cb6a | 2019-01-07 13:36:20 -0500 | [diff] [blame] | 35 | config ARCH_HAS_SETUP_DMA_OPS |
| 36 | bool |
| 37 | |
Christoph Hellwig | dc2acde | 2018-12-21 22:14:44 +0100 | [diff] [blame] | 38 | config ARCH_HAS_TEARDOWN_DMA_OPS |
Christoph Hellwig | cf65a0f | 2018-06-12 19:01:45 +0200 | [diff] [blame] | 39 | bool |
| 40 | |
| 41 | config ARCH_HAS_SYNC_DMA_FOR_DEVICE |
| 42 | bool |
| 43 | |
| 44 | config ARCH_HAS_SYNC_DMA_FOR_CPU |
| 45 | bool |
| 46 | select NEED_DMA_MAP_STATE |
| 47 | |
Christoph Hellwig | 684f7e9 | 2018-09-11 08:54:57 +0200 | [diff] [blame] | 48 | config ARCH_HAS_SYNC_DMA_FOR_CPU_ALL |
| 49 | bool |
| 50 | |
Christoph Hellwig | 13bf5ce | 2019-03-25 15:44:06 +0100 | [diff] [blame] | 51 | config ARCH_HAS_DMA_PREP_COHERENT |
| 52 | bool |
| 53 | |
Tom Lendacky | 9087c37 | 2019-07-10 19:01:19 +0000 | [diff] [blame] | 54 | config ARCH_HAS_FORCE_DMA_UNENCRYPTED |
| 55 | bool |
| 56 | |
Christoph Hellwig | cf65a0f | 2018-06-12 19:01:45 +0200 | [diff] [blame] | 57 | config DMA_NONCOHERENT_CACHE_SYNC |
| 58 | bool |
Christoph Hellwig | cf65a0f | 2018-06-12 19:01:45 +0200 | [diff] [blame] | 59 | |
| 60 | config DMA_VIRT_OPS |
| 61 | bool |
| 62 | depends on HAS_DMA |
| 63 | |
| 64 | config SWIOTLB |
| 65 | bool |
Christoph Hellwig | cf65a0f | 2018-06-12 19:01:45 +0200 | [diff] [blame] | 66 | select NEED_DMA_MAP_STATE |
Christoph Hellwig | f0edfea | 2018-08-24 10:31:08 +0200 | [diff] [blame] | 67 | |
Christoph Hellwig | 34dc0ea | 2019-10-29 11:01:37 +0100 | [diff] [blame] | 68 | # |
| 69 | # Should be selected if we can mmap non-coherent mappings to userspace. |
| 70 | # The only thing that is really required is a way to set an uncached bit |
| 71 | # in the pagetables |
| 72 | # |
| 73 | config DMA_NONCOHERENT_MMAP |
| 74 | bool |
| 75 | |
Christoph Hellwig | f0edfea | 2018-08-24 10:31:08 +0200 | [diff] [blame] | 76 | config DMA_REMAP |
| 77 | depends on MMU |
Clément Leger | c13edf8 | 2019-03-27 14:06:27 +0100 | [diff] [blame] | 78 | select GENERIC_ALLOCATOR |
Christoph Hellwig | 34dc0ea | 2019-10-29 11:01:37 +0100 | [diff] [blame] | 79 | select DMA_NONCOHERENT_MMAP |
Christoph Hellwig | f0edfea | 2018-08-24 10:31:08 +0200 | [diff] [blame] | 80 | bool |
Christoph Hellwig | 0c3b317 | 2018-11-04 20:29:28 +0100 | [diff] [blame] | 81 | |
| 82 | config DMA_DIRECT_REMAP |
| 83 | bool |
Christoph Hellwig | 0c3b317 | 2018-11-04 20:29:28 +0100 | [diff] [blame] | 84 | select DMA_REMAP |
Andy Shevchenko | 70ca7ba | 2019-02-11 18:12:30 +0200 | [diff] [blame] | 85 | |
Christoph Hellwig | ddb26d8 | 2019-02-13 19:19:08 +0100 | [diff] [blame] | 86 | config DMA_CMA |
| 87 | bool "DMA Contiguous Memory Allocator" |
| 88 | depends on HAVE_DMA_CONTIGUOUS && CMA |
| 89 | help |
| 90 | This enables the Contiguous Memory Allocator which allows drivers |
| 91 | to allocate big physically-contiguous blocks of memory for use with |
| 92 | hardware components that do not support I/O map nor scatter-gather. |
| 93 | |
| 94 | You can disable CMA by specifying "cma=0" on the kernel's command |
| 95 | line. |
| 96 | |
| 97 | For more information see <include/linux/dma-contiguous.h>. |
| 98 | If unsure, say "n". |
| 99 | |
| 100 | if DMA_CMA |
| 101 | comment "Default contiguous memory area size:" |
| 102 | |
| 103 | config CMA_SIZE_MBYTES |
| 104 | int "Size in Mega Bytes" |
| 105 | depends on !CMA_SIZE_SEL_PERCENTAGE |
| 106 | default 0 if X86 |
| 107 | default 16 |
| 108 | help |
| 109 | Defines the size (in MiB) of the default memory area for Contiguous |
| 110 | Memory Allocator. If the size of 0 is selected, CMA is disabled by |
| 111 | default, but it can be enabled by passing cma=size[MG] to the kernel. |
| 112 | |
| 113 | |
| 114 | config CMA_SIZE_PERCENTAGE |
| 115 | int "Percentage of total memory" |
| 116 | depends on !CMA_SIZE_SEL_MBYTES |
| 117 | default 0 if X86 |
| 118 | default 10 |
| 119 | help |
| 120 | Defines the size of the default memory area for Contiguous Memory |
| 121 | Allocator as a percentage of the total memory in the system. |
| 122 | If 0 percent is selected, CMA is disabled by default, but it can be |
| 123 | enabled by passing cma=size[MG] to the kernel. |
| 124 | |
| 125 | choice |
| 126 | prompt "Selected region size" |
| 127 | default CMA_SIZE_SEL_MBYTES |
| 128 | |
| 129 | config CMA_SIZE_SEL_MBYTES |
| 130 | bool "Use mega bytes value only" |
| 131 | |
| 132 | config CMA_SIZE_SEL_PERCENTAGE |
| 133 | bool "Use percentage value only" |
| 134 | |
| 135 | config CMA_SIZE_SEL_MIN |
| 136 | bool "Use lower value (minimum)" |
| 137 | |
| 138 | config CMA_SIZE_SEL_MAX |
| 139 | bool "Use higher value (maximum)" |
| 140 | |
| 141 | endchoice |
| 142 | |
| 143 | config CMA_ALIGNMENT |
| 144 | int "Maximum PAGE_SIZE order of alignment for contiguous buffers" |
| 145 | range 4 12 |
| 146 | default 8 |
| 147 | help |
| 148 | DMA mapping framework by default aligns all buffers to the smallest |
| 149 | PAGE_SIZE order which is greater than or equal to the requested buffer |
| 150 | size. This works well for buffers up to a few hundreds kilobytes, but |
| 151 | for larger buffers it just a memory waste. With this parameter you can |
| 152 | specify the maximum PAGE_SIZE order for contiguous buffers. Larger |
| 153 | buffers will be aligned only to this specified order. The order is |
| 154 | expressed as a power of two multiplied by the PAGE_SIZE. |
| 155 | |
| 156 | For example, if your system defaults to 4KiB pages, the order value |
| 157 | of 8 means that the buffers will be aligned up to 1MiB only. |
| 158 | |
| 159 | If unsure, leave the default value "8". |
| 160 | |
| 161 | endif |
| 162 | |
Andy Shevchenko | 70ca7ba | 2019-02-11 18:12:30 +0200 | [diff] [blame] | 163 | config DMA_API_DEBUG |
| 164 | bool "Enable debugging of DMA-API usage" |
| 165 | select NEED_DMA_MAP_STATE |
| 166 | help |
| 167 | Enable this option to debug the use of the DMA API by device drivers. |
| 168 | With this option you will be able to detect common bugs in device |
| 169 | drivers like double-freeing of DMA mappings or freeing mappings that |
| 170 | were never allocated. |
| 171 | |
| 172 | This also attempts to catch cases where a page owned by DMA is |
| 173 | accessed by the cpu in a way that could cause data corruption. For |
| 174 | example, this enables cow_user_page() to check that the source page is |
| 175 | not undergoing DMA. |
| 176 | |
| 177 | This option causes a performance degradation. Use only if you want to |
| 178 | debug device drivers and dma interactions. |
| 179 | |
| 180 | If unsure, say N. |
| 181 | |
| 182 | config DMA_API_DEBUG_SG |
| 183 | bool "Debug DMA scatter-gather usage" |
| 184 | default y |
| 185 | depends on DMA_API_DEBUG |
| 186 | help |
| 187 | Perform extra checking that callers of dma_map_sg() have respected the |
| 188 | appropriate segment length/boundary limits for the given device when |
| 189 | preparing DMA scatterlists. |
| 190 | |
| 191 | This is particularly likely to have been overlooked in cases where the |
| 192 | dma_map_sg() API is used for general bulk mapping of pages rather than |
| 193 | preparing literal scatter-gather descriptors, where there is a risk of |
| 194 | unexpected behaviour from DMA API implementations if the scatterlist |
| 195 | is technically out-of-spec. |
| 196 | |
| 197 | If unsure, say N. |