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 v3:
- Use longer error messages
- Use -errno instead of inventing a new error
- Use sizeof(*header) instead of 512
- Use a block size of 1 if !CONFIG_SPL_LOAD_BLOCK
- Fix 'handed' typo
- Rebase on earlier change
- Allow up.h to be built by the host build
- Split out into its own commit

Changes in v2:
- Put the upl tests under their own subcommand to avoid bootstd init
- Add a function to init the UPL process in SPL
- Hang when something goes wrong, to avoid a broken boot
- Add a runtime flag to enable UPL
- Put upl_image() calls in a common place
- Add a link to the spec
- Add a link to the command
- Support CI testing
- Rework to use alist instead of fixed-length arrays

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                  |   4 +
 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              |  10 +
 common/spl/spl_upl.c              | 171 ++++++++
 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                     | 364 +++++++++++++++++
 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, 3035 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

Reply via email to