1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- MULTI DTB FIT and SPL_MULTI_DTB_FIT
- The purpose of this feature is to enable U-Boot or the SPL to select its DTB
- from a FIT appended at the end of the binary.
- It comes in two flavors: U-Boot (CONFIG_MULTI_DTB_FIT) and SPL
- (CONFIG_SPL_MULTI_DTB_FIT).
- U-Boot flavor:
- Usually the DTB is selected by the SPL and passed down to U-Boot. But some
- platforms don't use the SPL. In this case MULTI_DTB_FIT can used to provide
- U-Boot with a choice of DTBs.
- The relevant DTBs are packed into a FIT (list provided by CONFIG_OF_LIST). The
- FIT is automatically generated at the end of the compilation and appended to
- u-boot.bin so that U-Boot can locate it and select the correct DTB from inside
- the FIT.
- The selection is done using board_fit_config_name_match() (same as what the SPL
- uses to select the DTB for U-Boot). The selection happens during fdtdec_setup()
- which is called during before relocation by board_init_f().
- SPL flavor:
- the SPL uses only a small subset of the DTB and it usually depends more
- on the SOC than on the board. So it's usually fine to include a DTB in the
- SPL that doesn't exactly match the board. There are howerver some cases
- where it's not possible. In the later case, in order to support multiple
- boards (or board revisions) with the same SPL binary, SPL_MULTI_DTB_FIT
- can be used.
- The relevant DTBs are packed into a FIT. This FIT is automatically generated
- at the end of the compilation, compressed and appended to u-boot-spl.bin, so
- that SPL can locate it and select the correct DTB from inside the FIT.
- CONFIG_SPL_OF_LIST is used to list the relevant DTBs.
- The compression stage is optional but reduces the impact on the size of the
- SPL. LZO and GZIP compressions are supported. By default, the area where the
- FIT is uncompressed is dynamicaly allocated but this behaviour can be changed
- for platforms that don't provide a HEAP big enough to contain the uncompressed
- FIT.
- The SPL uses board_fit_config_name_match() to find the correct DTB within the
- FIT (same as what the SPL uses to select the DTB for U-Boot).
- Uncompression and selection stages happen in fdtdec_setup() which is called
- during the early initialization stage of the SPL (spl_early_init() or
- spl_init())
- Impacts and performances (SPL flavor):
- The impact of this option is relatively small. Here are some numbers measured
- for a TI DRA72 platform:
- +----------+------------+-----------+------------+
- | size | size delta | SPL boot | boot time |
- | (bytes) | (bytes) | time (s) | delta (s) |
- +---------------------------+----------+------------+-----------+------------+
- | 1 DTB | | | | |
- +---------------------------+----------+------------+-----------+------------+
- | reference | 125305 | 0 | 1.389 | 0 |
- | LZO (dynamic allocation) | 125391 | 86 | 1.381 | -0.008 |
- +---------------------------+----------+------------+-----------+------------+
- | 4 DTBs (DRA7, DRA71, | | | | |
- | DRA72, DRA72 revC) | | | | |
- +---------------------------+----------+------------+-----------+------------+
- | LZO (dynamic allocation) | 125991 | 686 | 1.39 | 0.001 |
- | LZO (user defined area) | 125927 | 622 | 1.403 | 0.014 |
- | GZIP (user defined area) | 133880 | 8575 | 1.421 | 0.032 |
- | No compression (in place) | 137472 | 12167 | 1.412 | 0.023 |
- +---------------------------+----------+------------+-----------+------------+
- Note: SPL boot time is the time elapsed between the 'reset' command is entered
- and the time when the first U-Boot (not SPL) version string is displayed.
|