
The current UPL spec[1] has been tidied up and improved over the last year, since U-Boot's original UPL support was written.
This series addresses various issues, with a goal of having U-Boot boot EDK2.
There is still more work to do, but this series gets to the point (on QEMU) where the ACPI tables are required. Further work will be needed to relocate the tables out of the QEMU firmware-filesystem.
[1] git@github.com:UniversalPayload/spec.git commit 3f1450d
Simon Glass (67): bloblist: Make BLOBLIST_ALLOC the default abuf: Provide a way to get the buffer address abuf: Allow use in host tools abuf: Provide a constant buffer cpu: Provide a way to get the physical-address size serial: Support info() method in ns16550 xPL with UPL mkimage: Update map_to_sysmem() to match its prototype x86: Emable meminfo command x86: Show the timestamp counter with bdinfo ofnode: Use 4K for a default tree-size ofnode: Indicate when out of space in a few places ofnode: Update of_add_subnode() to indicate name is alloced boot: Rename fit_image_get_data() boot: Rename fit_image_get_data_and_size() boot: Update fit_image_get_emb_data to use abuf boot: Use fit_image_get_data() to get data boot: Update fit_image_get_data() to use abuf test: Fix inpected typo in upl test emulation: fdt: Relax condition for OF_HAS_PRIOR_STAGE emulation: Use bloblist to hold tables x86: Create more space for SPL with qemu-x86_64 upl: Create a function to create a memory node upl: Update add_upl_memmap() to use write_mem_node() upl: Update add_upl_memres() to use write_mem_node() upl: Support writing a UPL only for testing upl: Drop enum upl_serial_access_type upl: Init serial and graphics alists in upl_init() upl: Move serial and graphics addition-code to upl_common pci: video: Set up the pixel-format field x86: Show an error if video fails x86: Support jumping to a UPL image x86: Enable UPL handoff for SPL x86: Align the SMBIOS table to a 4K boundary upl: Require OFNODE_MULTI_TREE when writing a UPL handoff upl: Drop the argument to spl_write_upl_handoff() x86: emulation: Enable UPL upl: Correct comment and condition in add_upl_memres() upl: Add addr/size tags in the reserved-memory node upl: Update upl_add_graphics() to return framebuffer upl: Add a function to write a UPL handoff to an abuf upl: Use a 64-bit value for a memregion base-address upl: Set bit 32 of the address when using ISA upl: Add RAM to the memory region upl: Add a compatible string for the upl-params node upl: Move buffer_addr_size() higher and rename upl: Factor out part of encode_reg() to new function upl: Move decode_addr_size() higher and rename upl: Factor out part of decode_reg() to new function upl: Correct name of upl-images dm: core: Clarify behaviour of ofnode_name_eq() dm: core: Allow ofnode_name_eq() to accept a unit address dm: core: Rewrite ofnode_find_subnode() to use ofnode API upl: test: Show the handoff FDT when debugging upl: Use a reg property to specify the FIT address and size upl: Update and tidy writing of images upl: Make use of alist_for_each() upl: Correct use of sizeof() upl: Drop acpi_nvs_size upl: Improve uniqueness of log_msg_ret() strings upl: Add PCI information upl: Handle serial on an ISA bus with /chosen node upl: Add missing word in comment for upl_write_handoff() upl: Add a command to execute a UPL payload scripts: Update qemu script to use 64-bit on x86 always scripts: Update qemu script to support specifying a UPL upl: Add reserved memory for the ACPI and SMBIOS tables upl: Add an 'addr' property for Tianocore
arch/Kconfig | 2 + arch/arm/cpu/armv8/sec_firmware.c | 13 +- arch/arm/mach-k3/r5/sysfw-loader.c | 11 +- arch/x86/include/asm/cpu.h | 9 - arch/x86/lib/bdinfo.c | 3 + arch/x86/lib/bootm.c | 18 +- arch/x86/lib/spl.c | 12 +- arch/x86/lib/tables.c | 9 +- boot/Kconfig | 9 + boot/Makefile | 1 + boot/image-board.c | 11 +- boot/image-fit.c | 98 ++---- boot/upl_common.c | 191 ++++++++++ boot/upl_exec.c | 130 +++++++ boot/upl_read.c | 220 ++++++------ boot/upl_write.c | 464 ++++++++++++++++--------- cmd/upl.c | 36 +- cmd/ximg.c | 14 +- common/Kconfig | 15 +- common/spl/spl.c | 2 +- common/spl/spl_fit.c | 8 +- common/spl/spl_upl.c | 114 +----- common/splash_source.c | 18 +- common/update.c | 7 +- configs/chromebook_bob_defconfig | 1 + configs/chromebook_coral_defconfig | 1 + configs/chromebook_kevin_defconfig | 1 + configs/chromebook_samus_tpl_defconfig | 1 + configs/qemu-x86_64_defconfig | 9 +- configs/qemu-x86_defconfig | 2 + configs/qemu_arm64_defconfig | 2 + configs/qemu_arm_defconfig | 2 + drivers/core/ofnode.c | 57 +-- drivers/misc/qfw_acpi.c | 37 +- drivers/misc/qfw_smbios.c | 45 ++- drivers/pci/pci_rom.c | 3 + drivers/serial/ns16550.c | 2 +- drivers/video/bochs.c | 1 + drivers/video/video-uclass.c | 1 + dts/Kconfig | 2 +- include/abuf.h | 25 ++ include/alist.h | 2 +- include/cpu.h | 14 + include/dm/ofnode.h | 15 +- include/image.h | 39 ++- include/spl.h | 3 +- include/upl.h | 211 +++++++++-- include/video.h | 2 + lib/Kconfig | 1 + lib/Makefile | 5 + lib/abuf.c | 21 +- lib/alist.c | 2 +- scripts/build-qemu.sh | 28 +- test/boot/upl.c | 72 ++-- test/common/Makefile | 4 + test/dm/core.c | 5 + test/dm/ofnode.c | 19 + test/lib/abuf.c | 27 +- test/py/tests/test_upl.py | 2 +- tools/Makefile | 3 +- tools/fit_image.c | 8 +- tools/image-host.c | 23 +- tools/mkimage.h | 2 +- 63 files changed, 1445 insertions(+), 670 deletions(-) create mode 100644 boot/upl_exec.c