From: AKASHI Takahiro <takahiro.akashi@linaro.org>
To: Heinrich Schuchardt <xypron.glpk@gmx.de>
Cc: jbx6244@gmail.com, u-boot@lists.denx.de, trini@konsulko.com,
sjg@chromium.org, ilias.apalodimas@linaro.org
Subject: Re: [RFC 02/13] cmd: bootefi: re-organize do_bootefi_image()
Date: Fri, 27 Oct 2023 09:35:42 +0900 [thread overview]
Message-ID: <ZTsF3kmycD7QHqwA@octopus> (raw)
In-Reply-To: <f9ce4a74-6bb7-4b72-97a4-0a605c4389cf@gmx.de>
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.akashi@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,
>
next prev parent reply other threads:[~2023-10-27 0:35 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-10-26 5:30 [RFC 00/13] cmd: bootefi: refactor the code for bootmgr AKASHI Takahiro
2023-10-26 5:30 ` [RFC 01/13] cmd: bootefi: unfold do_bootefi_image() AKASHI Takahiro
2023-10-26 11:01 ` Heinrich Schuchardt
2023-10-27 0:25 ` AKASHI Takahiro
2023-10-27 1:00 ` Tom Rini
2023-10-27 12:23 ` Ilias Apalodimas
2023-10-30 0:34 ` AKASHI Takahiro
2023-10-26 5:30 ` [RFC 02/13] cmd: bootefi: re-organize do_bootefi_image() AKASHI Takahiro
2023-10-26 10:44 ` Heinrich Schuchardt
2023-10-26 12:47 ` Tom Rini
2023-10-27 0:35 ` AKASHI Takahiro [this message]
2023-10-26 5:30 ` [RFC 03/13] cmd: bootefi: carve out EFI boot manager interface AKASHI Takahiro
2023-10-26 5:30 ` [RFC 04/13] cmd: bootefi: carve out binary execution interface AKASHI Takahiro
2023-10-26 5:30 ` [RFC 05/13] cmd: bootefi: move library interfaces under lib/efi_loader AKASHI Takahiro
2023-10-26 5:30 ` [RFC 06/13] cmd: efidebug: ease efi configuration dependency AKASHI Takahiro
2023-10-26 5:30 ` [RFC 07/13] bootmeth: use efi_loader interfaces instead of bootefi command AKASHI Takahiro
2023-10-26 5:30 ` [RFC 08/13] efi_loader: split unrelated code from efi_bootmgr.c AKASHI Takahiro
2023-10-26 5:30 ` [RFC 09/13] efi_loader: rename BOOTEFI_BOOTMGR to EFI_BOOTMGR AKASHI Takahiro
2023-10-26 5:30 ` [RFC 10/13] net: tftp: remove explicit efi configuration dependency AKASHI Takahiro
2023-10-26 5:30 ` [RFC 11/13] fs: " AKASHI Takahiro
2023-10-26 7:58 ` Heinrich Schuchardt
2023-10-26 8:48 ` AKASHI Takahiro
2023-10-26 12:47 ` Tom Rini
2023-10-27 0:59 ` AKASHI Takahiro
2023-10-27 1:04 ` Tom Rini
2023-10-26 5:30 ` [RFC 12/13] lib: uuid: move CONFIG_RANDOM_UUID AKASHI Takahiro
2023-10-26 12:47 ` Tom Rini
2023-10-27 12:24 ` Ilias Apalodimas
2023-10-26 5:30 ` [RFC 13/13] block: rkmtd: select CONFIG_RANDOM_UUID explicitly AKASHI Takahiro
2023-10-26 12:47 ` Tom Rini
2023-10-26 12:47 ` [RFC 00/13] cmd: bootefi: refactor the code for bootmgr Tom Rini
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=ZTsF3kmycD7QHqwA@octopus \
--to=takahiro.akashi@linaro.org \
--cc=ilias.apalodimas@linaro.org \
--cc=jbx6244@gmail.com \
--cc=sjg@chromium.org \
--cc=trini@konsulko.com \
--cc=u-boot@lists.denx.de \
--cc=xypron.glpk@gmx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox