Merci Vincent On Wed, 11 Feb 2026 at 14:43, Vincent Stehlé <[email protected]> wrote: > > The read_blocks() function from the Block IO protocol is a UEFI function; > make sure to call it from within U-Boot using the EFI_CALL() macro. > > To demonstrate the issue on an AArch64 machine, define the DEBUG macro in > include/efi_loader.h and build u-boot with sandbox_defconfig, then download > and uncompress the ACS-DT image [1], and finally execute the following > command: > > $ ./u-boot -T -c " \ > host bind 0 systemready-dt_acs_live_image.wic; \ > setenv loadaddr 0x10000; \ > load host 0 \${loadaddr} EFI/BOOT/Shell.efi; \ > bootefi \${loadaddr} \${fdtcontroladdr}" > > The following assertion should fail: > > lib/efi_loader/efi_net.c:858: efi_network_timer_notify: Assertion > `__efi_entry_check()' failed. > > This happens due to the following EFIAPI functions call chain: > > efi_start_image() > efi_disk_read_blocks() > (due to the missing EFI_CALL, entry_count == 2) > efi_network_timer_notify() > > Link: > https://github.com/ARM-software/arm-systemready/releases/download/v25.12_DT_3.1.1/systemready-dt_acs_live_image.wic.xz > [1] > Fixes: ce3dbc5d080d ("efi_loader: add UEFI GPT measurement") > Signed-off-by: Vincent Stehlé <[email protected]> > Cc: Heinrich Schuchardt <[email protected]> > Cc: Ilias Apalodimas <[email protected]> > Cc: Tom Rini <[email protected]> > Cc: Masahisa Kojima <[email protected]> > ---
Reviewed-by: Ilias Apalodimas <[email protected]> > lib/efi_loader/efi_tcg2.c | 13 ++++++++----- > 1 file changed, 8 insertions(+), 5 deletions(-) > > diff --git a/lib/efi_loader/efi_tcg2.c b/lib/efi_loader/efi_tcg2.c > index bdf78897d47..1860dc50238 100644 > --- a/lib/efi_loader/efi_tcg2.c > +++ b/lib/efi_loader/efi_tcg2.c > @@ -1213,8 +1213,10 @@ tcg2_measure_gpt_data(struct udevice *dev, > goto out2; > } > > - ret = block_io->read_blocks(block_io, block_io->media->media_id, 1, > - block_io->media->block_size, gpt_h); > + ret = EFI_CALL(block_io->read_blocks(block_io, > + block_io->media->media_id, 1, > + block_io->media->block_size, > + gpt_h)); > if (ret != EFI_SUCCESS) > goto out2; > > @@ -1227,9 +1229,10 @@ tcg2_measure_gpt_data(struct udevice *dev, > goto out2; > } > > - ret = block_io->read_blocks(block_io, block_io->media->media_id, > - gpt_h->partition_entry_lba, > - total_gpt_entry_size, entry); > + ret = EFI_CALL(block_io->read_blocks(block_io, > + block_io->media->media_id, > + gpt_h->partition_entry_lba, > + total_gpt_entry_size, entry)); > if (ret != EFI_SUCCESS) > goto out2; > > -- > 2.51.0 >

