Merge tag 'mm-stable-2022-05-27' of git://git.kernel.org/pub/scm/linux/kernel/git...
[platform/kernel/linux-starfive.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         select ARCH_CLOCKSOURCE_INIT
16         select ARCH_ENABLE_HUGEPAGE_MIGRATION if HUGETLB_PAGE && MIGRATION
17         select ARCH_ENABLE_SPLIT_PMD_PTLOCK if PGTABLE_LEVELS > 2
18         select ARCH_HAS_BINFMT_FLAT
19         select ARCH_HAS_CURRENT_STACK_POINTER
20         select ARCH_HAS_DEBUG_VM_PGTABLE
21         select ARCH_HAS_DEBUG_VIRTUAL if MMU
22         select ARCH_HAS_DEBUG_WX
23         select ARCH_HAS_FORTIFY_SOURCE
24         select ARCH_HAS_GCOV_PROFILE_ALL
25         select ARCH_HAS_GIGANTIC_PAGE
26         select ARCH_HAS_KCOV
27         select ARCH_HAS_MMIOWB
28         select ARCH_HAS_PTE_SPECIAL
29         select ARCH_HAS_SET_DIRECT_MAP if MMU
30         select ARCH_HAS_SET_MEMORY if MMU
31         select ARCH_HAS_STRICT_KERNEL_RWX if MMU && !XIP_KERNEL
32         select ARCH_HAS_STRICT_MODULE_RWX if MMU && !XIP_KERNEL
33         select ARCH_HAS_TICK_BROADCAST if GENERIC_CLOCKEVENTS_BROADCAST
34         select ARCH_HAS_UBSAN_SANITIZE_ALL
35         select ARCH_OPTIONAL_KERNEL_RWX if ARCH_HAS_STRICT_KERNEL_RWX
36         select ARCH_OPTIONAL_KERNEL_RWX_DEFAULT
37         select ARCH_STACKWALK
38         select ARCH_SUPPORTS_ATOMIC_RMW
39         select ARCH_SUPPORTS_DEBUG_PAGEALLOC if MMU
40         select ARCH_SUPPORTS_HUGETLBFS if MMU
41         select ARCH_SUPPORTS_PAGE_TABLE_CHECK
42         select ARCH_USE_MEMTEST
43         select ARCH_USE_QUEUED_RWLOCKS
44         select ARCH_WANT_DEFAULT_TOPDOWN_MMAP_LAYOUT if MMU
45         select ARCH_WANT_FRAME_POINTERS
46         select ARCH_WANT_GENERAL_HUGETLB
47         select ARCH_WANT_HUGE_PMD_SHARE if 64BIT
48         select BINFMT_FLAT_NO_DATA_START_OFFSET if !MMU
49         select BUILDTIME_TABLE_SORT if MMU
50         select CLONE_BACKWARDS
51         select CLINT_TIMER if !MMU
52         select COMMON_CLK
53         select CPU_PM if CPU_IDLE
54         select EDAC_SUPPORT
55         select GENERIC_ARCH_TOPOLOGY if SMP
56         select GENERIC_ATOMIC64 if !64BIT
57         select GENERIC_CLOCKEVENTS_BROADCAST if SMP
58         select GENERIC_EARLY_IOREMAP
59         select GENERIC_GETTIMEOFDAY if HAVE_GENERIC_VDSO
60         select GENERIC_IDLE_POLL_SETUP
61         select GENERIC_IOREMAP if MMU
62         select GENERIC_IRQ_MULTI_HANDLER
63         select GENERIC_IRQ_SHOW
64         select GENERIC_IRQ_SHOW_LEVEL
65         select GENERIC_LIB_DEVMEM_IS_ALLOWED
66         select GENERIC_PCI_IOMAP
67         select GENERIC_PTDUMP if MMU
68         select GENERIC_SCHED_CLOCK
69         select GENERIC_SMP_IDLE_THREAD
70         select GENERIC_TIME_VSYSCALL if MMU && 64BIT
71         select GENERIC_VDSO_TIME_NS if HAVE_GENERIC_VDSO
72         select HAVE_ARCH_AUDITSYSCALL
73         select HAVE_ARCH_JUMP_LABEL if !XIP_KERNEL
74         select HAVE_ARCH_JUMP_LABEL_RELATIVE if !XIP_KERNEL
75         select HAVE_ARCH_KASAN if MMU && 64BIT
76         select HAVE_ARCH_KASAN_VMALLOC if MMU && 64BIT
77         select HAVE_ARCH_KFENCE if MMU && 64BIT
78         select HAVE_ARCH_KGDB if !XIP_KERNEL
79         select HAVE_ARCH_KGDB_QXFER_PKT
80         select HAVE_ARCH_MMAP_RND_BITS if MMU
81         select HAVE_ARCH_SECCOMP_FILTER
82         select HAVE_ARCH_TRACEHOOK
83         select HAVE_ARCH_TRANSPARENT_HUGEPAGE if 64BIT && MMU
84         select ARCH_ENABLE_THP_MIGRATION if TRANSPARENT_HUGEPAGE
85         select HAVE_ARCH_THREAD_STRUCT_WHITELIST
86         select HAVE_ARCH_VMAP_STACK if MMU && 64BIT
87         select HAVE_ASM_MODVERSIONS
88         select HAVE_CONTEXT_TRACKING
89         select HAVE_DEBUG_KMEMLEAK
90         select HAVE_DMA_CONTIGUOUS if MMU
91         select HAVE_EBPF_JIT if MMU
92         select HAVE_FUNCTION_ERROR_INJECTION
93         select HAVE_GCC_PLUGINS
94         select HAVE_GENERIC_VDSO if MMU && 64BIT
95         select HAVE_IRQ_TIME_ACCOUNTING
96         select HAVE_KPROBES if !XIP_KERNEL
97         select HAVE_KPROBES_ON_FTRACE if !XIP_KERNEL
98         select HAVE_KRETPROBES if !XIP_KERNEL
99         select HAVE_MOVE_PMD
100         select HAVE_MOVE_PUD
101         select HAVE_PCI
102         select HAVE_PERF_EVENTS
103         select HAVE_PERF_REGS
104         select HAVE_PERF_USER_STACK_DUMP
105         select HAVE_REGS_AND_STACK_ACCESS_API
106         select HAVE_FUNCTION_ARG_ACCESS_API
107         select HAVE_STACKPROTECTOR
108         select HAVE_SYSCALL_TRACEPOINTS
109         select HAVE_RSEQ
110         select IRQ_DOMAIN
111         select IRQ_FORCED_THREADING
112         select MODULES_USE_ELF_RELA if MODULES
113         select MODULE_SECTIONS if MODULES
114         select OF
115         select OF_EARLY_FLATTREE
116         select OF_IRQ
117         select PCI_DOMAINS_GENERIC if PCI
118         select PCI_MSI if PCI
119         select RISCV_INTC
120         select RISCV_TIMER if RISCV_SBI
121         select SPARSE_IRQ
122         select SYSCTL_EXCEPTION_TRACE
123         select THREAD_INFO_IN_TASK
124         select TRACE_IRQFLAGS_SUPPORT
125         select UACCESS_MEMCPY if !MMU
126         select ZONE_DMA32 if 64BIT
127
128 config ARCH_MMAP_RND_BITS_MIN
129         default 18 if 64BIT
130         default 8
131
132 # max bits determined by the following formula:
133 #  VA_BITS - PAGE_SHIFT - 3
134 config ARCH_MMAP_RND_BITS_MAX
135         default 24 if 64BIT # SV39 based
136         default 17
137
138 # set if we run in machine mode, cleared if we run in supervisor mode
139 config RISCV_M_MODE
140         bool
141         default !MMU
142
143 # set if we are running in S-mode and can use SBI calls
144 config RISCV_SBI
145         bool
146         depends on !RISCV_M_MODE
147         default y
148
149 config MMU
150         bool "MMU-based Paged Memory Management Support"
151         default y
152         help
153           Select if you want MMU-based virtualised addressing space
154           support by paged memory management. If unsure, say 'Y'.
155
156 config PAGE_OFFSET
157         hex
158         default 0xC0000000 if 32BIT
159         default 0x80000000 if 64BIT && !MMU
160         default 0xff60000000000000 if 64BIT
161
162 config KASAN_SHADOW_OFFSET
163         hex
164         depends on KASAN_GENERIC
165         default 0xdfffffff00000000 if 64BIT
166         default 0xffffffff if 32BIT
167
168 config ARCH_FLATMEM_ENABLE
169         def_bool !NUMA
170
171 config ARCH_SPARSEMEM_ENABLE
172         def_bool y
173         depends on MMU
174         select SPARSEMEM_STATIC if 32BIT && SPARSEMEM
175         select SPARSEMEM_VMEMMAP_ENABLE if 64BIT
176
177 config ARCH_SELECT_MEMORY_MODEL
178         def_bool ARCH_SPARSEMEM_ENABLE
179
180 config ARCH_SUPPORTS_UPROBES
181         def_bool y
182
183 config STACKTRACE_SUPPORT
184         def_bool y
185
186 config GENERIC_BUG
187         def_bool y
188         depends on BUG
189         select GENERIC_BUG_RELATIVE_POINTERS if 64BIT
190
191 config GENERIC_BUG_RELATIVE_POINTERS
192         bool
193
194 config GENERIC_CALIBRATE_DELAY
195         def_bool y
196
197 config GENERIC_CSUM
198         def_bool y
199
200 config GENERIC_HWEIGHT
201         def_bool y
202
203 config FIX_EARLYCON_MEM
204         def_bool MMU
205
206 config PGTABLE_LEVELS
207         int
208         default 5 if 64BIT
209         default 2
210
211 config LOCKDEP_SUPPORT
212         def_bool y
213
214 source "arch/riscv/Kconfig.socs"
215 source "arch/riscv/Kconfig.erratas"
216
217 menu "Platform type"
218
219 choice
220         prompt "Base ISA"
221         default ARCH_RV64I
222         help
223           This selects the base ISA that this kernel will target and must match
224           the target platform.
225
226 config ARCH_RV32I
227         bool "RV32I"
228         select 32BIT
229         select GENERIC_LIB_ASHLDI3
230         select GENERIC_LIB_ASHRDI3
231         select GENERIC_LIB_LSHRDI3
232         select GENERIC_LIB_UCMPDI2
233         select MMU
234
235 config ARCH_RV64I
236         bool "RV64I"
237         select 64BIT
238         select ARCH_SUPPORTS_INT128 if CC_HAS_INT128
239         select HAVE_DYNAMIC_FTRACE if !XIP_KERNEL && MMU && $(cc-option,-fpatchable-function-entry=8)
240         select HAVE_DYNAMIC_FTRACE_WITH_REGS if HAVE_DYNAMIC_FTRACE
241         select HAVE_FTRACE_MCOUNT_RECORD if !XIP_KERNEL
242         select HAVE_FUNCTION_GRAPH_TRACER
243         select HAVE_FUNCTION_TRACER if !XIP_KERNEL
244         select SWIOTLB if MMU
245
246 endchoice
247
248 # We must be able to map all physical memory into the kernel, but the compiler
249 # is still a bit more efficient when generating code if it's setup in a manner
250 # such that it can only map 2GiB of memory.
251 choice
252         prompt "Kernel Code Model"
253         default CMODEL_MEDLOW if 32BIT
254         default CMODEL_MEDANY if 64BIT
255
256         config CMODEL_MEDLOW
257                 bool "medium low code model"
258         config CMODEL_MEDANY
259                 bool "medium any code model"
260 endchoice
261
262 config MODULE_SECTIONS
263         bool
264         select HAVE_MOD_ARCH_SPECIFIC
265
266 config SMP
267         bool "Symmetric Multi-Processing"
268         help
269           This enables support for systems with more than one CPU.  If
270           you say N here, the kernel will run on single and
271           multiprocessor machines, but will use only one CPU of a
272           multiprocessor machine. If you say Y here, the kernel will run
273           on many, but not all, single processor machines. On a single
274           processor machine, the kernel will run faster if you say N
275           here.
276
277           If you don't know what to do here, say N.
278
279 config NR_CPUS
280         int "Maximum number of CPUs (2-32)"
281         range 2 32
282         depends on SMP
283         default "8"
284
285 config HOTPLUG_CPU
286         bool "Support for hot-pluggable CPUs"
287         depends on SMP
288         select GENERIC_IRQ_MIGRATION
289         help
290
291           Say Y here to experiment with turning CPUs off and on.  CPUs
292           can be controlled through /sys/devices/system/cpu.
293
294           Say N if you want to disable CPU hotplug.
295
296 choice
297         prompt "CPU Tuning"
298         default TUNE_GENERIC
299
300 config TUNE_GENERIC
301         bool "generic"
302
303 endchoice
304
305 # Common NUMA Features
306 config NUMA
307         bool "NUMA Memory Allocation and Scheduler Support"
308         depends on SMP && MMU
309         select GENERIC_ARCH_NUMA
310         select OF_NUMA
311         select ARCH_SUPPORTS_NUMA_BALANCING
312         select USE_PERCPU_NUMA_NODE_ID
313         select NEED_PER_CPU_EMBED_FIRST_CHUNK
314         help
315           Enable NUMA (Non-Uniform Memory Access) support.
316
317           The kernel will try to allocate memory used by a CPU on the
318           local memory of the CPU and add some more NUMA awareness to the kernel.
319
320 config NODES_SHIFT
321         int "Maximum NUMA Nodes (as a power of 2)"
322         range 1 10
323         default "2"
324         depends on NUMA
325         help
326           Specify the maximum number of NUMA Nodes available on the target
327           system.  Increases memory reserved to accommodate various tables.
328
329 config RISCV_ISA_C
330         bool "Emit compressed instructions when building Linux"
331         default y
332         help
333            Adds "C" to the ISA subsets that the toolchain is allowed to emit
334            when building Linux, which results in compressed instructions in the
335            Linux binary.
336
337            If you don't know what to do here, say Y.
338
339 config FPU
340         bool "FPU support"
341         default y
342         help
343           Say N here if you want to disable all floating-point related procedure
344           in the kernel.
345
346           If you don't know what to do here, say Y.
347
348 endmenu
349
350 menu "Kernel features"
351
352 source "kernel/Kconfig.hz"
353
354 config RISCV_SBI_V01
355         bool "SBI v0.1 support"
356         depends on RISCV_SBI
357         help
358           This config allows kernel to use SBI v0.1 APIs. This will be
359           deprecated in future once legacy M-mode software are no longer in use.
360
361 config RISCV_BOOT_SPINWAIT
362         bool "Spinwait booting method"
363         depends on SMP
364         default y
365         help
366           This enables support for booting Linux via spinwait method. In the
367           spinwait method, all cores randomly jump to Linux. One of the cores
368           gets chosen via lottery and all other keep spinning on a percpu
369           variable. This method cannot support CPU hotplug and sparse hartid
370           scheme. It should be only enabled for M-mode Linux or platforms relying
371           on older firmware without SBI HSM extension. All other platforms should
372           rely on ordered booting via SBI HSM extension which gets chosen
373           dynamically at runtime if the firmware supports it.
374
375 config KEXEC
376         bool "Kexec system call"
377         select KEXEC_CORE
378         select HOTPLUG_CPU if SMP
379         depends on MMU
380         help
381           kexec is a system call that implements the ability to shutdown your
382           current kernel, and to start another kernel. It is like a reboot
383           but it is independent of the system firmware. And like a reboot
384           you can start any kernel with it, not just Linux.
385
386           The name comes from the similarity to the exec system call.
387
388 config CRASH_DUMP
389         bool "Build kdump crash kernel"
390         help
391           Generate crash dump after being started by kexec. This should
392           be normally only set in special crash dump kernels which are
393           loaded in the main kernel with kexec-tools into a specially
394           reserved region and then later executed after a crash by
395           kdump/kexec.
396
397           For more details see Documentation/admin-guide/kdump/kdump.rst
398
399 endmenu
400
401 menu "Boot options"
402
403 config CMDLINE
404         string "Built-in kernel command line"
405         help
406           For most platforms, the arguments for the kernel's command line
407           are provided at run-time, during boot. However, there are cases
408           where either no arguments are being provided or the provided
409           arguments are insufficient or even invalid.
410
411           When that occurs, it is possible to define a built-in command
412           line here and choose how the kernel should use it later on.
413
414 choice
415         prompt "Built-in command line usage" if CMDLINE != ""
416         default CMDLINE_FALLBACK
417         help
418           Choose how the kernel will handle the provided built-in command
419           line.
420
421 config CMDLINE_FALLBACK
422         bool "Use bootloader kernel arguments if available"
423         help
424           Use the built-in command line as fallback in case we get nothing
425           during boot. This is the default behaviour.
426
427 config CMDLINE_EXTEND
428         bool "Extend bootloader kernel arguments"
429         help
430           The command-line arguments provided during boot will be
431           appended to the built-in command line. This is useful in
432           cases where the provided arguments are insufficient and
433           you don't want to or cannot modify them.
434
435
436 config CMDLINE_FORCE
437         bool "Always use the default kernel command string"
438         help
439           Always use the built-in command line, even if we get one during
440           boot. This is useful in case you need to override the provided
441           command line on systems where you don't have or want control
442           over it.
443
444 endchoice
445
446 config EFI_STUB
447         bool
448
449 config EFI
450         bool "UEFI runtime support"
451         depends on OF && !XIP_KERNEL
452         select LIBFDT
453         select UCS2_STRING
454         select EFI_PARAMS_FROM_FDT
455         select EFI_STUB
456         select EFI_GENERIC_STUB
457         select EFI_RUNTIME_WRAPPERS
458         select RISCV_ISA_C
459         depends on MMU
460         default y
461         help
462           This option provides support for runtime services provided
463           by UEFI firmware (such as non-volatile variables, realtime
464           clock, and platform reset). A UEFI stub is also provided to
465           allow the kernel to be booted as an EFI application. This
466           is only useful on systems that have UEFI firmware.
467
468 config CC_HAVE_STACKPROTECTOR_TLS
469         def_bool $(cc-option,-mstack-protector-guard=tls -mstack-protector-guard-reg=tp -mstack-protector-guard-offset=0)
470
471 config STACKPROTECTOR_PER_TASK
472         def_bool y
473         depends on !RANDSTRUCT
474         depends on STACKPROTECTOR && CC_HAVE_STACKPROTECTOR_TLS
475
476 config PHYS_RAM_BASE_FIXED
477         bool "Explicitly specified physical RAM address"
478         default n
479
480 config PHYS_RAM_BASE
481         hex "Platform Physical RAM address"
482         depends on PHYS_RAM_BASE_FIXED
483         default "0x80000000"
484         help
485           This is the physical address of RAM in the system. It has to be
486           explicitly specified to run early relocations of read-write data
487           from flash to RAM.
488
489 config XIP_KERNEL
490         bool "Kernel Execute-In-Place from ROM"
491         depends on MMU && SPARSEMEM
492         # This prevents XIP from being enabled by all{yes,mod}config, which
493         # fail to build since XIP doesn't support large kernels.
494         depends on !COMPILE_TEST
495         select PHYS_RAM_BASE_FIXED
496         help
497           Execute-In-Place allows the kernel to run from non-volatile storage
498           directly addressable by the CPU, such as NOR flash. This saves RAM
499           space since the text section of the kernel is not loaded from flash
500           to RAM.  Read-write sections, such as the data section and stack,
501           are still copied to RAM.  The XIP kernel is not compressed since
502           it has to run directly from flash, so it will take more space to
503           store it.  The flash address used to link the kernel object files,
504           and for storing it, is configuration dependent. Therefore, if you
505           say Y here, you must know the proper physical address where to
506           store the kernel image depending on your own flash memory usage.
507
508           Also note that the make target becomes "make xipImage" rather than
509           "make zImage" or "make Image".  The final kernel binary to put in
510           ROM memory will be arch/riscv/boot/xipImage.
511
512           SPARSEMEM is required because the kernel text and rodata that are
513           flash resident are not backed by memmap, then any attempt to get
514           a struct page on those regions will trigger a fault.
515
516           If unsure, say N.
517
518 config XIP_PHYS_ADDR
519         hex "XIP Kernel Physical Location"
520         depends on XIP_KERNEL
521         default "0x21000000"
522         help
523           This is the physical address in your flash memory the kernel will
524           be linked for and stored to.  This address is dependent on your
525           own flash usage.
526
527 endmenu
528
529 config BUILTIN_DTB
530         bool
531         depends on OF
532         default y if XIP_KERNEL
533
534 menu "Power management options"
535
536 source "kernel/power/Kconfig"
537
538 endmenu
539
540 menu "CPU Power Management"
541
542 source "drivers/cpuidle/Kconfig"
543
544 endmenu
545
546 source "arch/riscv/kvm/Kconfig"