Simon Glass | 7869aa7 | 2024-08-07 16:47:36 -0600 | [diff] [blame] | 1 | .. SPDX-License-Identifier: GPL-2.0-or-later |
| 2 | |
| 3 | Universal Payload |
| 4 | ----------------- |
| 5 | |
| 6 | `Universal Payload (UPL) <https://universalpayload.github.io/spec/index.html>`_ |
| 7 | is an Industry Standard for firmware components. UPL |
| 8 | is designed to improve interoperability within the firmware industry, allowing |
| 9 | mixing and matching of projects with less friction and fewer project-specific |
| 10 | implementations. UPL is cross-platform, supporting ARM, x86 and RISC-V |
| 11 | initially. |
| 12 | |
| 13 | UPL 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 | |
| 21 | In practice UPL can be used to handle any number of handoffs through the |
| 22 | firmware startup process, with one program acting as platform init and another |
| 23 | acting as the payload. |
| 24 | |
| 25 | UPL 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 | |
| 32 | See also the :doc:`cmd/upl`. |
| 33 | |
| 34 | UPL in U-Boot |
| 35 | ~~~~~~~~~~~~~ |
| 36 | |
| 37 | U-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 | |
| 43 | There 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 |