1
2
3
4
5
6
7
8
9
10
11#ifndef _BOOTSTAGE_H
12#define _BOOTSTAGE_H
13
14#include <linux/kconfig.h>
15
16
17enum bootstage_flags {
18 BOOTSTAGEF_ERROR = 1 << 0,
19 BOOTSTAGEF_ALLOC = 1 << 1,
20};
21
22
23enum {
24 BOOTSTAGE_SUB_FORMAT,
25 BOOTSTAGE_SUB_FORMAT_OK,
26 BOOTSTAGE_SUB_NO_UNIT_NAME,
27 BOOTSTAGE_SUB_UNIT_NAME,
28 BOOTSTAGE_SUB_SUBNODE,
29
30 BOOTSTAGE_SUB_CHECK,
31 BOOTSTAGE_SUB_HASH = 5,
32 BOOTSTAGE_SUB_CHECK_ARCH = 5,
33 BOOTSTAGE_SUB_CHECK_ALL,
34 BOOTSTAGE_SUB_GET_DATA,
35 BOOTSTAGE_SUB_CHECK_ALL_OK = 7,
36 BOOTSTAGE_SUB_GET_DATA_OK,
37 BOOTSTAGE_SUB_LOAD,
38};
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57enum bootstage_id {
58 BOOTSTAGE_ID_START = 0,
59 BOOTSTAGE_ID_CHECK_MAGIC,
60 BOOTSTAGE_ID_CHECK_HEADER,
61 BOOTSTAGE_ID_CHECK_CHECKSUM,
62 BOOTSTAGE_ID_CHECK_ARCH,
63
64 BOOTSTAGE_ID_CHECK_IMAGETYPE = 5,
65 BOOTSTAGE_ID_DECOMP_IMAGE,
66 BOOTSTAGE_ID_KERNEL_LOADED,
67 BOOTSTAGE_ID_DECOMP_UNIMPL = 7,
68 BOOTSTAGE_ID_CHECK_BOOT_OS,
69 BOOTSTAGE_ID_BOOT_OS_RETURNED,
70 BOOTSTAGE_ID_CHECK_RAMDISK = 9,
71
72 BOOTSTAGE_ID_RD_MAGIC,
73 BOOTSTAGE_ID_RD_HDR_CHECKSUM,
74 BOOTSTAGE_ID_RD_CHECKSUM,
75 BOOTSTAGE_ID_COPY_RAMDISK = 12,
76 BOOTSTAGE_ID_RAMDISK,
77 BOOTSTAGE_ID_NO_RAMDISK,
78
79 BOOTSTAGE_ID_RUN_OS = 15,
80
81 BOOTSTAGE_ID_NEED_RESET = 30,
82 BOOTSTAGE_ID_POST_FAIL,
83 BOOTSTAGE_ID_POST_FAIL_R,
84
85
86
87
88
89
90
91
92 BOOTSTAGE_ID_BOARD_INIT_R,
93 BOOTSTAGE_ID_BOARD_GLOBAL_DATA,
94
95 BOOTSTAGE_ID_BOARD_INIT_SEQ,
96 BOOTSTAGE_ID_BOARD_FLASH,
97 BOOTSTAGE_ID_BOARD_FLASH_37,
98 BOOTSTAGE_ID_BOARD_ENV,
99 BOOTSTAGE_ID_BOARD_PCI,
100
101 BOOTSTAGE_ID_BOARD_INTERRUPTS,
102 BOOTSTAGE_ID_BOARD_DONE,
103
104
105
106 BOOTSTAGE_ID_IDE_START = 41,
107 BOOTSTAGE_ID_IDE_ADDR,
108 BOOTSTAGE_ID_IDE_BOOT_DEVICE,
109 BOOTSTAGE_ID_IDE_TYPE,
110
111 BOOTSTAGE_ID_IDE_PART,
112 BOOTSTAGE_ID_IDE_PART_INFO,
113 BOOTSTAGE_ID_IDE_PART_TYPE,
114 BOOTSTAGE_ID_IDE_PART_READ,
115 BOOTSTAGE_ID_IDE_FORMAT,
116
117 BOOTSTAGE_ID_IDE_CHECKSUM,
118 BOOTSTAGE_ID_IDE_READ,
119
120
121 BOOTSTAGE_ID_NAND_PART,
122 BOOTSTAGE_ID_NAND_SUFFIX,
123 BOOTSTAGE_ID_NAND_BOOT_DEVICE,
124 BOOTSTAGE_ID_NAND_HDR_READ = 55,
125 BOOTSTAGE_ID_NAND_AVAILABLE = 55,
126 BOOTSTAGE_ID_NAND_TYPE = 57,
127 BOOTSTAGE_ID_NAND_READ,
128
129
130 BOOTSTAGE_ID_NET_CHECKSUM = 60,
131 BOOTSTAGE_ID_NET_ETH_START = 64,
132 BOOTSTAGE_ID_NET_ETH_INIT,
133
134 BOOTSTAGE_ID_NET_START = 80,
135 BOOTSTAGE_ID_NET_NETLOOP_OK,
136 BOOTSTAGE_ID_NET_LOADED,
137 BOOTSTAGE_ID_NET_DONE_ERR,
138 BOOTSTAGE_ID_NET_DONE,
139
140 BOOTSTAGE_ID_FIT_FDT_START = 90,
141
142
143
144
145 BOOTSTAGE_ID_FIT_KERNEL_START = 100,
146
147 BOOTSTAGE_ID_FIT_CONFIG = 110,
148 BOOTSTAGE_ID_FIT_TYPE,
149 BOOTSTAGE_ID_FIT_KERNEL_INFO,
150
151 BOOTSTAGE_ID_FIT_COMPRESSION,
152 BOOTSTAGE_ID_FIT_OS,
153 BOOTSTAGE_ID_FIT_LOADADDR,
154 BOOTSTAGE_ID_OVERWRITTEN,
155
156
157 BOOTSTAGE_ID_FIT_RD_START = 120,
158
159
160 BOOTSTAGE_ID_FIT_SETUP_START = 130,
161
162 BOOTSTAGE_ID_IDE_FIT_READ = 140,
163 BOOTSTAGE_ID_IDE_FIT_READ_OK,
164
165 BOOTSTAGE_ID_NAND_FIT_READ = 150,
166 BOOTSTAGE_ID_NAND_FIT_READ_OK,
167
168 BOOTSTAGE_ID_FIT_LOADABLE_START = 160,
169
170
171
172
173
174 BOOTSTAGE_ID_AWAKE,
175 BOOTSTAGE_ID_START_TPL,
176 BOOTSTAGE_ID_END_TPL,
177 BOOTSTAGE_ID_START_SPL,
178 BOOTSTAGE_ID_END_SPL,
179 BOOTSTAGE_ID_START_UBOOT_F,
180 BOOTSTAGE_ID_START_UBOOT_R,
181 BOOTSTAGE_ID_USB_START,
182 BOOTSTAGE_ID_ETH_START,
183 BOOTSTAGE_ID_BOOTP_START,
184 BOOTSTAGE_ID_BOOTP_STOP,
185 BOOTSTAGE_ID_BOOTM_START,
186 BOOTSTAGE_ID_BOOTM_HANDOFF,
187 BOOTSTAGE_ID_MAIN_LOOP,
188 BOOTSTAGE_ID_ENTER_CLI_LOOP,
189 BOOTSTAGE_KERNELREAD_START,
190 BOOTSTAGE_KERNELREAD_STOP,
191 BOOTSTAGE_ID_BOARD_INIT,
192 BOOTSTAGE_ID_BOARD_INIT_DONE,
193
194 BOOTSTAGE_ID_CPU_AWAKE,
195 BOOTSTAGE_ID_MAIN_CPU_AWAKE,
196 BOOTSTAGE_ID_MAIN_CPU_READY,
197
198 BOOTSTAGE_ID_ACCUM_LCD,
199 BOOTSTAGE_ID_ACCUM_SCSI,
200 BOOTSTAGE_ID_ACCUM_SPI,
201 BOOTSTAGE_ID_ACCUM_DECOMP,
202 BOOTSTAGE_ID_ACCUM_OF_LIVE,
203 BOOTSTAGE_ID_FPGA_INIT,
204 BOOTSTAGE_ID_ACCUM_DM_SPL,
205 BOOTSTAGE_ID_ACCUM_DM_F,
206 BOOTSTAGE_ID_ACCUM_DM_R,
207 BOOTSTAGE_ID_ACCUM_FSP_M,
208 BOOTSTAGE_ID_ACCUM_FSP_S,
209 BOOTSTAGE_ID_ACCUM_MMAP_SPI,
210
211
212 BOOTSTAGE_ID_USER,
213 BOOTSTAGE_ID_ALLOC,
214};
215
216
217
218
219
220
221ulong timer_get_boot_us(void);
222
223#if defined(USE_HOSTCC) || !CONFIG_IS_ENABLED(SHOW_BOOT_PROGRESS)
224#define show_boot_progress(val) do {} while (0)
225#else
226
227
228
229
230
231
232void show_boot_progress(int val);
233#endif
234
235#if !defined(USE_HOSTCC)
236#if CONFIG_IS_ENABLED(BOOTSTAGE)
237#define ENABLE_BOOTSTAGE
238#endif
239#endif
240
241#ifdef ENABLE_BOOTSTAGE
242
243
244
245
246
247
248
249
250
251
252
253int bootstage_relocate(void);
254
255
256
257
258
259
260
261
262
263ulong bootstage_add_record(enum bootstage_id id, const char *name,
264 int flags, ulong mark);
265
266
267
268
269ulong bootstage_mark(enum bootstage_id id);
270
271ulong bootstage_error(enum bootstage_id id);
272
273ulong bootstage_mark_name(enum bootstage_id id, const char *name);
274
275
276
277
278
279
280
281
282
283
284
285ulong bootstage_mark_code(const char *file, const char *func,
286 int linenum);
287
288
289
290
291
292
293
294
295
296
297
298
299uint32_t bootstage_start(enum bootstage_id id, const char *name);
300
301
302
303
304
305
306
307
308
309
310
311
312
313uint32_t bootstage_accum(enum bootstage_id id);
314
315
316void bootstage_report(void);
317
318
319
320
321
322
323int bootstage_fdt_add_report(void);
324
325
326
327
328
329
330
331
332int bootstage_stash(void *base, int size);
333
334
335
336
337
338
339
340
341
342
343
344
345
346int bootstage_unstash(const void *base, int size);
347
348
349
350
351
352
353int bootstage_get_size(void);
354
355
356
357
358
359
360
361int bootstage_init(bool first);
362
363#else
364static inline ulong bootstage_add_record(enum bootstage_id id,
365 const char *name, int flags, ulong mark)
366{
367 return 0;
368}
369
370
371
372
373
374
375static inline int bootstage_relocate(void)
376{
377 return 0;
378}
379
380static inline ulong bootstage_mark(enum bootstage_id id)
381{
382 show_boot_progress(id);
383 return 0;
384}
385
386static inline ulong bootstage_error(enum bootstage_id id)
387{
388 show_boot_progress(-id);
389 return 0;
390}
391
392static inline ulong bootstage_mark_name(enum bootstage_id id, const char *name)
393{
394 show_boot_progress(id);
395 return 0;
396}
397
398static inline ulong bootstage_mark_code(const char *file, const char *func,
399 int linenum)
400{
401 return 0;
402}
403
404static inline uint32_t bootstage_start(enum bootstage_id id, const char *name)
405{
406 return 0;
407}
408
409static inline uint32_t bootstage_accum(enum bootstage_id id)
410{
411 return 0;
412}
413
414static inline int bootstage_stash(void *base, int size)
415{
416 return 0;
417}
418
419static inline int bootstage_unstash(const void *base, int size)
420{
421 return 0;
422}
423
424static inline int bootstage_get_size(void)
425{
426 return 0;
427}
428
429static inline int bootstage_init(bool first)
430{
431 return 0;
432}
433
434#endif
435
436
437#define BOOTSTAGE_MARKER() \
438 bootstage_mark_code(__FILE__, __func__, __LINE__)
439
440#endif
441