summaryrefslogtreecommitdiff
path: root/doc/usage/cmd/upl.rst
blob: 8d6ea5daa37c4162af8895ffcce7537e0c3bb3d8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
.. SPDX-License-Identifier: GPL-2.0+:

upl command
===========

Synopsis
--------

::

    upl write
    upl read <addr>
    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