blob: 8a9e778e6a0394e497454bb19ed8a5ad14b093e3 [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
Simon Glassa7c97782022-08-07 16:33:25 -06001715.. _etype_u_boot:
1716
Simon Glass7a61c6b2018-07-17 13:25:37 -06001717Entry: u-boot: U-Boot flat binary
1718---------------------------------
1719
1720Properties / Entry arguments:
1721 - filename: Filename of u-boot.bin (default 'u-boot.bin')
1722
1723This is the U-Boot binary, containing relocation information to allow it
1724to relocate itself at runtime. The binary typically includes a device tree
Simon Glass718b5292021-03-18 20:25:07 +13001725blob at the end of it.
Simon Glass7a61c6b2018-07-17 13:25:37 -06001726
Simon Glass18ed9962023-01-07 14:07:11 -07001727U-Boot can access binman symbols at runtime. See :ref:`binman_fdt`.
Simon Glass7a61c6b2018-07-17 13:25:37 -06001728
Simon Glass718b5292021-03-18 20:25:07 +13001729Note that this entry is automatically replaced with u-boot-expanded unless
Simon Glass7098b7f2021-03-21 18:24:30 +13001730--no-expanded is used or the node has a 'no-expanded' property.
Simon Glass7a61c6b2018-07-17 13:25:37 -06001731
1732
Simon Glass718b5292021-03-18 20:25:07 +13001733
Simon Glassa7c97782022-08-07 16:33:25 -06001734.. _etype_u_boot_dtb:
1735
Simon Glass7a61c6b2018-07-17 13:25:37 -06001736Entry: u-boot-dtb: U-Boot device tree
1737-------------------------------------
1738
1739Properties / Entry arguments:
1740 - filename: Filename of u-boot.dtb (default 'u-boot.dtb')
1741
1742This is the U-Boot device tree, containing configuration information for
1743U-Boot. U-Boot needs this to know what devices are present and which drivers
1744to activate.
1745
Simon Glasse219aa42018-09-14 04:57:24 -06001746Note: This is mostly an internal entry type, used by others. This allows
1747binman to know which entries contain a device tree.
Simon Glass7a61c6b2018-07-17 13:25:37 -06001748
1749
Simon Glassa7c97782022-08-07 16:33:25 -06001750
1751.. _etype_u_boot_dtb_with_ucode:
Simon Glass7a61c6b2018-07-17 13:25:37 -06001752
1753Entry: u-boot-dtb-with-ucode: A U-Boot device tree file, with the microcode removed
1754-----------------------------------------------------------------------------------
1755
1756Properties / Entry arguments:
1757 - filename: Filename of u-boot.dtb (default 'u-boot.dtb')
1758
1759See Entry_u_boot_ucode for full details of the three entries involved in
1760this process. This entry provides the U-Boot device-tree file, which
1761contains the microcode. If the microcode is not being collated into one
1762place then the offset and size of the microcode is recorded by this entry,
Simon Glass537e0062021-03-18 20:24:54 +13001763for use by u-boot-with-ucode_ptr. If it is being collated, then this
Simon Glass7a61c6b2018-07-17 13:25:37 -06001764entry deletes the microcode from the device tree (to save space) and makes
Simon Glass537e0062021-03-18 20:24:54 +13001765it available to u-boot-ucode.
Simon Glass7a61c6b2018-07-17 13:25:37 -06001766
1767
1768
Simon Glassa7c97782022-08-07 16:33:25 -06001769.. _etype_u_boot_elf:
1770
Simon Glassb1714232018-09-14 04:57:35 -06001771Entry: u-boot-elf: U-Boot ELF image
1772-----------------------------------
1773
1774Properties / Entry arguments:
1775 - filename: Filename of u-boot (default 'u-boot')
1776
1777This is the U-Boot ELF image. It does not include a device tree but can be
1778relocated to any address for execution.
1779
1780
Simon Glassa7c97782022-08-07 16:33:25 -06001781
1782.. _etype_u_boot_env:
Simon Glassb1714232018-09-14 04:57:35 -06001783
Simon Glass136dd352020-10-26 17:39:59 -06001784Entry: u-boot-env: An entry which contains a U-Boot environment
1785---------------------------------------------------------------
1786
1787Properties / Entry arguments:
1788 - filename: File containing the environment text, with each line in the
1789 form var=value
1790
1791
Simon Glass718b5292021-03-18 20:25:07 +13001792
Simon Glassa7c97782022-08-07 16:33:25 -06001793.. _etype_u_boot_expanded:
1794
Simon Glass718b5292021-03-18 20:25:07 +13001795Entry: u-boot-expanded: U-Boot flat binary broken out into its component parts
1796------------------------------------------------------------------------------
1797
1798This is a section containing the U-Boot binary and a devicetree. Using this
1799entry type automatically creates this section, with the following entries
1800in it:
1801
1802 u-boot-nodtb
1803 u-boot-dtb
1804
1805Having the devicetree separate allows binman to update it in the final
1806image, so that the entries positions are provided to the running U-Boot.
1807
1808
Simon Glass136dd352020-10-26 17:39:59 -06001809
Simon Glassa7c97782022-08-07 16:33:25 -06001810.. _etype_u_boot_img:
1811
Simon Glass7a61c6b2018-07-17 13:25:37 -06001812Entry: u-boot-img: U-Boot legacy image
1813--------------------------------------
1814
1815Properties / Entry arguments:
1816 - filename: Filename of u-boot.img (default 'u-boot.img')
1817
1818This is the U-Boot binary as a packaged image, in legacy format. It has a
1819header which allows it to be loaded at the correct address for execution.
1820
1821You should use FIT (Flat Image Tree) instead of the legacy image for new
1822applications.
1823
1824
1825
Simon Glassa7c97782022-08-07 16:33:25 -06001826.. _etype_u_boot_nodtb:
1827
Simon Glass7a61c6b2018-07-17 13:25:37 -06001828Entry: u-boot-nodtb: U-Boot flat binary without device tree appended
1829--------------------------------------------------------------------
1830
1831Properties / Entry arguments:
Simon Glass537e0062021-03-18 20:24:54 +13001832 - filename: Filename to include (default 'u-boot-nodtb.bin')
Simon Glass7a61c6b2018-07-17 13:25:37 -06001833
1834This is the U-Boot binary, containing relocation information to allow it
1835to relocate itself at runtime. It does not include a device tree blob at
Simon Glass537e0062021-03-18 20:24:54 +13001836the end of it so normally cannot work without it. You can add a u-boot-dtb
Simon Glass718b5292021-03-18 20:25:07 +13001837entry after this one, or use a u-boot entry instead, normally expands to a
1838section containing u-boot and u-boot-dtb
Simon Glass7a61c6b2018-07-17 13:25:37 -06001839
1840
1841
Simon Glassa7c97782022-08-07 16:33:25 -06001842.. _etype_u_boot_spl:
1843
Simon Glass7a61c6b2018-07-17 13:25:37 -06001844Entry: u-boot-spl: U-Boot SPL binary
1845------------------------------------
1846
1847Properties / Entry arguments:
1848 - filename: Filename of u-boot-spl.bin (default 'spl/u-boot-spl.bin')
1849
1850This is the U-Boot SPL (Secondary Program Loader) binary. This is a small
1851binary which loads before U-Boot proper, typically into on-chip SRAM. It is
1852responsible for locating, loading and jumping to U-Boot. Note that SPL is
1853not relocatable so must be loaded to the correct address in SRAM, or written
Simon Glass8425a1f2018-07-17 13:25:48 -06001854to run from the correct address if direct flash execution is possible (e.g.
Simon Glass7a61c6b2018-07-17 13:25:37 -06001855on x86 devices).
1856
Simon Glass18ed9962023-01-07 14:07:11 -07001857SPL can access binman symbols at runtime. See :ref:`binman_fdt`.
Simon Glass7a61c6b2018-07-17 13:25:37 -06001858
1859in the binman README for more information.
1860
1861The ELF file 'spl/u-boot-spl' must also be available for this to work, since
1862binman uses that to look up symbols to write into the SPL binary.
1863
Simon Glass718b5292021-03-18 20:25:07 +13001864Note that this entry is automatically replaced with u-boot-spl-expanded
Simon Glass7098b7f2021-03-21 18:24:30 +13001865unless --no-expanded is used or the node has a 'no-expanded' property.
Simon Glass718b5292021-03-18 20:25:07 +13001866
Simon Glass7a61c6b2018-07-17 13:25:37 -06001867
1868
Simon Glassa7c97782022-08-07 16:33:25 -06001869.. _etype_u_boot_spl_bss_pad:
1870
Simon Glass7a61c6b2018-07-17 13:25:37 -06001871Entry: u-boot-spl-bss-pad: U-Boot SPL binary padded with a BSS region
1872---------------------------------------------------------------------
1873
1874Properties / Entry arguments:
1875 None
1876
Simon Glass308939b2021-03-18 20:24:55 +13001877This holds the padding added after the SPL binary to cover the BSS (Block
1878Started by Symbol) region. This region holds the various variables used by
1879SPL. It is set to 0 by SPL when it starts up. If you want to append data to
1880the SPL image (such as a device tree file), you must pad out the BSS region
1881to avoid the data overlapping with U-Boot variables. This entry is useful in
1882that case. It automatically pads out the entry size to cover both the code,
1883data and BSS.
1884
1885The contents of this entry will a certain number of zero bytes, determined
1886by __bss_size
Simon Glass7a61c6b2018-07-17 13:25:37 -06001887
1888The ELF file 'spl/u-boot-spl' must also be available for this to work, since
1889binman uses that to look up the BSS address.
1890
1891
1892
Simon Glassa7c97782022-08-07 16:33:25 -06001893.. _etype_u_boot_spl_dtb:
1894
Simon Glass7a61c6b2018-07-17 13:25:37 -06001895Entry: u-boot-spl-dtb: U-Boot SPL device tree
1896---------------------------------------------
1897
1898Properties / Entry arguments:
1899 - filename: Filename of u-boot.dtb (default 'spl/u-boot-spl.dtb')
1900
1901This is the SPL device tree, containing configuration information for
1902SPL. SPL needs this to know what devices are present and which drivers
1903to activate.
1904
1905
Simon Glassa7c97782022-08-07 16:33:25 -06001906
1907.. _etype_u_boot_spl_elf:
Simon Glass7a61c6b2018-07-17 13:25:37 -06001908
Simon Glassb1714232018-09-14 04:57:35 -06001909Entry: u-boot-spl-elf: U-Boot SPL ELF image
1910-------------------------------------------
1911
1912Properties / Entry arguments:
Simon Glass5dcc21d2019-07-08 13:18:45 -06001913 - filename: Filename of SPL u-boot (default 'spl/u-boot-spl')
Simon Glassb1714232018-09-14 04:57:35 -06001914
1915This is the U-Boot SPL ELF image. It does not include a device tree but can
1916be relocated to any address for execution.
1917
Simon Glass718b5292021-03-18 20:25:07 +13001918
1919
Simon Glassa7c97782022-08-07 16:33:25 -06001920.. _etype_u_boot_spl_expanded:
1921
Simon Glass718b5292021-03-18 20:25:07 +13001922Entry: u-boot-spl-expanded: U-Boot SPL flat binary broken out into its component parts
1923--------------------------------------------------------------------------------------
1924
1925Properties / Entry arguments:
1926 - spl-dtb: Controls whether this entry is selected (set to 'y' or '1' to
1927 select)
1928
1929This is a section containing the U-Boot binary, BSS padding if needed and a
1930devicetree. Using this entry type automatically creates this section, with
1931the following entries in it:
1932
1933 u-boot-spl-nodtb
1934 u-boot-spl-bss-pad
1935 u-boot-dtb
1936
1937Having the devicetree separate allows binman to update it in the final
1938image, so that the entries positions are provided to the running U-Boot.
1939
1940This entry is selected based on the value of the 'spl-dtb' entryarg. If
1941this is non-empty (and not 'n' or '0') then this expanded entry is selected.
Simon Glassb1714232018-09-14 04:57:35 -06001942
1943
Simon Glassa7c97782022-08-07 16:33:25 -06001944
1945.. _etype_u_boot_spl_nodtb:
Simon Glass718b5292021-03-18 20:25:07 +13001946
Simon Glass7a61c6b2018-07-17 13:25:37 -06001947Entry: u-boot-spl-nodtb: SPL binary without device tree appended
1948----------------------------------------------------------------
1949
1950Properties / Entry arguments:
Simon Glass537e0062021-03-18 20:24:54 +13001951 - filename: Filename to include (default 'spl/u-boot-spl-nodtb.bin')
Simon Glass7a61c6b2018-07-17 13:25:37 -06001952
1953This is the U-Boot SPL binary, It does not include a device tree blob at
1954the end of it so may not be able to work without it, assuming SPL needs
Simon Glass537e0062021-03-18 20:24:54 +13001955a device tree to operate on your platform. You can add a u-boot-spl-dtb
Simon Glass718b5292021-03-18 20:25:07 +13001956entry after this one, or use a u-boot-spl entry instead' which normally
1957expands to a section containing u-boot-spl-dtb, u-boot-spl-bss-pad and
1958u-boot-spl-dtb
Simon Glass7a61c6b2018-07-17 13:25:37 -06001959
Simon Glass18ed9962023-01-07 14:07:11 -07001960SPL can access binman symbols at runtime. See :ref:`binman_fdt`.
Simon Glass31e04cb2021-03-18 20:24:56 +13001961
1962in the binman README for more information.
1963
1964The ELF file 'spl/u-boot-spl' must also be available for this to work, since
1965binman uses that to look up symbols to write into the SPL binary.
1966
Simon Glass7a61c6b2018-07-17 13:25:37 -06001967
1968
Simon Glassa7c97782022-08-07 16:33:25 -06001969.. _etype_u_boot_spl_with_ucode_ptr:
1970
Simon Glass7a61c6b2018-07-17 13:25:37 -06001971Entry: u-boot-spl-with-ucode-ptr: U-Boot SPL with embedded microcode pointer
1972----------------------------------------------------------------------------
1973
Simon Glass3fb4f422018-09-14 04:57:32 -06001974This is used when SPL must set up the microcode for U-Boot.
1975
Simon Glass7a61c6b2018-07-17 13:25:37 -06001976See Entry_u_boot_ucode for full details of the entries involved in this
1977process.
1978
1979
1980
Simon Glassa7c97782022-08-07 16:33:25 -06001981.. _etype_u_boot_tpl:
1982
Simon Glass8425a1f2018-07-17 13:25:48 -06001983Entry: u-boot-tpl: U-Boot TPL binary
1984------------------------------------
1985
1986Properties / Entry arguments:
1987 - filename: Filename of u-boot-tpl.bin (default 'tpl/u-boot-tpl.bin')
1988
1989This is the U-Boot TPL (Tertiary Program Loader) binary. This is a small
1990binary which loads before SPL, typically into on-chip SRAM. It is
1991responsible for locating, loading and jumping to SPL, the next-stage
1992loader. Note that SPL is not relocatable so must be loaded to the correct
1993address in SRAM, or written to run from the correct address if direct
1994flash execution is possible (e.g. on x86 devices).
1995
Simon Glass18ed9962023-01-07 14:07:11 -07001996SPL can access binman symbols at runtime. See :ref:`binman_fdt`.
Simon Glass8425a1f2018-07-17 13:25:48 -06001997
1998in the binman README for more information.
1999
2000The ELF file 'tpl/u-boot-tpl' must also be available for this to work, since
2001binman uses that to look up symbols to write into the TPL binary.
2002
Simon Glass718b5292021-03-18 20:25:07 +13002003Note that this entry is automatically replaced with u-boot-tpl-expanded
Simon Glass7098b7f2021-03-21 18:24:30 +13002004unless --no-expanded is used or the node has a 'no-expanded' property.
Simon Glass718b5292021-03-18 20:25:07 +13002005
Simon Glass8425a1f2018-07-17 13:25:48 -06002006
2007
Simon Glassa7c97782022-08-07 16:33:25 -06002008.. _etype_u_boot_tpl_bss_pad:
2009
Simon Glass63f41d42021-03-18 20:24:58 +13002010Entry: u-boot-tpl-bss-pad: U-Boot TPL binary padded with a BSS region
2011---------------------------------------------------------------------
2012
2013Properties / Entry arguments:
2014 None
2015
2016This holds the padding added after the TPL binary to cover the BSS (Block
2017Started by Symbol) region. This region holds the various variables used by
2018TPL. It is set to 0 by TPL when it starts up. If you want to append data to
2019the TPL image (such as a device tree file), you must pad out the BSS region
2020to avoid the data overlapping with U-Boot variables. This entry is useful in
2021that case. It automatically pads out the entry size to cover both the code,
2022data and BSS.
2023
2024The contents of this entry will a certain number of zero bytes, determined
2025by __bss_size
2026
2027The ELF file 'tpl/u-boot-tpl' must also be available for this to work, since
2028binman uses that to look up the BSS address.
2029
2030
2031
Simon Glassa7c97782022-08-07 16:33:25 -06002032.. _etype_u_boot_tpl_dtb:
2033
Simon Glass8425a1f2018-07-17 13:25:48 -06002034Entry: u-boot-tpl-dtb: U-Boot TPL device tree
2035---------------------------------------------
2036
2037Properties / Entry arguments:
2038 - filename: Filename of u-boot.dtb (default 'tpl/u-boot-tpl.dtb')
2039
2040This is the TPL device tree, containing configuration information for
2041TPL. TPL needs this to know what devices are present and which drivers
2042to activate.
2043
2044
2045
Simon Glassa7c97782022-08-07 16:33:25 -06002046.. _etype_u_boot_tpl_dtb_with_ucode:
2047
Simon Glass3fb4f422018-09-14 04:57:32 -06002048Entry: u-boot-tpl-dtb-with-ucode: U-Boot TPL with embedded microcode pointer
2049----------------------------------------------------------------------------
2050
2051This is used when TPL must set up the microcode for U-Boot.
2052
2053See Entry_u_boot_ucode for full details of the entries involved in this
2054process.
2055
2056
2057
Simon Glassa7c97782022-08-07 16:33:25 -06002058.. _etype_u_boot_tpl_elf:
2059
Simon Glassa899f712019-07-08 13:18:46 -06002060Entry: u-boot-tpl-elf: U-Boot TPL ELF image
2061-------------------------------------------
2062
2063Properties / Entry arguments:
2064 - filename: Filename of TPL u-boot (default 'tpl/u-boot-tpl')
2065
2066This is the U-Boot TPL ELF image. It does not include a device tree but can
2067be relocated to any address for execution.
2068
2069
Simon Glassa7c97782022-08-07 16:33:25 -06002070
2071.. _etype_u_boot_tpl_expanded:
Simon Glassa899f712019-07-08 13:18:46 -06002072
Simon Glass718b5292021-03-18 20:25:07 +13002073Entry: u-boot-tpl-expanded: U-Boot TPL flat binary broken out into its component parts
2074--------------------------------------------------------------------------------------
2075
2076Properties / Entry arguments:
2077 - tpl-dtb: Controls whether this entry is selected (set to 'y' or '1' to
2078 select)
2079
2080This is a section containing the U-Boot binary, BSS padding if needed and a
2081devicetree. Using this entry type automatically creates this section, with
2082the following entries in it:
2083
2084 u-boot-tpl-nodtb
2085 u-boot-tpl-bss-pad
2086 u-boot-dtb
2087
2088Having the devicetree separate allows binman to update it in the final
2089image, so that the entries positions are provided to the running U-Boot.
2090
2091This entry is selected based on the value of the 'tpl-dtb' entryarg. If
2092this is non-empty (and not 'n' or '0') then this expanded entry is selected.
2093
2094
2095
Simon Glassa7c97782022-08-07 16:33:25 -06002096.. _etype_u_boot_tpl_nodtb:
2097
Simon Glassc98de972021-03-18 20:24:57 +13002098Entry: u-boot-tpl-nodtb: TPL binary without device tree appended
2099----------------------------------------------------------------
2100
2101Properties / Entry arguments:
2102 - filename: Filename to include (default 'tpl/u-boot-tpl-nodtb.bin')
2103
2104This is the U-Boot TPL binary, It does not include a device tree blob at
2105the end of it so may not be able to work without it, assuming TPL needs
2106a device tree to operate on your platform. You can add a u-boot-tpl-dtb
Simon Glass718b5292021-03-18 20:25:07 +13002107entry after this one, or use a u-boot-tpl entry instead, which normally
2108expands to a section containing u-boot-tpl-dtb, u-boot-tpl-bss-pad and
2109u-boot-tpl-dtb
Simon Glassc98de972021-03-18 20:24:57 +13002110
Simon Glass18ed9962023-01-07 14:07:11 -07002111TPL can access binman symbols at runtime. See :ref:`binman_fdt`.
Simon Glassc98de972021-03-18 20:24:57 +13002112
2113in the binman README for more information.
2114
2115The ELF file 'tpl/u-boot-tpl' must also be available for this to work, since
2116binman uses that to look up symbols to write into the TPL binary.
2117
2118
Simon Glassa7c97782022-08-07 16:33:25 -06002119
2120.. _etype_u_boot_tpl_with_ucode_ptr:
Simon Glassc98de972021-03-18 20:24:57 +13002121
Simon Glass3fb4f422018-09-14 04:57:32 -06002122Entry: u-boot-tpl-with-ucode-ptr: U-Boot TPL with embedded microcode pointer
2123----------------------------------------------------------------------------
2124
2125See Entry_u_boot_ucode for full details of the entries involved in this
2126process.
2127
2128
2129
Simon Glassa7c97782022-08-07 16:33:25 -06002130.. _etype_u_boot_ucode:
2131
Simon Glass7a61c6b2018-07-17 13:25:37 -06002132Entry: u-boot-ucode: U-Boot microcode block
2133-------------------------------------------
2134
2135Properties / Entry arguments:
2136 None
2137
2138The contents of this entry are filled in automatically by other entries
2139which must also be in the image.
2140
2141U-Boot on x86 needs a single block of microcode. This is collected from
2142the various microcode update nodes in the device tree. It is also unable
2143to read the microcode from the device tree on platforms that use FSP
2144(Firmware Support Package) binaries, because the API requires that the
2145microcode is supplied before there is any SRAM available to use (i.e.
2146the FSP sets up the SRAM / cache-as-RAM but does so in the call that
2147requires the microcode!). To keep things simple, all x86 platforms handle
2148microcode the same way in U-Boot (even non-FSP platforms). This is that
2149a table is placed at _dt_ucode_base_size containing the base address and
2150size of the microcode. This is either passed to the FSP (for FSP
2151platforms), or used to set up the microcode (for non-FSP platforms).
2152This all happens in the build system since it is the only way to get
2153the microcode into a single blob and accessible without SRAM.
2154
2155There are two cases to handle. If there is only one microcode blob in
2156the device tree, then the ucode pointer it set to point to that. This
2157entry (u-boot-ucode) is empty. If there is more than one update, then
2158this entry holds the concatenation of all updates, and the device tree
2159entry (u-boot-dtb-with-ucode) is updated to remove the microcode. This
2160last step ensures that that the microcode appears in one contiguous
2161block in the image and is not unnecessarily duplicated in the device
2162tree. It is referred to as 'collation' here.
2163
2164Entry types that have a part to play in handling microcode:
2165
2166 Entry_u_boot_with_ucode_ptr:
2167 Contains u-boot-nodtb.bin (i.e. U-Boot without the device tree).
2168 It updates it with the address and size of the microcode so that
2169 U-Boot can find it early on start-up.
2170 Entry_u_boot_dtb_with_ucode:
2171 Contains u-boot.dtb. It stores the microcode in a
2172 'self.ucode_data' property, which is then read by this class to
2173 obtain the microcode if needed. If collation is performed, it
2174 removes the microcode from the device tree.
2175 Entry_u_boot_ucode:
2176 This class. If collation is enabled it reads the microcode from
2177 the Entry_u_boot_dtb_with_ucode entry, and uses it as the
2178 contents of this entry.
2179
2180
2181
Simon Glassda6a9082023-01-07 14:07:10 -07002182.. _etype_u_boot_vpl:
2183
2184Entry: u-boot-vpl: U-Boot VPL binary
2185------------------------------------
2186
2187Properties / Entry arguments:
2188 - filename: Filename of u-boot-vpl.bin (default 'vpl/u-boot-vpl.bin')
2189
2190This is the U-Boot VPL (Verifying Program Loader) binary. This is a small
2191binary which loads before SPL, typically into on-chip SRAM. It is
2192responsible for locating, loading and jumping to SPL, the next-stage
2193loader. Note that VPL is not relocatable so must be loaded to the correct
2194address in SRAM, or written to run from the correct address if direct
2195flash execution is possible (e.g. on x86 devices).
2196
Simon Glass18ed9962023-01-07 14:07:11 -07002197SPL can access binman symbols at runtime. See :ref:`binman_fdt`.
Simon Glassda6a9082023-01-07 14:07:10 -07002198
2199in the binman README for more information.
2200
2201The ELF file 'vpl/u-boot-vpl' must also be available for this to work, since
2202binman uses that to look up symbols to write into the VPL binary.
2203
2204
2205
2206.. _etype_u_boot_vpl_bss_pad:
2207
2208Entry: u-boot-vpl-bss-pad: U-Boot VPL binary padded with a BSS region
2209---------------------------------------------------------------------
2210
2211Properties / Entry arguments:
2212 None
2213
2214This holds the padding added after the VPL binary to cover the BSS (Block
2215Started by Symbol) region. This region holds the various variables used by
2216VPL. It is set to 0 by VPL when it starts up. If you want to append data to
2217the VPL image (such as a device tree file), you must pad out the BSS region
2218to avoid the data overlapping with U-Boot variables. This entry is useful in
2219that case. It automatically pads out the entry size to cover both the code,
2220data and BSS.
2221
2222The contents of this entry will a certain number of zero bytes, determined
2223by __bss_size
2224
2225The ELF file 'vpl/u-boot-vpl' must also be available for this to work, since
2226binman uses that to look up the BSS address.
2227
2228
2229
2230.. _etype_u_boot_vpl_dtb:
2231
2232Entry: u-boot-vpl-dtb: U-Boot VPL device tree
2233---------------------------------------------
2234
2235Properties / Entry arguments:
2236 - filename: Filename of u-boot.dtb (default 'vpl/u-boot-vpl.dtb')
2237
2238This is the VPL device tree, containing configuration information for
2239VPL. VPL needs this to know what devices are present and which drivers
2240to activate.
2241
2242
2243
2244.. _etype_u_boot_vpl_elf:
2245
2246Entry: u-boot-vpl-elf: U-Boot VPL ELF image
2247-------------------------------------------
2248
2249Properties / Entry arguments:
2250 - filename: Filename of VPL u-boot (default 'vpl/u-boot-vpl')
2251
2252This is the U-Boot VPL ELF image. It does not include a device tree but can
2253be relocated to any address for execution.
2254
2255
2256
2257.. _etype_u_boot_vpl_expanded:
2258
2259Entry: u-boot-vpl-expanded: U-Boot VPL flat binary broken out into its component parts
2260--------------------------------------------------------------------------------------
2261
2262Properties / Entry arguments:
2263 - vpl-dtb: Controls whether this entry is selected (set to 'y' or '1' to
2264 select)
2265
2266This is a section containing the U-Boot binary, BSS padding if needed and a
2267devicetree. Using this entry type automatically creates this section, with
2268the following entries in it:
2269
2270 u-boot-vpl-nodtb
2271 u-boot-vpl-bss-pad
2272 u-boot-dtb
2273
2274Having the devicetree separate allows binman to update it in the final
2275image, so that the entries positions are provided to the running U-Boot.
2276
2277This entry is selected based on the value of the 'vpl-dtb' entryarg. If
2278this is non-empty (and not 'n' or '0') then this expanded entry is selected.
2279
2280
2281
2282.. _etype_u_boot_vpl_nodtb:
2283
2284Entry: u-boot-vpl-nodtb: VPL binary without device tree appended
2285----------------------------------------------------------------
2286
2287Properties / Entry arguments:
2288 - filename: Filename to include (default 'vpl/u-boot-vpl-nodtb.bin')
2289
2290This is the U-Boot VPL binary, It does not include a device tree blob at
2291the end of it so may not be able to work without it, assuming VPL needs
2292a device tree to operate on your platform. You can add a u_boot_vpl_dtb
2293entry after this one, or use a u_boot_vpl entry instead, which normally
2294expands to a section containing u-boot-vpl-dtb, u-boot-vpl-bss-pad and
2295u-boot-vpl-dtb
2296
Simon Glass18ed9962023-01-07 14:07:11 -07002297VPL can access binman symbols at runtime. See :ref:`binman_fdt`.
Simon Glassda6a9082023-01-07 14:07:10 -07002298
2299The ELF file 'vpl/u-boot-vpl' must also be available for this to work, since
2300binman uses that to look up symbols to write into the VPL binary.
2301
2302
2303
Simon Glassa7c97782022-08-07 16:33:25 -06002304.. _etype_u_boot_with_ucode_ptr:
2305
Simon Glass7a61c6b2018-07-17 13:25:37 -06002306Entry: u-boot-with-ucode-ptr: U-Boot with embedded microcode pointer
2307--------------------------------------------------------------------
2308
2309Properties / Entry arguments:
Masahiro Yamadaa7a0ca42019-12-14 13:47:26 +09002310 - filename: Filename of u-boot-nodtb.bin (default 'u-boot-nodtb.bin')
Simon Glassee21d3a2018-09-14 04:57:07 -06002311 - optional-ucode: boolean property to make microcode optional. If the
2312 u-boot.bin image does not include microcode, no error will
2313 be generated.
Simon Glass7a61c6b2018-07-17 13:25:37 -06002314
2315See Entry_u_boot_ucode for full details of the three entries involved in
2316this process. This entry updates U-Boot with the offset and size of the
2317microcode, to allow early x86 boot code to find it without doing anything
Simon Glass537e0062021-03-18 20:24:54 +13002318complicated. Otherwise it is the same as the u-boot entry.
Simon Glass7a61c6b2018-07-17 13:25:37 -06002319
2320
2321
Simon Glassa7c97782022-08-07 16:33:25 -06002322.. _etype_vblock:
2323
Simon Glass5c350162018-07-17 13:25:47 -06002324Entry: vblock: An entry which contains a Chromium OS verified boot block
2325------------------------------------------------------------------------
2326
2327Properties / Entry arguments:
Simon Glass17b84eb2019-05-17 22:00:53 -06002328 - content: List of phandles to entries to sign
Simon Glass5c350162018-07-17 13:25:47 -06002329 - keydir: Directory containing the public keys to use
2330 - keyblock: Name of the key file to use (inside keydir)
2331 - signprivate: Name of provide key file to use (inside keydir)
2332 - version: Version number of the vblock (typically 1)
2333 - kernelkey: Name of the kernel key to use (inside keydir)
2334 - preamble-flags: Value of the vboot preamble flags (typically 0)
2335
Simon Glass639505b2018-09-14 04:57:11 -06002336Output files:
2337 - input.<unique_name> - input file passed to futility
2338 - vblock.<unique_name> - output file generated by futility (which is
2339 used as the entry contents)
2340
Jagdish Gediya311d4842018-09-03 21:35:08 +05302341Chromium OS signs the read-write firmware and kernel, writing the signature
Simon Glass5c350162018-07-17 13:25:47 -06002342in this block. This allows U-Boot to verify that the next firmware stage
2343and kernel are genuine.
2344
2345
2346
Simon Glassc3fe97f2023-03-02 17:02:45 -07002347.. _etype_x509_cert:
2348
2349Entry: x509-cert: An entry which contains an X509 certificate
2350-------------------------------------------------------------
2351
2352Properties / Entry arguments:
2353 - content: List of phandles to entries to sign
2354
2355Output files:
2356 - input.<unique_name> - input file passed to openssl
2357 - cert.<unique_name> - output file generated by openssl (which is
2358 used as the entry contents)
2359
2360openssl signs the provided data, writing the signature in this entry. This
2361allows verification that the data is genuine
2362
2363
2364
Simon Glassa7c97782022-08-07 16:33:25 -06002365.. _etype_x86_reset16:
2366
Simon Glass0b074d62019-08-24 07:22:48 -06002367Entry: x86-reset16: x86 16-bit reset code for U-Boot
2368----------------------------------------------------
2369
2370Properties / Entry arguments:
2371 - filename: Filename of u-boot-x86-reset16.bin (default
2372 'u-boot-x86-reset16.bin')
2373
2374x86 CPUs start up in 16-bit mode, even if they are 32-bit CPUs. This code
2375must be placed at a particular address. This entry holds that code. It is
2376typically placed at offset CONFIG_RESET_VEC_LOC. The code is responsible
2377for jumping to the x86-start16 code, which continues execution.
2378
2379For 64-bit U-Boot, the 'x86_reset16_spl' entry type is used instead.
2380
2381
2382
Simon Glassa7c97782022-08-07 16:33:25 -06002383.. _etype_x86_reset16_spl:
2384
Simon Glass0b074d62019-08-24 07:22:48 -06002385Entry: x86-reset16-spl: x86 16-bit reset code for U-Boot
2386--------------------------------------------------------
2387
2388Properties / Entry arguments:
2389 - filename: Filename of u-boot-x86-reset16.bin (default
2390 'u-boot-x86-reset16.bin')
2391
2392x86 CPUs start up in 16-bit mode, even if they are 32-bit CPUs. This code
2393must be placed at a particular address. This entry holds that code. It is
2394typically placed at offset CONFIG_RESET_VEC_LOC. The code is responsible
2395for jumping to the x86-start16 code, which continues execution.
2396
2397For 32-bit U-Boot, the 'x86_reset_spl' entry type is used instead.
2398
2399
2400
Simon Glassa7c97782022-08-07 16:33:25 -06002401.. _etype_x86_reset16_tpl:
2402
Simon Glass0b074d62019-08-24 07:22:48 -06002403Entry: x86-reset16-tpl: x86 16-bit reset code for U-Boot
2404--------------------------------------------------------
2405
2406Properties / Entry arguments:
2407 - filename: Filename of u-boot-x86-reset16.bin (default
2408 'u-boot-x86-reset16.bin')
2409
2410x86 CPUs start up in 16-bit mode, even if they are 32-bit CPUs. This code
2411must be placed at a particular address. This entry holds that code. It is
2412typically placed at offset CONFIG_RESET_VEC_LOC. The code is responsible
2413for jumping to the x86-start16 code, which continues execution.
2414
2415For 32-bit U-Boot, the 'x86_reset_tpl' entry type is used instead.
2416
2417
Simon Glassa7c97782022-08-07 16:33:25 -06002418
2419.. _etype_x86_start16:
Simon Glass0b074d62019-08-24 07:22:48 -06002420
Simon Glass7a61c6b2018-07-17 13:25:37 -06002421Entry: x86-start16: x86 16-bit start-up code for U-Boot
2422-------------------------------------------------------
2423
2424Properties / Entry arguments:
Simon Glassabab18c2019-08-24 07:22:49 -06002425 - filename: Filename of u-boot-x86-start16.bin (default
2426 'u-boot-x86-start16.bin')
Simon Glass7a61c6b2018-07-17 13:25:37 -06002427
2428x86 CPUs start up in 16-bit mode, even if they are 32-bit CPUs. This code
Simon Glassabab18c2019-08-24 07:22:49 -06002429must be placed in the top 64KB of the ROM. The reset code jumps to it. This
2430entry holds that code. It is typically placed at offset
2431CONFIG_SYS_X86_START16. The code is responsible for changing to 32-bit mode
2432and jumping to U-Boot's entry point, which requires 32-bit mode (for 32-bit
2433U-Boot).
Simon Glass7a61c6b2018-07-17 13:25:37 -06002434
2435For 64-bit U-Boot, the 'x86_start16_spl' entry type is used instead.
2436
2437
2438
Simon Glassa7c97782022-08-07 16:33:25 -06002439.. _etype_x86_start16_spl:
2440
Simon Glass7a61c6b2018-07-17 13:25:37 -06002441Entry: x86-start16-spl: x86 16-bit start-up code for SPL
2442--------------------------------------------------------
2443
2444Properties / Entry arguments:
Simon Glassabab18c2019-08-24 07:22:49 -06002445 - filename: Filename of spl/u-boot-x86-start16-spl.bin (default
2446 'spl/u-boot-x86-start16-spl.bin')
Simon Glass7a61c6b2018-07-17 13:25:37 -06002447
Simon Glassabab18c2019-08-24 07:22:49 -06002448x86 CPUs start up in 16-bit mode, even if they are 32-bit CPUs. This code
2449must be placed in the top 64KB of the ROM. The reset code jumps to it. This
2450entry holds that code. It is typically placed at offset
2451CONFIG_SYS_X86_START16. The code is responsible for changing to 32-bit mode
2452and jumping to U-Boot's entry point, which requires 32-bit mode (for 32-bit
2453U-Boot).
Simon Glass7a61c6b2018-07-17 13:25:37 -06002454
Simon Glassabab18c2019-08-24 07:22:49 -06002455For 32-bit U-Boot, the 'x86-start16' entry type is used instead.
Simon Glass7a61c6b2018-07-17 13:25:37 -06002456
2457
2458
Simon Glassa7c97782022-08-07 16:33:25 -06002459.. _etype_x86_start16_tpl:
2460
Simon Glassed40e962018-09-14 04:57:10 -06002461Entry: x86-start16-tpl: x86 16-bit start-up code for TPL
2462--------------------------------------------------------
2463
2464Properties / Entry arguments:
Simon Glassabab18c2019-08-24 07:22:49 -06002465 - filename: Filename of tpl/u-boot-x86-start16-tpl.bin (default
2466 'tpl/u-boot-x86-start16-tpl.bin')
Simon Glassed40e962018-09-14 04:57:10 -06002467
Simon Glassabab18c2019-08-24 07:22:49 -06002468x86 CPUs start up in 16-bit mode, even if they are 32-bit CPUs. This code
2469must be placed in the top 64KB of the ROM. The reset code jumps to it. This
2470entry holds that code. It is typically placed at offset
2471CONFIG_SYS_X86_START16. The code is responsible for changing to 32-bit mode
2472and jumping to U-Boot's entry point, which requires 32-bit mode (for 32-bit
2473U-Boot).
Simon Glassed40e962018-09-14 04:57:10 -06002474
Simon Glassabab18c2019-08-24 07:22:49 -06002475If TPL is not being used, the 'x86-start16-spl or 'x86-start16' entry types
Simon Glassed40e962018-09-14 04:57:10 -06002476may be used instead.
2477
2478
2479