]>
Commit | Line | Data |
---|---|---|
2f57c951 | 1 | MULTI DTB FIT and SPL_MULTI_DTB_FIT |
11955590 | 2 | |
2f57c951 JJH |
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). | |
11955590 | 7 | |
2f57c951 | 8 | U-Boot flavor: |
11955590 JJH |
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(). | |
2f57c951 JJH |
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. |