[PATCH v1 3/3] booti/bootm: riscv: Verify image arch type

Heinrich Schuchardt xypron.glpk at gmx.de
Tue Mar 11 14:59:06 CET 2025


On 11.03.25 14:35, Mayuresh Chitale wrote:
> Unlike ARM and X86, booting 32-bit images on 64-bit CPUs is currently
> not supported for Risc-V. Hence, for bootm, disallow booting a FIT
> or a legacy image that was built for an arch type which is different
> than the current arch and for booti, set the arch type to be the
> same as the current arch.
>
> Signed-off-by: Mayuresh Chitale <mchitale at ventanamicro.com>
> ---
>   arch/riscv/lib/bootm.c | 4 ++++
>   cmd/booti.c            | 5 ++++-
>   2 files changed, 8 insertions(+), 1 deletion(-)
>
> diff --git a/arch/riscv/lib/bootm.c b/arch/riscv/lib/bootm.c
> index 76c610bcee0..90f71bee6a5 100644
> --- a/arch/riscv/lib/bootm.c
> +++ b/arch/riscv/lib/bootm.c
> @@ -94,6 +94,10 @@ static void boot_jump_linux(struct bootm_headers *images, int flag)
>   	announce_and_cleanup(fake);
>
>   	if (!fake) {
> +		if (images->os.arch != IH_ARCH_DEFAULT) {
> +			printf("Image arch not compatible with host arch.\n");
> +			hang();
> +		}
>   		if (CONFIG_IS_ENABLED(OF_LIBFDT) && images->ft_len) {
>   #ifdef CONFIG_SMP
>   			ret = smp_call_function(images->ep,
> diff --git a/cmd/booti.c b/cmd/booti.c
> index 1a57fe91397..00921ec4a9d 100644
> --- a/cmd/booti.c
> +++ b/cmd/booti.c
> @@ -131,7 +131,10 @@ int do_booti(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
>
>   	images.os.os = IH_OS_LINUX;
>   	if (IS_ENABLED(CONFIG_RISCV_SMODE))

Why do we check for S-mode here? Wouldn't checking CONFIG_RISCV be more
adequate? Think of a micro-controller with only M and U mode.

sipeed_maix_bitm_defconfig has CONFIG_RISCV_MMODE=y, CONFIG_CMD_BOOTI=y.

Cf. 3cedc97479ff ("RISCV: image: Add booti support")

Otherwise looks good.

Reviewed-by: Heinrich Schuchardt <xypron.glpk at gmx.de>

> -		images.os.arch = IH_ARCH_RISCV;
> +		if (IS_ENABLED(CONFIG_64BIT))
> +			images.os.arch = IH_ARCH_RISCV64;
> +		else
> +			images.os.arch = IH_ARCH_RISCV;
>   	else if (IS_ENABLED(CONFIG_ARM64))
>   		images.os.arch = IH_ARCH_ARM64;
>



More information about the U-Boot mailing list