blob: 93419f158aff266694ec1b43b1e9ae2bbba52c5e [file] [log] [blame]
Heinrich Schuchardte7574fc2023-08-23 23:49:55 +02001.. SPDX-License-Identifier: GPL-2.0-or-later
2
3Booting from TPL/SPL
4====================
5
6The main U-Boot binary may be too large to be loaded directly by the Boot ROM.
7This was the original driver for splitting up U-Boot into multiple boot stages.
8
9U-Boot typically goes through the following boot phases where TPL, VPL, and SPL
10are optional. While many boards use SPL only few use TPL.
11
12TPL
13 Tertiary Program Loader. Very early init, as tiny as possible. This loads SPL
14 (or VPL if enabled).
15
16VPL
17 Verifying Program Loader. Optional verification step, which can select one of
18 several SPL binaries, if A/B verified boot is enabled. Implementation of the
19 VPL logic is work-in-progress. For now it just boots into SPL.
20
21SPL
22 Secondary Program Loader. Sets up SDRAM and loads U-Boot proper. It may also
23 load other firmware components.
24
25U-Boot
26 U-Boot proper. This is the only stage containing command. It also implements
27 logic to load an operating system, e.g. via UEFI.
28
29.. note::
30
31 The naming convention on the PowerPC architecture deviates from the other
32 archtitectures. Here the boot sequence is SPL->TPL->U-Boot.
33
34Further usages for U-Boot SPL comprise:
35
36* launching BL31 of ARM Trusted Firmware which invokes U-Boot as BL33
37* launching EDK II
38* launching Linux, e.g. :doc:`Falcon Mode <../develop/falcon>`
39* launching RISC-V OpenSBI which invokes main U-Boot
40
41Target binaries
42---------------
43
44Binaries loaded by SPL/TPL can be:
45
46* raw binaries where the entry address equals the start address. This is the
47 only binary format supported by TPL.
48* :doc:`FIT <fit/index>` images
49* legacy U-Boot images
50
51Configuration
52~~~~~~~~~~~~~
53
54Raw images are only supported in SPL if CONFIG_SPL_RAW_IMAGE_SUPPORT=y.
55
56CONFIG_SPL_FIT=y and CONFIG_SPL_LOAD_FIT=y are needed to load FIT images.
57
58CONFIG_SPL_LEGACY_IMAGE_FORMAT=y is needed to load legacy U-Boot images.
59CONFIG_SPL_LEGACY_IMAGE_CRC_CHECK=y enables checking the CRC32 of legacy U-Boot
60images.
61
62Image load methods
63------------------
64
65The image boot methods available for a board must be defined in two places:
66
67The board code implements a function board_boot_order() enumerating up to
68five boot methods and the sequence in which they are tried. (The maximum
69number of boot methods is currently hard coded as variable spl_boot_list[]).
70If there is only one boot method function, spl_boot_device() may be implemented
71instead.
72
73The configuration controls which of these boot methods are actually available.
74
75Loading from block devices
76~~~~~~~~~~~~~~~~~~~~~~~~~~
77
78MMC1, MMC2, MMC2_2
79 These methods read an image from SD card or eMMC. The first digit after
80 'MMC' indicates the device number. Required configuration settings include:
81
82 * CONFIG_SPL_MMC=y or CONFIG_TPL_MMC=y
83
84 To use a PCI connected MMC controller you need to additionally specify:
85
86 * CONFIG_SPL_PCI=y
87
88 * CONFIG_SPL_PCI_PNP=y
89
90 * CONFIG_MMC=y
91
92 * CONFIG_MMC_PCI=y
93
94 * CONFIG_MMC_SDHCI=y
95
96 To load from a file system use:
97
98 * CONFIG_SPL_FS_FAT=y or CONFIG_SPL_FS_EXT=y
99
100 * CONFIG_SPL_FS_LOAD_PAYLOAD_NAME="<filepath>"
101
102NVMe
103 This methods load the image from an NVMe drive.
104 Required configuration settings include:
105
106 * CONFIG_SPL_PCI=y
107
108 * CONFIG_SPL_PCI_PNP=y
109
110 * CONFIG_SPL_NVME=y
111
112 * CONFIG_SPL_NVME_PCI=y
113
114 * CONFIG_SPL_NVME_BOOT_DEVICE (number of the NVMe device)
115
116 * CONFIG_SYS_NVME_BOOT_PARTITION (partition to read from)
117
118 To load from a file system use:
119
120 * CONFIG_SPL_FS_FAT=y or CONFIG_SPL_FS_EXT=y
121
122 * CONFIG_SPL_FS_LOAD_PAYLOAD_NAME="<filepath>"
123
124SATA
125 This method reads an image from a SATA drive.
126 Required configuration settings include:
127
128 * CONFIG_SPL_SATA=y or CONFIG_TPL_SATA=y
129
130 To use a PCIe connecte SATA controller you additionally need:
131
132 * CONFIG_SPL_PCI=y
133
134 * CONFIG_SPL_SATA=y
135
136 * CONFIG_SPL_AHCI_PCI=y
137
138 * CONFIG_SPL_PCI_PNP=y
139
140 To load from a file system use:
141
142 * CONFIG_SPL_FS_FAT=y
143
144 * CONFIG_SYS_SATA_FAT_BOOT_PARTITION=<partition number>
145
146 * CONFIG_SPL_FS_LOAD_PAYLOAD_NAME="<filepath>"
147
148USB
149 The USB method loads an image from a USB block device.
150 Required configuration settings include:
151
152 * CONFIG_SPL_USB_HOST=y
153
154 * CONFIG_SPL_USB_STORAGE=y
155
156 To use a PCI connected USB 3.0 controller you additionally need:
157
158 * CONFIG_SPL_FS_FAT=y
159
160 * CONFIG_SPL_PCI=y
161
162 * CONFIG_SPL_PCI_PNP=y
163
164 * CONFIG_USB=y
165
166 * CONFIG_USB_XHCI_HCD=y
167
168 * CONFIG_USB_XHCI_PCI=y
169
170 To load from a file system use:
171
172 * CONFIG_SPL_FS_FAT=y or CONFIG_SPL_FS_EXT=y
173
174 * CONFIG_SYS_USB_FAT_BOOT_PARTITION=<partition number>
175
176 * CONFIG_SPL_FS_LOAD_PAYLOAD_NAME="<filepath>"
177
178Loading from raw flash devices
179~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
180
181NAND
182 This method loads the image from NAND flash. To read from raw NAND the
183 following configuration settings are required:
184
185 * CONFIG_SPL_NAND_SUPPORT=y or CONFIG_TPL_NAND_SUPPORT=y
186
187 If CONFIG_SPL_NAND_RAW_ONLY=y only raw images can be loaded.
188
189 For using UBI (Unsorted Block Images) volumes to read from NAND the
190 following configuration settings are required:
191
192 * CONFIG_SPL_UBI=y or CONFIG_TPL_UBI=y
193
194 The UBI volume to read can either be specified
195
196 * by name using CONFIG_SPL_UBI_LOAD_BY_VOLNAME or
197
198 * by number using CONFIG_SPL_UBI_LOAD_MONITOR_ID.
199
200NOR
201 This method loads the image from NOR flash.
202 Required configuration settings include:
203
204 * CONFIG_SPL_NOR_SUPPORT=y or CONFIG_TPL_NOR_SUPPORT=y
205
206OneNAND
207 This methods loads the image from a OneNAND device. To read from raw OneNAND
208 the following configuration settings are required:
209
210 * CONFIG_SPL_ONENAND_SUPPORT=y or CONFIG_TPL_ONENAND_SUPPORT=y
211
212 For using the Ubi file system to read from NAND the following configuration
213 settings are required:
214
215 * CONFIG_SPL_UBI=y or CONFIG_TPL_UBI=y
216
217SPI
218 This method loads an image form SPI NOR flash.
219 Required configuration settings include:
220
221 * CONFIG_SPL_DM_SPI=y
222
223 * CONFIG_SPL_SPI_FLASH=y
224
225 * CONFIG_SPI_LOAD=y or CONFIG_TPL_SPI_LOAD=y
226
227
228Sunxi SPI
229 This method which is specific to Allwinner SoCs loads an image form SPI NOR
230 flash. Required configuration settings include:
231
232 * CONFIG_SPL_SPI_SUNXI=y
233
234Loading from other devices
235~~~~~~~~~~~~~~~~~~~~~~~~~~
236
237BOOTROM
238 The binary is loaded by the boot ROM.
239 Required configuration settings include:
240
241 * CONFIG_SPL_BOOTROM_SUPPORT=y or CONFIG_TPL_BOOTROM_SUPPORT=y
242
243DFU
244 :doc:`Device Firmware Upgrade <dfu>` is used to load the binary into RAM.
245 Required configuration settings include:
246
247 * CONFIG_DFU=y
248
249 * CONFIG_SPL_RAM_SUPPORT=y or CONFIG TPL_RAM_SUPPORT=y
250
251Ethernet
252 This method loads an image over Ethernet. The BOOTP protocol is used to find
253 a TFTP server and binary name. The binary is downloaded via the TFTP
254 protocol. Required configuration settings include:
255
256 * CONFIG_SPL_NET=y or CONFIG_TPL_NET=y
257
258 * CONFIG_SPL_ETH_DEVICE=y or CONFIG_DM_USB_GADGET=y
259
260FEL
261 This method does not actually load an image for U-Boot.
262 FEL is a routine contained in the boot ROM of Allwinner SoCs which serves
263 for the initial programming or recovery via USB
264
265RAM
266 This method uses an image preloaded into RAM.
267 Required configuration settings include:
268
269 * CONFIG_SPL_RAM_SUPPORT=y or CONFIG_TPL_RAM_SUPPORT=y
270
271 * CONFIG_RAM_DEVICE=y
272
273Sandbox file
274 On the sandbox this method loads an image from the host file system.
275
276Sandbox image
277 On the sandbox this method loads an image from the host file system.
278
279Semihosting
280 When running in an ARM or RISC-V virtual machine the semihosting method can
281 be used to load an image from the host file system.
282 Required configuration settings include:
283
284 * CONFIG_SPL_SEMIHOSTING=y
285
286 * CONFIG_SPL_SEMIHOSTING_FALLBACK=y
287
288 * CONFIG_SPL_FS_LOAD_PAYLOAD_NAME=<path to file>
289
290UART
291 This method loads an image via the Y-Modem protocol from the UART.
292 Required configuration settings include:
293
294 * CONFIG_SPL_YMODEM_SUPPORT=y or CONFIG_TPL_YMODEM_SUPPORT=y
295
296USB SDP
297 This method loads the image using the Serial Download Protocol as
298 implemented by the boot ROM of the i.MX family of SoCs.
299
300 Required configuration settings include:
301
302 * CONFIG_SPL_SERIAL=y
303
304 * CONFIG_SPL_USB_SDP_SUPPORT=y or CONFIG_TPL_USB_SDP_SUPPORT
305
306VBE Simple
307 This method is used by the VPL stage to extract the next stage image from
308 the loaded image.
309
310 Required configuration settings include:
311
312 * CONFIG_VPL=y
313
314 * CONFIG_SPL_BOOTMETH_VBE_SIMPLE_FW=y or CONFIG_TPL_BOOTMETH_VBE_SIMPLE_FW=y
315
316XIP
317 This method executes an image in place.
318
319 Required configuration settings include:
320
321 * CONFIG_SPL_XIP_SUPPORT