bootm: fix boot failure from compressed image for IH_OS_EFI

The bootm command can handle the compressed image, but current
code fails to boot from it.

    ## Loading kernel (any) from FIT Image at a8000000 ...
    <snip>
         Compression:  gzip compressed
         Data Start:   0xa80000d4
         Data Size:    10114520 Bytes = 9.6 MiB
         Architecture: AArch64
         OS:           EFI Firmware
         Load Address: 0x90000000

    <snip>
       Uncompressing Kernel Image to 90000000
    ## Transferring control to EFI (at address a80000d4) ...
    Booting <NULL>
    Not a PE-COFF file
    Loading image failed

To take care of the compressed image, the load address needs
to be passed instead of the original compressed image address.

Signed-off-by: Masahisa Kojima <kojima.masahisa@socionext.com>
Tested-by: Kunihiko Hayashi <hayashi.kunihiko@socionext.com>
This commit is contained in:
Masahisa Kojima
2026-01-07 09:35:31 +09:00
committed by Heinrich Schuchardt
parent 8e16fbfd14
commit e82f01a236

View File

@@ -509,11 +509,11 @@ static int do_bootm_efi(int flag, struct bootm_info *bmi)
/* We expect to return */ /* We expect to return */
images->os.type = IH_TYPE_STANDALONE; images->os.type = IH_TYPE_STANDALONE;
image_buf = map_sysmem(images->os.image_start, images->os.image_len); image_buf = map_sysmem(images->os.load, images->os.image_len);
/* Run EFI image */ /* Run EFI image */
printf("## Transferring control to EFI (at address %08lx) ...\n", printf("## Transferring control to EFI (at address %08lx) ...\n",
images->os.image_start); images->os.load);
bootstage_mark(BOOTSTAGE_ID_RUN_OS); bootstage_mark(BOOTSTAGE_ID_RUN_OS);
ret = efi_binary_run(image_buf, images->os.image_len, ret = efi_binary_run(image_buf, images->os.image_len,