On Thu, Oct 26, 2023 at 12:44:00PM +0200, Heinrich Schuchardt wrote: > On 10/26/23 07:30, AKASHI Takahiro wrote: > > Decompose and re-organize do_bootefi_image() into three parts for > > the succeeding refactor work. > > > > Signed-off-by: AKASHI Takahiro <takahiro.aka...@linaro.org> > > --- > > cmd/Kconfig | 15 ++++++-- > > cmd/bootefi.c | 82 ++++++++++++++++++++++++++++++-------------- > > include/efi_loader.h | 2 -- > > 3 files changed, 69 insertions(+), 30 deletions(-) > > > > diff --git a/cmd/Kconfig b/cmd/Kconfig > > index 0eb739203ade..825a41d68aad 100644 > > --- a/cmd/Kconfig > > +++ b/cmd/Kconfig > > @@ -363,9 +363,19 @@ config CMD_BOOTEFI > > help > > Boot an EFI image from memory. > > > > +if CMD_BOOTEFI > > +config CMD_BOOTEFI_BINARY > > + bool "Allow booting an EFI binary directly" > > + depends on BOOTEFI_BOOTMGR > > + default y > > + help > > + Select this option to enable direct execution of binary at 'bootefi'. > > + This subcommand will allow you to load the UEFI binary using > > + other U-Boot commands or external methods and then run isince 2021. t. > > + > > config CMD_BOOTEFI_BOOTMGR > > This symbol is in lib/efi_loader/Kconfig: > lib/efi_loader/Kconfig:35:config CMD_BOOTEFI_BOOTMGR
In the cover letter, I mentioned that the RFC was based on Tom's branch. > > Please, rebase your series on origin/master. If you agree to my idea in this whole series, I will re-post a new version, rebasing it on Tom's "-next" branch with CONFIG_CMDLINE tweaks. So please review other commits as well. Thanks, -Takahiro Akashi > Best regards > > Heinrich > > > bool "UEFI Boot Manager command" > > - depends on BOOTEFI_BOOTMGR && CMD_BOOTEFI > > + depends on BOOTEFI_BOOTMGR > > default y > > help > > Select this option to enable the 'bootmgr' subcommand of 'bootefi'. > > @@ -374,7 +384,7 @@ config CMD_BOOTEFI_BOOTMGR > > > > config CMD_BOOTEFI_HELLO_COMPILE > > bool "Compile a standard EFI hello world binary for testing" > > - depends on CMD_BOOTEFI && !CPU_V7M > > + depends on !CPU_V7M > > default y > > help > > This compiles a standard EFI hello world application with U-Boot so > > @@ -396,6 +406,7 @@ config CMD_BOOTEFI_HELLO > > up EFI support on a new architecture. > > > > source lib/efi_selftest/Kconfig > > +endif > > > > config CMD_BOOTMENU > > bool "bootmenu" > > diff --git a/cmd/bootefi.c b/cmd/bootefi.c > > index 1b28bf5a318d..ae00bba3b4f0 100644 > > --- a/cmd/bootefi.c > > +++ b/cmd/bootefi.c > > @@ -491,7 +491,6 @@ out: > > return (ret != EFI_SUCCESS) ? ret : ret2; > > } > > > > -#ifdef CONFIG_CMD_BOOTEFI_SELFTEST > > static efi_status_t bootefi_run_prepare(const char *load_options_path, > > struct efi_device_path *device_path, > > struct efi_device_path *image_path, > > @@ -581,7 +580,6 @@ static int do_efi_selftest(void) > > > > return ret != EFI_SUCCESS; > > } > > -#endif /* CONFIG_CMD_BOOTEFI_SELFTEST */ > > > > /** > > * do_bootefi() - execute `bootefi` command > > @@ -603,14 +601,6 @@ static int do_bootefi(struct cmd_tbl *cmdtp, int flag, > > int argc, > > if (argc < 2) > > return CMD_RET_USAGE; > > > > - /* Initialize EFI drivers */ > > - ret = efi_init_obj_list(); > > - if (ret != EFI_SUCCESS) { > > - log_err("Error: Cannot initialize UEFI sub-system, r = %lu\n", > > - ret & ~EFI_ERROR_MASK); > > - return CMD_RET_FAILURE; > > - } > > - > > if (argc > 2) { > > uintptr_t fdt_addr; > > > > @@ -619,29 +609,54 @@ static int do_bootefi(struct cmd_tbl *cmdtp, int > > flag, int argc, > > } else { > > fdt = EFI_FDT_USE_INTERNAL; > > } > > - ret = efi_install_fdt(fdt); > > - if (ret == EFI_INVALID_PARAMETER) > > - return CMD_RET_USAGE; > > - else if (ret != EFI_SUCCESS) > > - return CMD_RET_FAILURE; > > > > - if (IS_ENABLED(CONFIG_CMD_BOOTEFI_BOOTMGR)) { > > - if (!strcmp(argv[1], "bootmgr")) > > - return do_efibootmgr(); > > + if (IS_ENABLED(CONFIG_CMD_BOOTEFI_BOOTMGR) && > > + !strcmp(argv[1], "bootmgr")) { > > + /* Initialize EFI drivers */ > > + ret = efi_init_obj_list(); > > + if (ret != EFI_SUCCESS) { > > + log_err("Error: Cannot initialize UEFI sub-system, r = > > %lu\n", > > + ret & ~EFI_ERROR_MASK); > > + return CMD_RET_FAILURE; > > + } > > + > > + ret = efi_install_fdt(fdt); > > + if (ret == EFI_INVALID_PARAMETER) > > + return CMD_RET_USAGE; > > + else if (ret != EFI_SUCCESS) > > + return CMD_RET_FAILURE; > > + > > + return do_efibootmgr(); > > } > > -#ifdef CONFIG_CMD_BOOTEFI_SELFTEST > > - if (!strcmp(argv[1], "selftest")) > > + > > + if (IS_ENABLED(CONFIG_CMD_BOOTEFI_SELFTEST) && > > + !strcmp(argv[1], "selftest")) { > > + /* Initialize EFI drivers */ > > + ret = efi_init_obj_list(); > > + if (ret != EFI_SUCCESS) { > > + log_err("Error: Cannot initialize UEFI sub-system, r = > > %lu\n", > > + ret & ~EFI_ERROR_MASK); > > + return CMD_RET_FAILURE; > > + } > > + > > + ret = efi_install_fdt(fdt); > > + if (ret == EFI_INVALID_PARAMETER) > > + return CMD_RET_USAGE; > > + else if (ret != EFI_SUCCESS) > > + return CMD_RET_FAILURE; > > + > > return do_efi_selftest(); > > -#endif > > + } > > > > -#ifdef CONFIG_CMD_BOOTEFI_HELLO > > - if (!strcmp(argv[1], "hello")) { > > + if (!IS_ENABLED(CONFIG_CMD_BOOTEFI_BINARY)) > > + return CMD_RET_SUCCESS; > > + > > + if (IS_ENABLED(CONFIG_CMD_BOOTEFI_HELLO) && > > + !strcmp(argv[1], "hello")) { > > image_buf = __efi_helloworld_begin; > > size = __efi_helloworld_end - __efi_helloworld_begin; > > efi_clear_bootdev(); > > - } else > > -#endif > > - { > > + } else { > > addr = strtoul(argv[1], NULL, 16); > > /* Check that a numeric value was passed */ > > if (!addr) > > @@ -663,6 +678,21 @@ static int do_bootefi(struct cmd_tbl *cmdtp, int flag, > > int argc, > > size = image_size; > > } > > } > > + > > + /* Initialize EFI drivers */ > > + ret = efi_init_obj_list(); > > + if (ret != EFI_SUCCESS) { > > + log_err("Error: Cannot initialize UEFI sub-system, r = %lu\n", > > + ret & ~EFI_ERROR_MASK); > > + return CMD_RET_FAILURE; > > + } > > + > > + ret = efi_install_fdt(fdt); > > + if (ret == EFI_INVALID_PARAMETER) > > + return CMD_RET_USAGE; > > + else if (ret != EFI_SUCCESS) > > + return CMD_RET_FAILURE; > > + > > ret = efi_run_image(image_buf, size); > > > > if (ret != EFI_SUCCESS) > > diff --git a/include/efi_loader.h b/include/efi_loader.h > > index e24410505f40..48d4999e56a9 100644 > > --- a/include/efi_loader.h > > +++ b/include/efi_loader.h > > @@ -878,14 +878,12 @@ efi_status_t __efi_runtime EFIAPI efi_get_time( > > > > efi_status_t __efi_runtime EFIAPI efi_set_time(struct efi_time *time); > > > > -#ifdef CONFIG_CMD_BOOTEFI_SELFTEST > > /* > > * Entry point for the tests of the EFI API. > > * It is called by 'bootefi selftest' > > */ > > efi_status_t EFIAPI efi_selftest(efi_handle_t image_handle, > > struct efi_system_table *systab); > > -#endif > > > > efi_status_t EFIAPI efi_get_variable(u16 *variable_name, > > const efi_guid_t *vendor, u32 *attributes, >