1MULTI DTB FIT and SPL_MULTI_DTB_FIT 2 3The purpose of this feature is to enable U-Boot or the SPL to select its DTB 4from a FIT appended at the end of the binary. 5It comes in two flavors: U-Boot (CONFIG_MULTI_DTB_FIT) and SPL 6(CONFIG_SPL_MULTI_DTB_FIT). 7 8U-Boot flavor: 9Usually the DTB is selected by the SPL and passed down to U-Boot. But some 10platforms don't use the SPL. In this case MULTI_DTB_FIT can used to provide 11U-Boot with a choice of DTBs. 12The relevant DTBs are packed into a FIT (list provided by CONFIG__OF_LIST). The 13FIT is automatically generated at the end of the compilation and appended to 14u-boot.bin so that U-Boot can locate it and select the correct DTB from inside 15the FIT. 16The selection is done using board_fit_config_name_match() (same as what the SPL 17uses to select the DTB for U-Boot). The selection happens during fdtdec_setup() 18which is called during before relocation by board_init_f(). 19 20SPL flavor: 21the SPL uses only a small subset of the DTB and it usually depends more 22on the SOC than on the board. So it's usually fine to include a DTB in the 23SPL that doesn't exactly match the board. There are howerver some cases 24where it's not possible. In the later case, in order to support multiple 25boards (or board revisions) with the same SPL binary, SPL_MULTI_DTB_FIT 26can be used. 27The relevant DTBs are packed into a FIT. This FIT is automatically generated 28at the end of the compilation, compressed and appended to u-boot-spl.bin, so 29that SPL can locate it and select the correct DTB from inside the FIT. 30CONFIG_SPL__OF_LIST is used to list the relevant DTBs. 31The compression stage is optional but reduces the impact on the size of the 32SPL. LZO and GZIP compressions are supported. By default, the area where the 33FIT is uncompressed is dynamicaly allocated but this behaviour can be changed 34for platforms that don't provide a HEAP big enough to contain the uncompressed 35FIT. 36The SPL uses board_fit_config_name_match() to find the correct DTB within the 37FIT (same as what the SPL uses to select the DTB for U-Boot). 38Uncompression and selection stages happen in fdtdec_setup() which is called 39during the early initialization stage of the SPL (spl_early_init() or 40spl_init()) 41 42Impacts and performances (SPL flavor): 43The impact of this option is relatively small. Here are some numbers measured 44for a TI DRA72 platform: 45 46 +----------+------------+-----------+------------+ 47 | size | size delta | SPL boot | boot time | 48 | (bytes) | (bytes) | time (s) | delta (s) | 49+---------------------------+----------+------------+-----------+------------+ 50| 1 DTB | | | | | 51+---------------------------+----------+------------+-----------+------------+ 52| reference | 125305 | 0 | 1.389 | 0 | 53| LZO (dynamic allocation) | 125391 | 86 | 1.381 | -0.008 | 54+---------------------------+----------+------------+-----------+------------+ 55| 4 DTBs (DRA7, DRA71, | | | | | 56| DRA72, DRA72 revC) | | | | | 57+---------------------------+----------+------------+-----------+------------+ 58| LZO (dynamic allocation) | 125991 | 686 | 1.39 | 0.001 | 59| LZO (user defined area) | 125927 | 622 | 1.403 | 0.014 | 60| GZIP (user defined area) | 133880 | 8575 | 1.421 | 0.032 | 61| No compression (in place) | 137472 | 12167 | 1.412 | 0.023 | 62+---------------------------+----------+------------+-----------+------------+ 63 64Note: SPL boot time is the time elapsed between the 'reset' command is entered 65and the time when the first U-Boot (not SPL) version string is displayed. 66