mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-08 09:39:40 +00:00
6bd33e1ece
The kernel runs in M-mode without using page tables, and thus can't run bare metal without help from additional firmware. Most of the patch is just stubbing out code not needed without page tables, but there is an interesting detail in the signals implementation: - The normal RISC-V syscall ABI only implements rt_sigreturn as VDSO entry point, but the ELF VDSO is not supported for nommu Linux. We instead copy the code to call the syscall onto the stack. In addition to enabling the nommu code a new defconfig for a small kernel image that can run in nommu mode on qemu is also provided, to run a kernel in qemu you can use the following command line: qemu-system-riscv64 -smp 2 -m 64 -machine virt -nographic \ -kernel arch/riscv/boot/loader \ -drive file=rootfs.ext2,format=raw,id=hd0 \ -device virtio-blk-device,drive=hd0 Contains contributions from Damien Le Moal <Damien.LeMoal@wdc.com>. Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Anup Patel <anup@brainfault.org> [paul.walmsley@sifive.com: updated to apply; add CONFIG_MMU guards around PCI_IOBASE definition to fix build issues; fixed checkpatch issues; move the PCI_IO_* and VMEMMAP address space macros along with the others; resolve sparse warning] Signed-off-by: Paul Walmsley <paul.walmsley@sifive.com>
346 lines
7.9 KiB
Text
346 lines
7.9 KiB
Text
# 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
|
|
# even on 32-bit, physical (and DMA) addresses are > 32-bits
|
|
select PHYS_ADDR_T_64BIT
|
|
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_CPU_DEVICES
|
|
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 HAVE_ARCH_AUDITSYSCALL
|
|
select HAVE_ASM_MODVERSIONS
|
|
select HAVE_MEMBLOCK_NODE_MAP
|
|
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 UACCESS_MEMCPY if !MMU
|
|
select GENERIC_IRQ_MULTI_HANDLER
|
|
select GENERIC_ARCH_TOPOLOGY if SMP
|
|
select ARCH_HAS_PTE_SPECIAL
|
|
select ARCH_HAS_MMIOWB
|
|
select HAVE_EBPF_JIT if 64BIT
|
|
select EDAC_SUPPORT
|
|
select ARCH_HAS_GIGANTIC_PAGE
|
|
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
|
|
|
|
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
|
|
select SPARSEMEM_VMEMMAP_ENABLE
|
|
|
|
config ARCH_SELECT_MEMORY_MODEL
|
|
def_bool ARCH_SPARSEMEM_ENABLE
|
|
|
|
config ARCH_WANT_GENERAL_HUGETLB
|
|
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 CONFIG_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 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"
|
|
|
|
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"
|
|
|
|
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
|
|
|
|
menu "Power management options"
|
|
|
|
source "kernel/power/Kconfig"
|
|
|
|
endmenu
|