RISC-V: Add CONFIG_{NON,}PORTABLE
The RISC-V port has collected a handful of options that are fundamentally non-portable. To prevent users from shooting themselves in the foot, hide them all behind a config entry that explicitly calls out that non-portable binaries may be produced. Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com> Reviewed-by: Arnd Bergmann <arnd@arndb.de> Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com> Reviewed-by: Atish Patra <atishp@rivosinc.com> Reviewed-by: Damien Le Moal <damien.lemoal@opensource.wdc.com> Reviewed-by: Guo Ren <guoren@kernel.org> Link: https://lore.kernel.org/r/20220521193356.26562-1-palmer@rivosinc.com Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>
This commit is contained in:
parent
9009f55bc4
commit
44c1e84a38
|
@ -223,6 +223,21 @@ source "arch/riscv/Kconfig.erratas"
|
|||
|
||||
menu "Platform type"
|
||||
|
||||
config NONPORTABLE
|
||||
bool "Allow configurations that result in non-portable kernels"
|
||||
help
|
||||
RISC-V kernel binaries are compatible between all known systems
|
||||
whenever possible, but there are some use cases that can only be
|
||||
satisfied by configurations that result in kernel binaries that are
|
||||
not portable between systems.
|
||||
|
||||
Selecting N does not guarantee kernels will be portable to all known
|
||||
systems. Selecting any of the options guarded by NONPORTABLE will
|
||||
result in kernel binaries that are unlikely to be portable between
|
||||
systems.
|
||||
|
||||
If unsure, say N.
|
||||
|
||||
choice
|
||||
prompt "Base ISA"
|
||||
default ARCH_RV64I
|
||||
|
@ -232,6 +247,7 @@ choice
|
|||
|
||||
config ARCH_RV32I
|
||||
bool "RV32I"
|
||||
depends on NONPORTABLE
|
||||
select 32BIT
|
||||
select GENERIC_LIB_ASHLDI3
|
||||
select GENERIC_LIB_ASHRDI3
|
||||
|
@ -552,6 +568,7 @@ config STACKPROTECTOR_PER_TASK
|
|||
|
||||
config PHYS_RAM_BASE_FIXED
|
||||
bool "Explicitly specified physical RAM address"
|
||||
depends on NONPORTABLE
|
||||
default n
|
||||
|
||||
config PHYS_RAM_BASE
|
||||
|
@ -565,7 +582,7 @@ config PHYS_RAM_BASE
|
|||
|
||||
config XIP_KERNEL
|
||||
bool "Kernel Execute-In-Place from ROM"
|
||||
depends on MMU && SPARSEMEM
|
||||
depends on MMU && SPARSEMEM && NONPORTABLE
|
||||
# This prevents XIP from being enabled by all{yes,mod}config, which
|
||||
# fail to build since XIP doesn't support large kernels.
|
||||
depends on !COMPILE_TEST
|
||||
|
@ -605,9 +622,16 @@ endmenu # "Boot options"
|
|||
|
||||
config BUILTIN_DTB
|
||||
bool
|
||||
depends on OF
|
||||
depends on OF && NONPORTABLE
|
||||
default y if XIP_KERNEL
|
||||
|
||||
config PORTABLE
|
||||
bool
|
||||
default !NONPORTABLE
|
||||
select EFI
|
||||
select OF
|
||||
select MMU
|
||||
|
||||
menu "Power management options"
|
||||
|
||||
source "kernel/power/Kconfig"
|
||||
|
|
|
@ -1,2 +1,4 @@
|
|||
CONFIG_ARCH_RV32I=y
|
||||
CONFIG_32BIT=y
|
||||
# CONFIG_PORTABLE is not set
|
||||
CONFIG_NONPORTABLE=y
|
||||
|
|
|
@ -28,6 +28,7 @@ CONFIG_EMBEDDED=y
|
|||
CONFIG_SLOB=y
|
||||
# CONFIG_MMU is not set
|
||||
CONFIG_SOC_CANAAN=y
|
||||
CONFIG_NONPORTABLE=y
|
||||
CONFIG_SMP=y
|
||||
CONFIG_NR_CPUS=2
|
||||
CONFIG_CMDLINE="earlycon console=ttySIF0"
|
||||
|
|
|
@ -20,6 +20,7 @@ CONFIG_EMBEDDED=y
|
|||
CONFIG_SLOB=y
|
||||
# CONFIG_MMU is not set
|
||||
CONFIG_SOC_CANAAN=y
|
||||
CONFIG_NONPORTABLE=y
|
||||
CONFIG_SMP=y
|
||||
CONFIG_NR_CPUS=2
|
||||
CONFIG_CMDLINE="earlycon console=ttySIF0 root=/dev/mmcblk0p1 rootwait ro"
|
||||
|
|
|
@ -25,6 +25,7 @@ CONFIG_EXPERT=y
|
|||
CONFIG_SLOB=y
|
||||
# CONFIG_MMU is not set
|
||||
CONFIG_SOC_VIRT=y
|
||||
CONFIG_NONPORTABLE=y
|
||||
CONFIG_SMP=y
|
||||
CONFIG_CMDLINE="root=/dev/vda rw earlycon=uart8250,mmio,0x10000000,115200n8 console=ttyS0"
|
||||
CONFIG_CMDLINE_FORCE=y
|
||||
|
|
|
@ -18,6 +18,7 @@ CONFIG_EXPERT=y
|
|||
CONFIG_PROFILING=y
|
||||
CONFIG_SOC_SIFIVE=y
|
||||
CONFIG_SOC_VIRT=y
|
||||
CONFIG_NONPORTABLE=y
|
||||
CONFIG_ARCH_RV32I=y
|
||||
CONFIG_SMP=y
|
||||
CONFIG_HOTPLUG_CPU=y
|
||||
|
|
Loading…
Reference in New Issue