riscv: Allow NOMMU kernels to run in S-mode
authorSamuel Holland <samuel.holland@sifive.com>
Tue, 27 Feb 2024 00:34:49 +0000 (16:34 -0800)
committerPalmer Dabbelt <palmer@rivosinc.com>
Tue, 9 Apr 2024 18:39:40 +0000 (11:39 -0700)
For ease of testing, it is convenient to run NOMMU kernels in supervisor
mode. The only required change is to offset the kernel load address,
since the beginning of RAM is usually reserved for M-mode firmware.

Signed-off-by: Samuel Holland <samuel.holland@sifive.com>
Reviewed-by: Conor Dooley <conor.dooley@microchip.com>
Link: https://lore.kernel.org/r/20240227003630.3634533-5-samuel.holland@sifive.com
Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>
arch/riscv/Kconfig

index ef53c00470d6d57b4213cda851b13f4ad4ec53f1..0dc09b2ac2f6ecfff6a75d90ae1fa6821a87e626 100644 (file)
@@ -64,7 +64,7 @@ config RISCV
        select ARCH_WANTS_THP_SWAP if HAVE_ARCH_TRANSPARENT_HUGEPAGE
        select BINFMT_FLAT_NO_DATA_START_OFFSET if !MMU
        select BUILDTIME_TABLE_SORT if MMU
-       select CLINT_TIMER if !MMU
+       select CLINT_TIMER if RISCV_M_MODE
        select CLONE_BACKWARDS
        select COMMON_CLK
        select CPU_PM if CPU_IDLE || HIBERNATION || SUSPEND
@@ -220,8 +220,12 @@ config ARCH_MMAP_RND_COMPAT_BITS_MAX
 
 # set if we run in machine mode, cleared if we run in supervisor mode
 config RISCV_M_MODE
-       bool
-       default !MMU
+       bool "Build a kernel that runs in machine mode"
+       depends on !MMU
+       default y
+       help
+         Select this option if you want to run the kernel in M-mode,
+         without the assistance of any other firmware.
 
 # set if we are running in S-mode and can use SBI calls
 config RISCV_SBI
@@ -238,8 +242,9 @@ config MMU
 
 config PAGE_OFFSET
        hex
-       default 0xC0000000 if 32BIT && MMU
-       default 0x80000000 if !MMU
+       default 0x80000000 if !MMU && RISCV_M_MODE
+       default 0x80200000 if !MMU
+       default 0xc0000000 if 32BIT
        default 0xff60000000000000 if 64BIT
 
 config KASAN_SHADOW_OFFSET