[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