[PATCH v2 00/16] passage: Define a standard for firmware data flow
Simon Glass
sjg at chromium.org
Mon Jan 17 16:04:12 CET 2022
This series adds a standard way of passing information between different
firmware phases. This already exists in U-Boot at a very basic level, in
the form of a bloblist containing an spl_handoff structure, but the intent
here is to define something useful across projects.
The need for this is growing as firmware fragments into multiple binaries
each with its own purpose. Without any run-time connection, we must rely
on build-time settings which are brittle and painful to keep in sync.
This feature is named 'standard passage' since the name is more unique
than many others that could be chosen, it is a passage in the sense that
information is flowing from one place to another and it is standard,
because that is what we want to create.
The implementation is simply a pointer to a bloblist in a register, with
an extra register to point to a devicetree, for more complex data. This
should cover all cases (small memory footprint as well as complex data
flow) and be easy enough to implement on all architectures.
The emphasis is on enabling open communcation between binaries, not
enabling passage of secret, undocumented data, although this is possible
in a private environment.
This series is available at u-boot-dm/pass-working
Changes in v2:
- Add a devicetree for qemu-arm so that qemu_arm_spl can work
- Add comments about how to pass standard passage to EFI
- Add comments about passing a bloblist to Linux
- Add detailed arch-specific information
- Add new patch with the arm-specific standard passage implementation
- Incorporate devicetree source
- Make the stdpass calling standard arch-specific
- Rebase to master
- Rebase to master (dropping bloblist patches already applied)
- Rework global_data for new stdpass convention
- Split the jump_to_image_no_args() change into its own patch
- Use three registers instead of two for the entry
Simon Glass (16):
spl: Tidy up the header includes
arm: qemu: Add an SPL build
spl: Rename jump_to_image_no_args()
passage: Support an incoming passage
passage: Support a control devicetree
passage: arm: Accept a passage from the previous phase
passage: spl: Support adding the dtb to the passage bloblist
passage: spl: Support passing the passage to U-Boot
passage: arm: Add the arch-specific standard passage impl
passage: Add a qemu test for ARM
sandbox: Add a way of checking structs for standard passage
passage: Add documentation
passage: Add docs for spl_handoff
x86: Move Intel GNVS file into the common include directory
passage: Add checks for pre-existing blobs
WIP: RFC: Add a gitlab test
.gitlab-ci.yml | 6 +
MAINTAINERS | 10 +
arch/arm/Kconfig | 2 +-
arch/arm/cpu/armv7/cpu.c | 28 ++
arch/arm/cpu/armv7/start.S | 7 +-
arch/arm/cpu/armv8/cpu.c | 20 +
arch/arm/dts/qemu-arm-u-boot.dtsi | 22 +
arch/arm/dts/qemu-arm.dts | 393 ++++++++++++++++-
arch/arm/lib/crt0.S | 5 +
arch/arm/mach-imx/imx8ulp/soc.c | 2 +-
arch/arm/mach-imx/spl.c | 2 +-
arch/arm/mach-k3/common.c | 2 +-
arch/arm/mach-omap2/boot-common.c | 2 +-
arch/arm/mach-qemu/Kconfig | 9 +
arch/arm/mach-tegra/spl.c | 2 +-
arch/mips/lib/spl.c | 2 +-
arch/riscv/lib/spl.c | 2 +-
arch/sandbox/cpu/spl.c | 4 +-
arch/x86/cpu/apollolake/acpi.c | 2 +-
arch/x86/cpu/intel_common/acpi.c | 2 +-
.../include/asm/arch-apollolake/global_nvs.h | 2 +-
arch/x86/lib/spl.c | 2 +-
arch/x86/lib/tpl.c | 2 +-
board/emulation/qemu-arm/Kconfig | 23 +-
board/emulation/qemu-arm/MAINTAINERS | 1 +
board/emulation/qemu-arm/Makefile | 1 +
board/emulation/qemu-arm/spl.c | 27 ++
board/freescale/common/fsl_chain_of_trust.c | 2 +-
board/google/chromebook_coral/coral.c | 2 +-
board/renesas/rcar-common/gen3-spl.c | 2 +-
board/sandbox/Makefile | 3 +-
board/sandbox/stdpass_check.c | 107 +++++
common/Kconfig | 51 +++
common/bloblist.c | 8 +-
common/board_f.c | 48 ++-
common/spl/spl.c | 95 ++++-
configs/qemu_arm_spl_defconfig | 78 ++++
doc/board/emulation/qemu-arm.rst | 37 ++
doc/develop/bloblist.rst | 4 +-
doc/develop/index.rst | 1 +
doc/develop/std_passage.rst | 396 ++++++++++++++++++
drivers/usb/gadget/f_sdp.c | 2 +-
dts/Kconfig | 12 +
include/asm-generic/global_data.h | 38 ++
include/bloblist.h | 1 +
include/fdtdec.h | 4 +
include/handoff.h | 8 +-
.../x86/include/asm => include}/intel_gnvs.h | 0
include/passage.h | 28 ++
include/spl.h | 4 +-
include/stdpass/README | 4 +
include/stdpass/tpm2_eventlog.h | 42 ++
include/stdpass/vboot_ctx.h | 267 ++++++++++++
lib/asm-offsets.c | 6 +
lib/fdtdec.c | 33 ++
test/py/tests/test_passage.py | 11 +
56 files changed, 1804 insertions(+), 72 deletions(-)
create mode 100644 arch/arm/dts/qemu-arm-u-boot.dtsi
create mode 100644 board/emulation/qemu-arm/spl.c
create mode 100644 board/sandbox/stdpass_check.c
create mode 100644 configs/qemu_arm_spl_defconfig
create mode 100644 doc/develop/std_passage.rst
rename {arch/x86/include/asm => include}/intel_gnvs.h (100%)
create mode 100644 include/passage.h
create mode 100644 include/stdpass/README
create mode 100644 include/stdpass/tpm2_eventlog.h
create mode 100644 include/stdpass/vboot_ctx.h
create mode 100644 test/py/tests/test_passage.py
--
2.34.1.703.g22d0c6ccf7-goog
More information about the U-Boot
mailing list