| # SPDX-License-Identifier: GPL-2.0-only | 
 | # | 
 | # For a description of the syntax of this configuration file, | 
 | # see Documentation/kbuild/kconfig-language.rst. | 
 | # | 
 |  | 
 | config 64BIT | 
 | 	bool | 
 |  | 
 | config 32BIT | 
 | 	bool | 
 |  | 
 | config RISCV | 
 | 	def_bool y | 
 | 	select OF | 
 | 	select OF_EARLY_FLATTREE | 
 | 	select OF_IRQ | 
 | 	select ARCH_HAS_BINFMT_FLAT | 
 | 	select ARCH_WANT_FRAME_POINTERS | 
 | 	select CLONE_BACKWARDS | 
 | 	select COMMON_CLK | 
 | 	select GENERIC_CLOCKEVENTS | 
 | 	select GENERIC_IRQ_SHOW | 
 | 	select GENERIC_PCI_IOMAP | 
 | 	select GENERIC_SCHED_CLOCK | 
 | 	select GENERIC_STRNCPY_FROM_USER if MMU | 
 | 	select GENERIC_STRNLEN_USER if MMU | 
 | 	select GENERIC_SMP_IDLE_THREAD | 
 | 	select GENERIC_ATOMIC64 if !64BIT | 
 | 	select GENERIC_IOREMAP | 
 | 	select GENERIC_PTDUMP if MMU | 
 | 	select HAVE_ARCH_AUDITSYSCALL | 
 | 	select HAVE_ARCH_SECCOMP_FILTER | 
 | 	select HAVE_ASM_MODVERSIONS | 
 | 	select HAVE_DMA_CONTIGUOUS if MMU | 
 | 	select HAVE_FUTEX_CMPXCHG if FUTEX | 
 | 	select HAVE_PERF_EVENTS | 
 | 	select HAVE_PERF_REGS | 
 | 	select HAVE_PERF_USER_STACK_DUMP | 
 | 	select HAVE_SYSCALL_TRACEPOINTS | 
 | 	select IRQ_DOMAIN | 
 | 	select SPARSE_IRQ | 
 | 	select SYSCTL_EXCEPTION_TRACE | 
 | 	select HAVE_ARCH_TRACEHOOK | 
 | 	select HAVE_PCI | 
 | 	select MODULES_USE_ELF_RELA if MODULES | 
 | 	select MODULE_SECTIONS if MODULES | 
 | 	select THREAD_INFO_IN_TASK | 
 | 	select PCI_DOMAINS_GENERIC if PCI | 
 | 	select PCI_MSI if PCI | 
 | 	select RISCV_TIMER | 
 | 	select GENERIC_IRQ_MULTI_HANDLER | 
 | 	select GENERIC_ARCH_TOPOLOGY if SMP | 
 | 	select ARCH_HAS_PTE_SPECIAL | 
 | 	select ARCH_HAS_MMIOWB | 
 | 	select ARCH_HAS_DEBUG_VIRTUAL | 
 | 	select HAVE_EBPF_JIT if MMU | 
 | 	select EDAC_SUPPORT | 
 | 	select ARCH_HAS_GIGANTIC_PAGE | 
 | 	select ARCH_HAS_SET_DIRECT_MAP | 
 | 	select ARCH_HAS_SET_MEMORY | 
 | 	select ARCH_HAS_STRICT_KERNEL_RWX if MMU | 
 | 	select ARCH_WANT_HUGE_PMD_SHARE if 64BIT | 
 | 	select SPARSEMEM_STATIC if 32BIT | 
 | 	select ARCH_WANT_DEFAULT_TOPDOWN_MMAP_LAYOUT if MMU | 
 | 	select HAVE_ARCH_MMAP_RND_BITS if MMU | 
 | 	select ARCH_HAS_GCOV_PROFILE_ALL | 
 | 	select HAVE_COPY_THREAD_TLS | 
 | 	select HAVE_ARCH_KASAN if MMU && 64BIT | 
 | 	select HAVE_ARCH_KGDB | 
 | 	select HAVE_ARCH_KGDB_QXFER_PKT | 
 | 	select ARCH_HAS_DEBUG_WX | 
 |  | 
 | config ARCH_MMAP_RND_BITS_MIN | 
 | 	default 18 if 64BIT | 
 | 	default 8 | 
 |  | 
 | # max bits determined by the following formula: | 
 | #  VA_BITS - PAGE_SHIFT - 3 | 
 | config ARCH_MMAP_RND_BITS_MAX | 
 | 	default 24 if 64BIT # SV39 based | 
 | 	default 17 | 
 |  | 
 | # set if we run in machine mode, cleared if we run in supervisor mode | 
 | config RISCV_M_MODE | 
 | 	bool | 
 | 	default !MMU | 
 |  | 
 | # set if we are running in S-mode and can use SBI calls | 
 | config RISCV_SBI | 
 | 	bool | 
 | 	depends on !RISCV_M_MODE | 
 | 	default y | 
 |  | 
 | config MMU | 
 | 	bool "MMU-based Paged Memory Management Support" | 
 | 	default y | 
 | 	help | 
 | 	  Select if you want MMU-based virtualised addressing space | 
 | 	  support by paged memory management. If unsure, say 'Y'. | 
 |  | 
 | config ZONE_DMA32 | 
 | 	bool | 
 | 	default y if 64BIT | 
 |  | 
 | config VA_BITS | 
 | 	int | 
 | 	default 32 if 32BIT | 
 | 	default 39 if 64BIT | 
 |  | 
 | config PA_BITS | 
 | 	int | 
 | 	default 34 if 32BIT | 
 | 	default 56 if 64BIT | 
 |  | 
 | config PAGE_OFFSET | 
 | 	hex | 
 | 	default 0xC0000000 if 32BIT && MAXPHYSMEM_2GB | 
 | 	default 0x80000000 if 64BIT && !MMU | 
 | 	default 0xffffffff80000000 if 64BIT && MAXPHYSMEM_2GB | 
 | 	default 0xffffffe000000000 if 64BIT && MAXPHYSMEM_128GB | 
 |  | 
 | config ARCH_FLATMEM_ENABLE | 
 | 	def_bool y | 
 |  | 
 | config ARCH_SPARSEMEM_ENABLE | 
 | 	def_bool y | 
 | 	depends on MMU | 
 | 	select SPARSEMEM_VMEMMAP_ENABLE | 
 |  | 
 | config ARCH_SELECT_MEMORY_MODEL | 
 | 	def_bool ARCH_SPARSEMEM_ENABLE | 
 |  | 
 | config ARCH_WANT_GENERAL_HUGETLB | 
 | 	def_bool y | 
 |  | 
 | config ARCH_SUPPORTS_DEBUG_PAGEALLOC | 
 | 	def_bool y | 
 |  | 
 | config SYS_SUPPORTS_HUGETLBFS | 
 | 	def_bool y | 
 |  | 
 | config STACKTRACE_SUPPORT | 
 | 	def_bool y | 
 |  | 
 | config TRACE_IRQFLAGS_SUPPORT | 
 | 	def_bool y | 
 |  | 
 | config GENERIC_BUG | 
 | 	def_bool y | 
 | 	depends on BUG | 
 | 	select GENERIC_BUG_RELATIVE_POINTERS if 64BIT | 
 |  | 
 | config GENERIC_BUG_RELATIVE_POINTERS | 
 | 	bool | 
 |  | 
 | config GENERIC_CALIBRATE_DELAY | 
 | 	def_bool y | 
 |  | 
 | config GENERIC_CSUM | 
 | 	def_bool y | 
 |  | 
 | config GENERIC_HWEIGHT | 
 | 	def_bool y | 
 |  | 
 | config FIX_EARLYCON_MEM | 
 | 	def_bool MMU | 
 |  | 
 | config PGTABLE_LEVELS | 
 | 	int | 
 | 	default 3 if 64BIT | 
 | 	default 2 | 
 |  | 
 | source "arch/riscv/Kconfig.socs" | 
 |  | 
 | menu "Platform type" | 
 |  | 
 | choice | 
 | 	prompt "Base ISA" | 
 | 	default ARCH_RV64I | 
 | 	help | 
 | 	  This selects the base ISA that this kernel will target and must match | 
 | 	  the target platform. | 
 |  | 
 | config ARCH_RV32I | 
 | 	bool "RV32I" | 
 | 	select 32BIT | 
 | 	select GENERIC_LIB_ASHLDI3 | 
 | 	select GENERIC_LIB_ASHRDI3 | 
 | 	select GENERIC_LIB_LSHRDI3 | 
 | 	select GENERIC_LIB_UCMPDI2 | 
 | 	select MMU | 
 |  | 
 | config ARCH_RV64I | 
 | 	bool "RV64I" | 
 | 	select 64BIT | 
 | 	select ARCH_SUPPORTS_INT128 if CC_HAS_INT128 && GCC_VERSION >= 50000 | 
 | 	select HAVE_FUNCTION_TRACER | 
 | 	select HAVE_FUNCTION_GRAPH_TRACER | 
 | 	select HAVE_FTRACE_MCOUNT_RECORD | 
 | 	select HAVE_DYNAMIC_FTRACE if MMU | 
 | 	select HAVE_DYNAMIC_FTRACE_WITH_REGS if HAVE_DYNAMIC_FTRACE | 
 | 	select SWIOTLB if MMU | 
 |  | 
 | endchoice | 
 |  | 
 | # We must be able to map all physical memory into the kernel, but the compiler | 
 | # is still a bit more efficient when generating code if it's setup in a manner | 
 | # such that it can only map 2GiB of memory. | 
 | choice | 
 | 	prompt "Kernel Code Model" | 
 | 	default CMODEL_MEDLOW if 32BIT | 
 | 	default CMODEL_MEDANY if 64BIT | 
 |  | 
 | 	config CMODEL_MEDLOW | 
 | 		bool "medium low code model" | 
 | 	config CMODEL_MEDANY | 
 | 		bool "medium any code model" | 
 | endchoice | 
 |  | 
 | config MODULE_SECTIONS | 
 | 	bool | 
 | 	select HAVE_MOD_ARCH_SPECIFIC | 
 |  | 
 | choice | 
 | 	prompt "Maximum Physical Memory" | 
 | 	default MAXPHYSMEM_2GB if 32BIT | 
 | 	default MAXPHYSMEM_2GB if 64BIT && CMODEL_MEDLOW | 
 | 	default MAXPHYSMEM_128GB if 64BIT && CMODEL_MEDANY | 
 |  | 
 | 	config MAXPHYSMEM_2GB | 
 | 		bool "2GiB" | 
 | 	config MAXPHYSMEM_128GB | 
 | 		depends on 64BIT && CMODEL_MEDANY | 
 | 		bool "128GiB" | 
 | endchoice | 
 |  | 
 |  | 
 | config SMP | 
 | 	bool "Symmetric Multi-Processing" | 
 | 	help | 
 | 	  This enables support for systems with more than one CPU.  If | 
 | 	  you say N here, the kernel will run on single and | 
 | 	  multiprocessor machines, but will use only one CPU of a | 
 | 	  multiprocessor machine. If you say Y here, the kernel will run | 
 | 	  on many, but not all, single processor machines. On a single | 
 | 	  processor machine, the kernel will run faster if you say N | 
 | 	  here. | 
 |  | 
 | 	  If you don't know what to do here, say N. | 
 |  | 
 | config NR_CPUS | 
 | 	int "Maximum number of CPUs (2-32)" | 
 | 	range 2 32 | 
 | 	depends on SMP | 
 | 	default "8" | 
 |  | 
 | config HOTPLUG_CPU | 
 | 	bool "Support for hot-pluggable CPUs" | 
 | 	depends on SMP | 
 | 	select GENERIC_IRQ_MIGRATION | 
 | 	help | 
 |  | 
 | 	  Say Y here to experiment with turning CPUs off and on.  CPUs | 
 | 	  can be controlled through /sys/devices/system/cpu. | 
 |  | 
 | 	  Say N if you want to disable CPU hotplug. | 
 |  | 
 | choice | 
 | 	prompt "CPU Tuning" | 
 | 	default TUNE_GENERIC | 
 |  | 
 | config TUNE_GENERIC | 
 | 	bool "generic" | 
 |  | 
 | endchoice | 
 |  | 
 | config RISCV_ISA_C | 
 | 	bool "Emit compressed instructions when building Linux" | 
 | 	default y | 
 | 	help | 
 | 	   Adds "C" to the ISA subsets that the toolchain is allowed to emit | 
 | 	   when building Linux, which results in compressed instructions in the | 
 | 	   Linux binary. | 
 |  | 
 | 	   If you don't know what to do here, say Y. | 
 |  | 
 | menu "supported PMU type" | 
 | 	depends on PERF_EVENTS | 
 |  | 
 | config RISCV_BASE_PMU | 
 | 	bool "Base Performance Monitoring Unit" | 
 | 	def_bool y | 
 | 	help | 
 | 	  A base PMU that serves as a reference implementation and has limited | 
 | 	  feature of perf.  It can run on any RISC-V machines so serves as the | 
 | 	  fallback, but this option can also be disable to reduce kernel size. | 
 |  | 
 | endmenu | 
 |  | 
 | config FPU | 
 | 	bool "FPU support" | 
 | 	default y | 
 | 	help | 
 | 	  Say N here if you want to disable all floating-point related procedure | 
 | 	  in the kernel. | 
 |  | 
 | 	  If you don't know what to do here, say Y. | 
 |  | 
 | endmenu | 
 |  | 
 | menu "Kernel features" | 
 |  | 
 | source "kernel/Kconfig.hz" | 
 |  | 
 | config SECCOMP | 
 | 	bool "Enable seccomp to safely compute untrusted bytecode" | 
 | 	help | 
 | 	  This kernel feature is useful for number crunching applications | 
 | 	  that may need to compute untrusted bytecode during their | 
 | 	  execution. By using pipes or other transports made available to | 
 | 	  the process as file descriptors supporting the read/write | 
 | 	  syscalls, it's possible to isolate those applications in | 
 | 	  their own address space using seccomp. Once seccomp is | 
 | 	  enabled via prctl(PR_SET_SECCOMP), it cannot be disabled | 
 | 	  and the task is only allowed to execute a few safe syscalls | 
 | 	  defined by each seccomp mode. | 
 |  | 
 | config RISCV_SBI_V01 | 
 | 	bool "SBI v0.1 support" | 
 | 	default y | 
 | 	depends on RISCV_SBI | 
 | 	help | 
 | 	  This config allows kernel to use SBI v0.1 APIs. This will be | 
 | 	  deprecated in future once legacy M-mode software are no longer in use. | 
 | endmenu | 
 |  | 
 | menu "Boot options" | 
 |  | 
 | config CMDLINE | 
 | 	string "Built-in kernel command line" | 
 | 	help | 
 | 	  For most platforms, the arguments for the kernel's command line | 
 | 	  are provided at run-time, during boot. However, there are cases | 
 | 	  where either no arguments are being provided or the provided | 
 | 	  arguments are insufficient or even invalid. | 
 |  | 
 | 	  When that occurs, it is possible to define a built-in command | 
 | 	  line here and choose how the kernel should use it later on. | 
 |  | 
 | choice | 
 | 	prompt "Built-in command line usage" if CMDLINE != "" | 
 | 	default CMDLINE_FALLBACK | 
 | 	help | 
 | 	  Choose how the kernel will handle the provided built-in command | 
 | 	  line. | 
 |  | 
 | config CMDLINE_FALLBACK | 
 | 	bool "Use bootloader kernel arguments if available" | 
 | 	help | 
 | 	  Use the built-in command line as fallback in case we get nothing | 
 | 	  during boot. This is the default behaviour. | 
 |  | 
 | config CMDLINE_EXTEND | 
 | 	bool "Extend bootloader kernel arguments" | 
 | 	help | 
 | 	  The command-line arguments provided during boot will be | 
 | 	  appended to the built-in command line. This is useful in | 
 | 	  cases where the provided arguments are insufficient and | 
 | 	  you don't want to or cannot modify them. | 
 |  | 
 |  | 
 | config CMDLINE_FORCE | 
 | 	bool "Always use the default kernel command string" | 
 | 	help | 
 | 	  Always use the built-in command line, even if we get one during | 
 | 	  boot. This is useful in case you need to override the provided | 
 | 	  command line on systems where you don't have or want control | 
 | 	  over it. | 
 |  | 
 | endchoice | 
 |  | 
 | endmenu | 
 |  | 
 | config BUILTIN_DTB | 
 | 	def_bool n | 
 | 	depends on RISCV_M_MODE | 
 | 	depends on OF | 
 |  | 
 | menu "Power management options" | 
 |  | 
 | source "kernel/power/Kconfig" | 
 |  | 
 | endmenu |