* [RFC PATCH 1/3] riscv: image: Add new image type for RV64
2025-02-21 12:58 [RFC PATCH 0/3] Risc-V 32 bit/64 bit images Mayuresh Chitale
@ 2025-02-21 12:58 ` Mayuresh Chitale
2025-02-21 12:58 ` [RFC PATCH 2/3] riscv: Select appropriate image type Mayuresh Chitale
2025-02-21 12:58 ` [RFC PATCH 3/3] riscv: booti/bootm: Verify image arch type Mayuresh Chitale
2 siblings, 0 replies; 6+ messages in thread
From: Mayuresh Chitale @ 2025-02-21 12:58 UTC (permalink / raw)
To: u-boot
Cc: Mayuresh Chitale, Tom Rini, Maxim Moskalets, Ilias Apalodimas,
Mattijs Korpershoek, Raymond Mao, Simon Glass, Julien Masson,
Paul HENRYS, Sughosh Ganu
Similar to ARM and X86, introduce a new image type which allows u-boot
to distinguish between images built for 32-bit vs 64-bit Risc-V CPUs.
Signed-off-by: Mayuresh Chitale <mchitale@ventanamicro.com>
---
boot/image.c | 3 ++-
include/image.h | 1 +
2 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/boot/image.c b/boot/image.c
index abac254e026..03d5e59b634 100644
--- a/boot/image.c
+++ b/boot/image.c
@@ -92,7 +92,8 @@ static const table_entry_t uimage_arch[] = {
{ IH_ARCH_ARC, "arc", "ARC", },
{ IH_ARCH_X86_64, "x86_64", "AMD x86_64", },
{ IH_ARCH_XTENSA, "xtensa", "Xtensa", },
- { IH_ARCH_RISCV, "riscv", "RISC-V", },
+ { IH_ARCH_RISCV, "riscv", "RISC-V 32 Bit",},
+ { IH_ARCH_RISCV64, "riscv64", "RISC-V 64 Bit",},
{ -1, "", "", },
};
diff --git a/include/image.h b/include/image.h
index 8a9f779d3ff..12b31166e86 100644
--- a/include/image.h
+++ b/include/image.h
@@ -139,6 +139,7 @@ enum {
IH_ARCH_X86_64, /* AMD x86_64, Intel and Via */
IH_ARCH_XTENSA, /* Xtensa */
IH_ARCH_RISCV, /* RISC-V */
+ IH_ARCH_RISCV64, /* RISC-V 64 bit*/
IH_ARCH_COUNT,
};
--
2.45.2
^ permalink raw reply related [flat|nested] 6+ messages in thread* [RFC PATCH 2/3] riscv: Select appropriate image type
2025-02-21 12:58 [RFC PATCH 0/3] Risc-V 32 bit/64 bit images Mayuresh Chitale
2025-02-21 12:58 ` [RFC PATCH 1/3] riscv: image: Add new image type for RV64 Mayuresh Chitale
@ 2025-02-21 12:58 ` Mayuresh Chitale
2025-02-21 12:58 ` [RFC PATCH 3/3] riscv: booti/bootm: Verify image arch type Mayuresh Chitale
2 siblings, 0 replies; 6+ messages in thread
From: Mayuresh Chitale @ 2025-02-21 12:58 UTC (permalink / raw)
To: u-boot; +Cc: Mayuresh Chitale, Rick Chen, Leo, Tom Rini, Yu-Chien Peter Lin
Select between the 32-bit or 64-bit arch type for the image headers
depending on how the build is configured.
Signed-off-by: Mayuresh Chitale <mchitale@ventanamicro.com>
---
arch/riscv/dts/binman.dtsi | 14 ++++++++++----
arch/riscv/include/asm/u-boot.h | 4 ++++
2 files changed, 14 insertions(+), 4 deletions(-)
diff --git a/arch/riscv/dts/binman.dtsi b/arch/riscv/dts/binman.dtsi
index 0405faca574..a1a566b511b 100644
--- a/arch/riscv/dts/binman.dtsi
+++ b/arch/riscv/dts/binman.dtsi
@@ -5,6 +5,12 @@
#include <config.h>
+#ifdef CONFIG_64BIT
+#define ARCH "riscv64"
+#else
+#define ARCH "riscv"
+
+#endif
/ {
binman: binman {
multiple-images;
@@ -31,7 +37,7 @@
description = "U-Boot";
type = "standalone";
os = "U-Boot";
- arch = "riscv";
+ arch = ARCH;
compression = "none";
load = /bits/ 64 <CONFIG_TEXT_BASE>;
@@ -44,7 +50,7 @@
description = "Linux";
type = "standalone";
os = "Linux";
- arch = "riscv";
+ arch = ARCH;
compression = "none";
load = /bits/ 64 <CONFIG_TEXT_BASE>;
@@ -57,7 +63,7 @@
tee {
description = "OP-TEE";
type = "tee";
- arch = "riscv";
+ arch = ARCH;
compression = "none";
os = "tee";
load = /bits/ 64 <CONFIG_SPL_OPTEE_LOAD_ADDR>;
@@ -71,7 +77,7 @@
description = "OpenSBI fw_dynamic Firmware";
type = "firmware";
os = "opensbi";
- arch = "riscv";
+ arch = ARCH;
compression = "none";
load = /bits/ 64 <CONFIG_SPL_OPENSBI_LOAD_ADDR>;
entry = /bits/ 64 <CONFIG_SPL_OPENSBI_LOAD_ADDR>;
diff --git a/arch/riscv/include/asm/u-boot.h b/arch/riscv/include/asm/u-boot.h
index d5e1d5f3231..a90cc4c21cf 100644
--- a/arch/riscv/include/asm/u-boot.h
+++ b/arch/riscv/include/asm/u-boot.h
@@ -23,6 +23,10 @@
#include <asm/u-boot-riscv.h>
/* For image.h:image_check_target_arch() */
+#ifdef CONFIG_64BIT
+#define IH_ARCH_DEFAULT IH_ARCH_RISCV64
+#else
#define IH_ARCH_DEFAULT IH_ARCH_RISCV
+#endif
#endif /* _U_BOOT_H_ */
--
2.45.2
^ permalink raw reply related [flat|nested] 6+ messages in thread* [RFC PATCH 3/3] riscv: booti/bootm: Verify image arch type
2025-02-21 12:58 [RFC PATCH 0/3] Risc-V 32 bit/64 bit images Mayuresh Chitale
2025-02-21 12:58 ` [RFC PATCH 1/3] riscv: image: Add new image type for RV64 Mayuresh Chitale
2025-02-21 12:58 ` [RFC PATCH 2/3] riscv: Select appropriate image type Mayuresh Chitale
@ 2025-02-21 12:58 ` Mayuresh Chitale
2025-02-22 5:25 ` Heinrich Schuchardt
2 siblings, 1 reply; 6+ messages in thread
From: Mayuresh Chitale @ 2025-02-21 12:58 UTC (permalink / raw)
To: u-boot
Cc: Mayuresh Chitale, Rick Chen, Leo, Tom Rini, Sughosh Ganu,
Simon Glass, Janne Grunau, Ilias Apalodimas, Sam Protsenko,
Dario Binacchi, Heinrich Schuchardt
For bootm, disallow booting an image that was built for an arch type
other than the current arch. For booti, set the arch type same as the
current arch.
Signed-off-by: Mayuresh Chitale <mchitale@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))
- 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;
--
2.45.2
^ permalink raw reply related [flat|nested] 6+ messages in thread* Re: [RFC PATCH 3/3] riscv: booti/bootm: Verify image arch type
2025-02-21 12:58 ` [RFC PATCH 3/3] riscv: booti/bootm: Verify image arch type Mayuresh Chitale
@ 2025-02-22 5:25 ` Heinrich Schuchardt
2025-02-24 6:21 ` Mayuresh Chitale
0 siblings, 1 reply; 6+ messages in thread
From: Heinrich Schuchardt @ 2025-02-22 5:25 UTC (permalink / raw)
To: Mayuresh Chitale, u-boot
Cc: Rick Chen, Leo, Tom Rini, Sughosh Ganu, Simon Glass, Janne Grunau,
Ilias Apalodimas, Sam Protsenko, Dario Binacchi
Am 21. Februar 2025 13:58:53 MEZ schrieb Mayuresh Chitale <mchitale@ventanamicro.com>:
>For bootm, disallow booting an image that was built for an arch type
>other than the current arch. For booti, set the arch type same as the
>current arch.
Hello Mayuresh,
The code change looks fine, but the commit message could be a bit more exhaustive:
A commit message should provide the reason why you are making a change. E.g. you could state that booting a RISC-V FIT image of different bitness is not supported by the current code and that you want to catch that problem early.
The current commit message sounds like you are forbidding booting amd64 from i386, too. Please, mention that this is a RISC-V only change in the commit message.
Best regards
Heinrich
>
>Signed-off-by: Mayuresh Chitale <mchitale@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))
>- 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;
>
^ permalink raw reply [flat|nested] 6+ messages in thread* Re: [RFC PATCH 3/3] riscv: booti/bootm: Verify image arch type
2025-02-22 5:25 ` Heinrich Schuchardt
@ 2025-02-24 6:21 ` Mayuresh Chitale
0 siblings, 0 replies; 6+ messages in thread
From: Mayuresh Chitale @ 2025-02-24 6:21 UTC (permalink / raw)
To: Heinrich Schuchardt
Cc: u-boot, Rick Chen, Leo, Tom Rini, Sughosh Ganu, Simon Glass,
Janne Grunau, Ilias Apalodimas, Sam Protsenko, Dario Binacchi
Hi Heinrich,
On Sat, Feb 22, 2025 at 10:55 AM Heinrich Schuchardt <xypron.glpk@gmx.de> wrote:
>
> Am 21. Februar 2025 13:58:53 MEZ schrieb Mayuresh Chitale <mchitale@ventanamicro.com>:
> >For bootm, disallow booting an image that was built for an arch type
> >other than the current arch. For booti, set the arch type same as the
> >current arch.
>
> Hello Mayuresh,
>
> The code change looks fine, but the commit message could be a bit more exhaustive:
>
> A commit message should provide the reason why you are making a change. E.g. you could state that booting a RISC-V FIT image of different bitness is not supported by the current code and that you want to catch that problem early.
>
> The current commit message sounds like you are forbidding booting amd64 from i386, too. Please, mention that this is a RISC-V only change in the commit message.
Sure. Will do that.
>
> Best regards
>
> Heinrich
>
> >
> >Signed-off-by: Mayuresh Chitale <mchitale@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))
> >- 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;
> >
>
^ permalink raw reply [flat|nested] 6+ messages in thread