[PATCH v4 00/34] efi: Improvements to U-Boot running on top of UEFI

Simon Glass
2021-11-04T03:09:51Z

At present U-Boot can be built as an EFI app, but it is really just for
testing, with very few features. Instead, the payload build is used for
booting on top of UEFI, where U-Boot takes over the machine immediately
and supplies its own drivers.

But the app could be made more useful.

This series provides access to EFI block devices and the video console
within U-Boot. It also restructures the app to make it possible to boot
a kernel, although further work is needed to implement this.

This can be thought of as making U-Boot perform a little like 'grub', in
that it runs purely based on UEFI-provided services.

Of course a lot more work is required, but this is a start.

Note: It would be very useful to include qemu tests of the app and stub
in CI.

This is available at u-boot-dm/efi-working

Changes in v4:
- Change the patch subject to make it clear this does not build U-Boot
- Make EFI_LOADER depend on !EFI_APP
- Update commit message to mention that you have to build U-Boot

Changes in v3:
- Add new patch to show the system-table revision
- Default to 256MB of RAM for U-Boot instead of 32MB
- Drop comments that confuse sphinx
- Fix 'complicating' typo
- Move device_path path change to its own patch
- Update minimum RAM to 256MB!
- s/qemu/QEMU/

Changes in v2:
- Add MAINTAINERS entry
- Add a better boot command too
- Add a note that EFI_GRAPHICS_OUTPUT_PROTOCOL is used
- Add a sentence about what the patch does
- Add a work-around to avoid a toolchain crash
- Add new patch to drop the OF_EMBED warning for EFI
- Add new patch to enable DM_ETH for the app
- Add new patch to support the efi command in the app
- Add support for creating a partition table with a filesystem inside
- Add support for running qemu with just a serial console (no display)
- Drop mention of partitions from the commit message
- Expand the commit message to make things clearer
- Fix 'as' typo
- Show the correct interface type with 'part list'
- Update documentation
- Update the commit message to explain things better
- Use log_info() instead of printf()

Simon Glass (34):
efi: Add a script to build an image for testing on UEFI
efi: Enable DM_ETH for the app
efi: Drop the OF_EMBED warning for EFI
x86: Create a 32/64-bit selection for the app
efi: Create a 64-bit app
x86: Don't duplicate global_ptr in 64-bit EFI app
efi: Add a way to obtain boot services in the app
efi: Add video support to the app
efi: Add EFI uclass for media
efi: Add a media/block driver for EFI block devices
efi: Locate all block devices in the app
patman: Use a ValueError exception if tools.Run() fails
binman: Report an error if test files fail to compile
binman: Support reading the offset of an ELF-file symbol
binman: Tidy up comments on _DoTestFile()
binman: Support updating the dtb in an ELF file
efi: serial: Support arrow keys
bloblist: Support allocating the bloblist
x86: Allow booting a kernel from the EFI app
x86: Don't process the kernel command line unless enabled
x86: efi: Add room for the binman definition in the dtb
efi: Drop device_path from struct efi_priv
efi: Add comments to struct efi_priv
efi: Fix ll_boot_init() operation with the app
efi: Add a few comments to the stub
efi: Share struct efi_priv between the app and stub code
efi: Move exit_boot_services into a function
efi: Check for failure when initing the app
efi: Mention that efi_info_get() is only used in the stub
efi: Show when allocated pages are used
efi: Allow easy selection of serial-only operation
efi: Update efi_get_next_mem_desc() to avoid needing a map
efi: Support the efi command in the app
efi: Show the system-table revision

MAINTAINERS | 7 +
Makefile | 10 +-
arch/sandbox/dts/test.dts | 4 +
arch/x86/cpu/efi/payload.c | 17 +-
arch/x86/cpu/intel_common/Makefile | 2 +-
arch/x86/cpu/u-boot-64.lds | 2 +
arch/x86/cpu/x86_64/Makefile | 4 +
arch/x86/cpu/x86_64/cpu.c | 32 +-
arch/x86/cpu/x86_64/misc.c | 41 +++
arch/x86/dts/Makefile | 2 +-
arch/x86/dts/efi-x86_app.dts | 4 +
arch/x86/lib/bootm.c | 11 +-
arch/x86/lib/zimage.c | 13 +-
board/efi/Kconfig | 15 +-
board/efi/efi-x86_app/Kconfig | 6 +-
board/efi/efi-x86_app/MAINTAINERS | 11 +-
cmd/Makefile | 2 +-
cmd/efi.c | 78 +++--
common/Kconfig | 15 +-
common/bloblist.c | 16 +-
common/board_f.c | 8 +-
..._app_defconfig => efi-x86_app32_defconfig} | 3 +-
configs/efi-x86_app64_defconfig | 38 +++
disk/part.c | 5 +-
doc/develop/bloblist.rst | 16 +
doc/develop/uefi/u-boot_on_efi.rst | 74 ++++-
drivers/block/Kconfig | 33 +++
drivers/block/Makefile | 4 +
drivers/block/blk-uclass.c | 2 +-
drivers/block/efi-media-uclass.c | 15 +
drivers/block/efi_blk.c | 115 ++++++++
drivers/block/sb_efi_media.c | 20 ++
drivers/serial/serial_efi.c | 11 +-
drivers/video/Kconfig | 2 +-
drivers/video/efi.c | 45 ++-
include/configs/efi-x86_app.h | 31 +-
include/dm/uclass-id.h | 1 +
include/efi.h | 121 +++++++-
include/efi_api.h | 15 +
include/init.h | 2 +-
lib/efi/Kconfig | 34 ++-
lib/efi/efi.c | 106 +++++++
lib/efi/efi_app.c | 276 +++++++++++++++++-
lib/efi/efi_stub.c | 95 +++---
lib/efi_loader/Kconfig | 1 +
scripts/build-efi.sh | 193 ++++++++++++
test/dm/Makefile | 1 +
test/dm/efi_media.c | 24 ++
tools/binman/binman.rst | 36 +++
tools/binman/cmdline.py | 2 +
tools/binman/control.py | 11 +
tools/binman/elf.py | 74 ++++-
tools/binman/elf_test.py | 45 ++-
tools/binman/ftest.py | 88 +++++-
tools/binman/test/Makefile | 13 +-
tools/binman/test/bss_data.c | 2 +-
tools/binman/test/embed_data.c | 16 +
tools/binman/test/embed_data.lds | 23 ++
tools/binman/test/u_boot_binman_embed.c | 13 +
tools/binman/test/u_boot_binman_embed.lds | 29 ++
tools/binman/test/u_boot_binman_embed_sm.c | 13 +
tools/patman/tools.py | 2 +-
62 files changed, 1745 insertions(+), 205 deletions(-)
create mode 100644 arch/x86/cpu/x86_64/misc.c
rename configs/{efi-x86_app_defconfig => efi-x86_app32_defconfig} (94%)
create mode 100644 configs/efi-x86_app64_defconfig
create mode 100644 drivers/block/efi-media-uclass.c
create mode 100644 drivers/block/efi_blk.c
create mode 100644 drivers/block/sb_efi_media.c
create mode 100755 scripts/build-efi.sh
create mode 100644 test/dm/efi_media.c
create mode 100644 tools/binman/test/embed_data.c
create mode 100644 tools/binman/test/embed_data.lds
create mode 100644 tools/binman/test/u_boot_binman_embed.c
create mode 100644 tools/binman/test/u_boot_binman_embed.lds
create mode 100644 tools/binman/test/u_boot_binman_embed_sm.c

--
2.34.0.rc0.344.g81b53c2807-goog