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

Simon Glass sjg at chromium.org
Wed Sep 8 15:33:30 CEST 2021


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


Simon Glass (35):
  x86: Keep symbol information in u-boot ELF file
  x86: Create a new header for EFI
  x86: Show some EFI info with the bdinfo command
  x86: Tidy up global_data pointer for 64-bit
  efi: Add a script for building and testing U-Boot on UEFI
  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
  RFC: efi: Drop code that doesn't work with driver model
  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: Allow timeout to occur in the image or its section
  binman: Tidy up comments on _DoTestFile()
  binman: Support updating the dtb in an ELF file
  efi: serial: Support arrow keys
  bloblist: Move to rST format
  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: 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

 arch/sandbox/dts/test.dts                     |   4 +
 arch/x86/config.mk                            |   4 +-
 arch/x86/cpu/efi/payload.c                    |  13 +-
 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/include/asm/efi.h                    |  39 +++++
 arch/x86/include/asm/global_data.h            |   2 +
 arch/x86/include/asm/zimage.h                 |   3 -
 arch/x86/lib/Makefile                         |   1 +
 arch/x86/lib/bdinfo.c                         |  22 +++
 arch/x86/lib/bootm.c                          |  11 +-
 arch/x86/lib/zimage.c                         |  14 +-
 board/efi/Kconfig                             |  15 +-
 board/efi/efi-x86_app/Kconfig                 |   6 +-
 board/efi/efi-x86_app/MAINTAINERS             |  11 +-
 common/Kconfig                                |  15 +-
 common/bloblist.c                             |  16 +-
 common/board_f.c                              |   8 +-
 ..._app_defconfig => efi-x86_app32_defconfig} |   2 +-
 configs/efi-x86_app64_defconfig               |  39 +++++
 doc/{README.bloblist => develop/bloblist.rst} |  20 ++-
 doc/develop/index.rst                         |   1 +
 doc/develop/uefi/u-boot_on_efi.rst            |   8 +-
 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                  |  21 +++
 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                                 | 117 ++++++++++++++-
 include/efi_api.h                             |  15 ++
 include/init.h                                |   2 +-
 lib/efi/Kconfig                               |  34 ++++-
 lib/efi/efi.c                                 | 108 ++++++++++++++
 lib/efi/efi_app.c                             | 139 ++++++++++++++++--
 lib/efi/efi_stub.c                            |  95 +++++-------
 lib/efi_driver/Makefile                       |   2 +-
 lib/efi_loader/Kconfig                        |   2 +
 lib/efi_loader/efi_device_path.c              |  96 +++---------
 lib/efi_loader/efi_disk.c                     |  48 ------
 scripts/build-efi.sh                          | 111 ++++++++++++++
 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                         |  91 +++++++++++-
 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 +-
 67 files changed, 1492 insertions(+), 293 deletions(-)
 create mode 100644 arch/x86/cpu/x86_64/misc.c
 create mode 100644 arch/x86/include/asm/efi.h
 create mode 100644 arch/x86/lib/bdinfo.c
 rename configs/{efi-x86_app_defconfig => efi-x86_app32_defconfig} (97%)
 create mode 100644 configs/efi-x86_app64_defconfig
 rename doc/{README.bloblist => develop/bloblist.rst} (77%)
 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.33.0.153.gba50c8fa24-goog



More information about the U-Boot mailing list