lkml.org 
[lkml]   [2022]   [May]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    Date
    SubjectRe: [PATCH v3] RISC-V: Add CONFIG_{NON,}PORTABLE
    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
    >


    --
    Best Regards
    Guo Ren

    ML: https://lore.kernel.org/linux-csky/

    \
     
     \ /
      Last update: 2022-05-22 14:28    [W:2.365 / U:0.140 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site