Universal Payload (UPL) is an Industry Standard for firmware components[1]. UPL is designed to improve interoperability within the firmware industry, allowing mixing and matching of projects with less friction and fewer project-specific implementations. UPL is cross-platform, supporting ARM, x86 and RISC-V initially.
This series provides some initial support for this, targeting 0.9.1 and sandbox only. Features still to come include: - Support for architectures - FIT validation - Handoff validation - Interoperability tests This series is available at dm/uplb-working and requires the alist series at dm/alist-working[2] [1] https://universalpayload.github.io/spec/ [2] https://patchwork.ozlabs.org/project/uboot/list/?series=414642 Changes in v4: - Mention the return value in upl_add_image() - Rebase to -next - Update alist_add() calls - Update upl_add_image() to avoid code-size increase with fdt_getprop() Changes in v3: - Allow upl.h to be built by the host build - Fix 'handed' typo - Rebase on earlier change - Split out into its own commit - Use -errno instead of inventing a new error - Use a block size of 1 if !CONFIG_SPL_LOAD_BLOCK - Use longer error messages - Use sizeof(*header) instead of 512 Changes in v2: - Add a function to init the UPL process in SPL - Add a link to the command - Add a link to the spec - Add a runtime flag to enable UPL - Hang when something goes wrong, to avoid a broken boot - Put the upl tests under their own subcommand to avoid bootstd init - Put upl_image() calls in a common place - Rework to use alist instead of fixed-length arrays - Support CI testing Simon Glass (21): sandbox: Use const in os_jump_to_file() sandbox: Fix a comment in os_find_u_boot() test: Move some SPL-loading test-code into sandbox common fdt: Don't overwrite bloblist devicetree sandbox: fdt: Avoid overwriting an existing fdt sandbox: Return error code from read/write/seek sandbox: Add ELF file to VPL u-boot.img sandbox: Set up global_data earlier upl: Add support for reading a upl handoff upl: Add support for writing a upl handoff upl: Add basic tests upl: Add a command upl: Add support for Universal Payload in SPL spl: Set SPL_FIT_FOUND for full FIT also spl: Plumb in the Universal Payload handoff upl: Plumb in universal payload to the init process sandbox_vpl: Enable Universal Payload upl: Add initial documentation sandbox: Add a flag to enable UPL sandbox: Add an SPL loader for UPL upl: Add an end-to-end test MAINTAINERS | 13 + Makefile | 4 +- arch/sandbox/cpu/cpu.c | 2 + arch/sandbox/cpu/os.c | 30 +- arch/sandbox/cpu/spl.c | 120 +++++- arch/sandbox/cpu/start.c | 18 +- arch/sandbox/include/asm/spl.h | 15 + arch/sandbox/include/asm/state.h | 1 + boot/Kconfig | 70 ++++ boot/Makefile | 4 + boot/image-fit.c | 3 + boot/upl_common.c | 60 +++ boot/upl_common.h | 24 ++ boot/upl_read.c | 588 ++++++++++++++++++++++++++++ boot/upl_write.c | 622 ++++++++++++++++++++++++++++++ cmd/Kconfig | 7 + cmd/Makefile | 1 + cmd/upl.c | 118 ++++++ common/board_f.c | 22 ++ common/board_r.c | 2 + common/spl/Makefile | 2 + common/spl/spl.c | 8 + common/spl/spl_fit.c | 9 + common/spl/spl_upl.c | 172 +++++++++ configs/sandbox_defconfig | 1 + configs/sandbox_vpl_defconfig | 4 + doc/usage/cmd/upl.rst | 186 +++++++++ doc/usage/index.rst | 2 + doc/usage/upl.rst | 46 +++ drivers/block/sandbox.c | 4 +- drivers/usb/emul/sandbox_flash.c | 2 +- fs/sandbox/sandboxfs.c | 6 +- include/asm-generic/global_data.h | 19 + include/os.h | 6 +- include/spl.h | 16 + include/test/suites.h | 1 + include/upl.h | 382 ++++++++++++++++++ lib/fdtdec.c | 1 + test/boot/Makefile | 2 + test/boot/upl.c | 437 +++++++++++++++++++++ test/cmd_ut.c | 3 + test/image/spl_load_os.c | 53 +-- test/py/tests/test_upl.py | 38 ++ 43 files changed, 3052 insertions(+), 72 deletions(-) create mode 100644 boot/upl_common.c create mode 100644 boot/upl_common.h create mode 100644 boot/upl_read.c create mode 100644 boot/upl_write.c create mode 100644 cmd/upl.c create mode 100644 common/spl/spl_upl.c create mode 100644 doc/usage/cmd/upl.rst create mode 100644 doc/usage/upl.rst create mode 100644 include/upl.h create mode 100644 test/boot/upl.c create mode 100644 test/py/tests/test_upl.py -- 2.34.1