[RFC 1/8] boot: EFI boot manager does not depend on BootOrder
Simon Glass
sjg at chromium.org
Sat May 3 04:10:13 CEST 2025
Hi Heinrich,
On Fri, 2 May 2025 at 10:09, Heinrich Schuchardt
<heinrich.schuchardt at canonical.com> wrote:
>
> On 5/2/25 16:49, Simon Glass wrote:
> > Hi Heinrich,
> >
> > On Mon, 21 Apr 2025 at 10:26, Heinrich Schuchardt
> > <heinrich.schuchardt at canonical.com> wrote:
> >>
> >> The EFI boot manager bootmeth does not require variable BootOrder to be
> >> preexisting. It creates this variable.
> >>
> >> Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt at canonical.com>
> >> ---
> >> boot/bootmeth_efi_mgr.c | 21 +++------------------
> >> 1 file changed, 3 insertions(+), 18 deletions(-)
> >>
> >> diff --git a/boot/bootmeth_efi_mgr.c b/boot/bootmeth_efi_mgr.c
> >> index 42b8863815e..1669cbed5bd 100644
> >> --- a/boot/bootmeth_efi_mgr.c
> >> +++ b/boot/bootmeth_efi_mgr.c
> >> @@ -47,30 +47,15 @@ static int efi_mgr_check(struct udevice *dev, struct bootflow_iter *iter)
> >>
> >> static int efi_mgr_read_bootflow(struct udevice *dev, struct bootflow *bflow)
> >> {
> >> - struct efi_mgr_priv *priv = dev_get_priv(dev);
> >> - efi_status_t ret;
> >> - efi_uintn_t size;
> >> - u16 *bootorder;
> >> -
> >> - if (priv->fake_dev) {
> >> - bflow->state = BOOTFLOWST_READY;
> >> - return 0;
> >> - }
> >> + int ret
> >>
> >> ret = efi_init_obj_list();
> >> if (ret)
> >> return log_msg_ret("init", ret);
> >>
> >> - /* Enable this method if the "BootOrder" UEFI exists. */
> >> - bootorder = efi_get_var(u"BootOrder", &efi_global_variable_guid,
> >> - &size);
> >> - if (bootorder) {
> >> - free(bootorder);
> >> - bflow->state = BOOTFLOWST_READY;
> >> - return 0;
> >> - }
> >> + bflow->state = BOOTFLOWST_READY;
> >>
> >> - return -EINVAL;
> >> + return 0;
> >> }
> >>
> >> static int efi_mgr_read_file(struct udevice *dev, struct bootflow *bflow,
> >> --
> >> 2.48.1
> >>
> >
> > How do we know if the board is using EFI bootmgr? My understanding was
> > that this was a way to find out?
>
> The boot manager must always run.
Are you sure that is true? It seems false to me, e.g.
- if we are booting FEL on suxi, it must not run.
- none of the boards in my lab use it
- the Ubuntu 24.04 test in my lab doesn't use it
So how can we say that it must always run?
>
> The check for the BootOrder variable introduced in commit f2bfa0cb1794
> is a bug.
>
> The boot manager handles in sequence:
>
> * Try to boot as indicated by BootNext.
> * Try to boot as indicated by BootOrder.
> * Try to boot default path for available media.
> This will add Boot#### entries and update BootOrder.
Regards,
Simon
More information about the U-Boot
mailing list