| .. SPDX-License-Identifier: GPL-2.0-or-later |
| |
| Universal Payload |
| ----------------- |
| |
| `Universal Payload (UPL) <https://universalpayload.github.io/spec/index.html>`_ |
| is an Industry Standard for firmware components. 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. |
| |
| UPL is defined in termns of two firmware components: |
| |
| `Platform Init` |
| Perhaps initial setup of the hardware and jumps to the payload. |
| |
| `Payload` |
| Selects the OS to boot |
| |
| In practice UPL can be used to handle any number of handoffs through the |
| firmware startup process, with one program acting as platform init and another |
| acting as the payload. |
| |
| UPL provides a standard for three main pieces: |
| |
| - file format for the payload, which may comprise multiple images to load |
| - handoff format for the information the payload needs, such as serial port, |
| memory layout, etc. |
| - machine state and register settings at the point of handoff |
| |
| See also the :doc:`cmd/upl`. |
| |
| UPL in U-Boot |
| ~~~~~~~~~~~~~ |
| |
| U-Boot supports: |
| |
| - writing a UPL handoff (devicetree) in SPL |
| - reading a UPL handoff in U-Boot proper |
| - creating a FIT |
| |
| There are some new FIT features in UPL which are not yet supported in U-Boot. |
| |
| .. sectionauthor:: Simon Glass <sjg@chromium.org> |
| .. July 2024 |