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