Hi Ilias, I can reproduce this issue. r = 14 (EFI_NOT_FOUND) returns from efi_bootmgr_update_media_device_boot_option when there is no boot option scanned. This happens when no removable media are probed. In this case we shall still let the caller return with EFI_SUCCESS. I will send a v2 patch to address it. Thanks and regards, Raymond
On Mon, 3 Apr 2023 at 06:34, Ilias Apalodimas <ilias.apalodi...@linaro.org> wrote: > Hi Raymond, > > > [...] > > > + } > > + } > > + } > > + > > +out: > > + if (opt) { > > + for (i = 0; i < count; i++) { > > + if (opt[i].lo) > > + free(opt[i].lo); > > + } > > + free(opt); > > + } > > + efi_free_pool(volume_handles); > > + > > + return ret; > > +} > > diff --git a/lib/efi_loader/efi_disk.c b/lib/efi_loader/efi_disk.c > > index d2256713a8..1309e28134 100644 > > --- a/lib/efi_loader/efi_disk.c > > +++ b/lib/efi_loader/efi_disk.c > > @@ -687,6 +687,13 @@ int efi_disk_probe(void *ctx, struct event *event) > > return -1; > > } > > > > + /* only do the boot option management when UEFI sub-system is > initialized */ > > + if (efi_obj_list_initialized == EFI_SUCCESS) { > > + ret = efi_bootmgr_update_media_device_boot_option(); > > I am not sure if this is the problem, but with these patches applied and no > media attached QEMU fails to initialize the EFI sub-system. IOW running > qemu-system-aarch64 -bios u-boot.bin -machine virt,secure=off -cpu > cortex-a53 -m 2G -nographic -no-acpi > > => efidebug boot dump > No EFI system partition > Error: Cannot initialize UEFI sub-system, r = 14 > > We should always start EFI, even if scanning for boot options fails. > > > + if (ret) > > + return -1; > > + } > > + > > return 0; > > } > > > > diff --git a/lib/efi_loader/efi_helper.c b/lib/efi_loader/efi_helper.c > > index 1f4ab2b419..cdfd16ea77 100644 > > --- a/lib/efi_loader/efi_helper.c > > +++ b/lib/efi_loader/efi_helper.c > > @@ -257,3 +257,28 @@ efi_status_t efi_next_variable_name(efi_uintn_t > *size, u16 **buf, efi_guid_t *gu > > > > return ret; > > } > > + > > +/** > > + * efi_search_bootorder() - search the boot option index in BootOrder > > + * > > + * @bootorder: pointer to the BootOrder variable > > + * @num: number of BootOrder entry > > + * @target: target boot option index to search > > + * @index: pointer to store the index of BootOrder variable > > + * Return: true if exists, false otherwise > > + */ > > +bool efi_search_bootorder(u16 *bootorder, efi_uintn_t num, u32 target, > u32 *index) > > +{ > > + u32 i; > > + > > + for (i = 0; i < num; i++) { > > + if (target == bootorder[i]) { > > + if (index) > > + *index = i; > > + > > + return true; > > + } > > + } > > + > > + return false; > > +} > > diff --git a/lib/efi_loader/efi_variable.c > b/lib/efi_loader/efi_variable.c > > index be95ed44e6..2f251553e1 100644 > > --- a/lib/efi_loader/efi_variable.c > > +++ b/lib/efi_loader/efi_variable.c > > @@ -476,6 +476,10 @@ efi_status_t efi_init_variables(void) > > log_err("Invalid EFI variable seed\n"); > > } > > > > + ret = efi_init_secure_state(); > > + if (ret != EFI_SUCCESS) > > + return ret; > > > > - return efi_init_secure_state(); > > + /* update boot option management after variable service > initialized */ > > + return efi_bootmgr_update_media_device_boot_option(); > > } > > diff --git a/lib/efi_loader/efi_variable_tee.c > b/lib/efi_loader/efi_variable_tee.c > > index dfef18435d..a48d313ef0 100644 > > --- a/lib/efi_loader/efi_variable_tee.c > > +++ b/lib/efi_loader/efi_variable_tee.c > > @@ -748,5 +748,6 @@ efi_status_t efi_init_variables(void) > > if (ret != EFI_SUCCESS) > > return ret; > > > > - return EFI_SUCCESS; > > + /* update boot option management after variable service > initialized */ > > + return efi_bootmgr_update_media_device_boot_option(); > > } > > -- > > 2.25.1 > > > > Regards > /Ilias >