Home | History | Annotate | Download | only in doc
      1 MULTI DTB FIT and SPL_MULTI_DTB_FIT
      2 
      3 The purpose of this feature is to enable U-Boot or the SPL to select its DTB
      4 from a FIT appended at the end of the binary.
      5 It comes in two flavors: U-Boot (CONFIG_MULTI_DTB_FIT) and SPL
      6 (CONFIG_SPL_MULTI_DTB_FIT).
      7 
      8 U-Boot flavor:
      9 Usually the DTB is selected by the SPL and passed down to U-Boot. But some
     10 platforms don't use the SPL. In this case MULTI_DTB_FIT can used to provide
     11 U-Boot with a choice of DTBs.
     12 The relevant DTBs are packed into a FIT (list provided by CONFIG__OF_LIST). The
     13 FIT is automatically generated at the end of the compilation and appended to
     14 u-boot.bin so that U-Boot can locate it and select the correct DTB from inside
     15 the FIT.
     16 The selection is done using board_fit_config_name_match() (same as what the SPL
     17 uses to select the DTB for U-Boot). The selection happens during fdtdec_setup()
     18 which is called during before relocation by board_init_f().
     19 
     20 SPL flavor:
     21 the SPL uses only a small subset of the DTB and it usually depends more
     22 on the SOC than on the board. So it's usually fine to include a DTB in the
     23 SPL that doesn't exactly match the board. There are howerver some cases
     24 where it's not possible. In the later case, in order to support multiple
     25 boards (or board revisions) with the same SPL binary, SPL_MULTI_DTB_FIT
     26 can be used.
     27 The relevant DTBs are packed into a FIT. This FIT is automatically generated
     28 at the end of the compilation, compressed and appended to u-boot-spl.bin, so
     29 that SPL can locate it and select the correct DTB from inside the FIT.
     30 CONFIG_SPL__OF_LIST is used to list the relevant DTBs.
     31 The compression stage is optional but reduces the impact on the size of the
     32 SPL. LZO and GZIP compressions are supported. By default, the area where the
     33 FIT is uncompressed is dynamicaly allocated but this behaviour can be changed
     34 for platforms that don't provide a HEAP big enough to contain the uncompressed
     35 FIT.
     36 The SPL uses board_fit_config_name_match() to find the correct DTB within the
     37 FIT (same as what the SPL uses to select the DTB for U-Boot).
     38 Uncompression and selection stages happen in fdtdec_setup() which is called
     39 during the early initialization stage of the SPL (spl_early_init() or
     40 spl_init())
     41 
     42 Impacts and performances (SPL flavor):
     43 The impact of this option is relatively small. Here are some numbers measured
     44 for 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 
     64 Note: SPL boot time is the time elapsed between the 'reset' command is entered
     65 and the time when the first U-Boot (not SPL) version string is displayed.
     66