Message ID | 20240426141321.232236-14-heinrich.schuchardt@canonical.com |
---|---|
State | RFC |
Delegated to: | Heinrich Schuchardt |
Headers | show |
Series | efi_loader: improve device-tree loading | expand |
On Fri, 26 Apr 2024 at 17:14, Heinrich Schuchardt <heinrich.schuchardt@canonical.com> wrote: > > We can reuse this function to load the device-tree. This patch is correct, but needs splitting. It exports the function, but also adds IS_ENABLED etc, that belong to an earlier patch Thanks /Ilias > > Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com> > --- > include/efi_loader.h | 4 ++++ > lib/efi_loader/efi_bootmgr.c | 17 +++++++++++++---- > lib/efi_loader/efi_boottime.c | 1 - > 3 files changed, 17 insertions(+), 5 deletions(-) > > diff --git a/include/efi_loader.h b/include/efi_loader.h > index ed2b517b130..0bf325fdc4b 100644 > --- a/include/efi_loader.h > +++ b/include/efi_loader.h > @@ -664,6 +664,10 @@ efi_status_t EFIAPI efi_load_image(bool boot_policy, > void *source_buffer, > efi_uintn_t source_size, > efi_handle_t *image_handle); > +/* Load image from path */ > +efi_status_t efi_load_image_from_path(bool boot_policy, > + struct efi_device_path *file_path, > + void **buffer, efi_uintn_t *size); > /* Start image */ > efi_status_t EFIAPI efi_start_image(efi_handle_t image_handle, > efi_uintn_t *exit_data_size, > diff --git a/lib/efi_loader/efi_bootmgr.c b/lib/efi_loader/efi_bootmgr.c > index 3d58a928b10..9ae948bcf08 100644 > --- a/lib/efi_loader/efi_bootmgr.c > +++ b/lib/efi_loader/efi_bootmgr.c > @@ -1265,12 +1265,21 @@ efi_status_t efi_bootmgr_run(void *fdt) > return ret; > } > > - fdt_lo = load_fdt_from_load_option(); > - if (fdt_lo) > - fdt = fdt_lo; > + if (!IS_ENABLED(CONFIG_GENERATE_ACPI_TABLE)) { > + fdt_lo = load_fdt_from_load_option(); > + if (fdt_lo) > + fdt = fdt_lo; > + } > > + /* > + * Needed in ACPI case to create reservations based on > + * control device-tree. > + */ > ret = efi_install_fdt(fdt); > - free(fdt_lo); > + > + if (!IS_ENABLED(CONFIG_GENERATE_ACPI_TABLE)) > + free(fdt_lo); > + > if (ret != EFI_SUCCESS) { > if (EFI_CALL(efi_unload_image(handle)) == EFI_SUCCESS) > free(load_options); > diff --git a/lib/efi_loader/efi_boottime.c b/lib/efi_loader/efi_boottime.c > index 33f03c0cb0f..50ce8386051 100644 > --- a/lib/efi_loader/efi_boottime.c > +++ b/lib/efi_loader/efi_boottime.c > @@ -1996,7 +1996,6 @@ error: > * @size: size of the loaded image > * Return: status code > */ > -static > efi_status_t efi_load_image_from_path(bool boot_policy, > struct efi_device_path *file_path, > void **buffer, efi_uintn_t *size) > -- > 2.43.0 >
diff --git a/include/efi_loader.h b/include/efi_loader.h index ed2b517b130..0bf325fdc4b 100644 --- a/include/efi_loader.h +++ b/include/efi_loader.h @@ -664,6 +664,10 @@ efi_status_t EFIAPI efi_load_image(bool boot_policy, void *source_buffer, efi_uintn_t source_size, efi_handle_t *image_handle); +/* Load image from path */ +efi_status_t efi_load_image_from_path(bool boot_policy, + struct efi_device_path *file_path, + void **buffer, efi_uintn_t *size); /* Start image */ efi_status_t EFIAPI efi_start_image(efi_handle_t image_handle, efi_uintn_t *exit_data_size, diff --git a/lib/efi_loader/efi_bootmgr.c b/lib/efi_loader/efi_bootmgr.c index 3d58a928b10..9ae948bcf08 100644 --- a/lib/efi_loader/efi_bootmgr.c +++ b/lib/efi_loader/efi_bootmgr.c @@ -1265,12 +1265,21 @@ efi_status_t efi_bootmgr_run(void *fdt) return ret; } - fdt_lo = load_fdt_from_load_option(); - if (fdt_lo) - fdt = fdt_lo; + if (!IS_ENABLED(CONFIG_GENERATE_ACPI_TABLE)) { + fdt_lo = load_fdt_from_load_option(); + if (fdt_lo) + fdt = fdt_lo; + } + /* + * Needed in ACPI case to create reservations based on + * control device-tree. + */ ret = efi_install_fdt(fdt); - free(fdt_lo); + + if (!IS_ENABLED(CONFIG_GENERATE_ACPI_TABLE)) + free(fdt_lo); + if (ret != EFI_SUCCESS) { if (EFI_CALL(efi_unload_image(handle)) == EFI_SUCCESS) free(load_options); diff --git a/lib/efi_loader/efi_boottime.c b/lib/efi_loader/efi_boottime.c index 33f03c0cb0f..50ce8386051 100644 --- a/lib/efi_loader/efi_boottime.c +++ b/lib/efi_loader/efi_boottime.c @@ -1996,7 +1996,6 @@ error: * @size: size of the loaded image * Return: status code */ -static efi_status_t efi_load_image_from_path(bool boot_policy, struct efi_device_path *file_path, void **buffer, efi_uintn_t *size)
We can reuse this function to load the device-tree. Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com> --- include/efi_loader.h | 4 ++++ lib/efi_loader/efi_bootmgr.c | 17 +++++++++++++---- lib/efi_loader/efi_boottime.c | 1 - 3 files changed, 17 insertions(+), 5 deletions(-)