blob: 3c4a10c862ccb4696b88e363de56f98910349b1a [file] [log] [blame]
Simon Glass7869aa72024-08-07 16:47:36 -06001.. SPDX-License-Identifier: GPL-2.0-or-later
2
3Universal Payload
4-----------------
5
6`Universal Payload (UPL) <https://universalpayload.github.io/spec/index.html>`_
7is an Industry Standard for firmware components. UPL
8is designed to improve interoperability within the firmware industry, allowing
9mixing and matching of projects with less friction and fewer project-specific
10implementations. UPL is cross-platform, supporting ARM, x86 and RISC-V
11initially.
12
13UPL is defined in termns of two firmware components:
14
15`Platform Init`
16 Perhaps initial setup of the hardware and jumps to the payload.
17
18`Payload`
19 Selects the OS to boot
20
21In practice UPL can be used to handle any number of handoffs through the
22firmware startup process, with one program acting as platform init and another
23acting as the payload.
24
25UPL provides a standard for three main pieces:
26
27- file format for the payload, which may comprise multiple images to load
28- handoff format for the information the payload needs, such as serial port,
29 memory layout, etc.
30- machine state and register settings at the point of handoff
31
32See also the :doc:`cmd/upl`.
33
34UPL in U-Boot
35~~~~~~~~~~~~~
36
37U-Boot supports:
38
39- writing a UPL handoff (devicetree) in SPL
40- reading a UPL handoff in U-Boot proper
41- creating a FIT
42
43There are some new FIT features in UPL which are not yet supported in U-Boot.
44
45.. sectionauthor:: Simon Glass <sjg@chromium.org>
46.. July 2024