Message ID | 20220521193356.26562-1-palmer@rivosinc.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [v3] RISC-V: Add CONFIG_{NON,}PORTABLE | expand |
On Sat, May 21, 2022 at 1:47 PM Palmer Dabbelt <palmer@rivosinc.com> wrote: > > From: Palmer Dabbelt <palmer@rivosinc.com> > > 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> > --- > Changes since v2: > > * Update the nommu and rv32 defconfigs. I'm still getting some ugliness > like > > $ make.riscv rv32_defconfig > *** Default configuration is based on 'defconfig' > # > # configuration written to .config > # > Using .config as base > Merging ./arch/riscv/configs/32-bit.config > Value of CONFIG_PORTABLE is redefined by fragment ./arch/riscv/configs/32-bit.config: > Previous value: CONFIG_PORTABLE=y > New value: # CONFIG_PORTABLE is not set > > Value of CONFIG_NONPORTABLE is redefined by fragment ./arch/riscv/configs/32-bit.config: > Previous value: # CONFIG_NONPORTABLE is not set > New value: CONFIG_NONPORTABLE=y > > # > # merged configuration written to .config (needs make) > # > .config:3831:warning: override: ARCH_RV32I changes choice state > # > # configuration written to .config > # > > not sure if there's a better way to do this. > > Changes since v1: > > * Fix a bunch of spelling mistakes. > * Move NONPORTABLE under the "Platform type" sub-heading. > * Fix the rv32i dependency. > > --- > arch/riscv/Kconfig | 28 +++++++++++++++++-- > arch/riscv/configs/32-bit.config | 2 ++ > arch/riscv/configs/nommu_k210_defconfig | 1 + > .../riscv/configs/nommu_k210_sdcard_defconfig | 1 + > arch/riscv/configs/nommu_virt_defconfig | 1 + > arch/riscv/configs/rv32_defconfig | 1 + > 6 files changed, 32 insertions(+), 2 deletions(-) > > diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig > index f863065b478c..cd67b09a80f5 100644 > --- a/arch/riscv/Kconfig > +++ b/arch/riscv/Kconfig > @@ -222,6 +222,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 > @@ -231,6 +246,7 @@ choice > > config ARCH_RV32I > bool "RV32I" > + depends on NONPORTABLE > select 32BIT > select GENERIC_LIB_ASHLDI3 > select GENERIC_LIB_ASHRDI3 > @@ -541,6 +557,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 > @@ -554,7 +571,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 > @@ -594,9 +611,16 @@ endmenu > > 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" > diff --git a/arch/riscv/configs/32-bit.config b/arch/riscv/configs/32-bit.config > index 43f41323b67e..f6af0f708df4 100644 > --- a/arch/riscv/configs/32-bit.config > +++ b/arch/riscv/configs/32-bit.config > @@ -1,2 +1,4 @@ > CONFIG_ARCH_RV32I=y > CONFIG_32BIT=y > +# CONFIG_PORTABLE is not set > +CONFIG_NONPORTABLE=y > diff --git a/arch/riscv/configs/nommu_k210_defconfig b/arch/riscv/configs/nommu_k210_defconfig > index 2438fa39f8ae..96fe8def644c 100644 > --- a/arch/riscv/configs/nommu_k210_defconfig > +++ b/arch/riscv/configs/nommu_k210_defconfig > @@ -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" > diff --git a/arch/riscv/configs/nommu_k210_sdcard_defconfig b/arch/riscv/configs/nommu_k210_sdcard_defconfig > index 9a133e63ae5b..379740654373 100644 > --- a/arch/riscv/configs/nommu_k210_sdcard_defconfig > +++ b/arch/riscv/configs/nommu_k210_sdcard_defconfig > @@ -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" > diff --git a/arch/riscv/configs/nommu_virt_defconfig b/arch/riscv/configs/nommu_virt_defconfig > index 5269fbb6b4fc..1a56eda5ce46 100644 > --- a/arch/riscv/configs/nommu_virt_defconfig > +++ b/arch/riscv/configs/nommu_virt_defconfig > @@ -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 > diff --git a/arch/riscv/configs/rv32_defconfig b/arch/riscv/configs/rv32_defconfig > index 7e5efdc3829d..77bdb1d05a88 100644 > --- a/arch/riscv/configs/rv32_defconfig > +++ b/arch/riscv/configs/rv32_defconfig > @@ -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 > -- > 2.34.1 > > > _______________________________________________ > linux-riscv mailing list > linux-riscv@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/linux-riscv Reviewed-by: Atish Patra <atishp@rivosinc.com>
On 5/22/22 04:33, Palmer Dabbelt wrote: > From: Palmer Dabbelt <palmer@rivosinc.com> > > 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: Damien Le Moal <damien.lemoal@opensource.wdc.com>
Reviewed-by: Guo Ren <guoren@kernel.org> On Sun, May 22, 2022 at 4:46 AM Palmer Dabbelt <palmer@rivosinc.com> wrote: > > From: Palmer Dabbelt <palmer@rivosinc.com> > > 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> > --- > Changes since v2: > > * Update the nommu and rv32 defconfigs. I'm still getting some ugliness > like > > $ make.riscv rv32_defconfig > *** Default configuration is based on 'defconfig' > # > # configuration written to .config > # > Using .config as base > Merging ./arch/riscv/configs/32-bit.config > Value of CONFIG_PORTABLE is redefined by fragment ./arch/riscv/configs/32-bit.config: > Previous value: CONFIG_PORTABLE=y > New value: # CONFIG_PORTABLE is not set > > Value of CONFIG_NONPORTABLE is redefined by fragment ./arch/riscv/configs/32-bit.config: > Previous value: # CONFIG_NONPORTABLE is not set > New value: CONFIG_NONPORTABLE=y > > # > # merged configuration written to .config (needs make) > # > .config:3831:warning: override: ARCH_RV32I changes choice state > # > # configuration written to .config > # > > not sure if there's a better way to do this. > > Changes since v1: > > * Fix a bunch of spelling mistakes. > * Move NONPORTABLE under the "Platform type" sub-heading. > * Fix the rv32i dependency. > > --- > arch/riscv/Kconfig | 28 +++++++++++++++++-- > arch/riscv/configs/32-bit.config | 2 ++ > arch/riscv/configs/nommu_k210_defconfig | 1 + > .../riscv/configs/nommu_k210_sdcard_defconfig | 1 + > arch/riscv/configs/nommu_virt_defconfig | 1 + > arch/riscv/configs/rv32_defconfig | 1 + > 6 files changed, 32 insertions(+), 2 deletions(-) > > diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig > index f863065b478c..cd67b09a80f5 100644 > --- a/arch/riscv/Kconfig > +++ b/arch/riscv/Kconfig > @@ -222,6 +222,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 > @@ -231,6 +246,7 @@ choice > > config ARCH_RV32I > bool "RV32I" > + depends on NONPORTABLE > select 32BIT > select GENERIC_LIB_ASHLDI3 > select GENERIC_LIB_ASHRDI3 > @@ -541,6 +557,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 > @@ -554,7 +571,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 > @@ -594,9 +611,16 @@ endmenu > > 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" > diff --git a/arch/riscv/configs/32-bit.config b/arch/riscv/configs/32-bit.config > index 43f41323b67e..f6af0f708df4 100644 > --- a/arch/riscv/configs/32-bit.config > +++ b/arch/riscv/configs/32-bit.config > @@ -1,2 +1,4 @@ > CONFIG_ARCH_RV32I=y > CONFIG_32BIT=y > +# CONFIG_PORTABLE is not set > +CONFIG_NONPORTABLE=y > diff --git a/arch/riscv/configs/nommu_k210_defconfig b/arch/riscv/configs/nommu_k210_defconfig > index 2438fa39f8ae..96fe8def644c 100644 > --- a/arch/riscv/configs/nommu_k210_defconfig > +++ b/arch/riscv/configs/nommu_k210_defconfig > @@ -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" > diff --git a/arch/riscv/configs/nommu_k210_sdcard_defconfig b/arch/riscv/configs/nommu_k210_sdcard_defconfig > index 9a133e63ae5b..379740654373 100644 > --- a/arch/riscv/configs/nommu_k210_sdcard_defconfig > +++ b/arch/riscv/configs/nommu_k210_sdcard_defconfig > @@ -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" > diff --git a/arch/riscv/configs/nommu_virt_defconfig b/arch/riscv/configs/nommu_virt_defconfig > index 5269fbb6b4fc..1a56eda5ce46 100644 > --- a/arch/riscv/configs/nommu_virt_defconfig > +++ b/arch/riscv/configs/nommu_virt_defconfig > @@ -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 > diff --git a/arch/riscv/configs/rv32_defconfig b/arch/riscv/configs/rv32_defconfig > index 7e5efdc3829d..77bdb1d05a88 100644 > --- a/arch/riscv/configs/rv32_defconfig > +++ b/arch/riscv/configs/rv32_defconfig > @@ -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 > -- > 2.34.1 >
On Sat, 21 May 2022 12:33:57 PDT (-0700), Palmer Dabbelt wrote: > From: Palmer Dabbelt <palmer@rivosinc.com> > > 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> > --- > Changes since v2: > > * Update the nommu and rv32 defconfigs. I'm still getting some ugliness > like > > $ make.riscv rv32_defconfig > *** Default configuration is based on 'defconfig' > # > # configuration written to .config > # > Using .config as base > Merging ./arch/riscv/configs/32-bit.config > Value of CONFIG_PORTABLE is redefined by fragment ./arch/riscv/configs/32-bit.config: > Previous value: CONFIG_PORTABLE=y > New value: # CONFIG_PORTABLE is not set > > Value of CONFIG_NONPORTABLE is redefined by fragment ./arch/riscv/configs/32-bit.config: > Previous value: # CONFIG_NONPORTABLE is not set > New value: CONFIG_NONPORTABLE=y > > # > # merged configuration written to .config (needs make) > # > .config:3831:warning: override: ARCH_RV32I changes choice state > # > # configuration written to .config > # > > not sure if there's a better way to do this. > > Changes since v1: > > * Fix a bunch of spelling mistakes. > * Move NONPORTABLE under the "Platform type" sub-heading. > * Fix the rv32i dependency. > > --- > arch/riscv/Kconfig | 28 +++++++++++++++++-- > arch/riscv/configs/32-bit.config | 2 ++ > arch/riscv/configs/nommu_k210_defconfig | 1 + > .../riscv/configs/nommu_k210_sdcard_defconfig | 1 + > arch/riscv/configs/nommu_virt_defconfig | 1 + > arch/riscv/configs/rv32_defconfig | 1 + > 6 files changed, 32 insertions(+), 2 deletions(-) > > diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig > index f863065b478c..cd67b09a80f5 100644 > --- a/arch/riscv/Kconfig > +++ b/arch/riscv/Kconfig > @@ -222,6 +222,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 > @@ -231,6 +246,7 @@ choice > > config ARCH_RV32I > bool "RV32I" > + depends on NONPORTABLE > select 32BIT > select GENERIC_LIB_ASHLDI3 > select GENERIC_LIB_ASHRDI3 > @@ -541,6 +557,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 > @@ -554,7 +571,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 > @@ -594,9 +611,16 @@ endmenu > > 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" > diff --git a/arch/riscv/configs/32-bit.config b/arch/riscv/configs/32-bit.config > index 43f41323b67e..f6af0f708df4 100644 > --- a/arch/riscv/configs/32-bit.config > +++ b/arch/riscv/configs/32-bit.config > @@ -1,2 +1,4 @@ > CONFIG_ARCH_RV32I=y > CONFIG_32BIT=y > +# CONFIG_PORTABLE is not set > +CONFIG_NONPORTABLE=y > diff --git a/arch/riscv/configs/nommu_k210_defconfig b/arch/riscv/configs/nommu_k210_defconfig > index 2438fa39f8ae..96fe8def644c 100644 > --- a/arch/riscv/configs/nommu_k210_defconfig > +++ b/arch/riscv/configs/nommu_k210_defconfig > @@ -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" > diff --git a/arch/riscv/configs/nommu_k210_sdcard_defconfig b/arch/riscv/configs/nommu_k210_sdcard_defconfig > index 9a133e63ae5b..379740654373 100644 > --- a/arch/riscv/configs/nommu_k210_sdcard_defconfig > +++ b/arch/riscv/configs/nommu_k210_sdcard_defconfig > @@ -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" > diff --git a/arch/riscv/configs/nommu_virt_defconfig b/arch/riscv/configs/nommu_virt_defconfig > index 5269fbb6b4fc..1a56eda5ce46 100644 > --- a/arch/riscv/configs/nommu_virt_defconfig > +++ b/arch/riscv/configs/nommu_virt_defconfig > @@ -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 > diff --git a/arch/riscv/configs/rv32_defconfig b/arch/riscv/configs/rv32_defconfig > index 7e5efdc3829d..77bdb1d05a88 100644 > --- a/arch/riscv/configs/rv32_defconfig > +++ b/arch/riscv/configs/rv32_defconfig > @@ -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 This is on for-next.
Hi Palmer, On Sat, May 21, 2022 at 10:49 PM Palmer Dabbelt <palmer@rivosinc.com> wrote: > From: Palmer Dabbelt <palmer@rivosinc.com> > > 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> Thanks for your patch, which is now commit 44c1e84a38a03175 ("RISC-V: Add CONFIG_{NON,}PORTABLE") in riscv/for-next > --- a/arch/riscv/Kconfig > +++ b/arch/riscv/Kconfig > @@ -222,6 +222,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. Doing it this way means allmodconfig will enable NONPORTABLE, which may not be what we want? > + > choice > prompt "Base ISA" > default ARCH_RV64I > @@ -554,7 +571,7 @@ config PHYS_RAM_BASE > > config XIP_KERNEL > bool "Kernel Execute-In-Place from ROM" > - depends on MMU && SPARSEMEM > + depends on MMU && SPARSEMEM && NONPORTABLE Nice! Would we get something like this on arm32 past rmk? > # 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 > @@ -594,9 +611,16 @@ endmenu > > 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" > Gr{oetje,eeting}s, Geert -- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds
diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig index f863065b478c..cd67b09a80f5 100644 --- a/arch/riscv/Kconfig +++ b/arch/riscv/Kconfig @@ -222,6 +222,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 @@ -231,6 +246,7 @@ choice config ARCH_RV32I bool "RV32I" + depends on NONPORTABLE select 32BIT select GENERIC_LIB_ASHLDI3 select GENERIC_LIB_ASHRDI3 @@ -541,6 +557,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 @@ -554,7 +571,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 @@ -594,9 +611,16 @@ endmenu 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" diff --git a/arch/riscv/configs/32-bit.config b/arch/riscv/configs/32-bit.config index 43f41323b67e..f6af0f708df4 100644 --- a/arch/riscv/configs/32-bit.config +++ b/arch/riscv/configs/32-bit.config @@ -1,2 +1,4 @@ CONFIG_ARCH_RV32I=y CONFIG_32BIT=y +# CONFIG_PORTABLE is not set +CONFIG_NONPORTABLE=y diff --git a/arch/riscv/configs/nommu_k210_defconfig b/arch/riscv/configs/nommu_k210_defconfig index 2438fa39f8ae..96fe8def644c 100644 --- a/arch/riscv/configs/nommu_k210_defconfig +++ b/arch/riscv/configs/nommu_k210_defconfig @@ -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" diff --git a/arch/riscv/configs/nommu_k210_sdcard_defconfig b/arch/riscv/configs/nommu_k210_sdcard_defconfig index 9a133e63ae5b..379740654373 100644 --- a/arch/riscv/configs/nommu_k210_sdcard_defconfig +++ b/arch/riscv/configs/nommu_k210_sdcard_defconfig @@ -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" diff --git a/arch/riscv/configs/nommu_virt_defconfig b/arch/riscv/configs/nommu_virt_defconfig index 5269fbb6b4fc..1a56eda5ce46 100644 --- a/arch/riscv/configs/nommu_virt_defconfig +++ b/arch/riscv/configs/nommu_virt_defconfig @@ -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 diff --git a/arch/riscv/configs/rv32_defconfig b/arch/riscv/configs/rv32_defconfig index 7e5efdc3829d..77bdb1d05a88 100644 --- a/arch/riscv/configs/rv32_defconfig +++ b/arch/riscv/configs/rv32_defconfig @@ -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