
On Sun, Sep 17, 2017 at 11:48 PM, Heinrich Schuchardt xypron.glpk@gmx.de wrote:
On 09/18/2017 12:59 AM, Simon Glass wrote:
A limitation of the EFI loader at present is that it does not build with sandbox. This makes it hard to write tests, since sandbox is used for most testing in U-Boot.
This series enables the EFI loader feature. It allows sandbox to build and run a trivial function which calls the EFI API to output a message.
Much work remains but this should serve as a basis for adding tests more easily for EFI loader.
This series sits on top of Heinrich's recent EFI test series. It is available at u-boot-dm/efi-working
Simon Glass (16): efi: Update efi_smbios_register() to return error code efi: Move the init check inside efi_init_obj_list() efi: Add error checking for efi_init_obj_list() efi: Add a TODO to efi_init_obj_list() efi: Correct header order in efi_memory efi: sandbox: Adjust memory setup for sandbox sandbox: smbios: Update to support sandbox sandbox: Add a setjmp() implementation efi: sandbox: Add required linker sections efi: sandbox: Add distroboot support Define board_quiesce_devices() in a shared location Add a comment for board_quiesce_devices() efi: sandbox: Add relocation constants efi: Add a comment about duplicated ELF constants efi: sandbox: Enable EFI loader builder for sandbox efi: sandbox: Add a simple 'bootefi test' command
arch/arm/include/asm/u-boot-arm.h | 1 - arch/sandbox/cpu/cpu.c | 13 ++++++++++ arch/sandbox/cpu/os.c | 17 ++++++++++++ arch/sandbox/cpu/u-boot.lds | 29 +++++++++++++++++++++ arch/sandbox/include/asm/setjmp.h | 21 +++++++++++++++ arch/sandbox/lib/Makefile | 2 +- arch/sandbox/lib/sections.c | 12 +++++++++ arch/x86/include/asm/u-boot-x86.h | 1 - arch/x86/lib/bootm.c | 4 --- cmd/bootefi.c | 54 ++++++++++++++++++++++++++++++++++----- common/bootm.c | 4 +++ configs/sandbox_defconfig | 1 + include/bootm.h | 8 ++++++ include/config_distro_bootcmd.h | 2 +- include/efi_loader.h | 13 ++++++++-- include/os.h | 21 +++++++++++++++ lib/efi_loader/Kconfig | 12 ++++++++- lib/efi_loader/Makefile | 1 + lib/efi_loader/efi_boottime.c | 4 +++ lib/efi_loader/efi_memory.c | 33 +++++++++++++----------- lib/efi_loader/efi_runtime.c | 7 +++++ lib/efi_loader/efi_smbios.c | 6 +++-- lib/efi_loader/efi_test.c | 17 ++++++++++++ lib/smbios.c | 38 ++++++++++++++++++++------- 24 files changed, 277 insertions(+), 44 deletions(-) create mode 100644 arch/sandbox/include/asm/setjmp.h create mode 100644 arch/sandbox/lib/sections.c create mode 100644 lib/efi_loader/efi_test.c
Thanks for enabling efi_loader on sandbox. That will make many things easier.
Unfortunately efi_status_t EFIAPI efi_selftest(efi_handle_t image_handle, struct efi_system_table *systab) { ... boottime = systable->boottime; ... ret = boottime->allocate_pool(EFI_BOOT_SERVICES_DATA, map_size, (void **)&memory_map); leads to a segmentation fault:
I'm seeing something similar, because:
(gdb) print gd->bd->bi_dram[0] $2 = {start = 0, size = 134217728}
u-boot expects 1:1 phys:virt mapping, so that probably won't work.
=> bootefi selftest
Testing EFI API implementation
Number of tests to execute: 3
<snip> Setting up 'ExitBootServices' Setting up 'ExitBootServices' succeeded Segmentation fault user@workstation:~/workspace/u-boot-odroid-c2/denx$
The problem does not exist with qemu-x86_defconfig without your patches.
fwiw, qemu-x86 still works for me (I can still load Shell.efi) with these patches..
BR, -R
qemu-x86_defconfig cannot be built with you patches:
UPD include/generated/asm-offsets.h sh: echo: I/O error Kbuild:47: recipe for target 'include/generated/generic-asm-offsets.h' failed make[1]: *** [include/generated/generic-asm-offsets.h] Error 1 make[1]: *** Waiting for unfinished jobs.... Makefile:1332: recipe for target 'prepare0' failed make: *** [prepare0] Error 2
Best regards
Heinrich