| 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. |