[PATCH 03/21] efi_loader: efi_setup: Add efi_start_obj_list() to efi_setup.c
Ilias Apalodimas
ilias.apalodimas at linaro.org
Tue Feb 4 10:06:10 CET 2025
Hi Adriano,
On Wed, 22 Jan 2025 at 19:09, Adriano Cordova <adrianox at gmail.com> wrote:
>
> The coomand bootefi calls efi_init_obj_list to do the efi set up
> before launching an .efi payload, but efi_init_obj_list is called
> only once. There are some initializations which depend on the
> environment and should be done each time a payload gets launched and
> not only once. A motivation for this changes is the following order
> of events:
>
> 1. Launch an EFI application (e.g. bootefi hello)
> 2. Change the ip address
> 3. Launch another application which uses the pxe protocol
>
> As the EFI pxe protocol was initialized when the handles
> for efi net were created in 1., the ip was hardcoded there.
>
> In this example, another possibility would be to make a callback for ip
> address changes to go all the way up to efi_net.
>
> Signed-off-by: Adriano Cordova <adriano.cordova at canonical.com>
> ---
> lib/efi_loader/efi_setup.c | 21 ++++++++++++++++++++-
> 1 file changed, 20 insertions(+), 1 deletion(-)
>
> diff --git a/lib/efi_loader/efi_setup.c b/lib/efi_loader/efi_setup.c
> index aa59bc7779..164586742a 100644
> --- a/lib/efi_loader/efi_setup.c
> +++ b/lib/efi_loader/efi_setup.c
> @@ -12,6 +12,7 @@
> #include <log.h>
> #include <asm-generic/unaligned.h>
>
> +#define OBJ_LIST_INITIALIZED 0
> #define OBJ_LIST_NOT_INITIALIZED 1
>
> efi_status_t efi_obj_list_initialized = OBJ_LIST_NOT_INITIALIZED;
> @@ -208,6 +209,18 @@ out:
> return -1;
> }
>
> +/**
> + * efi_start_obj_list() - Start EFI object list
> + *
> + * Return: status code
> + */
> +static efi_status_t efi_start_obj_list(void)
> +{
> + efi_status_t ret = EFI_SUCCESS;
> +
> + return ret;
> +}
> +
> /**
> * efi_init_obj_list() - Initialize and populate EFI object list
> *
> @@ -217,7 +230,9 @@ efi_status_t efi_init_obj_list(void)
> {
> efi_status_t ret = EFI_SUCCESS;
>
> - /* Initialize once only */
> + /* Initialize only once, but start every time if correctly initialized*/
> + if (efi_obj_list_initialized == OBJ_LIST_INITIALIZED)
> + return efi_start_obj_list();
Why do we need this? It doesn't reconfigure anything, just returns
EFI_SUCCESS. efi_obj_list_initialized should already be 0 on success
> if (efi_obj_list_initialized != OBJ_LIST_NOT_INITIALIZED)
> return efi_obj_list_initialized;
>
> @@ -349,6 +364,10 @@ efi_status_t efi_init_obj_list(void)
> if (IS_ENABLED(CONFIG_EFI_CAPSULE_ON_DISK) &&
> !IS_ENABLED(CONFIG_EFI_CAPSULE_ON_DISK_EARLY))
> ret = efi_launch_capsules();
> + if (ret != EFI_SUCCESS)
> + goto out;
> +
> + ret = efi_start_obj_list();
This isn't changing anything on the flow. I am not sure what you are
trying to do here.
> out:
> efi_obj_list_initialized = ret;
> return ret;
> --
> 2.43.0
>
Cheers
/Ilias
More information about the U-Boot
mailing list