Linux-libre 5.4.49-gnu
[librecmc/linux-libre.git] / arch / riscv / Kconfig
1 # SPDX-License-Identifier: GPL-2.0-only
2 #
3 # For a description of the syntax of this configuration file,
4 # see Documentation/kbuild/kconfig-language.rst.
5 #
6
7 config 64BIT
8         bool
9
10 config 32BIT
11         bool
12
13 config RISCV
14         def_bool y
15         # even on 32-bit, physical (and DMA) addresses are > 32-bits
16         select PHYS_ADDR_T_64BIT
17         select OF
18         select OF_EARLY_FLATTREE
19         select OF_IRQ
20         select ARCH_HAS_BINFMT_FLAT
21         select ARCH_WANT_FRAME_POINTERS
22         select CLONE_BACKWARDS
23         select COMMON_CLK
24         select GENERIC_CLOCKEVENTS
25         select GENERIC_CPU_DEVICES
26         select GENERIC_IRQ_SHOW
27         select GENERIC_PCI_IOMAP
28         select GENERIC_SCHED_CLOCK
29         select GENERIC_STRNCPY_FROM_USER
30         select GENERIC_STRNLEN_USER
31         select GENERIC_SMP_IDLE_THREAD
32         select GENERIC_ATOMIC64 if !64BIT
33         select HAVE_ARCH_AUDITSYSCALL
34         select HAVE_ASM_MODVERSIONS
35         select HAVE_MEMBLOCK_NODE_MAP
36         select HAVE_DMA_CONTIGUOUS
37         select HAVE_FUTEX_CMPXCHG if FUTEX
38         select HAVE_PERF_EVENTS
39         select HAVE_PERF_REGS
40         select HAVE_PERF_USER_STACK_DUMP
41         select HAVE_SYSCALL_TRACEPOINTS
42         select IRQ_DOMAIN
43         select SPARSE_IRQ
44         select SYSCTL_EXCEPTION_TRACE
45         select HAVE_ARCH_TRACEHOOK
46         select HAVE_PCI
47         select MODULES_USE_ELF_RELA if MODULES
48         select MODULE_SECTIONS if MODULES
49         select THREAD_INFO_IN_TASK
50         select PCI_DOMAINS_GENERIC if PCI
51         select PCI_MSI if PCI
52         select RISCV_TIMER
53         select GENERIC_IRQ_MULTI_HANDLER
54         select GENERIC_ARCH_TOPOLOGY if SMP
55         select ARCH_HAS_PTE_SPECIAL
56         select ARCH_HAS_MMIOWB
57         select HAVE_EBPF_JIT if 64BIT
58         select EDAC_SUPPORT
59         select ARCH_HAS_GIGANTIC_PAGE
60         select ARCH_WANT_HUGE_PMD_SHARE if 64BIT
61         select SPARSEMEM_STATIC if 32BIT
62         select ARCH_WANT_DEFAULT_TOPDOWN_MMAP_LAYOUT if MMU
63         select HAVE_ARCH_MMAP_RND_BITS
64         select HAVE_COPY_THREAD_TLS
65
66 config ARCH_MMAP_RND_BITS_MIN
67         default 18 if 64BIT
68         default 8
69
70 # max bits determined by the following formula:
71 #  VA_BITS - PAGE_SHIFT - 3
72 config ARCH_MMAP_RND_BITS_MAX
73         default 24 if 64BIT # SV39 based
74         default 17
75
76 config MMU
77         def_bool y
78
79 config ZONE_DMA32
80         bool
81         default y if 64BIT
82
83 config VA_BITS
84         int
85         default 32 if 32BIT
86         default 39 if 64BIT
87
88 config PA_BITS
89         int
90         default 34 if 32BIT
91         default 56 if 64BIT
92
93 config PAGE_OFFSET
94         hex
95         default 0xC0000000 if 32BIT && MAXPHYSMEM_2GB
96         default 0xffffffff80000000 if 64BIT && MAXPHYSMEM_2GB
97         default 0xffffffe000000000 if 64BIT && MAXPHYSMEM_128GB
98
99 config ARCH_FLATMEM_ENABLE
100         def_bool y
101
102 config ARCH_SPARSEMEM_ENABLE
103         def_bool y
104         depends on MMU
105         select SPARSEMEM_VMEMMAP_ENABLE
106
107 config ARCH_SELECT_MEMORY_MODEL
108         def_bool ARCH_SPARSEMEM_ENABLE
109
110 config ARCH_WANT_GENERAL_HUGETLB
111         def_bool y
112
113 config SYS_SUPPORTS_HUGETLBFS
114         def_bool y
115
116 config STACKTRACE_SUPPORT
117         def_bool y
118
119 config TRACE_IRQFLAGS_SUPPORT
120         def_bool y
121
122 config GENERIC_BUG
123         def_bool y
124         depends on BUG
125         select GENERIC_BUG_RELATIVE_POINTERS if 64BIT
126
127 config GENERIC_BUG_RELATIVE_POINTERS
128         bool
129
130 config GENERIC_CALIBRATE_DELAY
131         def_bool y
132
133 config GENERIC_CSUM
134         def_bool y
135
136 config GENERIC_HWEIGHT
137         def_bool y
138
139 config FIX_EARLYCON_MEM
140         def_bool y
141
142 config PGTABLE_LEVELS
143         int
144         default 3 if 64BIT
145         default 2
146
147 source "arch/riscv/Kconfig.socs"
148
149 menu "Platform type"
150
151 choice
152         prompt "Base ISA"
153         default ARCH_RV64I
154         help
155           This selects the base ISA that this kernel will target and must match
156           the target platform.
157
158 config ARCH_RV32I
159         bool "RV32I"
160         select 32BIT
161         select GENERIC_LIB_ASHLDI3
162         select GENERIC_LIB_ASHRDI3
163         select GENERIC_LIB_LSHRDI3
164         select GENERIC_LIB_UCMPDI2
165
166 config ARCH_RV64I
167         bool "RV64I"
168         select 64BIT
169         select ARCH_SUPPORTS_INT128 if GCC_VERSION >= 50000
170         select HAVE_FUNCTION_TRACER
171         select HAVE_FUNCTION_GRAPH_TRACER
172         select HAVE_FTRACE_MCOUNT_RECORD
173         select HAVE_DYNAMIC_FTRACE
174         select HAVE_DYNAMIC_FTRACE_WITH_REGS
175         select SWIOTLB
176
177 endchoice
178
179 # We must be able to map all physical memory into the kernel, but the compiler
180 # is still a bit more efficient when generating code if it's setup in a manner
181 # such that it can only map 2GiB of memory.
182 choice
183         prompt "Kernel Code Model"
184         default CMODEL_MEDLOW if 32BIT
185         default CMODEL_MEDANY if 64BIT
186
187         config CMODEL_MEDLOW
188                 bool "medium low code model"
189         config CMODEL_MEDANY
190                 bool "medium any code model"
191 endchoice
192
193 config MODULE_SECTIONS
194         bool
195         select HAVE_MOD_ARCH_SPECIFIC
196
197 choice
198         prompt "Maximum Physical Memory"
199         default MAXPHYSMEM_2GB if 32BIT
200         default MAXPHYSMEM_2GB if 64BIT && CMODEL_MEDLOW
201         default MAXPHYSMEM_128GB if 64BIT && CMODEL_MEDANY
202
203         config MAXPHYSMEM_2GB
204                 bool "2GiB"
205         config MAXPHYSMEM_128GB
206                 depends on 64BIT && CMODEL_MEDANY
207                 bool "128GiB"
208 endchoice
209
210
211 config SMP
212         bool "Symmetric Multi-Processing"
213         help
214           This enables support for systems with more than one CPU.  If
215           you say N here, the kernel will run on single and
216           multiprocessor machines, but will use only one CPU of a
217           multiprocessor machine. If you say Y here, the kernel will run
218           on many, but not all, single processor machines. On a single
219           processor machine, the kernel will run faster if you say N
220           here.
221
222           If you don't know what to do here, say N.
223
224 config NR_CPUS
225         int "Maximum number of CPUs (2-32)"
226         range 2 32
227         depends on SMP
228         default "8"
229
230 choice
231         prompt "CPU Tuning"
232         default TUNE_GENERIC
233
234 config TUNE_GENERIC
235         bool "generic"
236
237 endchoice
238
239 config RISCV_ISA_C
240         bool "Emit compressed instructions when building Linux"
241         default y
242         help
243            Adds "C" to the ISA subsets that the toolchain is allowed to emit
244            when building Linux, which results in compressed instructions in the
245            Linux binary.
246
247            If you don't know what to do here, say Y.
248
249 menu "supported PMU type"
250         depends on PERF_EVENTS
251
252 config RISCV_BASE_PMU
253         bool "Base Performance Monitoring Unit"
254         def_bool y
255         help
256           A base PMU that serves as a reference implementation and has limited
257           feature of perf.  It can run on any RISC-V machines so serves as the
258           fallback, but this option can also be disable to reduce kernel size.
259
260 endmenu
261
262 config FPU
263         bool "FPU support"
264         default y
265         help
266           Say N here if you want to disable all floating-point related procedure
267           in the kernel.
268
269           If you don't know what to do here, say Y.
270
271 endmenu
272
273 menu "Kernel features"
274
275 source "kernel/Kconfig.hz"
276
277 endmenu
278
279 menu "Boot options"
280
281 config CMDLINE
282         string "Built-in kernel command line"
283         help
284           For most platforms, the arguments for the kernel's command line
285           are provided at run-time, during boot. However, there are cases
286           where either no arguments are being provided or the provided
287           arguments are insufficient or even invalid.
288
289           When that occurs, it is possible to define a built-in command
290           line here and choose how the kernel should use it later on.
291
292 choice
293         prompt "Built-in command line usage" if CMDLINE != ""
294         default CMDLINE_FALLBACK
295         help
296           Choose how the kernel will handle the provided built-in command
297           line.
298
299 config CMDLINE_FALLBACK
300         bool "Use bootloader kernel arguments if available"
301         help
302           Use the built-in command line as fallback in case we get nothing
303           during boot. This is the default behaviour.
304
305 config CMDLINE_EXTEND
306         bool "Extend bootloader kernel arguments"
307         help
308           The command-line arguments provided during boot will be
309           appended to the built-in command line. This is useful in
310           cases where the provided arguments are insufficient and
311           you don't want to or cannot modify them.
312
313
314 config CMDLINE_FORCE
315         bool "Always use the default kernel command string"
316         help
317           Always use the built-in command line, even if we get one during
318           boot. This is useful in case you need to override the provided
319           command line on systems where you don't have or want control
320           over it.
321
322 endchoice
323
324 endmenu
325
326 menu "Power management options"
327
328 source "kernel/power/Kconfig"
329
330 endmenu