Skip to content

Commit

Permalink
RISC-V: Add CONFIG_{NON,}PORTABLE
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Palmer Dabbelt committed Jul 14, 2022
1 parent 9009f55 commit 44c1e84
Show file tree
Hide file tree
Showing 6 changed files with 32 additions and 2 deletions.
28 changes: 26 additions & 2 deletions arch/riscv/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -232,6 +247,7 @@ choice

config ARCH_RV32I
bool "RV32I"
depends on NONPORTABLE
select 32BIT
select GENERIC_LIB_ASHLDI3
select GENERIC_LIB_ASHRDI3
Expand Down Expand Up @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -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"
Expand Down
2 changes: 2 additions & 0 deletions arch/riscv/configs/32-bit.config
Original file line number Diff line number Diff line change
@@ -1,2 +1,4 @@
CONFIG_ARCH_RV32I=y
CONFIG_32BIT=y
# CONFIG_PORTABLE is not set
CONFIG_NONPORTABLE=y
1 change: 1 addition & 0 deletions arch/riscv/configs/nommu_k210_defconfig
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
1 change: 1 addition & 0 deletions arch/riscv/configs/nommu_k210_sdcard_defconfig
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
1 change: 1 addition & 0 deletions arch/riscv/configs/nommu_virt_defconfig
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
1 change: 1 addition & 0 deletions arch/riscv/configs/rv32_defconfig
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit 44c1e84

Please sign in to comment.