[RFC 1/8] boot: EFI boot manager does not depend on BootOrder

Heinrich Schuchardt heinrich.schuchardt at canonical.com
Fri May 2 18:08:56 CEST 2025


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.

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.

Best regards

Heinrich


More information about the U-Boot mailing list