blob: 1621ff30caf39392c11663257e1d4dedc69b7f6e [file] [log] [blame]
Simon Glass7a61c6b2018-07-17 13:25:37 -06001Binman Entry Documentation
2===========================
3
4This file describes the entry types supported by binman. These entry types can
5be placed in an image one by one to build up a final firmware image. It is
6fairly easy to create new entry types. Just add a new file to the 'etype'
7directory. You can use the existing entries as examples.
8
9Note that some entries are subclasses of others, using and extending their
10features to produce new behaviours.
11
12
13
Simon Glassa7c97782022-08-07 16:33:25 -060014.. _etype_atf_bl31:
15
Simon Glass8911fa12021-03-18 20:25:16 +130016Entry: atf-bl31: ARM Trusted Firmware (ATF) BL31 blob
17-----------------------------------------------------
Simon Glass559c4de2020-09-01 05:13:58 -060018
19Properties / Entry arguments:
20 - atf-bl31-path: Filename of file to read into entry. This is typically
21 called bl31.bin or bl31.elf
22
23This entry holds the run-time firmware, typically started by U-Boot SPL.
24See the U-Boot README for your architecture or board for how to use it. See
25https://github.com/ARM-software/arm-trusted-firmware for more information
26about ATF.
27
28
29
Simon Glassa7c97782022-08-07 16:33:25 -060030.. _etype_atf_fip:
31
Simon Glass3efb2972021-11-23 21:08:59 -070032Entry: atf-fip: ARM Trusted Firmware's Firmware Image Package (FIP)
33-------------------------------------------------------------------
34
35A FIP_ provides a way to group binaries in a firmware image, used by ARM's
36Trusted Firmware A (TF-A) code. It is a simple format consisting of a
37table of contents with information about the type, offset and size of the
38binaries in the FIP. It is quite similar to FMAP, with the major difference
39that it uses UUIDs to indicate the type of each entry.
40
41Note: It is recommended to always add an fdtmap to every image, as well as
42any FIPs so that binman and other tools can access the entire image
43correctly.
44
45The UUIDs correspond to useful names in `fiptool`, provided by ATF to
46operate on FIPs. Binman uses these names to make it easier to understand
47what is going on, although it is possible to provide a UUID if needed.
48
49The contents of the FIP are defined by subnodes of the atf-fip entry, e.g.::
50
51 atf-fip {
52 soc-fw {
53 filename = "bl31.bin";
54 };
55
56 scp-fwu-cfg {
57 filename = "bl2u.bin";
58 };
59
60 u-boot {
61 fip-type = "nt-fw";
62 };
63 };
64
65This describes a FIP with three entries: soc-fw, scp-fwu-cfg and nt-fw.
66You can use normal (non-external) binaries like U-Boot simply by adding a
67FIP type, with the `fip-type` property, as above.
68
69Since FIP exists to bring blobs together, Binman assumes that all FIP
70entries are external binaries. If a binary may not exist, you can use the
71`--allow-missing` flag to Binman, in which case the image is still created,
72even though it will not actually work.
73
74The size of the FIP depends on the size of the binaries. There is currently
75no way to specify a fixed size. If the `atf-fip` node has a `size` entry,
76this affects the space taken up by the `atf-fip` entry, but the FIP itself
77does not expand to use that space.
78
79Some other FIP features are available with Binman. The header and the
80entries have 64-bit flag works. The flag flags do not seem to be defined
81anywhere, but you can use `fip-hdr-flags` and fip-flags` to set the values
82of the header and entries respectively.
83
84FIP entries can be aligned to a particular power-of-two boundary. Use
85fip-align for this.
86
87Binman only understands the entry types that are included in its
88implementation. It is possible to specify a 16-byte UUID instead, using the
89fip-uuid property. In this case Binman doesn't know what its type is, so
90just uses the UUID. See the `u-boot` node in this example::
91
92 binman {
93 atf-fip {
94 fip-hdr-flags = /bits/ 64 <0x123>;
95 fip-align = <16>;
96 soc-fw {
97 fip-flags = /bits/ 64 <0x456>;
98 filename = "bl31.bin";
99 };
100
101 scp-fwu-cfg {
102 filename = "bl2u.bin";
103 };
104
105 u-boot {
106 fip-uuid = [fc 65 13 92 4a 5b 11 ec
107 94 35 ff 2d 1c fc 79 9c];
108 };
109 };
110 fdtmap {
111 };
112 };
113
114Binman allows reading and updating FIP entries after the image is created,
115provided that an FDPMAP is present too. Updates which change the size of a
116FIP entry will cause it to be expanded or contracted as needed.
117
118Properties for top-level atf-fip node
119~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
120
121fip-hdr-flags (64 bits)
122 Sets the flags for the FIP header.
123
124Properties for subnodes
125~~~~~~~~~~~~~~~~~~~~~~~
126
127fip-type (str)
128 FIP type to use for this entry. This is needed if the entry
129 name is not a valid type. Value types are defined in `fip_util.py`.
130 The FIP type defines the UUID that is used (they map 1:1).
131
132fip-uuid (16 bytes)
133 If there is no FIP-type name defined, or it is not supported by Binman,
134 this property sets the UUID. It should be a 16-byte value, following the
135 hex digits of the UUID.
136
137fip-flags (64 bits)
138 Set the flags for a FIP entry. Use in one of the subnodes of the
139 7atf-fip entry.
140
141fip-align
142 Set the alignment for a FIP entry, FIP entries can be aligned to a
143 particular power-of-two boundary. The default is 1.
144
145Adding new FIP-entry types
146~~~~~~~~~~~~~~~~~~~~~~~~~~
147
148When new FIP entries are defined by TF-A they appear in the
149`TF-A source tree`_. You can use `fip_util.py` to update Binman to support
150new types, then `send a patch`_ to the U-Boot mailing list. There are two
151source files that the tool examples:
152
153- `include/tools_share/firmware_image_package.h` has the UUIDs
154- `tools/fiptool/tbbr_config.c` has the name and descripion for each UUID
155
156To run the tool::
157
158 $ tools/binman/fip_util.py -s /path/to/arm-trusted-firmware
159 Warning: UUID 'UUID_NON_TRUSTED_WORLD_KEY_CERT' is not mentioned in tbbr_config.c file
160 Existing code in 'tools/binman/fip_util.py' is up-to-date
161
162If it shows there is an update, it writes a new version of `fip_util.py`
163to `fip_util.py.out`. You can change the output file using the `-i` flag.
164If you have a problem, use `-D` to enable traceback debugging.
165
166FIP commentary
167~~~~~~~~~~~~~~
168
169As a side effect of use of UUIDs, FIP does not support multiple
170entries of the same type, such as might be used to store fonts or graphics
171icons, for example. For verified boot it could be used for each part of the
172image (e.g. separate FIPs for A and B) but cannot describe the whole
173firmware image. As with FMAP there is no hierarchy defined, although FMAP
174works around this by having 'section' areas which encompass others. A
175similar workaround would be possible with FIP but is not currently defined.
176
177It is recommended to always add an fdtmap to every image, as well as any
178FIPs so that binman and other tools can access the entire image correctly.
179
180.. _FIP: https://trustedfirmware-a.readthedocs.io/en/latest/design/firmware-design.html#firmware-image-package-fip
181.. _`TF-A source tree`: https://git.trustedfirmware.org/TF-A/trusted-firmware-a.git
182.. _`send a patch`: https://www.denx.de/wiki/U-Boot/Patches
183
184
185
Simon Glassa7c97782022-08-07 16:33:25 -0600186.. _etype_blob:
187
Simon Glass8911fa12021-03-18 20:25:16 +1300188Entry: blob: Arbitrary binary blob
189----------------------------------
Simon Glass7a61c6b2018-07-17 13:25:37 -0600190
191Note: This should not be used by itself. It is normally used as a parent
192class by other entry types.
193
194Properties / Entry arguments:
195 - filename: Filename of file to read into entry
Simon Glass7ba33592018-09-14 04:57:26 -0600196 - compress: Compression algorithm to use:
197 none: No compression
198 lz4: Use lz4 compression (via 'lz4' command-line utility)
Simon Glass7a61c6b2018-07-17 13:25:37 -0600199
200This entry reads data from a file and places it in the entry. The
201default filename is often specified specified by the subclass. See for
Simon Glass537e0062021-03-18 20:24:54 +1300202example the 'u-boot' entry which provides the filename 'u-boot.bin'.
Simon Glass7a61c6b2018-07-17 13:25:37 -0600203
Simon Glass7ba33592018-09-14 04:57:26 -0600204If compression is enabled, an extra 'uncomp-size' property is written to
205the node (if enabled with -u) which provides the uncompressed size of the
206data.
Simon Glass7a61c6b2018-07-17 13:25:37 -0600207
208
Simon Glass7a61c6b2018-07-17 13:25:37 -0600209
Simon Glassa7c97782022-08-07 16:33:25 -0600210.. _etype_blob_dtb:
211
Simon Glasse219aa42018-09-14 04:57:24 -0600212Entry: blob-dtb: A blob that holds a device tree
213------------------------------------------------
214
215This is a blob containing a device tree. The contents of the blob are
216obtained from the list of available device-tree files, managed by the
217'state' module.
218
Simon Glassda6a9082023-01-07 14:07:10 -0700219Additional attributes:
220 prepend: Header used (e.g. 'length')
Simon Glasse219aa42018-09-14 04:57:24 -0600221
222
Simon Glassda6a9082023-01-07 14:07:10 -0700223
Simon Glassa7c97782022-08-07 16:33:25 -0600224.. _etype_blob_ext:
225
Simon Glass8911fa12021-03-18 20:25:16 +1300226Entry: blob-ext: Externally built binary blob
227---------------------------------------------
Simon Glass5e560182020-07-09 18:39:36 -0600228
229Note: This should not be used by itself. It is normally used as a parent
230class by other entry types.
231
Simon Glass5d94cc62020-07-09 18:39:38 -0600232If the file providing this blob is missing, binman can optionally ignore it
233and produce a broken image with a warning.
234
Simon Glass5e560182020-07-09 18:39:36 -0600235See 'blob' for Properties / Entry arguments.
236
237
238
Simon Glassa7c97782022-08-07 16:33:25 -0600239.. _etype_blob_ext_list:
240
Simon Glass0b00ae62021-11-23 21:09:52 -0700241Entry: blob-ext-list: List of externally built binary blobs
242-----------------------------------------------------------
243
244This is like blob-ext except that a number of blobs can be provided,
245typically with some sort of relationship, e.g. all are DDC parameters.
246
247If any of the external files needed by this llist is missing, binman can
248optionally ignore it and produce a broken image with a warning.
249
250Args:
251 filenames: List of filenames to read and include
252
253
Simon Glassa7c97782022-08-07 16:33:25 -0600254
255.. _etype_blob_named_by_arg:
Simon Glass0b00ae62021-11-23 21:09:52 -0700256
Simon Glassdb168d42018-07-17 13:25:39 -0600257Entry: blob-named-by-arg: A blob entry which gets its filename property from its subclass
258-----------------------------------------------------------------------------------------
259
260Properties / Entry arguments:
261 - <xxx>-path: Filename containing the contents of this entry (optional,
Simon Glass21db0ff2020-09-01 05:13:54 -0600262 defaults to None)
Simon Glassdb168d42018-07-17 13:25:39 -0600263
264where <xxx> is the blob_fname argument to the constructor.
265
266This entry cannot be used directly. Instead, it is used as a parent class
267for another entry, which defined blob_fname. This parameter is used to
268set the entry-arg or property containing the filename. The entry-arg or
269property is in turn used to set the actual filename.
270
271See cros_ec_rw for an example of this.
272
273
274
Simon Glassa7c97782022-08-07 16:33:25 -0600275.. _etype_blob_phase:
276
Simon Glass718b5292021-03-18 20:25:07 +1300277Entry: blob-phase: Section that holds a phase binary
278----------------------------------------------------
279
280This is a base class that should not normally be used directly. It is used
281when converting a 'u-boot' entry automatically into a 'u-boot-expanded'
282entry; similarly for SPL.
283
284
Simon Glassa7c97782022-08-07 16:33:25 -0600285
286.. _etype_cbfs:
Simon Glass718b5292021-03-18 20:25:07 +1300287
Simon Glass8911fa12021-03-18 20:25:16 +1300288Entry: cbfs: Coreboot Filesystem (CBFS)
289---------------------------------------
Simon Glass1de34482019-07-08 13:18:53 -0600290
291A CBFS provides a way to group files into a group. It has a simple directory
292structure and allows the position of individual files to be set, since it is
293designed to support execute-in-place in an x86 SPI-flash device. Where XIP
294is not used, it supports compression and storing ELF files.
295
296CBFS is used by coreboot as its way of orgnanising SPI-flash contents.
297
Simon Glass0ac96b62021-03-18 20:25:15 +1300298The contents of the CBFS are defined by subnodes of the cbfs entry, e.g.::
Simon Glass1de34482019-07-08 13:18:53 -0600299
300 cbfs {
301 size = <0x100000>;
302 u-boot {
303 cbfs-type = "raw";
304 };
305 u-boot-dtb {
306 cbfs-type = "raw";
307 };
308 };
309
310This creates a CBFS 1MB in size two files in it: u-boot.bin and u-boot.dtb.
311Note that the size is required since binman does not support calculating it.
312The contents of each entry is just what binman would normally provide if it
313were not a CBFS node. A blob type can be used to import arbitrary files as
Simon Glass0ac96b62021-03-18 20:25:15 +1300314with the second subnode below::
Simon Glass1de34482019-07-08 13:18:53 -0600315
316 cbfs {
317 size = <0x100000>;
318 u-boot {
319 cbfs-name = "BOOT";
320 cbfs-type = "raw";
321 };
322
323 dtb {
324 type = "blob";
325 filename = "u-boot.dtb";
326 cbfs-type = "raw";
327 cbfs-compress = "lz4";
Simon Glassc2f1aed2019-07-08 13:18:56 -0600328 cbfs-offset = <0x100000>;
Simon Glass1de34482019-07-08 13:18:53 -0600329 };
330 };
331
332This creates a CBFS 1MB in size with u-boot.bin (named "BOOT") and
333u-boot.dtb (named "dtb") and compressed with the lz4 algorithm.
334
335
336Properties supported in the top-level CBFS node:
337
338cbfs-arch:
339 Defaults to "x86", but you can specify the architecture if needed.
340
341
342Properties supported in the CBFS entry subnodes:
343
344cbfs-name:
345 This is the name of the file created in CBFS. It defaults to the entry
346 name (which is the node name), but you can override it with this
347 property.
348
349cbfs-type:
350 This is the CBFS file type. The following are supported:
351
352 raw:
353 This is a 'raw' file, although compression is supported. It can be
354 used to store any file in CBFS.
355
356 stage:
357 This is an ELF file that has been loaded (i.e. mapped to memory), so
358 appears in the CBFS as a flat binary. The input file must be an ELF
359 image, for example this puts "u-boot" (the ELF image) into a 'stage'
Simon Glass0ac96b62021-03-18 20:25:15 +1300360 entry::
Simon Glass1de34482019-07-08 13:18:53 -0600361
362 cbfs {
363 size = <0x100000>;
364 u-boot-elf {
365 cbfs-name = "BOOT";
366 cbfs-type = "stage";
367 };
368 };
369
Simon Glass0ac96b62021-03-18 20:25:15 +1300370 You can use your own ELF file with something like::
Simon Glass1de34482019-07-08 13:18:53 -0600371
372 cbfs {
373 size = <0x100000>;
374 something {
375 type = "blob";
376 filename = "cbfs-stage.elf";
377 cbfs-type = "stage";
378 };
379 };
380
381 As mentioned, the file is converted to a flat binary, so it is
382 equivalent to adding "u-boot.bin", for example, but with the load and
383 start addresses specified by the ELF. At present there is no option
384 to add a flat binary with a load/start address, similar to the
385 'add-flat-binary' option in cbfstool.
386
Simon Glassc2f1aed2019-07-08 13:18:56 -0600387cbfs-offset:
388 This is the offset of the file's data within the CBFS. It is used to
389 specify where the file should be placed in cases where a fixed position
390 is needed. Typical uses are for code which is not relocatable and must
391 execute in-place from a particular address. This works because SPI flash
392 is generally mapped into memory on x86 devices. The file header is
393 placed before this offset so that the data start lines up exactly with
394 the chosen offset. If this property is not provided, then the file is
395 placed in the next available spot.
Simon Glass1de34482019-07-08 13:18:53 -0600396
397The current implementation supports only a subset of CBFS features. It does
398not support other file types (e.g. payload), adding multiple files (like the
399'files' entry with a pattern supported by binman), putting files at a
400particular offset in the CBFS and a few other things.
401
402Of course binman can create images containing multiple CBFSs, simply by
Simon Glass0ac96b62021-03-18 20:25:15 +1300403defining these in the binman config::
Simon Glass1de34482019-07-08 13:18:53 -0600404
405
406 binman {
407 size = <0x800000>;
408 cbfs {
409 offset = <0x100000>;
410 size = <0x100000>;
411 u-boot {
412 cbfs-type = "raw";
413 };
414 u-boot-dtb {
415 cbfs-type = "raw";
416 };
417 };
418
419 cbfs2 {
420 offset = <0x700000>;
421 size = <0x100000>;
422 u-boot {
423 cbfs-type = "raw";
424 };
425 u-boot-dtb {
426 cbfs-type = "raw";
427 };
428 image {
429 type = "blob";
430 filename = "image.jpg";
431 };
432 };
433 };
434
435This creates an 8MB image with two CBFSs, one at offset 1MB, one at 7MB,
436both of size 1MB.
437
438
439
Simon Glassa7c97782022-08-07 16:33:25 -0600440.. _etype_collection:
441
Simon Glasse1915782021-03-21 18:24:31 +1300442Entry: collection: An entry which contains a collection of other entries
443------------------------------------------------------------------------
444
445Properties / Entry arguments:
446 - content: List of phandles to entries to include
447
448This allows reusing the contents of other entries. The contents of the
449listed entries are combined to form this entry. This serves as a useful
450base class for entry types which need to process data from elsewhere in
451the image, not necessarily child entries.
452
Simon Glassbd5cd882022-08-13 11:40:50 -0600453The entries can generally be anywhere in the same image, even if they are in
454a different section from this entry.
455
Simon Glasse1915782021-03-21 18:24:31 +1300456
457
Simon Glassa7c97782022-08-07 16:33:25 -0600458.. _etype_cros_ec_rw:
459
Simon Glassdb168d42018-07-17 13:25:39 -0600460Entry: cros-ec-rw: A blob entry which contains a Chromium OS read-write EC image
461--------------------------------------------------------------------------------
462
463Properties / Entry arguments:
464 - cros-ec-rw-path: Filename containing the EC image
465
466This entry holds a Chromium OS EC (embedded controller) image, for use in
467updating the EC on startup via software sync.
468
469
470
Simon Glassa7c97782022-08-07 16:33:25 -0600471.. _etype_fdtmap:
472
Simon Glass0f621332019-07-08 14:25:27 -0600473Entry: fdtmap: An entry which contains an FDT map
474-------------------------------------------------
475
476Properties / Entry arguments:
477 None
478
479An FDT map is just a header followed by an FDT containing a list of all the
Simon Glassfb30e292019-07-20 12:23:51 -0600480entries in the image. The root node corresponds to the image node in the
481original FDT, and an image-name property indicates the image name in that
482original tree.
Simon Glass0f621332019-07-08 14:25:27 -0600483
484The header is the string _FDTMAP_ followed by 8 unused bytes.
485
486When used, this entry will be populated with an FDT map which reflects the
487entries in the current image. Hierarchy is preserved, and all offsets and
488sizes are included.
489
490Note that the -u option must be provided to ensure that binman updates the
491FDT with the position of each entry.
492
Simon Glass0ac96b62021-03-18 20:25:15 +1300493Example output for a simple image with U-Boot and an FDT map::
Simon Glass0f621332019-07-08 14:25:27 -0600494
Simon Glass0ac96b62021-03-18 20:25:15 +1300495 / {
496 image-name = "binman";
497 size = <0x00000112>;
Simon Glass0f621332019-07-08 14:25:27 -0600498 image-pos = <0x00000000>;
499 offset = <0x00000000>;
Simon Glass0ac96b62021-03-18 20:25:15 +1300500 u-boot {
501 size = <0x00000004>;
502 image-pos = <0x00000000>;
503 offset = <0x00000000>;
504 };
505 fdtmap {
506 size = <0x0000010e>;
507 image-pos = <0x00000004>;
508 offset = <0x00000004>;
509 };
Simon Glass0f621332019-07-08 14:25:27 -0600510 };
Simon Glass0f621332019-07-08 14:25:27 -0600511
Simon Glassfb30e292019-07-20 12:23:51 -0600512If allow-repack is used then 'orig-offset' and 'orig-size' properties are
513added as necessary. See the binman README.
514
Simon Glass637958f2021-11-23 21:09:50 -0700515When extracting files, an alternative 'fdt' format is available for fdtmaps.
516Use `binman extract -F fdt ...` to use this. It will export a devicetree,
517without the fdtmap header, so it can be viewed with `fdtdump`.
Simon Glass0f621332019-07-08 14:25:27 -0600518
519
Simon Glass637958f2021-11-23 21:09:50 -0700520
Simon Glassa7c97782022-08-07 16:33:25 -0600521.. _etype_files:
522
Simon Glass8911fa12021-03-18 20:25:16 +1300523Entry: files: A set of files arranged in a section
524--------------------------------------------------
Simon Glassac6328c2018-09-14 04:57:28 -0600525
526Properties / Entry arguments:
527 - pattern: Filename pattern to match the files to include
Simon Glass51d02ad2020-10-26 17:40:07 -0600528 - files-compress: Compression algorithm to use:
Simon Glassac6328c2018-09-14 04:57:28 -0600529 none: No compression
530 lz4: Use lz4 compression (via 'lz4' command-line utility)
Simon Glass3f093a32021-03-18 20:24:53 +1300531 - files-align: Align each file to the given alignment
Simon Glassac6328c2018-09-14 04:57:28 -0600532
533This entry reads a number of files and places each in a separate sub-entry
534within this entry. To access these you need to enable device-tree updates
535at run-time so you can obtain the file positions.
Simon Glass7a61c6b2018-07-17 13:25:37 -0600536
537
Simon Glassac6328c2018-09-14 04:57:28 -0600538
Simon Glassa7c97782022-08-07 16:33:25 -0600539.. _etype_fill:
540
Simon Glass53f53992018-07-17 13:25:40 -0600541Entry: fill: An entry which is filled to a particular byte value
542----------------------------------------------------------------
543
544Properties / Entry arguments:
545 - fill-byte: Byte to use to fill the entry
546
547Note that the size property must be set since otherwise this entry does not
548know how large it should be.
549
550You can often achieve the same effect using the pad-byte property of the
551overall image, in that the space between entries will then be padded with
552that byte. But this entry is sometimes useful for explicitly setting the
553byte value of a region.
554
555
Simon Glassc7b010d2020-07-09 18:39:45 -0600556
Simon Glassa7c97782022-08-07 16:33:25 -0600557.. _etype_fit:
558
Simon Glass8911fa12021-03-18 20:25:16 +1300559Entry: fit: Flat Image Tree (FIT)
560---------------------------------
Simon Glass45d556d2020-07-09 18:39:45 -0600561
562This calls mkimage to create a FIT (U-Boot Flat Image Tree) based on the
563input provided.
564
565Nodes for the FIT should be written out in the binman configuration just as
566they would be in a file passed to mkimage.
567
Simon Glass0ac96b62021-03-18 20:25:15 +1300568For example, this creates an image containing a FIT with U-Boot SPL::
Simon Glass45d556d2020-07-09 18:39:45 -0600569
570 binman {
571 fit {
572 description = "Test FIT";
Simon Glassa435cd12020-09-01 05:13:59 -0600573 fit,fdt-list = "of-list";
Simon Glass45d556d2020-07-09 18:39:45 -0600574
575 images {
576 kernel@1 {
577 description = "SPL";
578 os = "u-boot";
579 type = "rkspi";
580 arch = "arm";
581 compression = "none";
582 load = <0>;
583 entry = <0>;
584
585 u-boot-spl {
586 };
587 };
588 };
589 };
590 };
591
Simon Glass912339f2022-02-08 11:50:03 -0700592More complex setups can be created, with generated nodes, as described
593below.
594
595Properties (in the 'fit' node itself)
596~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
597
598Special properties have a `fit,` prefix, indicating that they should be
599processed but not included in the final FIT.
600
601The top-level 'fit' node supports the following special properties:
602
603 fit,external-offset
604 Indicates that the contents of the FIT are external and provides the
605 external offset. This is passed to mkimage via the -E and -p flags.
606
Jonas Karlmanc59ea892023-01-21 19:01:39 +0000607 fit,align
608 Indicates what alignment to use for the FIT and its external data,
609 and provides the alignment to use. This is passed to mkimage via
610 the -B flag.
611
Simon Glass912339f2022-02-08 11:50:03 -0700612 fit,fdt-list
613 Indicates the entry argument which provides the list of device tree
614 files for the gen-fdt-nodes operation (as below). This is often
615 `of-list` meaning that `-a of-list="dtb1 dtb2..."` should be passed
616 to binman.
617
Simon Glass2d94c422023-07-18 07:23:59 -0600618 fit,fdt-list-val
619 As an alternative to fit,fdt-list the list of device tree files
620 can be provided in this property as a string list, e.g.::
621
622 fit,fdt-list-val = "dtb1", "dtb2";
623
Simon Glass912339f2022-02-08 11:50:03 -0700624Substitutions
625~~~~~~~~~~~~~
626
627Node names and property values support a basic string-substitution feature.
628Available substitutions for '@' nodes (and property values) are:
629
630SEQ:
631 Sequence number of the generated fdt (1, 2, ...)
632NAME
633 Name of the dtb as provided (i.e. without adding '.dtb')
634
635The `default` property, if present, will be automatically set to the name
636if of configuration whose devicetree matches the `default-dt` entry
637argument, e.g. with `-a default-dt=sun50i-a64-pine64-lts`.
638
639Available substitutions for property values in these nodes are:
640
641DEFAULT-SEQ:
642 Sequence number of the default fdt, as provided by the 'default-dt'
643 entry argument
644
645Available operations
646~~~~~~~~~~~~~~~~~~~~
647
648You can add an operation to an '@' node to indicate which operation is
649required::
650
651 @fdt-SEQ {
652 fit,operation = "gen-fdt-nodes";
653 ...
654 };
655
656Available operations are:
657
658gen-fdt-nodes
659 Generate FDT nodes as above. This is the default if there is no
660 `fit,operation` property.
661
Simon Glass5f423422022-03-05 20:19:12 -0700662split-elf
663 Split an ELF file into a separate node for each segment.
664
Simon Glass912339f2022-02-08 11:50:03 -0700665Generating nodes from an FDT list (gen-fdt-nodes)
666~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
667
Simon Glassa435cd12020-09-01 05:13:59 -0600668U-Boot supports creating fdt and config nodes automatically. To do this,
Simon Glass9f1c6b92022-02-08 11:50:02 -0700669pass an `of-list` property (e.g. `-a of-list=file1 file2`). This tells
670binman that you want to generates nodes for two files: `file1.dtb` and
671`file2.dtb`. The `fit,fdt-list` property (see above) indicates that
672`of-list` should be used. If the property is missing you will get an error.
Simon Glassa435cd12020-09-01 05:13:59 -0600673
Simon Glass0ac96b62021-03-18 20:25:15 +1300674Then add a 'generator node', a node with a name starting with '@'::
Simon Glassa435cd12020-09-01 05:13:59 -0600675
676 images {
677 @fdt-SEQ {
678 description = "fdt-NAME";
679 type = "flat_dt";
680 compression = "none";
681 };
682 };
683
Simon Glass9f1c6b92022-02-08 11:50:02 -0700684This tells binman to create nodes `fdt-1` and `fdt-2` for each of your two
Simon Glassa435cd12020-09-01 05:13:59 -0600685files. All the properties you specify will be included in the node. This
686node acts like a template to generate the nodes. The generator node itself
687does not appear in the output - it is replaced with what binman generates.
Simon Glass9f1c6b92022-02-08 11:50:02 -0700688A 'data' property is created with the contents of the FDT file.
Simon Glassa435cd12020-09-01 05:13:59 -0600689
Simon Glass0ac96b62021-03-18 20:25:15 +1300690You can create config nodes in a similar way::
Simon Glassa435cd12020-09-01 05:13:59 -0600691
692 configurations {
693 default = "@config-DEFAULT-SEQ";
694 @config-SEQ {
695 description = "NAME";
Samuel Holland91079ac2020-10-21 21:12:14 -0500696 firmware = "atf";
697 loadables = "uboot";
Simon Glassa435cd12020-09-01 05:13:59 -0600698 fdt = "fdt-SEQ";
699 };
700 };
701
Simon Glass9f1c6b92022-02-08 11:50:02 -0700702This tells binman to create nodes `config-1` and `config-2`, i.e. a config
703for each of your two files.
Simon Glassa435cd12020-09-01 05:13:59 -0600704
Simon Glassa435cd12020-09-01 05:13:59 -0600705Note that if no devicetree files are provided (with '-a of-list' as above)
706then no nodes will be generated.
707
Simon Glass5f423422022-03-05 20:19:12 -0700708Generating nodes from an ELF file (split-elf)
709~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
710
711This uses the node as a template to generate multiple nodes. The following
712special properties are available:
713
714split-elf
715 Split an ELF file into a separate node for each segment. This uses the
716 node as a template to generate multiple nodes. The following special
717 properties are available:
718
719 fit,load
720 Generates a `load = <...>` property with the load address of the
721 segment
722
723 fit,entry
724 Generates a `entry = <...>` property with the entry address of the
725 ELF. This is only produced for the first entry
726
727 fit,data
728 Generates a `data = <...>` property with the contents of the segment
729
Jonas Karlman490f73c2023-01-21 19:02:12 +0000730 fit,firmware
731 Generates a `firmware = <...>` property. Provides a list of possible
732 nodes to be used as the `firmware` property value. The first valid
733 node is picked as the firmware. Any remaining valid nodes is
734 prepended to the `loadable` property generated by `fit,loadables`
735
Simon Glass5f423422022-03-05 20:19:12 -0700736 fit,loadables
737 Generates a `loadable = <...>` property with a list of the generated
738 nodes (including all nodes if this operation is used multiple times)
739
740
741Here is an example showing ATF, TEE and a device tree all combined::
742
743 fit {
744 description = "test-desc";
745 #address-cells = <1>;
746 fit,fdt-list = "of-list";
747
748 images {
749 u-boot {
750 description = "U-Boot (64-bit)";
751 type = "standalone";
752 os = "U-Boot";
753 arch = "arm64";
754 compression = "none";
Simon Glass72cc5382022-10-20 18:22:39 -0600755 load = <CONFIG_TEXT_BASE>;
Simon Glass5f423422022-03-05 20:19:12 -0700756 u-boot-nodtb {
757 };
758 };
759 @fdt-SEQ {
760 description = "fdt-NAME.dtb";
761 type = "flat_dt";
762 compression = "none";
763 };
764 @atf-SEQ {
765 fit,operation = "split-elf";
766 description = "ARM Trusted Firmware";
767 type = "firmware";
768 arch = "arm64";
769 os = "arm-trusted-firmware";
770 compression = "none";
771 fit,load;
772 fit,entry;
773 fit,data;
774
775 atf-bl31 {
776 };
Jonas Karlmand2c7d902023-01-21 19:01:48 +0000777 hash {
778 algo = "sha256";
779 };
Simon Glass5f423422022-03-05 20:19:12 -0700780 };
781
782 @tee-SEQ {
783 fit,operation = "split-elf";
784 description = "TEE";
785 type = "tee";
786 arch = "arm64";
787 os = "tee";
788 compression = "none";
789 fit,load;
790 fit,entry;
791 fit,data;
792
793 tee-os {
794 };
Jonas Karlmand2c7d902023-01-21 19:01:48 +0000795 hash {
796 algo = "sha256";
797 };
Simon Glass5f423422022-03-05 20:19:12 -0700798 };
799 };
800
801 configurations {
802 default = "@config-DEFAULT-SEQ";
803 @config-SEQ {
804 description = "conf-NAME.dtb";
805 fdt = "fdt-SEQ";
Jonas Karlman490f73c2023-01-21 19:02:12 +0000806 fit,firmware = "atf-1", "u-boot";
Simon Glass5f423422022-03-05 20:19:12 -0700807 fit,loadables;
808 };
809 };
810 };
811
812If ATF-BL31 is available, this generates a node for each segment in the
813ELF file, for example::
814
815 images {
816 atf-1 {
817 data = <...contents of first segment...>;
818 data-offset = <0x00000000>;
819 entry = <0x00040000>;
820 load = <0x00040000>;
821 compression = "none";
822 os = "arm-trusted-firmware";
823 arch = "arm64";
824 type = "firmware";
825 description = "ARM Trusted Firmware";
Jonas Karlmand2c7d902023-01-21 19:01:48 +0000826 hash {
827 algo = "sha256";
828 value = <...hash of first segment...>;
829 };
Simon Glass5f423422022-03-05 20:19:12 -0700830 };
831 atf-2 {
832 data = <...contents of second segment...>;
833 load = <0xff3b0000>;
834 compression = "none";
835 os = "arm-trusted-firmware";
836 arch = "arm64";
837 type = "firmware";
838 description = "ARM Trusted Firmware";
Jonas Karlmand2c7d902023-01-21 19:01:48 +0000839 hash {
840 algo = "sha256";
841 value = <...hash of second segment...>;
842 };
Simon Glass5f423422022-03-05 20:19:12 -0700843 };
844 };
845
846The same applies for OP-TEE if that is available.
847
848If each binary is not available, the relevant template node (@atf-SEQ or
849@tee-SEQ) is removed from the output.
850
851This also generates a `config-xxx` node for each device tree in `of-list`.
852Note that the U-Boot build system uses `-a of-list=$(CONFIG_OF_LIST)`
853so you can use `CONFIG_OF_LIST` to define that list. In this example it is
854set up for `firefly-rk3399` with a single device tree and the default set
855with `-a default-dt=$(CONFIG_DEFAULT_DEVICE_TREE)`, so the resulting output
856is::
857
858 configurations {
859 default = "config-1";
860 config-1 {
Jonas Karlman490f73c2023-01-21 19:02:12 +0000861 loadables = "u-boot", "atf-2", "atf-3", "tee-1", "tee-2";
Simon Glass5f423422022-03-05 20:19:12 -0700862 description = "rk3399-firefly.dtb";
863 fdt = "fdt-1";
Jonas Karlman490f73c2023-01-21 19:02:12 +0000864 firmware = "atf-1";
Simon Glass5f423422022-03-05 20:19:12 -0700865 };
866 };
867
Jonas Karlman490f73c2023-01-21 19:02:12 +0000868U-Boot SPL can then load the firmware (ATF) and all the loadables (U-Boot
869proper, ATF and TEE), then proceed with the boot.
Simon Glass5f423422022-03-05 20:19:12 -0700870
Simon Glass45d556d2020-07-09 18:39:45 -0600871
Simon Glassa7c97782022-08-07 16:33:25 -0600872
873.. _etype_fmap:
Simon Glass45d556d2020-07-09 18:39:45 -0600874
Simon Glass7a61c6b2018-07-17 13:25:37 -0600875Entry: fmap: An entry which contains an Fmap section
876----------------------------------------------------
877
878Properties / Entry arguments:
879 None
880
881FMAP is a simple format used by flashrom, an open-source utility for
882reading and writing the SPI flash, typically on x86 CPUs. The format
883provides flashrom with a list of areas, so it knows what it in the flash.
884It can then read or write just a single area, instead of the whole flash.
885
886The format is defined by the flashrom project, in the file lib/fmap.h -
887see www.flashrom.org/Flashrom for more information.
888
889When used, this entry will be populated with an FMAP which reflects the
890entries in the current image. Note that any hierarchy is squashed, since
Simon Glassb1d414c2021-04-03 11:05:10 +1300891FMAP does not support this. Sections are represented as an area appearing
892before its contents, so that it is possible to reconstruct the hierarchy
893from the FMAP by using the offset information. This convention does not
894seem to be documented, but is used in Chromium OS.
Simon Glass7a61c6b2018-07-17 13:25:37 -0600895
Simon Glasscda991e2023-02-12 17:11:15 -0700896To mark an area as preserved, use the normal 'preserved' flag in the entry.
897This will result in the corresponding FMAP area having the
898FMAP_AREA_PRESERVE flag. This flag does not automatically propagate down to
899child entries.
900
Simon Glassb1d414c2021-04-03 11:05:10 +1300901CBFS entries appear as a single entry, i.e. the sub-entries are ignored.
Simon Glass7a61c6b2018-07-17 13:25:37 -0600902
903
Simon Glassb1d414c2021-04-03 11:05:10 +1300904
Simon Glassa7c97782022-08-07 16:33:25 -0600905.. _etype_gbb:
906
Simon Glassc1ae83c2018-07-17 13:25:44 -0600907Entry: gbb: An entry which contains a Chromium OS Google Binary Block
908---------------------------------------------------------------------
909
910Properties / Entry arguments:
911 - hardware-id: Hardware ID to use for this build (a string)
912 - keydir: Directory containing the public keys to use
913 - bmpblk: Filename containing images used by recovery
914
915Chromium OS uses a GBB to store various pieces of information, in particular
916the root and recovery keys that are used to verify the boot process. Some
917more details are here:
918
919 https://www.chromium.org/chromium-os/firmware-porting-guide/2-concepts
920
921but note that the page dates from 2013 so is quite out of date. See
922README.chromium for how to obtain the required keys and tools.
923
924
Simon Glassa7c97782022-08-07 16:33:25 -0600925
926.. _etype_image_header:
Simon Glassc1ae83c2018-07-17 13:25:44 -0600927
Simon Glasscec34ba2019-07-08 14:25:28 -0600928Entry: image-header: An entry which contains a pointer to the FDT map
929---------------------------------------------------------------------
930
931Properties / Entry arguments:
932 location: Location of header ("start" or "end" of image). This is
933 optional. If omitted then the entry must have an offset property.
934
935This adds an 8-byte entry to the start or end of the image, pointing to the
936location of the FDT map. The format is a magic number followed by an offset
937from the start or end of the image, in twos-compliment format.
938
939This entry must be in the top-level part of the image.
940
941NOTE: If the location is at the start/end, you will probably need to specify
942sort-by-offset for the image, unless you actually put the image header
943first/last in the entry list.
944
945
946
Simon Glassa7c97782022-08-07 16:33:25 -0600947.. _etype_intel_cmc:
948
Simon Glass8911fa12021-03-18 20:25:16 +1300949Entry: intel-cmc: Intel Chipset Micro Code (CMC) file
950-----------------------------------------------------
Simon Glass7a61c6b2018-07-17 13:25:37 -0600951
952Properties / Entry arguments:
953 - filename: Filename of file to read into entry
954
955This file contains microcode for some devices in a special format. An
956example filename is 'Microcode/C0_22211.BIN'.
957
958See README.x86 for information about x86 binary blobs.
959
960
961
Simon Glassa7c97782022-08-07 16:33:25 -0600962.. _etype_intel_descriptor:
963
Simon Glass7a61c6b2018-07-17 13:25:37 -0600964Entry: intel-descriptor: Intel flash descriptor block (4KB)
965-----------------------------------------------------------
966
967Properties / Entry arguments:
968 filename: Filename of file containing the descriptor. This is typically
969 a 4KB binary file, sometimes called 'descriptor.bin'
970
971This entry is placed at the start of flash and provides information about
972the SPI flash regions. In particular it provides the base address and
973size of the ME (Management Engine) region, allowing us to place the ME
974binary in the right place.
975
976With this entry in your image, the position of the 'intel-me' entry will be
977fixed in the image, which avoids you needed to specify an offset for that
978region. This is useful, because it is not possible to change the position
979of the ME region without updating the descriptor.
980
981See README.x86 for information about x86 binary blobs.
982
983
984
Simon Glassa7c97782022-08-07 16:33:25 -0600985.. _etype_intel_fit:
986
Simon Glass232f90c2019-08-24 07:22:50 -0600987Entry: intel-fit: Intel Firmware Image Table (FIT)
988--------------------------------------------------
989
990This entry contains a dummy FIT as required by recent Intel CPUs. The FIT
991contains information about the firmware and microcode available in the
992image.
993
994At present binman only supports a basic FIT with no microcode.
995
996
997
Simon Glassa7c97782022-08-07 16:33:25 -0600998.. _etype_intel_fit_ptr:
999
Simon Glass232f90c2019-08-24 07:22:50 -06001000Entry: intel-fit-ptr: Intel Firmware Image Table (FIT) pointer
1001--------------------------------------------------------------
1002
1003This entry contains a pointer to the FIT. It is required to be at address
10040xffffffc0 in the image.
1005
1006
1007
Simon Glassa7c97782022-08-07 16:33:25 -06001008.. _etype_intel_fsp:
1009
Simon Glass8911fa12021-03-18 20:25:16 +13001010Entry: intel-fsp: Intel Firmware Support Package (FSP) file
1011-----------------------------------------------------------
Simon Glass7a61c6b2018-07-17 13:25:37 -06001012
1013Properties / Entry arguments:
1014 - filename: Filename of file to read into entry
1015
1016This file contains binary blobs which are used on some devices to make the
1017platform work. U-Boot executes this code since it is not possible to set up
1018the hardware using U-Boot open-source code. Documentation is typically not
1019available in sufficient detail to allow this.
1020
1021An example filename is 'FSP/QUEENSBAY_FSP_GOLD_001_20-DECEMBER-2013.fd'
1022
1023See README.x86 for information about x86 binary blobs.
1024
1025
1026
Simon Glassa7c97782022-08-07 16:33:25 -06001027.. _etype_intel_fsp_m:
1028
Simon Glass8911fa12021-03-18 20:25:16 +13001029Entry: intel-fsp-m: Intel Firmware Support Package (FSP) memory init
1030--------------------------------------------------------------------
Simon Glassba7985d2019-08-24 07:23:07 -06001031
1032Properties / Entry arguments:
1033 - filename: Filename of file to read into entry
1034
1035This file contains a binary blob which is used on some devices to set up
1036SDRAM. U-Boot executes this code in SPL so that it can make full use of
1037memory. Documentation is typically not available in sufficient detail to
1038allow U-Boot do this this itself..
1039
1040An example filename is 'fsp_m.bin'
1041
1042See README.x86 for information about x86 binary blobs.
1043
1044
Simon Glassa7c97782022-08-07 16:33:25 -06001045
1046.. _etype_intel_fsp_s:
Simon Glassba7985d2019-08-24 07:23:07 -06001047
Simon Glass8911fa12021-03-18 20:25:16 +13001048Entry: intel-fsp-s: Intel Firmware Support Package (FSP) silicon init
1049---------------------------------------------------------------------
Simon Glass4d9086d2019-10-20 21:31:35 -06001050
1051Properties / Entry arguments:
1052 - filename: Filename of file to read into entry
1053
1054This file contains a binary blob which is used on some devices to set up
1055the silicon. U-Boot executes this code in U-Boot proper after SDRAM is
1056running, so that it can make full use of memory. Documentation is typically
1057not available in sufficient detail to allow U-Boot do this this itself.
1058
1059An example filename is 'fsp_s.bin'
1060
1061See README.x86 for information about x86 binary blobs.
1062
1063
1064
Simon Glassa7c97782022-08-07 16:33:25 -06001065.. _etype_intel_fsp_t:
1066
Simon Glass8911fa12021-03-18 20:25:16 +13001067Entry: intel-fsp-t: Intel Firmware Support Package (FSP) temp ram init
1068----------------------------------------------------------------------
Simon Glass9ea87b22019-10-20 21:31:36 -06001069
1070Properties / Entry arguments:
1071 - filename: Filename of file to read into entry
1072
1073This file contains a binary blob which is used on some devices to set up
1074temporary memory (Cache-as-RAM or CAR). U-Boot executes this code in TPL so
1075that it has access to memory for its stack and initial storage.
1076
1077An example filename is 'fsp_t.bin'
1078
1079See README.x86 for information about x86 binary blobs.
1080
1081
Simon Glassa7c97782022-08-07 16:33:25 -06001082
1083.. _etype_intel_ifwi:
Simon Glass9ea87b22019-10-20 21:31:36 -06001084
Simon Glass8911fa12021-03-18 20:25:16 +13001085Entry: intel-ifwi: Intel Integrated Firmware Image (IFWI) file
1086--------------------------------------------------------------
Simon Glassc2f1aed2019-07-08 13:18:56 -06001087
1088Properties / Entry arguments:
1089 - filename: Filename of file to read into entry. This is either the
1090 IFWI file itself, or a file that can be converted into one using a
1091 tool
1092 - convert-fit: If present this indicates that the ifwitool should be
1093 used to convert the provided file into a IFWI.
1094
1095This file contains code and data used by the SoC that is required to make
1096it work. It includes U-Boot TPL, microcode, things related to the CSE
1097(Converged Security Engine, the microcontroller that loads all the firmware)
1098and other items beyond the wit of man.
1099
1100A typical filename is 'ifwi.bin' for an IFWI file, or 'fitimage.bin' for a
1101file that will be converted to an IFWI.
1102
1103The position of this entry is generally set by the intel-descriptor entry.
1104
1105The contents of the IFWI are specified by the subnodes of the IFWI node.
1106Each subnode describes an entry which is placed into the IFWFI with a given
1107sub-partition (and optional entry name).
1108
Simon Glass8a5e2492019-08-24 07:22:47 -06001109Properties for subnodes:
Simon Glass0ac96b62021-03-18 20:25:15 +13001110 - ifwi-subpart: sub-parition to put this entry into, e.g. "IBBP"
1111 - ifwi-entry: entry name t use, e.g. "IBBL"
1112 - ifwi-replace: if present, indicates that the item should be replaced
1113 in the IFWI. Otherwise it is added.
Simon Glass8a5e2492019-08-24 07:22:47 -06001114
Simon Glassc2f1aed2019-07-08 13:18:56 -06001115See README.x86 for information about x86 binary blobs.
1116
1117
1118
Simon Glassa7c97782022-08-07 16:33:25 -06001119.. _etype_intel_me:
1120
Simon Glass8911fa12021-03-18 20:25:16 +13001121Entry: intel-me: Intel Management Engine (ME) file
1122--------------------------------------------------
Simon Glass7a61c6b2018-07-17 13:25:37 -06001123
1124Properties / Entry arguments:
1125 - filename: Filename of file to read into entry
1126
1127This file contains code used by the SoC that is required to make it work.
1128The Management Engine is like a background task that runs things that are
Thomas Hebbfd37f242019-11-13 18:18:03 -08001129not clearly documented, but may include keyboard, display and network
Simon Glass7a61c6b2018-07-17 13:25:37 -06001130access. For platform that use ME it is not possible to disable it. U-Boot
1131does not directly execute code in the ME binary.
1132
1133A typical filename is 'me.bin'.
1134
Simon Glassc4056b82019-07-08 13:18:38 -06001135The position of this entry is generally set by the intel-descriptor entry.
1136
Simon Glass7a61c6b2018-07-17 13:25:37 -06001137See README.x86 for information about x86 binary blobs.
1138
1139
1140
Simon Glassa7c97782022-08-07 16:33:25 -06001141.. _etype_intel_mrc:
1142
Simon Glass8911fa12021-03-18 20:25:16 +13001143Entry: intel-mrc: Intel Memory Reference Code (MRC) file
1144--------------------------------------------------------
Simon Glass7a61c6b2018-07-17 13:25:37 -06001145
1146Properties / Entry arguments:
1147 - filename: Filename of file to read into entry
1148
1149This file contains code for setting up the SDRAM on some Intel systems. This
1150is executed by U-Boot when needed early during startup. A typical filename
1151is 'mrc.bin'.
1152
1153See README.x86 for information about x86 binary blobs.
1154
1155
1156
Simon Glassa7c97782022-08-07 16:33:25 -06001157.. _etype_intel_refcode:
1158
Simon Glass8911fa12021-03-18 20:25:16 +13001159Entry: intel-refcode: Intel Reference Code file
1160-----------------------------------------------
Simon Glass17b84eb2019-05-17 22:00:53 -06001161
1162Properties / Entry arguments:
1163 - filename: Filename of file to read into entry
1164
1165This file contains code for setting up the platform on some Intel systems.
1166This is executed by U-Boot when needed early during startup. A typical
1167filename is 'refcode.bin'.
1168
1169See README.x86 for information about x86 binary blobs.
1170
1171
1172
Simon Glassa7c97782022-08-07 16:33:25 -06001173.. _etype_intel_vbt:
1174
Simon Glass8911fa12021-03-18 20:25:16 +13001175Entry: intel-vbt: Intel Video BIOS Table (VBT) file
1176---------------------------------------------------
Simon Glass7a61c6b2018-07-17 13:25:37 -06001177
1178Properties / Entry arguments:
1179 - filename: Filename of file to read into entry
1180
1181This file contains code that sets up the integrated graphics subsystem on
1182some Intel SoCs. U-Boot executes this when the display is started up.
1183
1184See README.x86 for information about Intel binary blobs.
1185
1186
1187
Simon Glassa7c97782022-08-07 16:33:25 -06001188.. _etype_intel_vga:
1189
Simon Glass8911fa12021-03-18 20:25:16 +13001190Entry: intel-vga: Intel Video Graphics Adaptor (VGA) file
1191---------------------------------------------------------
Simon Glass7a61c6b2018-07-17 13:25:37 -06001192
1193Properties / Entry arguments:
1194 - filename: Filename of file to read into entry
1195
1196This file contains code that sets up the integrated graphics subsystem on
1197some Intel SoCs. U-Boot executes this when the display is started up.
1198
1199This is similar to the VBT file but in a different format.
1200
1201See README.x86 for information about Intel binary blobs.
1202
1203
1204
Simon Glassa7c97782022-08-07 16:33:25 -06001205.. _etype_mkimage:
1206
Simon Glass8911fa12021-03-18 20:25:16 +13001207Entry: mkimage: Binary produced by mkimage
1208------------------------------------------
Simon Glass48f3aad2020-07-09 18:39:31 -06001209
1210Properties / Entry arguments:
Simon Glass42074dc2022-08-13 11:40:47 -06001211 - args: Arguments to pass
Simon Glass8fbca772022-08-13 11:40:48 -06001212 - data-to-imagename: Indicates that the -d data should be passed in as
1213 the image name also (-n)
Quentin Schulz9b5c6482022-09-02 15:10:48 +02001214 - multiple-data-files: boolean to tell binman to pass all files as
1215 datafiles to mkimage instead of creating a temporary file the result
1216 of datafiles concatenation
Simon Glassda6a9082023-01-07 14:07:10 -07001217 - filename: filename of output binary generated by mkimage
Simon Glass48f3aad2020-07-09 18:39:31 -06001218
Simon Glass42074dc2022-08-13 11:40:47 -06001219The data passed to mkimage via the -d flag is collected from subnodes of the
1220mkimage node, e.g.::
Simon Glass48f3aad2020-07-09 18:39:31 -06001221
1222 mkimage {
Simon Glassda6a9082023-01-07 14:07:10 -07001223 filename = "imximage.bin";
Simon Glass48f3aad2020-07-09 18:39:31 -06001224 args = "-n test -T imximage";
1225
1226 u-boot-spl {
1227 };
1228 };
1229
Simon Glass42074dc2022-08-13 11:40:47 -06001230This calls mkimage to create an imximage with `u-boot-spl.bin` as the data
Simon Glassda6a9082023-01-07 14:07:10 -07001231file, with mkimage being called like this::
Simon Glass42074dc2022-08-13 11:40:47 -06001232
1233 mkimage -d <data_file> -n test -T imximage <output_file>
1234
1235The output from mkimage then becomes part of the image produced by
Simon Glassda6a9082023-01-07 14:07:10 -07001236binman but also is written into `imximage.bin` file. If you need to put
1237multiple things in the data file, you can use a section, or just multiple
1238subnodes like this::
Simon Glass42074dc2022-08-13 11:40:47 -06001239
1240 mkimage {
1241 args = "-n test -T imximage";
1242
1243 u-boot-spl {
1244 };
1245
1246 u-boot-tpl {
1247 };
1248 };
Simon Glass48f3aad2020-07-09 18:39:31 -06001249
Simon Glassda6a9082023-01-07 14:07:10 -07001250Note that binman places the contents (here SPL and TPL) into a single file
1251and passes that to mkimage using the -d option.
1252
Quentin Schulz9b5c6482022-09-02 15:10:48 +02001253To pass all datafiles untouched to mkimage::
1254
1255 mkimage {
Simon Glassda6a9082023-01-07 14:07:10 -07001256 args = "-n rk3399 -T rkspi";
1257 multiple-data-files;
Quentin Schulz9b5c6482022-09-02 15:10:48 +02001258
Simon Glassda6a9082023-01-07 14:07:10 -07001259 u-boot-tpl {
1260 };
Quentin Schulz9b5c6482022-09-02 15:10:48 +02001261
Simon Glassda6a9082023-01-07 14:07:10 -07001262 u-boot-spl {
1263 };
Quentin Schulz9b5c6482022-09-02 15:10:48 +02001264 };
1265
1266This calls mkimage to create a Rockchip RK3399-specific first stage
1267bootloader, made of TPL+SPL. Since this first stage bootloader requires to
1268align the TPL and SPL but also some weird hacks that is handled by mkimage
1269directly, binman is told to not perform the concatenation of datafiles prior
1270to passing the data to mkimage.
1271
Simon Glass948dd3a2022-02-08 11:49:58 -07001272To use CONFIG options in the arguments, use a string list instead, as in
1273this example which also produces four arguments::
1274
1275 mkimage {
1276 args = "-n", CONFIG_SYS_SOC, "-T imximage";
1277
1278 u-boot-spl {
1279 };
1280 };
1281
Simon Glass8fbca772022-08-13 11:40:48 -06001282If you need to pass the input data in with the -n argument as well, then use
1283the 'data-to-imagename' property::
1284
1285 mkimage {
1286 args = "-T imximage";
Simon Glassda6a9082023-01-07 14:07:10 -07001287 data-to-imagename;
Simon Glass8fbca772022-08-13 11:40:48 -06001288
1289 u-boot-spl {
1290 };
1291 };
1292
1293That will pass the data to mkimage both as the data file (with -d) and as
Simon Glassda6a9082023-01-07 14:07:10 -07001294the image name (with -n). In both cases, a filename is passed as the
1295argument, with the actual data being in that file.
Simon Glass948dd3a2022-02-08 11:49:58 -07001296
Simon Glassda6a9082023-01-07 14:07:10 -07001297If need to pass different data in with -n, then use an `imagename` subnode::
Simon Glassb1669752022-08-13 11:40:49 -06001298
1299 mkimage {
1300 args = "-T imximage";
1301
1302 imagename {
1303 blob {
1304 filename = "spl/u-boot-spl.cfgout"
1305 };
1306 };
1307
1308 u-boot-spl {
1309 };
1310 };
1311
1312This will pass in u-boot-spl as the input data and the .cfgout file as the
1313-n data.
1314
Simon Glassa7c97782022-08-07 16:33:25 -06001315
Simon Glassda6a9082023-01-07 14:07:10 -07001316
Simon Glassa4948b22023-01-11 16:10:14 -07001317.. _etype_null:
1318
1319Entry: null: An entry which has no contents of its own
1320------------------------------------------------------
1321
1322Note that the size property must be set since otherwise this entry does not
1323know how large it should be.
1324
1325The contents are set by the containing section, e.g. the section's pad
1326byte.
1327
1328
1329
Simon Glassa7c97782022-08-07 16:33:25 -06001330.. _etype_opensbi:
Simon Glass48f3aad2020-07-09 18:39:31 -06001331
Bin Mengc0b15742021-05-10 20:23:33 +08001332Entry: opensbi: RISC-V OpenSBI fw_dynamic blob
1333----------------------------------------------
1334
1335Properties / Entry arguments:
1336 - opensbi-path: Filename of file to read into entry. This is typically
1337 called fw_dynamic.bin
1338
1339This entry holds the run-time firmware, typically started by U-Boot SPL.
1340See the U-Boot README for your architecture or board for how to use it. See
1341https://github.com/riscv/opensbi for more information about OpenSBI.
1342
1343
1344
Simon Glassa7c97782022-08-07 16:33:25 -06001345.. _etype_powerpc_mpc85xx_bootpg_resetvec:
1346
Jagdish Gediya311d4842018-09-03 21:35:08 +05301347Entry: powerpc-mpc85xx-bootpg-resetvec: PowerPC mpc85xx bootpg + resetvec code for U-Boot
1348-----------------------------------------------------------------------------------------
1349
1350Properties / Entry arguments:
1351 - filename: Filename of u-boot-br.bin (default 'u-boot-br.bin')
1352
Thomas Hebbfd37f242019-11-13 18:18:03 -08001353This entry is valid for PowerPC mpc85xx cpus. This entry holds
Jagdish Gediya311d4842018-09-03 21:35:08 +05301354'bootpg + resetvec' code for PowerPC mpc85xx CPUs which needs to be
1355placed at offset 'RESET_VECTOR_ADDRESS - 0xffc'.
1356
Simon Glass136dd352020-10-26 17:39:59 -06001357
Simon Glassa7c97782022-08-07 16:33:25 -06001358
1359.. _etype_pre_load:
Simon Glass136dd352020-10-26 17:39:59 -06001360
Philippe Reynesebe96cb2022-03-28 22:57:04 +02001361Entry: pre-load: Pre load image header
1362--------------------------------------
1363
1364Properties / Entry arguments:
Simon Glass9f571582022-08-13 11:40:43 -06001365 - pre-load-key-path: Path of the directory that store key (provided by
1366 the environment variable PRE_LOAD_KEY_PATH)
Philippe Reynesebe96cb2022-03-28 22:57:04 +02001367 - content: List of phandles to entries to sign
1368 - algo-name: Hash and signature algo to use for the signature
1369 - padding-name: Name of the padding (pkcs-1.5 or pss)
1370 - key-name: Filename of the private key to sign
1371 - header-size: Total size of the header
1372 - version: Version of the header
1373
1374This entry creates a pre-load header that contains a global
1375image signature.
1376
1377For example, this creates an image with a pre-load header and a binary::
1378
1379 binman {
1380 image2 {
1381 filename = "sandbox.bin";
1382
1383 pre-load {
1384 content = <&image>;
1385 algo-name = "sha256,rsa2048";
1386 padding-name = "pss";
1387 key-name = "private.pem";
1388 header-size = <4096>;
1389 version = <1>;
1390 };
1391
1392 image: blob-ext {
1393 filename = "sandbox.itb";
1394 };
1395 };
1396 };
1397
1398
1399
Jonas Karlman35305492023-02-25 19:01:33 +00001400.. _etype_rockchip_tpl:
1401
1402Entry: rockchip-tpl: Rockchip TPL binary
1403----------------------------------------
1404
1405Properties / Entry arguments:
1406 - rockchip-tpl-path: Filename of file to read into the entry,
1407 typically <soc>_ddr_<version>.bin
1408
1409This entry holds an external TPL binary used by some Rockchip SoCs
1410instead of normal U-Boot TPL, typically to initialize DRAM.
1411
1412
1413
Simon Glassa7c97782022-08-07 16:33:25 -06001414.. _etype_scp:
1415
Simon Glass8911fa12021-03-18 20:25:16 +13001416Entry: scp: System Control Processor (SCP) firmware blob
1417--------------------------------------------------------
Simon Glass136dd352020-10-26 17:39:59 -06001418
1419Properties / Entry arguments:
1420 - scp-path: Filename of file to read into the entry, typically scp.bin
1421
1422This entry holds firmware for an external platform-specific coprocessor.
Jagdish Gediya311d4842018-09-03 21:35:08 +05301423
1424
Simon Glass136dd352020-10-26 17:39:59 -06001425
Simon Glassa7c97782022-08-07 16:33:25 -06001426.. _etype_section:
1427
Simon Glass7a61c6b2018-07-17 13:25:37 -06001428Entry: section: Entry that contains other entries
1429-------------------------------------------------
1430
Simon Glasscc9a41c2021-11-23 11:03:49 -07001431A section is an entry which can contain other entries, thus allowing
1432hierarchical images to be created. See 'Sections and hierarchical images'
1433in the binman README for more information.
1434
1435The base implementation simply joins the various entries together, using
1436various rules about alignment, etc.
1437
1438Subclassing
1439~~~~~~~~~~~
1440
1441This class can be subclassed to support other file formats which hold
1442multiple entries, such as CBFS. To do this, override the following
1443functions. The documentation here describes what your function should do.
1444For example code, see etypes which subclass `Entry_section`, or `cbfs.py`
1445for a more involved example::
1446
1447 $ grep -l \(Entry_section tools/binman/etype/*.py
1448
1449ReadNode()
1450 Call `super().ReadNode()`, then read any special properties for the
1451 section. Then call `self.ReadEntries()` to read the entries.
1452
1453 Binman calls this at the start when reading the image description.
1454
1455ReadEntries()
1456 Read in the subnodes of the section. This may involve creating entries
1457 of a particular etype automatically, as well as reading any special
1458 properties in the entries. For each entry, entry.ReadNode() should be
1459 called, to read the basic entry properties. The properties should be
1460 added to `self._entries[]`, in the correct order, with a suitable name.
1461
1462 Binman calls this at the start when reading the image description.
1463
1464BuildSectionData(required)
1465 Create the custom file format that you want and return it as bytes.
1466 This likely sets up a file header, then loops through the entries,
1467 adding them to the file. For each entry, call `entry.GetData()` to
1468 obtain the data. If that returns None, and `required` is False, then
1469 this method must give up and return None. But if `required` is True then
1470 it should assume that all data is valid.
1471
1472 Binman calls this when packing the image, to find out the size of
1473 everything. It is called again at the end when building the final image.
1474
1475SetImagePos(image_pos):
1476 Call `super().SetImagePos(image_pos)`, then set the `image_pos` values
1477 for each of the entries. This should use the custom file format to find
1478 the `start offset` (and `image_pos`) of each entry. If the file format
1479 uses compression in such a way that there is no offset available (other
1480 than reading the whole file and decompressing it), then the offsets for
1481 affected entries can remain unset (`None`). The size should also be set
1482 if possible.
Simon Glass0ac96b62021-03-18 20:25:15 +13001483
Simon Glasscc9a41c2021-11-23 11:03:49 -07001484 Binman calls this after the image has been packed, to update the
1485 location that all the entries ended up at.
Simon Glass0ac96b62021-03-18 20:25:15 +13001486
Simon Glass637958f2021-11-23 21:09:50 -07001487ReadChildData(child, decomp, alt_format):
Simon Glasscc9a41c2021-11-23 11:03:49 -07001488 The default version of this may be good enough, if you are able to
1489 implement SetImagePos() correctly. But that is a bit of a bypass, so
1490 you can override this method to read from your custom file format. It
1491 should read the entire entry containing the custom file using
1492 `super().ReadData(True)`, then parse the file to get the data for the
1493 given child, then return that data.
Simon Glass7a61c6b2018-07-17 13:25:37 -06001494
Simon Glasscc9a41c2021-11-23 11:03:49 -07001495 If your file format supports compression, the `decomp` argument tells
1496 you whether to return the compressed data (`decomp` is False) or to
1497 uncompress it first, then return the uncompressed data (`decomp` is
1498 True). This is used by the `binman extract -U` option.
Simon Glass21db0ff2020-09-01 05:13:54 -06001499
Simon Glass637958f2021-11-23 21:09:50 -07001500 If your entry supports alternative formats, the alt_format provides the
1501 alternative format that the user has selected. Your function should
1502 return data in that format. This is used by the 'binman extract -l'
1503 option.
1504
Simon Glasscc9a41c2021-11-23 11:03:49 -07001505 Binman calls this when reading in an image, in order to populate all the
1506 entries with the data from that image (`binman ls`).
1507
1508WriteChildData(child):
1509 Binman calls this after `child.data` is updated, to inform the custom
1510 file format about this, in case it needs to do updates.
1511
1512 The default version of this does nothing and probably needs to be
1513 overridden for the 'binman replace' command to work. Your version should
1514 use `child.data` to update the data for that child in the custom file
1515 format.
1516
1517 Binman calls this when updating an image that has been read in and in
1518 particular to update the data for a particular entry (`binman replace`)
1519
1520Properties / Entry arguments
1521~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1522
1523See :ref:`develop/package/binman:Image description format` for more
1524information.
1525
1526align-default
1527 Default alignment for this section, if no alignment is given in the
1528 entry
1529
1530pad-byte
1531 Pad byte to use when padding
1532
1533sort-by-offset
1534 True if entries should be sorted by offset, False if they must be
1535 in-order in the device tree description
1536
1537end-at-4gb
1538 Used to build an x86 ROM which ends at 4GB (2^32)
1539
1540name-prefix
1541 Adds a prefix to the name of every entry in the section when writing out
1542 the map
1543
1544skip-at-start
1545 Number of bytes before the first entry starts. These effectively adjust
1546 the starting offset of entries. For example, if this is 16, then the
1547 first entry would start at 16. An entry with offset = 20 would in fact
1548 be written at offset 4 in the image file, since the first 16 bytes are
1549 skipped when writing.
Simon Glassb1d414c2021-04-03 11:05:10 +13001550
Simon Glassda6a9082023-01-07 14:07:10 -07001551filename
1552 filename to write the unpadded section contents to within the output
1553 directory (None to skip this).
1554
Simon Glass39dd2152019-07-08 14:25:47 -06001555Since a section is also an entry, it inherits all the properies of entries
1556too.
1557
Simon Glasscc9a41c2021-11-23 11:03:49 -07001558Note that the `allow_missing` member controls whether this section permits
1559external blobs to be missing their contents. The option will produce an
1560image but of course it will not work. It is useful to make sure that
1561Continuous Integration systems can build without the binaries being
1562available. This is set by the `SetAllowMissing()` method, if
1563`--allow-missing` is passed to binman.
Simon Glass7a61c6b2018-07-17 13:25:37 -06001564
1565
1566
Simon Glassa7c97782022-08-07 16:33:25 -06001567.. _etype_tee_os:
1568
Roger Quadros5cdcea02022-02-19 20:50:04 +02001569Entry: tee-os: Entry containing an OP-TEE Trusted OS (TEE) blob
1570---------------------------------------------------------------
1571
1572Properties / Entry arguments:
1573 - tee-os-path: Filename of file to read into entry. This is typically
Simon Glassad5cfe12023-01-07 14:07:14 -07001574 called tee.bin or tee.elf
Roger Quadros5cdcea02022-02-19 20:50:04 +02001575
1576This entry holds the run-time firmware, typically started by U-Boot SPL.
1577See the U-Boot README for your architecture or board for how to use it. See
1578https://github.com/OP-TEE/optee_os for more information about OP-TEE.
1579
Simon Glassad5cfe12023-01-07 14:07:14 -07001580Note that if the file is in ELF format, it must go in a FIT. In that case,
1581this entry will mark itself as absent, providing the data only through the
1582read_elf_segments() method.
1583
1584Marking this entry as absent means that it if is used in the wrong context
1585it can be automatically dropped. Thus it is possible to add an OP-TEE entry
1586like this::
1587
1588 binman {
1589 tee-os {
1590 };
1591 };
1592
1593and pass either an ELF or plain binary in with -a tee-os-path <filename>
1594and have binman do the right thing:
1595
1596 - include the entry if tee.bin is provided and it does NOT have the v1
1597 header
1598 - drop it otherwise
1599
1600When used within a FIT, we can do::
1601
1602 binman {
1603 fit {
1604 tee-os {
1605 };
1606 };
1607 };
1608
1609which will split the ELF into separate nodes for each segment, if an ELF
1610file is provided (see :ref:`etype_fit`), or produce a single node if the
1611OP-TEE binary v1 format is provided (see optee_doc_) .
1612
1613.. _optee_doc: https://optee.readthedocs.io/en/latest/architecture/core.html#partitioning-of-the-binary
1614
Roger Quadros5cdcea02022-02-19 20:50:04 +02001615
1616
Simon Glassa7c97782022-08-07 16:33:25 -06001617.. _etype_text:
1618
Simon Glass7a61c6b2018-07-17 13:25:37 -06001619Entry: text: An entry which contains text
1620-----------------------------------------
1621
1622The text can be provided either in the node itself or by a command-line
1623argument. There is a level of indirection to allow multiple text strings
1624and sharing of text.
1625
1626Properties / Entry arguments:
1627 text-label: The value of this string indicates the property / entry-arg
1628 that contains the string to place in the entry
1629 <xxx> (actual name is the value of text-label): contains the string to
1630 place in the entry.
Simon Glass47f6a622019-07-08 13:18:40 -06001631 <text>: The text to place in the entry (overrides the above mechanism).
1632 This is useful when the text is constant.
Simon Glass7a61c6b2018-07-17 13:25:37 -06001633
Simon Glass0ac96b62021-03-18 20:25:15 +13001634Example node::
Simon Glass7a61c6b2018-07-17 13:25:37 -06001635
1636 text {
1637 size = <50>;
1638 text-label = "message";
1639 };
1640
1641You can then use:
1642
1643 binman -amessage="this is my message"
1644
1645and binman will insert that string into the entry.
1646
Simon Glass0ac96b62021-03-18 20:25:15 +13001647It is also possible to put the string directly in the node::
Simon Glass7a61c6b2018-07-17 13:25:37 -06001648
1649 text {
1650 size = <8>;
1651 text-label = "message";
1652 message = "a message directly in the node"
1653 };
1654
Simon Glass0ac96b62021-03-18 20:25:15 +13001655or just::
Simon Glass47f6a622019-07-08 13:18:40 -06001656
1657 text {
1658 size = <8>;
1659 text = "some text directly in the node"
1660 };
1661
Simon Glass7a61c6b2018-07-17 13:25:37 -06001662The text is not itself nul-terminated. This can be achieved, if required,
1663by setting the size of the entry to something larger than the text.
1664
1665
1666
Neha Malcom Francis3b788942023-07-22 00:14:24 +05301667.. _etype_ti_board_config:
1668
1669Entry: ti-board-config: An entry containing a TI schema validated board config binary
1670-------------------------------------------------------------------------------------
1671
1672This etype supports generation of two kinds of board configuration
1673binaries: singular board config binary as well as combined board config
1674binary.
1675
1676Properties / Entry arguments:
1677 - config-file: File containing board configuration data in YAML
1678 - schema-file: File containing board configuration YAML schema against
1679 which the config file is validated
1680
1681Output files:
1682 - board config binary: File containing board configuration binary
1683
1684These above parameters are used only when the generated binary is
1685intended to be a single board configuration binary. Example::
1686
1687 my-ti-board-config {
1688 ti-board-config {
1689 config = "board-config.yaml";
1690 schema = "schema.yaml";
1691 };
1692 };
1693
1694To generate a combined board configuration binary, we pack the
1695needed individual binaries into a ti-board-config binary. In this case,
1696the available supported subnode names are board-cfg, pm-cfg, sec-cfg and
1697rm-cfg. The final binary is prepended with a header containing details about
1698the included board config binaries. Example::
1699
1700 my-combined-ti-board-config {
1701 ti-board-config {
1702 board-cfg {
1703 config = "board-cfg.yaml";
1704 schema = "schema.yaml";
1705 };
1706 sec-cfg {
1707 config = "sec-cfg.yaml";
1708 schema = "schema.yaml";
1709 };
1710 }
1711 }
1712
1713
1714
Neha Malcom Francis5f5f0a62023-07-22 00:14:25 +05301715.. _etype_ti_secure:
1716
1717Entry: ti-secure: Entry containing a TI x509 certificate binary
1718---------------------------------------------------------------
1719
1720Properties / Entry arguments:
1721 - content: List of phandles to entries to sign
1722 - keyfile: Filename of file containing key to sign binary with
1723 - sha: Hash function to be used for signing
1724
1725Output files:
1726 - input.<unique_name> - input file passed to openssl
1727 - config.<unique_name> - input file generated for openssl (which is
1728 used as the config file)
1729 - cert.<unique_name> - output file generated by openssl (which is
1730 used as the entry contents)
1731
1732openssl signs the provided data, using the TI templated config file and
1733writes the signature in this entry. This allows verification that the
1734data is genuine.
1735
1736
1737
1738.. _etype_ti_secure_rom:
1739
1740Entry: ti-secure-rom: Entry containing a TI x509 certificate binary for images booted by ROM
1741--------------------------------------------------------------------------------------------
1742
1743Properties / Entry arguments:
1744 - keyfile: Filename of file containing key to sign binary with
1745 - combined: boolean if device follows combined boot flow
1746 - countersign: boolean if device contains countersigned system firmware
1747 - load: load address of SPL
1748 - sw-rev: software revision
1749 - sha: Hash function to be used for signing
1750 - core: core on which bootloader runs, valid cores are 'secure' and 'public'
1751 - content: phandle of SPL in case of legacy bootflow or phandles of component binaries
1752 in case of combined bootflow
1753
1754The following properties are only for generating a combined bootflow binary:
1755 - sysfw-inner-cert: boolean if binary contains sysfw inner certificate
1756 - dm-data: boolean if binary contains dm-data binary
1757 - content-sbl: phandle of SPL binary
1758 - content-sysfw: phandle of sysfw binary
1759 - content-sysfw-data: phandle of sysfw-data or tifs-data binary
1760 - content-sysfw-inner-cert (optional): phandle of sysfw inner certificate binary
1761 - content-dm-data (optional): phandle of dm-data binary
1762 - load-sysfw: load address of sysfw binary
1763 - load-sysfw-data: load address of sysfw-data or tifs-data binary
1764 - load-sysfw-inner-cert (optional): load address of sysfw inner certificate binary
1765 - load-dm-data (optional): load address of dm-data binary
1766
1767Output files:
1768 - input.<unique_name> - input file passed to openssl
1769 - config.<unique_name> - input file generated for openssl (which is
1770 used as the config file)
1771 - cert.<unique_name> - output file generated by openssl (which is
1772 used as the entry contents)
1773
1774openssl signs the provided data, using the TI templated config file and
1775writes the signature in this entry. This allows verification that the
1776data is genuine.
1777
1778
1779
Simon Glassa7c97782022-08-07 16:33:25 -06001780.. _etype_u_boot:
1781
Simon Glass7a61c6b2018-07-17 13:25:37 -06001782Entry: u-boot: U-Boot flat binary
1783---------------------------------
1784
1785Properties / Entry arguments:
1786 - filename: Filename of u-boot.bin (default 'u-boot.bin')
1787
1788This is the U-Boot binary, containing relocation information to allow it
1789to relocate itself at runtime. The binary typically includes a device tree
Simon Glass718b5292021-03-18 20:25:07 +13001790blob at the end of it.
Simon Glass7a61c6b2018-07-17 13:25:37 -06001791
Simon Glass18ed9962023-01-07 14:07:11 -07001792U-Boot can access binman symbols at runtime. See :ref:`binman_fdt`.
Simon Glass7a61c6b2018-07-17 13:25:37 -06001793
Simon Glass718b5292021-03-18 20:25:07 +13001794Note that this entry is automatically replaced with u-boot-expanded unless
Simon Glass7098b7f2021-03-21 18:24:30 +13001795--no-expanded is used or the node has a 'no-expanded' property.
Simon Glass7a61c6b2018-07-17 13:25:37 -06001796
1797
Simon Glass718b5292021-03-18 20:25:07 +13001798
Simon Glassa7c97782022-08-07 16:33:25 -06001799.. _etype_u_boot_dtb:
1800
Simon Glass7a61c6b2018-07-17 13:25:37 -06001801Entry: u-boot-dtb: U-Boot device tree
1802-------------------------------------
1803
1804Properties / Entry arguments:
1805 - filename: Filename of u-boot.dtb (default 'u-boot.dtb')
1806
1807This is the U-Boot device tree, containing configuration information for
1808U-Boot. U-Boot needs this to know what devices are present and which drivers
1809to activate.
1810
Simon Glasse219aa42018-09-14 04:57:24 -06001811Note: This is mostly an internal entry type, used by others. This allows
1812binman to know which entries contain a device tree.
Simon Glass7a61c6b2018-07-17 13:25:37 -06001813
1814
Simon Glassa7c97782022-08-07 16:33:25 -06001815
1816.. _etype_u_boot_dtb_with_ucode:
Simon Glass7a61c6b2018-07-17 13:25:37 -06001817
1818Entry: u-boot-dtb-with-ucode: A U-Boot device tree file, with the microcode removed
1819-----------------------------------------------------------------------------------
1820
1821Properties / Entry arguments:
1822 - filename: Filename of u-boot.dtb (default 'u-boot.dtb')
1823
1824See Entry_u_boot_ucode for full details of the three entries involved in
1825this process. This entry provides the U-Boot device-tree file, which
1826contains the microcode. If the microcode is not being collated into one
1827place then the offset and size of the microcode is recorded by this entry,
Simon Glass537e0062021-03-18 20:24:54 +13001828for use by u-boot-with-ucode_ptr. If it is being collated, then this
Simon Glass7a61c6b2018-07-17 13:25:37 -06001829entry deletes the microcode from the device tree (to save space) and makes
Simon Glass537e0062021-03-18 20:24:54 +13001830it available to u-boot-ucode.
Simon Glass7a61c6b2018-07-17 13:25:37 -06001831
1832
1833
Simon Glassa7c97782022-08-07 16:33:25 -06001834.. _etype_u_boot_elf:
1835
Simon Glassb1714232018-09-14 04:57:35 -06001836Entry: u-boot-elf: U-Boot ELF image
1837-----------------------------------
1838
1839Properties / Entry arguments:
1840 - filename: Filename of u-boot (default 'u-boot')
1841
1842This is the U-Boot ELF image. It does not include a device tree but can be
1843relocated to any address for execution.
1844
1845
Simon Glassa7c97782022-08-07 16:33:25 -06001846
1847.. _etype_u_boot_env:
Simon Glassb1714232018-09-14 04:57:35 -06001848
Simon Glass136dd352020-10-26 17:39:59 -06001849Entry: u-boot-env: An entry which contains a U-Boot environment
1850---------------------------------------------------------------
1851
1852Properties / Entry arguments:
1853 - filename: File containing the environment text, with each line in the
1854 form var=value
1855
1856
Simon Glass718b5292021-03-18 20:25:07 +13001857
Simon Glassa7c97782022-08-07 16:33:25 -06001858.. _etype_u_boot_expanded:
1859
Simon Glass718b5292021-03-18 20:25:07 +13001860Entry: u-boot-expanded: U-Boot flat binary broken out into its component parts
1861------------------------------------------------------------------------------
1862
1863This is a section containing the U-Boot binary and a devicetree. Using this
1864entry type automatically creates this section, with the following entries
1865in it:
1866
1867 u-boot-nodtb
1868 u-boot-dtb
1869
1870Having the devicetree separate allows binman to update it in the final
1871image, so that the entries positions are provided to the running U-Boot.
1872
1873
Simon Glass136dd352020-10-26 17:39:59 -06001874
Simon Glassa7c97782022-08-07 16:33:25 -06001875.. _etype_u_boot_img:
1876
Simon Glass7a61c6b2018-07-17 13:25:37 -06001877Entry: u-boot-img: U-Boot legacy image
1878--------------------------------------
1879
1880Properties / Entry arguments:
1881 - filename: Filename of u-boot.img (default 'u-boot.img')
1882
1883This is the U-Boot binary as a packaged image, in legacy format. It has a
1884header which allows it to be loaded at the correct address for execution.
1885
1886You should use FIT (Flat Image Tree) instead of the legacy image for new
1887applications.
1888
1889
1890
Simon Glassa7c97782022-08-07 16:33:25 -06001891.. _etype_u_boot_nodtb:
1892
Simon Glass7a61c6b2018-07-17 13:25:37 -06001893Entry: u-boot-nodtb: U-Boot flat binary without device tree appended
1894--------------------------------------------------------------------
1895
1896Properties / Entry arguments:
Simon Glass537e0062021-03-18 20:24:54 +13001897 - filename: Filename to include (default 'u-boot-nodtb.bin')
Simon Glass7a61c6b2018-07-17 13:25:37 -06001898
1899This is the U-Boot binary, containing relocation information to allow it
1900to relocate itself at runtime. It does not include a device tree blob at
Simon Glass537e0062021-03-18 20:24:54 +13001901the end of it so normally cannot work without it. You can add a u-boot-dtb
Simon Glass718b5292021-03-18 20:25:07 +13001902entry after this one, or use a u-boot entry instead, normally expands to a
1903section containing u-boot and u-boot-dtb
Simon Glass7a61c6b2018-07-17 13:25:37 -06001904
1905
1906
Simon Glassa7c97782022-08-07 16:33:25 -06001907.. _etype_u_boot_spl:
1908
Simon Glass7a61c6b2018-07-17 13:25:37 -06001909Entry: u-boot-spl: U-Boot SPL binary
1910------------------------------------
1911
1912Properties / Entry arguments:
1913 - filename: Filename of u-boot-spl.bin (default 'spl/u-boot-spl.bin')
1914
1915This is the U-Boot SPL (Secondary Program Loader) binary. This is a small
1916binary which loads before U-Boot proper, typically into on-chip SRAM. It is
1917responsible for locating, loading and jumping to U-Boot. Note that SPL is
1918not relocatable so must be loaded to the correct address in SRAM, or written
Simon Glass8425a1f2018-07-17 13:25:48 -06001919to run from the correct address if direct flash execution is possible (e.g.
Simon Glass7a61c6b2018-07-17 13:25:37 -06001920on x86 devices).
1921
Simon Glass18ed9962023-01-07 14:07:11 -07001922SPL can access binman symbols at runtime. See :ref:`binman_fdt`.
Simon Glass7a61c6b2018-07-17 13:25:37 -06001923
1924in the binman README for more information.
1925
1926The ELF file 'spl/u-boot-spl' must also be available for this to work, since
1927binman uses that to look up symbols to write into the SPL binary.
1928
Simon Glass718b5292021-03-18 20:25:07 +13001929Note that this entry is automatically replaced with u-boot-spl-expanded
Simon Glass7098b7f2021-03-21 18:24:30 +13001930unless --no-expanded is used or the node has a 'no-expanded' property.
Simon Glass718b5292021-03-18 20:25:07 +13001931
Simon Glass7a61c6b2018-07-17 13:25:37 -06001932
1933
Simon Glassa7c97782022-08-07 16:33:25 -06001934.. _etype_u_boot_spl_bss_pad:
1935
Simon Glass7a61c6b2018-07-17 13:25:37 -06001936Entry: u-boot-spl-bss-pad: U-Boot SPL binary padded with a BSS region
1937---------------------------------------------------------------------
1938
1939Properties / Entry arguments:
1940 None
1941
Simon Glass308939b2021-03-18 20:24:55 +13001942This holds the padding added after the SPL binary to cover the BSS (Block
1943Started by Symbol) region. This region holds the various variables used by
1944SPL. It is set to 0 by SPL when it starts up. If you want to append data to
1945the SPL image (such as a device tree file), you must pad out the BSS region
1946to avoid the data overlapping with U-Boot variables. This entry is useful in
1947that case. It automatically pads out the entry size to cover both the code,
1948data and BSS.
1949
1950The contents of this entry will a certain number of zero bytes, determined
1951by __bss_size
Simon Glass7a61c6b2018-07-17 13:25:37 -06001952
1953The ELF file 'spl/u-boot-spl' must also be available for this to work, since
1954binman uses that to look up the BSS address.
1955
1956
1957
Simon Glassa7c97782022-08-07 16:33:25 -06001958.. _etype_u_boot_spl_dtb:
1959
Simon Glass7a61c6b2018-07-17 13:25:37 -06001960Entry: u-boot-spl-dtb: U-Boot SPL device tree
1961---------------------------------------------
1962
1963Properties / Entry arguments:
1964 - filename: Filename of u-boot.dtb (default 'spl/u-boot-spl.dtb')
1965
1966This is the SPL device tree, containing configuration information for
1967SPL. SPL needs this to know what devices are present and which drivers
1968to activate.
1969
1970
Simon Glassa7c97782022-08-07 16:33:25 -06001971
1972.. _etype_u_boot_spl_elf:
Simon Glass7a61c6b2018-07-17 13:25:37 -06001973
Simon Glassb1714232018-09-14 04:57:35 -06001974Entry: u-boot-spl-elf: U-Boot SPL ELF image
1975-------------------------------------------
1976
1977Properties / Entry arguments:
Simon Glass5dcc21d2019-07-08 13:18:45 -06001978 - filename: Filename of SPL u-boot (default 'spl/u-boot-spl')
Simon Glassb1714232018-09-14 04:57:35 -06001979
1980This is the U-Boot SPL ELF image. It does not include a device tree but can
1981be relocated to any address for execution.
1982
Simon Glass718b5292021-03-18 20:25:07 +13001983
1984
Simon Glassa7c97782022-08-07 16:33:25 -06001985.. _etype_u_boot_spl_expanded:
1986
Simon Glass718b5292021-03-18 20:25:07 +13001987Entry: u-boot-spl-expanded: U-Boot SPL flat binary broken out into its component parts
1988--------------------------------------------------------------------------------------
1989
1990Properties / Entry arguments:
1991 - spl-dtb: Controls whether this entry is selected (set to 'y' or '1' to
1992 select)
1993
1994This is a section containing the U-Boot binary, BSS padding if needed and a
1995devicetree. Using this entry type automatically creates this section, with
1996the following entries in it:
1997
1998 u-boot-spl-nodtb
1999 u-boot-spl-bss-pad
2000 u-boot-dtb
2001
2002Having the devicetree separate allows binman to update it in the final
2003image, so that the entries positions are provided to the running U-Boot.
2004
2005This entry is selected based on the value of the 'spl-dtb' entryarg. If
2006this is non-empty (and not 'n' or '0') then this expanded entry is selected.
Simon Glassb1714232018-09-14 04:57:35 -06002007
2008
Simon Glassa7c97782022-08-07 16:33:25 -06002009
2010.. _etype_u_boot_spl_nodtb:
Simon Glass718b5292021-03-18 20:25:07 +13002011
Simon Glass7a61c6b2018-07-17 13:25:37 -06002012Entry: u-boot-spl-nodtb: SPL binary without device tree appended
2013----------------------------------------------------------------
2014
2015Properties / Entry arguments:
Simon Glass537e0062021-03-18 20:24:54 +13002016 - filename: Filename to include (default 'spl/u-boot-spl-nodtb.bin')
Simon Glass7a61c6b2018-07-17 13:25:37 -06002017
2018This is the U-Boot SPL binary, It does not include a device tree blob at
2019the end of it so may not be able to work without it, assuming SPL needs
Simon Glass537e0062021-03-18 20:24:54 +13002020a device tree to operate on your platform. You can add a u-boot-spl-dtb
Simon Glass718b5292021-03-18 20:25:07 +13002021entry after this one, or use a u-boot-spl entry instead' which normally
2022expands to a section containing u-boot-spl-dtb, u-boot-spl-bss-pad and
2023u-boot-spl-dtb
Simon Glass7a61c6b2018-07-17 13:25:37 -06002024
Simon Glass18ed9962023-01-07 14:07:11 -07002025SPL can access binman symbols at runtime. See :ref:`binman_fdt`.
Simon Glass31e04cb2021-03-18 20:24:56 +13002026
2027in the binman README for more information.
2028
2029The ELF file 'spl/u-boot-spl' must also be available for this to work, since
2030binman uses that to look up symbols to write into the SPL binary.
2031
Simon Glass7a61c6b2018-07-17 13:25:37 -06002032
2033
Simon Glassa7c97782022-08-07 16:33:25 -06002034.. _etype_u_boot_spl_with_ucode_ptr:
2035
Simon Glass7a61c6b2018-07-17 13:25:37 -06002036Entry: u-boot-spl-with-ucode-ptr: U-Boot SPL with embedded microcode pointer
2037----------------------------------------------------------------------------
2038
Simon Glass3fb4f422018-09-14 04:57:32 -06002039This is used when SPL must set up the microcode for U-Boot.
2040
Simon Glass7a61c6b2018-07-17 13:25:37 -06002041See Entry_u_boot_ucode for full details of the entries involved in this
2042process.
2043
2044
2045
Simon Glassa7c97782022-08-07 16:33:25 -06002046.. _etype_u_boot_tpl:
2047
Simon Glass8425a1f2018-07-17 13:25:48 -06002048Entry: u-boot-tpl: U-Boot TPL binary
2049------------------------------------
2050
2051Properties / Entry arguments:
2052 - filename: Filename of u-boot-tpl.bin (default 'tpl/u-boot-tpl.bin')
2053
2054This is the U-Boot TPL (Tertiary Program Loader) binary. This is a small
2055binary which loads before SPL, typically into on-chip SRAM. It is
2056responsible for locating, loading and jumping to SPL, the next-stage
2057loader. Note that SPL is not relocatable so must be loaded to the correct
2058address in SRAM, or written to run from the correct address if direct
2059flash execution is possible (e.g. on x86 devices).
2060
Simon Glass18ed9962023-01-07 14:07:11 -07002061SPL can access binman symbols at runtime. See :ref:`binman_fdt`.
Simon Glass8425a1f2018-07-17 13:25:48 -06002062
2063in the binman README for more information.
2064
2065The ELF file 'tpl/u-boot-tpl' must also be available for this to work, since
2066binman uses that to look up symbols to write into the TPL binary.
2067
Simon Glass718b5292021-03-18 20:25:07 +13002068Note that this entry is automatically replaced with u-boot-tpl-expanded
Simon Glass7098b7f2021-03-21 18:24:30 +13002069unless --no-expanded is used or the node has a 'no-expanded' property.
Simon Glass718b5292021-03-18 20:25:07 +13002070
Simon Glass8425a1f2018-07-17 13:25:48 -06002071
2072
Simon Glassa7c97782022-08-07 16:33:25 -06002073.. _etype_u_boot_tpl_bss_pad:
2074
Simon Glass63f41d42021-03-18 20:24:58 +13002075Entry: u-boot-tpl-bss-pad: U-Boot TPL binary padded with a BSS region
2076---------------------------------------------------------------------
2077
2078Properties / Entry arguments:
2079 None
2080
2081This holds the padding added after the TPL binary to cover the BSS (Block
2082Started by Symbol) region. This region holds the various variables used by
2083TPL. It is set to 0 by TPL when it starts up. If you want to append data to
2084the TPL image (such as a device tree file), you must pad out the BSS region
2085to avoid the data overlapping with U-Boot variables. This entry is useful in
2086that case. It automatically pads out the entry size to cover both the code,
2087data and BSS.
2088
2089The contents of this entry will a certain number of zero bytes, determined
2090by __bss_size
2091
2092The ELF file 'tpl/u-boot-tpl' must also be available for this to work, since
2093binman uses that to look up the BSS address.
2094
2095
2096
Simon Glassa7c97782022-08-07 16:33:25 -06002097.. _etype_u_boot_tpl_dtb:
2098
Simon Glass8425a1f2018-07-17 13:25:48 -06002099Entry: u-boot-tpl-dtb: U-Boot TPL device tree
2100---------------------------------------------
2101
2102Properties / Entry arguments:
2103 - filename: Filename of u-boot.dtb (default 'tpl/u-boot-tpl.dtb')
2104
2105This is the TPL device tree, containing configuration information for
2106TPL. TPL needs this to know what devices are present and which drivers
2107to activate.
2108
2109
2110
Simon Glassa7c97782022-08-07 16:33:25 -06002111.. _etype_u_boot_tpl_dtb_with_ucode:
2112
Simon Glass3fb4f422018-09-14 04:57:32 -06002113Entry: u-boot-tpl-dtb-with-ucode: U-Boot TPL with embedded microcode pointer
2114----------------------------------------------------------------------------
2115
2116This is used when TPL must set up the microcode for U-Boot.
2117
2118See Entry_u_boot_ucode for full details of the entries involved in this
2119process.
2120
2121
2122
Simon Glassa7c97782022-08-07 16:33:25 -06002123.. _etype_u_boot_tpl_elf:
2124
Simon Glassa899f712019-07-08 13:18:46 -06002125Entry: u-boot-tpl-elf: U-Boot TPL ELF image
2126-------------------------------------------
2127
2128Properties / Entry arguments:
2129 - filename: Filename of TPL u-boot (default 'tpl/u-boot-tpl')
2130
2131This is the U-Boot TPL ELF image. It does not include a device tree but can
2132be relocated to any address for execution.
2133
2134
Simon Glassa7c97782022-08-07 16:33:25 -06002135
2136.. _etype_u_boot_tpl_expanded:
Simon Glassa899f712019-07-08 13:18:46 -06002137
Simon Glass718b5292021-03-18 20:25:07 +13002138Entry: u-boot-tpl-expanded: U-Boot TPL flat binary broken out into its component parts
2139--------------------------------------------------------------------------------------
2140
2141Properties / Entry arguments:
2142 - tpl-dtb: Controls whether this entry is selected (set to 'y' or '1' to
2143 select)
2144
2145This is a section containing the U-Boot binary, BSS padding if needed and a
2146devicetree. Using this entry type automatically creates this section, with
2147the following entries in it:
2148
2149 u-boot-tpl-nodtb
2150 u-boot-tpl-bss-pad
2151 u-boot-dtb
2152
2153Having the devicetree separate allows binman to update it in the final
2154image, so that the entries positions are provided to the running U-Boot.
2155
2156This entry is selected based on the value of the 'tpl-dtb' entryarg. If
2157this is non-empty (and not 'n' or '0') then this expanded entry is selected.
2158
2159
2160
Simon Glassa7c97782022-08-07 16:33:25 -06002161.. _etype_u_boot_tpl_nodtb:
2162
Simon Glassc98de972021-03-18 20:24:57 +13002163Entry: u-boot-tpl-nodtb: TPL binary without device tree appended
2164----------------------------------------------------------------
2165
2166Properties / Entry arguments:
2167 - filename: Filename to include (default 'tpl/u-boot-tpl-nodtb.bin')
2168
2169This is the U-Boot TPL binary, It does not include a device tree blob at
2170the end of it so may not be able to work without it, assuming TPL needs
2171a device tree to operate on your platform. You can add a u-boot-tpl-dtb
Simon Glass718b5292021-03-18 20:25:07 +13002172entry after this one, or use a u-boot-tpl entry instead, which normally
2173expands to a section containing u-boot-tpl-dtb, u-boot-tpl-bss-pad and
2174u-boot-tpl-dtb
Simon Glassc98de972021-03-18 20:24:57 +13002175
Simon Glass18ed9962023-01-07 14:07:11 -07002176TPL can access binman symbols at runtime. See :ref:`binman_fdt`.
Simon Glassc98de972021-03-18 20:24:57 +13002177
2178in the binman README for more information.
2179
2180The ELF file 'tpl/u-boot-tpl' must also be available for this to work, since
2181binman uses that to look up symbols to write into the TPL binary.
2182
2183
Simon Glassa7c97782022-08-07 16:33:25 -06002184
2185.. _etype_u_boot_tpl_with_ucode_ptr:
Simon Glassc98de972021-03-18 20:24:57 +13002186
Simon Glass3fb4f422018-09-14 04:57:32 -06002187Entry: u-boot-tpl-with-ucode-ptr: U-Boot TPL with embedded microcode pointer
2188----------------------------------------------------------------------------
2189
2190See Entry_u_boot_ucode for full details of the entries involved in this
2191process.
2192
2193
2194
Simon Glassa7c97782022-08-07 16:33:25 -06002195.. _etype_u_boot_ucode:
2196
Simon Glass7a61c6b2018-07-17 13:25:37 -06002197Entry: u-boot-ucode: U-Boot microcode block
2198-------------------------------------------
2199
2200Properties / Entry arguments:
2201 None
2202
2203The contents of this entry are filled in automatically by other entries
2204which must also be in the image.
2205
2206U-Boot on x86 needs a single block of microcode. This is collected from
2207the various microcode update nodes in the device tree. It is also unable
2208to read the microcode from the device tree on platforms that use FSP
2209(Firmware Support Package) binaries, because the API requires that the
2210microcode is supplied before there is any SRAM available to use (i.e.
2211the FSP sets up the SRAM / cache-as-RAM but does so in the call that
2212requires the microcode!). To keep things simple, all x86 platforms handle
2213microcode the same way in U-Boot (even non-FSP platforms). This is that
2214a table is placed at _dt_ucode_base_size containing the base address and
2215size of the microcode. This is either passed to the FSP (for FSP
2216platforms), or used to set up the microcode (for non-FSP platforms).
2217This all happens in the build system since it is the only way to get
2218the microcode into a single blob and accessible without SRAM.
2219
2220There are two cases to handle. If there is only one microcode blob in
2221the device tree, then the ucode pointer it set to point to that. This
2222entry (u-boot-ucode) is empty. If there is more than one update, then
2223this entry holds the concatenation of all updates, and the device tree
2224entry (u-boot-dtb-with-ucode) is updated to remove the microcode. This
2225last step ensures that that the microcode appears in one contiguous
2226block in the image and is not unnecessarily duplicated in the device
2227tree. It is referred to as 'collation' here.
2228
2229Entry types that have a part to play in handling microcode:
2230
2231 Entry_u_boot_with_ucode_ptr:
2232 Contains u-boot-nodtb.bin (i.e. U-Boot without the device tree).
2233 It updates it with the address and size of the microcode so that
2234 U-Boot can find it early on start-up.
2235 Entry_u_boot_dtb_with_ucode:
2236 Contains u-boot.dtb. It stores the microcode in a
2237 'self.ucode_data' property, which is then read by this class to
2238 obtain the microcode if needed. If collation is performed, it
2239 removes the microcode from the device tree.
2240 Entry_u_boot_ucode:
2241 This class. If collation is enabled it reads the microcode from
2242 the Entry_u_boot_dtb_with_ucode entry, and uses it as the
2243 contents of this entry.
2244
2245
2246
Simon Glassda6a9082023-01-07 14:07:10 -07002247.. _etype_u_boot_vpl:
2248
2249Entry: u-boot-vpl: U-Boot VPL binary
2250------------------------------------
2251
2252Properties / Entry arguments:
2253 - filename: Filename of u-boot-vpl.bin (default 'vpl/u-boot-vpl.bin')
2254
2255This is the U-Boot VPL (Verifying Program Loader) binary. This is a small
2256binary which loads before SPL, typically into on-chip SRAM. It is
2257responsible for locating, loading and jumping to SPL, the next-stage
2258loader. Note that VPL is not relocatable so must be loaded to the correct
2259address in SRAM, or written to run from the correct address if direct
2260flash execution is possible (e.g. on x86 devices).
2261
Simon Glass18ed9962023-01-07 14:07:11 -07002262SPL can access binman symbols at runtime. See :ref:`binman_fdt`.
Simon Glassda6a9082023-01-07 14:07:10 -07002263
2264in the binman README for more information.
2265
2266The ELF file 'vpl/u-boot-vpl' must also be available for this to work, since
2267binman uses that to look up symbols to write into the VPL binary.
2268
2269
2270
2271.. _etype_u_boot_vpl_bss_pad:
2272
2273Entry: u-boot-vpl-bss-pad: U-Boot VPL binary padded with a BSS region
2274---------------------------------------------------------------------
2275
2276Properties / Entry arguments:
2277 None
2278
2279This holds the padding added after the VPL binary to cover the BSS (Block
2280Started by Symbol) region. This region holds the various variables used by
2281VPL. It is set to 0 by VPL when it starts up. If you want to append data to
2282the VPL image (such as a device tree file), you must pad out the BSS region
2283to avoid the data overlapping with U-Boot variables. This entry is useful in
2284that case. It automatically pads out the entry size to cover both the code,
2285data and BSS.
2286
2287The contents of this entry will a certain number of zero bytes, determined
2288by __bss_size
2289
2290The ELF file 'vpl/u-boot-vpl' must also be available for this to work, since
2291binman uses that to look up the BSS address.
2292
2293
2294
2295.. _etype_u_boot_vpl_dtb:
2296
2297Entry: u-boot-vpl-dtb: U-Boot VPL device tree
2298---------------------------------------------
2299
2300Properties / Entry arguments:
2301 - filename: Filename of u-boot.dtb (default 'vpl/u-boot-vpl.dtb')
2302
2303This is the VPL device tree, containing configuration information for
2304VPL. VPL needs this to know what devices are present and which drivers
2305to activate.
2306
2307
2308
2309.. _etype_u_boot_vpl_elf:
2310
2311Entry: u-boot-vpl-elf: U-Boot VPL ELF image
2312-------------------------------------------
2313
2314Properties / Entry arguments:
2315 - filename: Filename of VPL u-boot (default 'vpl/u-boot-vpl')
2316
2317This is the U-Boot VPL ELF image. It does not include a device tree but can
2318be relocated to any address for execution.
2319
2320
2321
2322.. _etype_u_boot_vpl_expanded:
2323
2324Entry: u-boot-vpl-expanded: U-Boot VPL flat binary broken out into its component parts
2325--------------------------------------------------------------------------------------
2326
2327Properties / Entry arguments:
2328 - vpl-dtb: Controls whether this entry is selected (set to 'y' or '1' to
2329 select)
2330
2331This is a section containing the U-Boot binary, BSS padding if needed and a
2332devicetree. Using this entry type automatically creates this section, with
2333the following entries in it:
2334
2335 u-boot-vpl-nodtb
2336 u-boot-vpl-bss-pad
2337 u-boot-dtb
2338
2339Having the devicetree separate allows binman to update it in the final
2340image, so that the entries positions are provided to the running U-Boot.
2341
2342This entry is selected based on the value of the 'vpl-dtb' entryarg. If
2343this is non-empty (and not 'n' or '0') then this expanded entry is selected.
2344
2345
2346
2347.. _etype_u_boot_vpl_nodtb:
2348
2349Entry: u-boot-vpl-nodtb: VPL binary without device tree appended
2350----------------------------------------------------------------
2351
2352Properties / Entry arguments:
2353 - filename: Filename to include (default 'vpl/u-boot-vpl-nodtb.bin')
2354
2355This is the U-Boot VPL binary, It does not include a device tree blob at
2356the end of it so may not be able to work without it, assuming VPL needs
2357a device tree to operate on your platform. You can add a u_boot_vpl_dtb
2358entry after this one, or use a u_boot_vpl entry instead, which normally
2359expands to a section containing u-boot-vpl-dtb, u-boot-vpl-bss-pad and
2360u-boot-vpl-dtb
2361
Simon Glass18ed9962023-01-07 14:07:11 -07002362VPL can access binman symbols at runtime. See :ref:`binman_fdt`.
Simon Glassda6a9082023-01-07 14:07:10 -07002363
2364The ELF file 'vpl/u-boot-vpl' must also be available for this to work, since
2365binman uses that to look up symbols to write into the VPL binary.
2366
2367
2368
Simon Glassa7c97782022-08-07 16:33:25 -06002369.. _etype_u_boot_with_ucode_ptr:
2370
Simon Glass7a61c6b2018-07-17 13:25:37 -06002371Entry: u-boot-with-ucode-ptr: U-Boot with embedded microcode pointer
2372--------------------------------------------------------------------
2373
2374Properties / Entry arguments:
Masahiro Yamadaa7a0ca42019-12-14 13:47:26 +09002375 - filename: Filename of u-boot-nodtb.bin (default 'u-boot-nodtb.bin')
Simon Glassee21d3a2018-09-14 04:57:07 -06002376 - optional-ucode: boolean property to make microcode optional. If the
2377 u-boot.bin image does not include microcode, no error will
2378 be generated.
Simon Glass7a61c6b2018-07-17 13:25:37 -06002379
2380See Entry_u_boot_ucode for full details of the three entries involved in
2381this process. This entry updates U-Boot with the offset and size of the
2382microcode, to allow early x86 boot code to find it without doing anything
Simon Glass537e0062021-03-18 20:24:54 +13002383complicated. Otherwise it is the same as the u-boot entry.
Simon Glass7a61c6b2018-07-17 13:25:37 -06002384
2385
2386
Simon Glassa7c97782022-08-07 16:33:25 -06002387.. _etype_vblock:
2388
Simon Glass5c350162018-07-17 13:25:47 -06002389Entry: vblock: An entry which contains a Chromium OS verified boot block
2390------------------------------------------------------------------------
2391
2392Properties / Entry arguments:
Simon Glass17b84eb2019-05-17 22:00:53 -06002393 - content: List of phandles to entries to sign
Simon Glass5c350162018-07-17 13:25:47 -06002394 - keydir: Directory containing the public keys to use
2395 - keyblock: Name of the key file to use (inside keydir)
2396 - signprivate: Name of provide key file to use (inside keydir)
2397 - version: Version number of the vblock (typically 1)
2398 - kernelkey: Name of the kernel key to use (inside keydir)
2399 - preamble-flags: Value of the vboot preamble flags (typically 0)
2400
Simon Glass639505b2018-09-14 04:57:11 -06002401Output files:
2402 - input.<unique_name> - input file passed to futility
2403 - vblock.<unique_name> - output file generated by futility (which is
2404 used as the entry contents)
2405
Jagdish Gediya311d4842018-09-03 21:35:08 +05302406Chromium OS signs the read-write firmware and kernel, writing the signature
Simon Glass5c350162018-07-17 13:25:47 -06002407in this block. This allows U-Boot to verify that the next firmware stage
2408and kernel are genuine.
2409
2410
2411
Simon Glassc3fe97f2023-03-02 17:02:45 -07002412.. _etype_x509_cert:
2413
2414Entry: x509-cert: An entry which contains an X509 certificate
2415-------------------------------------------------------------
2416
2417Properties / Entry arguments:
2418 - content: List of phandles to entries to sign
2419
2420Output files:
2421 - input.<unique_name> - input file passed to openssl
2422 - cert.<unique_name> - output file generated by openssl (which is
2423 used as the entry contents)
2424
2425openssl signs the provided data, writing the signature in this entry. This
2426allows verification that the data is genuine
2427
2428
2429
Simon Glassa7c97782022-08-07 16:33:25 -06002430.. _etype_x86_reset16:
2431
Simon Glass0b074d62019-08-24 07:22:48 -06002432Entry: x86-reset16: x86 16-bit reset code for U-Boot
2433----------------------------------------------------
2434
2435Properties / Entry arguments:
2436 - filename: Filename of u-boot-x86-reset16.bin (default
2437 'u-boot-x86-reset16.bin')
2438
2439x86 CPUs start up in 16-bit mode, even if they are 32-bit CPUs. This code
2440must be placed at a particular address. This entry holds that code. It is
2441typically placed at offset CONFIG_RESET_VEC_LOC. The code is responsible
2442for jumping to the x86-start16 code, which continues execution.
2443
2444For 64-bit U-Boot, the 'x86_reset16_spl' entry type is used instead.
2445
2446
2447
Simon Glassa7c97782022-08-07 16:33:25 -06002448.. _etype_x86_reset16_spl:
2449
Simon Glass0b074d62019-08-24 07:22:48 -06002450Entry: x86-reset16-spl: x86 16-bit reset code for U-Boot
2451--------------------------------------------------------
2452
2453Properties / Entry arguments:
2454 - filename: Filename of u-boot-x86-reset16.bin (default
2455 'u-boot-x86-reset16.bin')
2456
2457x86 CPUs start up in 16-bit mode, even if they are 32-bit CPUs. This code
2458must be placed at a particular address. This entry holds that code. It is
2459typically placed at offset CONFIG_RESET_VEC_LOC. The code is responsible
2460for jumping to the x86-start16 code, which continues execution.
2461
2462For 32-bit U-Boot, the 'x86_reset_spl' entry type is used instead.
2463
2464
2465
Simon Glassa7c97782022-08-07 16:33:25 -06002466.. _etype_x86_reset16_tpl:
2467
Simon Glass0b074d62019-08-24 07:22:48 -06002468Entry: x86-reset16-tpl: x86 16-bit reset code for U-Boot
2469--------------------------------------------------------
2470
2471Properties / Entry arguments:
2472 - filename: Filename of u-boot-x86-reset16.bin (default
2473 'u-boot-x86-reset16.bin')
2474
2475x86 CPUs start up in 16-bit mode, even if they are 32-bit CPUs. This code
2476must be placed at a particular address. This entry holds that code. It is
2477typically placed at offset CONFIG_RESET_VEC_LOC. The code is responsible
2478for jumping to the x86-start16 code, which continues execution.
2479
2480For 32-bit U-Boot, the 'x86_reset_tpl' entry type is used instead.
2481
2482
Simon Glassa7c97782022-08-07 16:33:25 -06002483
2484.. _etype_x86_start16:
Simon Glass0b074d62019-08-24 07:22:48 -06002485
Simon Glass7a61c6b2018-07-17 13:25:37 -06002486Entry: x86-start16: x86 16-bit start-up code for U-Boot
2487-------------------------------------------------------
2488
2489Properties / Entry arguments:
Simon Glassabab18c2019-08-24 07:22:49 -06002490 - filename: Filename of u-boot-x86-start16.bin (default
2491 'u-boot-x86-start16.bin')
Simon Glass7a61c6b2018-07-17 13:25:37 -06002492
2493x86 CPUs start up in 16-bit mode, even if they are 32-bit CPUs. This code
Simon Glassabab18c2019-08-24 07:22:49 -06002494must be placed in the top 64KB of the ROM. The reset code jumps to it. This
2495entry holds that code. It is typically placed at offset
2496CONFIG_SYS_X86_START16. The code is responsible for changing to 32-bit mode
2497and jumping to U-Boot's entry point, which requires 32-bit mode (for 32-bit
2498U-Boot).
Simon Glass7a61c6b2018-07-17 13:25:37 -06002499
2500For 64-bit U-Boot, the 'x86_start16_spl' entry type is used instead.
2501
2502
2503
Simon Glassa7c97782022-08-07 16:33:25 -06002504.. _etype_x86_start16_spl:
2505
Simon Glass7a61c6b2018-07-17 13:25:37 -06002506Entry: x86-start16-spl: x86 16-bit start-up code for SPL
2507--------------------------------------------------------
2508
2509Properties / Entry arguments:
Simon Glassabab18c2019-08-24 07:22:49 -06002510 - filename: Filename of spl/u-boot-x86-start16-spl.bin (default
2511 'spl/u-boot-x86-start16-spl.bin')
Simon Glass7a61c6b2018-07-17 13:25:37 -06002512
Simon Glassabab18c2019-08-24 07:22:49 -06002513x86 CPUs start up in 16-bit mode, even if they are 32-bit CPUs. This code
2514must be placed in the top 64KB of the ROM. The reset code jumps to it. This
2515entry holds that code. It is typically placed at offset
2516CONFIG_SYS_X86_START16. The code is responsible for changing to 32-bit mode
2517and jumping to U-Boot's entry point, which requires 32-bit mode (for 32-bit
2518U-Boot).
Simon Glass7a61c6b2018-07-17 13:25:37 -06002519
Simon Glassabab18c2019-08-24 07:22:49 -06002520For 32-bit U-Boot, the 'x86-start16' entry type is used instead.
Simon Glass7a61c6b2018-07-17 13:25:37 -06002521
2522
2523
Simon Glassa7c97782022-08-07 16:33:25 -06002524.. _etype_x86_start16_tpl:
2525
Simon Glassed40e962018-09-14 04:57:10 -06002526Entry: x86-start16-tpl: x86 16-bit start-up code for TPL
2527--------------------------------------------------------
2528
2529Properties / Entry arguments:
Simon Glassabab18c2019-08-24 07:22:49 -06002530 - filename: Filename of tpl/u-boot-x86-start16-tpl.bin (default
2531 'tpl/u-boot-x86-start16-tpl.bin')
Simon Glassed40e962018-09-14 04:57:10 -06002532
Simon Glassabab18c2019-08-24 07:22:49 -06002533x86 CPUs start up in 16-bit mode, even if they are 32-bit CPUs. This code
2534must be placed in the top 64KB of the ROM. The reset code jumps to it. This
2535entry holds that code. It is typically placed at offset
2536CONFIG_SYS_X86_START16. The code is responsible for changing to 32-bit mode
2537and jumping to U-Boot's entry point, which requires 32-bit mode (for 32-bit
2538U-Boot).
Simon Glassed40e962018-09-14 04:57:10 -06002539
Simon Glassabab18c2019-08-24 07:22:49 -06002540If TPL is not being used, the 'x86-start16-spl or 'x86-start16' entry types
Simon Glassed40e962018-09-14 04:57:10 -06002541may be used instead.
2542
2543
2544