.. SPDX-License-Identifier: GPL-2.0+: upl command =========== Synopsis -------- :: upl write upl read upl info [-v] Description ----------- The *upl* command is used to test U-Boot's support for the Universal Payload Specification (UPL) firmware standard (see :doc:`../upl`). It allows creation of a fake handoff for use in testing. upl write ~~~~~~~~~ Write a fake UPL handoff structure. The `upladdr` environment variable is set to the address of this structure and `uplsize` is set to the size. upl read ~~~~~~~~ Read a UPL handoff structure into internal state. This allows testing that the handoff can be obtained. upl info ~~~~~~~~ Show basic information about usage of UPL: UPL state active or inactive (indicates whether U-Boot booted from UPL or not) fit Address of the FIT which was loaded conf_offset 2a4 FIT offset of the chosen configuration For each image the following information is shown: Image number Images are numbered from 0 load Address to which the image was loaded size Size of the loaded image offset FIT offset of the image description Description of the image Example ------- This shows checking whether a UPL handoff was read at start-up:: => upl info UPL state: active This shows how to use the command to write and display the handoff:: => upl write UPL handoff written to bc8a5e0 size 662 => print upladdr upladdr=bc8a5e0 => print uplsize uplsize=662 > fdt addr ${upladdr} Working FDT set to bc8a5e0 => fdt print / { #address-cells = <0x00000001>; #size-cells = <0x00000001>; options { upl-params { smbios = <0x00000123>; acpi = <0x00000456>; bootmode = "default", "s3"; addr-width = <0x0000002e>; acpi-nvs-size = <0x00000100>; }; upl-image { fit = <0x00000789>; conf-offset = <0x00000234>; image-1 { load = <0x00000001>; size = <0x00000002>; offset = <0x00000003>; description = "U-Boot"; }; image-2 { load = <0x00000004>; size = <0x00000005>; offset = <0x00000006>; description = "ATF"; }; }; }; memory@0x10 { reg = <0x00000010 0x00000020 0x00000030 0x00000040 0x00000050 0x00000060>; }; memory@0x70 { reg = <0x00000070 0x00000080>; hotpluggable; }; memory-map { acpi@0x11 { reg = <0x00000011 0x00000012 0x00000013 0x00000014 0x00000015 0x00000016 0x00000017 0x00000018 0x00000019 0x0000001a>; usage = "acpi-reclaim"; }; u-boot@0x21 { reg = <0x00000021 0x00000022>; usage = "boot-data"; }; efi@0x23 { reg = <0x00000023 0x00000024>; usage = "runtime-code"; }; empty@0x25 { reg = <0x00000025 0x00000026 0x00000027 0x00000028>; }; acpi-things@0x2a { reg = <0x0000002a 0x00000000>; usage = "acpi-nvs", "runtime-code"; }; }; reserved-memory { mmio@0x2b { reg = <0x0000002b 0x0000002c>; }; memory@0x2d { reg = <0x0000002d 0x0000002e 0x0000002f 0x00000030>; no-map; }; }; serial@0xf1de0000 { compatible = "ns16550a"; clock-frequency = <0x001c2000>; current-speed = <0x0001c200>; reg = <0xf1de0000 0x00000100>; reg-io-shift = <0x00000002>; reg-offset = <0x00000040>; virtual-reg = <0x20000000>; access-type = "mmio"; }; framebuffer@0xd0000000 { compatible = "simple-framebuffer"; reg = <0xd0000000 0x10000000>; width = <0x00000500>; height = <0x00000500>; stride = <0x00001400>; format = "a8r8g8b8"; }; }; => This showing reading the handoff into internal state:: => upl read bc8a5e0 Reading UPL at bc8a5e0 => This shows getting basic information about UPL: => upl info -v UPL state: active fit 1264000 conf_offset 2a4 image 0: load 200000 size 105f5c8 offset a4: U-Boot 2024.07-00770-g739ee12e8358 for sandbox board