Hi Philippe, On Wed, 17 Nov 2021 at 10:52, Philippe Reynes <philippe.rey...@softathome.com> wrote: > > This commit adds a stage pre-load to the command
Add a stage... > bootm. Right now, this stage may be used to read > a header and check the signature of the full > image. > > Signed-off-by: Philippe Reynes <philippe.rey...@softathome.com> > --- > boot/bootm.c | 33 +++++++++++++++++++++++++++++++++ > cmd/Kconfig | 10 ++++++++++ > cmd/bootm.c | 2 +- > include/image.h | 1 + > 4 files changed, 45 insertions(+), 1 deletion(-) > Reviewed-by: Simon Glass <s...@chromium.org> > diff --git a/boot/bootm.c b/boot/bootm.c > index 4482f84b40..4803c577cc 100644 > --- a/boot/bootm.c > +++ b/boot/bootm.c > @@ -87,6 +87,33 @@ static int bootm_start(struct cmd_tbl *cmdtp, int flag, > int argc, > return 0; > } > > +static ulong bootm_data_addr(int argc, char *const argv[]) > +{ > + ulong addr; > + > + if (argc > 0) > + addr = simple_strtoul(argv[0], NULL, 16); > + else > + addr = image_load_addr; > + > + return addr; > +} > + > +static int bootm_pre_load(struct cmd_tbl *cmdtp, int flag, int argc, > + char *const argv[]) > +{ > + ulong data_addr = bootm_data_addr(argc, argv); > + int ret = 0; > + > + if (CONFIG_IS_ENABLED(CMD_BOOTM_PRE_LOAD)) > + ret = image_pre_load(data_addr); > + > + if (ret) > + ret = CMD_RET_FAILURE; > + > + return ret; > +} > + > static int bootm_find_os(struct cmd_tbl *cmdtp, int flag, int argc, > char *const argv[]) > { > @@ -677,6 +704,9 @@ int do_bootm_states(struct cmd_tbl *cmdtp, int flag, int > argc, > if (states & BOOTM_STATE_START) > ret = bootm_start(cmdtp, flag, argc, argv); > > + if (!ret && (states & BOOTM_STATE_PRE_LOAD)) > + ret = bootm_pre_load(cmdtp, flag, argc, argv); > + > if (!ret && (states & BOOTM_STATE_FINDOS)) > ret = bootm_find_os(cmdtp, flag, argc, argv); > > @@ -866,6 +896,9 @@ static const void *boot_get_kernel(struct cmd_tbl *cmdtp, > int flag, int argc, > &fit_uname_config, > &fit_uname_kernel); > > + if (CONFIG_IS_ENABLED(CMD_BOOTM_PRE_LOAD)) > + img_addr += image_load_offset; > + > bootstage_mark(BOOTSTAGE_ID_CHECK_MAGIC); > > /* check image type, for FIT images get FIT kernel node */ > diff --git a/cmd/Kconfig b/cmd/Kconfig > index 5b30b13e43..cad2cda0bf 100644 > --- a/cmd/Kconfig > +++ b/cmd/Kconfig > @@ -194,6 +194,16 @@ config CMD_BOOTM > help > Boot an application image from the memory. > > +config CMD_BOOTM_PRE_LOAD > + bool "enable pre-load on bootm" > + depends on CMD_BOOTM > + depends on IMAGE_PRE_LOAD > + default n > + help > + Enable support of stage pre-load for the bootm command. > + This stage allow to check of modifty the image provided > + to the bootm command. modify > + > config BOOTM_EFI > bool "Support booting UEFI FIT images" > depends on CMD_BOOTEFI && CMD_BOOTM && FIT > diff --git a/cmd/bootm.c b/cmd/bootm.c > index 92468d09a1..acfb8eedde 100644 > --- a/cmd/bootm.c > +++ b/cmd/bootm.c > @@ -126,7 +126,7 @@ int do_bootm(struct cmd_tbl *cmdtp, int flag, int argc, > char *const argv[]) > } > > return do_bootm_states(cmdtp, flag, argc, argv, BOOTM_STATE_START | > - BOOTM_STATE_FINDOS | BOOTM_STATE_FINDOTHER | > + BOOTM_STATE_FINDOS | BOOTM_STATE_PRE_LOAD | > BOOTM_STATE_FINDOTHER | > BOOTM_STATE_LOADOS | > #ifdef CONFIG_SYS_BOOT_RAMDISK_HIGH > BOOTM_STATE_RAMDISK | > diff --git a/include/image.h b/include/image.h > index 5f83e4c747..42fb01ab07 100644 > --- a/include/image.h > +++ b/include/image.h > @@ -351,6 +351,7 @@ typedef struct bootm_headers { > #define BOOTM_STATE_OS_PREP (0x00000100) > #define BOOTM_STATE_OS_FAKE_GO (0x00000200) /* 'Almost' run the > OS */ > #define BOOTM_STATE_OS_GO (0x00000400) > +#define BOOTM_STATE_PRE_LOAD (0x00000800) Drop () > int state; > > #if defined(CONFIG_LMB) && !defined(USE_HOSTCC) > -- > 2.17.1 > Regards, Simon