1
2
3
4
5
6
7
8
9
10
11
12#include <common.h>
13#include <bloblist.h>
14#include <console.h>
15#include <cpu.h>
16#include <dm.h>
17#include <env.h>
18#include <env_internal.h>
19#include <fdtdec.h>
20#include <fs.h>
21#include <i2c.h>
22#include <initcall.h>
23#include <lcd.h>
24#include <malloc.h>
25#include <mapmem.h>
26#include <os.h>
27#include <post.h>
28#include <relocate.h>
29#ifdef CONFIG_SPL
30#include <spl.h>
31#endif
32#include <status_led.h>
33#include <sysreset.h>
34#include <timer.h>
35#include <trace.h>
36#include <video.h>
37#include <watchdog.h>
38#ifdef CONFIG_MACH_TYPE
39#include <asm/mach-types.h>
40#endif
41#if defined(CONFIG_MP) && defined(CONFIG_PPC)
42#include <asm/mp.h>
43#endif
44#include <asm/io.h>
45#include <asm/sections.h>
46#include <dm/root.h>
47#include <linux/errno.h>
48
49
50
51
52
53
54#ifdef XTRN_DECLARE_GLOBAL_DATA_PTR
55#undef XTRN_DECLARE_GLOBAL_DATA_PTR
56#define XTRN_DECLARE_GLOBAL_DATA_PTR
57DECLARE_GLOBAL_DATA_PTR = (gd_t *)(CONFIG_SYS_INIT_GD_ADDR);
58#else
59DECLARE_GLOBAL_DATA_PTR;
60#endif
61
62
63
64
65
66
67
68
69
70
71
72
73__weak void coloured_LED_init(void) {}
74__weak void red_led_on(void) {}
75__weak void red_led_off(void) {}
76__weak void green_led_on(void) {}
77__weak void green_led_off(void) {}
78__weak void yellow_led_on(void) {}
79__weak void yellow_led_off(void) {}
80__weak void blue_led_on(void) {}
81__weak void blue_led_off(void) {}
82
83
84
85
86
87
88
89
90
91
92
93
94#if defined(CONFIG_WATCHDOG) || defined(CONFIG_HW_WATCHDOG)
95static int init_func_watchdog_init(void)
96{
97# if defined(CONFIG_HW_WATCHDOG) && \
98 (defined(CONFIG_M68K) || defined(CONFIG_MICROBLAZE) || \
99 defined(CONFIG_SH) || \
100 defined(CONFIG_DESIGNWARE_WATCHDOG) || \
101 defined(CONFIG_IMX_WATCHDOG))
102 hw_watchdog_init();
103 puts(" Watchdog enabled\n");
104# endif
105 WATCHDOG_RESET();
106
107 return 0;
108}
109
110int init_func_watchdog_reset(void)
111{
112 WATCHDOG_RESET();
113
114 return 0;
115}
116#endif
117
118__weak void board_add_ram_info(int use_default)
119{
120
121}
122
123static int init_baud_rate(void)
124{
125 gd->baudrate = env_get_ulong("baudrate", 10, CONFIG_BAUDRATE);
126 return 0;
127}
128
129static int display_text_info(void)
130{
131#if !defined(CONFIG_SANDBOX) && !defined(CONFIG_EFI_APP)
132 ulong bss_start, bss_end, text_base;
133
134 bss_start = (ulong)&__bss_start;
135 bss_end = (ulong)&__bss_end;
136
137#ifdef CONFIG_SYS_TEXT_BASE
138 text_base = CONFIG_SYS_TEXT_BASE;
139#else
140 text_base = CONFIG_SYS_MONITOR_BASE;
141#endif
142
143 debug("U-Boot code: %08lX -> %08lX BSS: -> %08lX\n",
144 text_base, bss_start, bss_end);
145#endif
146
147 return 0;
148}
149
150#ifdef CONFIG_SYSRESET
151static int print_resetinfo(void)
152{
153 struct udevice *dev;
154 char status[256];
155 int ret;
156
157 ret = uclass_first_device_err(UCLASS_SYSRESET, &dev);
158 if (ret) {
159 debug("%s: No sysreset device found (error: %d)\n",
160 __func__, ret);
161
162
163
164 return 0;
165 }
166
167 if (!sysreset_get_status(dev, status, sizeof(status)))
168 printf("%s", status);
169
170 return 0;
171}
172#endif
173
174#if defined(CONFIG_DISPLAY_CPUINFO) && CONFIG_IS_ENABLED(CPU)
175static int print_cpuinfo(void)
176{
177 struct udevice *dev;
178 char desc[512];
179 int ret;
180
181 ret = uclass_first_device_err(UCLASS_CPU, &dev);
182 if (ret) {
183 debug("%s: Could not get CPU device (err = %d)\n",
184 __func__, ret);
185 return ret;
186 }
187
188 ret = cpu_get_desc(dev, desc, sizeof(desc));
189 if (ret) {
190 debug("%s: Could not get CPU description (err = %d)\n",
191 dev->name, ret);
192 return ret;
193 }
194
195 printf("CPU: %s\n", desc);
196
197 return 0;
198}
199#endif
200
201static int announce_dram_init(void)
202{
203 puts("DRAM: ");
204 return 0;
205}
206
207static int show_dram_config(void)
208{
209 unsigned long long size;
210
211#ifdef CONFIG_NR_DRAM_BANKS
212 int i;
213
214 debug("\nRAM Configuration:\n");
215 for (i = size = 0; i < CONFIG_NR_DRAM_BANKS; i++) {
216 size += gd->bd->bi_dram[i].size;
217 debug("Bank #%d: %llx ", i,
218 (unsigned long long)(gd->bd->bi_dram[i].start));
219#ifdef DEBUG
220 print_size(gd->bd->bi_dram[i].size, "\n");
221#endif
222 }
223 debug("\nDRAM: ");
224#else
225 size = gd->ram_size;
226#endif
227
228 print_size(size, "");
229 board_add_ram_info(0);
230 putc('\n');
231
232 return 0;
233}
234
235__weak int dram_init_banksize(void)
236{
237#if defined(CONFIG_NR_DRAM_BANKS) && defined(CONFIG_SYS_SDRAM_BASE)
238 gd->bd->bi_dram[0].start = CONFIG_SYS_SDRAM_BASE;
239 gd->bd->bi_dram[0].size = get_effective_memsize();
240#endif
241
242 return 0;
243}
244
245#if defined(CONFIG_SYS_I2C)
246static int init_func_i2c(void)
247{
248 puts("I2C: ");
249#ifdef CONFIG_SYS_I2C
250 i2c_init_all();
251#else
252 i2c_init(CONFIG_SYS_I2C_SPEED, CONFIG_SYS_I2C_SLAVE);
253#endif
254 puts("ready\n");
255 return 0;
256}
257#endif
258
259#if defined(CONFIG_VID)
260__weak int init_func_vid(void)
261{
262 return 0;
263}
264#endif
265
266static int setup_mon_len(void)
267{
268#if defined(__ARM__) || defined(__MICROBLAZE__)
269 gd->mon_len = (ulong)&__bss_end - (ulong)_start;
270#elif defined(CONFIG_SANDBOX) || defined(CONFIG_EFI_APP)
271 gd->mon_len = (ulong)&_end - (ulong)_init;
272#elif defined(CONFIG_NIOS2) || defined(CONFIG_XTENSA)
273 gd->mon_len = CONFIG_SYS_MONITOR_LEN;
274#elif defined(CONFIG_NDS32) || defined(CONFIG_SH) || defined(CONFIG_RISCV)
275 gd->mon_len = (ulong)(&__bss_end) - (ulong)(&_start);
276#elif defined(CONFIG_SYS_MONITOR_BASE)
277
278 gd->mon_len = (ulong)&__bss_end - CONFIG_SYS_MONITOR_BASE;
279#endif
280 return 0;
281}
282
283static int setup_spl_handoff(void)
284{
285#if CONFIG_IS_ENABLED(HANDOFF)
286 gd->spl_handoff = bloblist_find(BLOBLISTT_SPL_HANDOFF,
287 sizeof(struct spl_handoff));
288 debug("Found SPL hand-off info %p\n", gd->spl_handoff);
289#endif
290
291 return 0;
292}
293
294__weak int arch_cpu_init(void)
295{
296 return 0;
297}
298
299__weak int mach_cpu_init(void)
300{
301 return 0;
302}
303
304
305__weak ulong board_get_usable_ram_top(ulong total_size)
306{
307#ifdef CONFIG_SYS_SDRAM_BASE
308
309
310
311
312 if (gd->ram_top < CONFIG_SYS_SDRAM_BASE)
313
314
315
316
317 return 0;
318#endif
319 return gd->ram_top;
320}
321
322static int setup_dest_addr(void)
323{
324 debug("Monitor len: %08lX\n", gd->mon_len);
325
326
327
328 debug("Ram size: %08lX\n", (ulong)gd->ram_size);
329#if defined(CONFIG_SYS_MEM_TOP_HIDE)
330
331
332
333
334
335
336
337
338
339
340 gd->ram_size -= CONFIG_SYS_MEM_TOP_HIDE;
341#endif
342#ifdef CONFIG_SYS_SDRAM_BASE
343 gd->ram_base = CONFIG_SYS_SDRAM_BASE;
344#endif
345 gd->ram_top = gd->ram_base + get_effective_memsize();
346 gd->ram_top = board_get_usable_ram_top(gd->mon_len);
347 gd->relocaddr = gd->ram_top;
348 debug("Ram top: %08lX\n", (ulong)gd->ram_top);
349#if defined(CONFIG_MP) && (defined(CONFIG_MPC86xx) || defined(CONFIG_E500))
350
351
352
353
354 if (gd->relocaddr > determine_mp_bootpg(NULL)) {
355 gd->relocaddr = determine_mp_bootpg(NULL);
356 debug("Reserving MP boot page to %08lx\n", gd->relocaddr);
357 }
358#endif
359 return 0;
360}
361
362#ifdef CONFIG_PRAM
363
364static int reserve_pram(void)
365{
366 ulong reg;
367
368 reg = env_get_ulong("pram", 10, CONFIG_PRAM);
369 gd->relocaddr -= (reg << 10);
370 debug("Reserving %ldk for protected RAM at %08lx\n", reg,
371 gd->relocaddr);
372 return 0;
373}
374#endif
375
376
377static int reserve_round_4k(void)
378{
379 gd->relocaddr &= ~(4096 - 1);
380 return 0;
381}
382
383#ifdef CONFIG_ARM
384__weak int reserve_mmu(void)
385{
386#if !(CONFIG_IS_ENABLED(SYS_ICACHE_OFF) && CONFIG_IS_ENABLED(SYS_DCACHE_OFF))
387
388 gd->arch.tlb_size = PGTABLE_SIZE;
389 gd->relocaddr -= gd->arch.tlb_size;
390
391
392 gd->relocaddr &= ~(0x10000 - 1);
393
394 gd->arch.tlb_addr = gd->relocaddr;
395 debug("TLB table from %08lx to %08lx\n", gd->arch.tlb_addr,
396 gd->arch.tlb_addr + gd->arch.tlb_size);
397
398#ifdef CONFIG_SYS_MEM_RESERVE_SECURE
399
400
401
402
403 gd->arch.tlb_allocated = gd->arch.tlb_addr;
404#endif
405#endif
406
407 return 0;
408}
409#endif
410
411static int reserve_video(void)
412{
413#ifdef CONFIG_DM_VIDEO
414 ulong addr;
415 int ret;
416
417 addr = gd->relocaddr;
418 ret = video_reserve(&addr);
419 if (ret)
420 return ret;
421 gd->relocaddr = addr;
422#elif defined(CONFIG_LCD)
423# ifdef CONFIG_FB_ADDR
424 gd->fb_base = CONFIG_FB_ADDR;
425# else
426
427 gd->relocaddr = lcd_setmem(gd->relocaddr);
428 gd->fb_base = gd->relocaddr;
429# endif
430#endif
431
432 return 0;
433}
434
435static int reserve_trace(void)
436{
437#ifdef CONFIG_TRACE
438 gd->relocaddr -= CONFIG_TRACE_BUFFER_SIZE;
439 gd->trace_buff = map_sysmem(gd->relocaddr, CONFIG_TRACE_BUFFER_SIZE);
440 debug("Reserving %luk for trace data at: %08lx\n",
441 (unsigned long)CONFIG_TRACE_BUFFER_SIZE >> 10, gd->relocaddr);
442#endif
443
444 return 0;
445}
446
447static int reserve_uboot(void)
448{
449 if (!(gd->flags & GD_FLG_SKIP_RELOC)) {
450
451
452
453
454 gd->relocaddr -= gd->mon_len;
455 gd->relocaddr &= ~(4096 - 1);
456 #if defined(CONFIG_E500) || defined(CONFIG_MIPS)
457
458 gd->relocaddr &= ~(65536 - 1);
459 #endif
460
461 debug("Reserving %ldk for U-Boot at: %08lx\n",
462 gd->mon_len >> 10, gd->relocaddr);
463 }
464
465 gd->start_addr_sp = gd->relocaddr;
466
467 return 0;
468}
469
470#ifdef CONFIG_SYS_NONCACHED_MEMORY
471static int reserve_noncached(void)
472{
473
474
475
476
477
478
479
480
481 gd->start_addr_sp = ALIGN(gd->start_addr_sp, MMU_SECTION_SIZE) -
482 MMU_SECTION_SIZE;
483 gd->start_addr_sp -= ALIGN(CONFIG_SYS_NONCACHED_MEMORY,
484 MMU_SECTION_SIZE);
485 debug("Reserving %dM for noncached_alloc() at: %08lx\n",
486 CONFIG_SYS_NONCACHED_MEMORY >> 20, gd->start_addr_sp);
487
488 return 0;
489}
490#endif
491
492
493static int reserve_malloc(void)
494{
495 gd->start_addr_sp = gd->start_addr_sp - TOTAL_MALLOC_LEN;
496 debug("Reserving %dk for malloc() at: %08lx\n",
497 TOTAL_MALLOC_LEN >> 10, gd->start_addr_sp);
498#ifdef CONFIG_SYS_NONCACHED_MEMORY
499 reserve_noncached();
500#endif
501
502 return 0;
503}
504
505
506static int reserve_board(void)
507{
508 if (!gd->bd) {
509 gd->start_addr_sp -= sizeof(bd_t);
510 gd->bd = (bd_t *)map_sysmem(gd->start_addr_sp, sizeof(bd_t));
511 memset(gd->bd, '\0', sizeof(bd_t));
512 debug("Reserving %zu Bytes for Board Info at: %08lx\n",
513 sizeof(bd_t), gd->start_addr_sp);
514 }
515 return 0;
516}
517
518static int setup_machine(void)
519{
520#ifdef CONFIG_MACH_TYPE
521 gd->bd->bi_arch_number = CONFIG_MACH_TYPE;
522#endif
523 return 0;
524}
525
526static int reserve_global_data(void)
527{
528 gd->start_addr_sp -= sizeof(gd_t);
529 gd->new_gd = (gd_t *)map_sysmem(gd->start_addr_sp, sizeof(gd_t));
530 debug("Reserving %zu Bytes for Global Data at: %08lx\n",
531 sizeof(gd_t), gd->start_addr_sp);
532 return 0;
533}
534
535static int reserve_fdt(void)
536{
537#ifndef CONFIG_OF_EMBED
538
539
540
541
542
543 if (gd->fdt_blob) {
544 gd->fdt_size = ALIGN(fdt_totalsize(gd->fdt_blob) + 0x1000, 32);
545
546 gd->start_addr_sp -= gd->fdt_size;
547 gd->new_fdt = map_sysmem(gd->start_addr_sp, gd->fdt_size);
548 debug("Reserving %lu Bytes for FDT at: %08lx\n",
549 gd->fdt_size, gd->start_addr_sp);
550 }
551#endif
552
553 return 0;
554}
555
556static int reserve_bootstage(void)
557{
558#ifdef CONFIG_BOOTSTAGE
559 int size = bootstage_get_size();
560
561 gd->start_addr_sp -= size;
562 gd->new_bootstage = map_sysmem(gd->start_addr_sp, size);
563 debug("Reserving %#x Bytes for bootstage at: %08lx\n", size,
564 gd->start_addr_sp);
565#endif
566
567 return 0;
568}
569
570__weak int arch_reserve_stacks(void)
571{
572 return 0;
573}
574
575static int reserve_stacks(void)
576{
577
578 gd->start_addr_sp -= 16;
579 gd->start_addr_sp &= ~0xf;
580
581
582
583
584
585 return arch_reserve_stacks();
586}
587
588static int reserve_bloblist(void)
589{
590#ifdef CONFIG_BLOBLIST
591 gd->start_addr_sp -= CONFIG_BLOBLIST_SIZE;
592 gd->new_bloblist = map_sysmem(gd->start_addr_sp, CONFIG_BLOBLIST_SIZE);
593#endif
594
595 return 0;
596}
597
598static int display_new_sp(void)
599{
600 debug("New Stack Pointer is: %08lx\n", gd->start_addr_sp);
601
602 return 0;
603}
604
605#if defined(CONFIG_M68K) || defined(CONFIG_MIPS) || defined(CONFIG_PPC) || \
606 defined(CONFIG_SH)
607static int setup_board_part1(void)
608{
609 bd_t *bd = gd->bd;
610
611
612
613
614 bd->bi_memstart = CONFIG_SYS_SDRAM_BASE;
615 bd->bi_memsize = gd->ram_size;
616
617#ifdef CONFIG_SYS_SRAM_BASE
618 bd->bi_sramstart = CONFIG_SYS_SRAM_BASE;
619 bd->bi_sramsize = CONFIG_SYS_SRAM_SIZE;
620#endif
621
622#if defined(CONFIG_E500) || defined(CONFIG_MPC86xx)
623 bd->bi_immr_base = CONFIG_SYS_IMMR;
624#endif
625#if defined(CONFIG_M68K)
626 bd->bi_mbar_base = CONFIG_SYS_MBAR;
627#endif
628#if defined(CONFIG_MPC83xx)
629 bd->bi_immrbar = CONFIG_SYS_IMMR;
630#endif
631
632 return 0;
633}
634#endif
635
636#if defined(CONFIG_PPC) || defined(CONFIG_M68K)
637static int setup_board_part2(void)
638{
639 bd_t *bd = gd->bd;
640
641 bd->bi_intfreq = gd->cpu_clk;
642 bd->bi_busfreq = gd->bus_clk;
643#if defined(CONFIG_CPM2)
644 bd->bi_cpmfreq = gd->arch.cpm_clk;
645 bd->bi_brgfreq = gd->arch.brg_clk;
646 bd->bi_sccfreq = gd->arch.scc_clk;
647 bd->bi_vco = gd->arch.vco_out;
648#endif
649#if defined(CONFIG_M68K) && defined(CONFIG_PCI)
650 bd->bi_pcifreq = gd->pci_clk;
651#endif
652#if defined(CONFIG_EXTRA_CLOCK)
653 bd->bi_inpfreq = gd->arch.inp_clk;
654 bd->bi_vcofreq = gd->arch.vco_clk;
655 bd->bi_flbfreq = gd->arch.flb_clk;
656#endif
657
658 return 0;
659}
660#endif
661
662#ifdef CONFIG_POST
663static int init_post(void)
664{
665 post_bootmode_init();
666 post_run(NULL, POST_ROM | post_bootmode_get(0));
667
668 return 0;
669}
670#endif
671
672static int reloc_fdt(void)
673{
674#ifndef CONFIG_OF_EMBED
675 if (gd->flags & GD_FLG_SKIP_RELOC)
676 return 0;
677 if (gd->new_fdt) {
678 memcpy(gd->new_fdt, gd->fdt_blob, gd->fdt_size);
679 gd->fdt_blob = gd->new_fdt;
680 }
681#endif
682
683 return 0;
684}
685
686static int reloc_bootstage(void)
687{
688#ifdef CONFIG_BOOTSTAGE
689 if (gd->flags & GD_FLG_SKIP_RELOC)
690 return 0;
691 if (gd->new_bootstage) {
692 int size = bootstage_get_size();
693
694 debug("Copying bootstage from %p to %p, size %x\n",
695 gd->bootstage, gd->new_bootstage, size);
696 memcpy(gd->new_bootstage, gd->bootstage, size);
697 gd->bootstage = gd->new_bootstage;
698 }
699#endif
700
701 return 0;
702}
703
704static int reloc_bloblist(void)
705{
706#ifdef CONFIG_BLOBLIST
707 if (gd->flags & GD_FLG_SKIP_RELOC)
708 return 0;
709 if (gd->new_bloblist) {
710 int size = CONFIG_BLOBLIST_SIZE;
711
712 debug("Copying bloblist from %p to %p, size %x\n",
713 gd->bloblist, gd->new_bloblist, size);
714 memcpy(gd->new_bloblist, gd->bloblist, size);
715 gd->bloblist = gd->new_bloblist;
716 }
717#endif
718
719 return 0;
720}
721
722static int setup_reloc(void)
723{
724 if (gd->flags & GD_FLG_SKIP_RELOC) {
725 debug("Skipping relocation due to flag\n");
726 return 0;
727 }
728
729#ifdef CONFIG_SYS_TEXT_BASE
730#ifdef ARM
731 gd->reloc_off = gd->relocaddr - (unsigned long)__image_copy_start;
732#elif defined(CONFIG_M68K)
733
734
735
736
737 gd->reloc_off = gd->relocaddr - (CONFIG_SYS_TEXT_BASE + 0x400);
738#elif !defined(CONFIG_SANDBOX)
739 gd->reloc_off = gd->relocaddr - CONFIG_SYS_TEXT_BASE;
740#endif
741#endif
742 memcpy(gd->new_gd, (char *)gd, sizeof(gd_t));
743
744 debug("Relocation Offset is: %08lx\n", gd->reloc_off);
745 debug("Relocating to %08lx, new gd at %08lx, sp at %08lx\n",
746 gd->relocaddr, (ulong)map_to_sysmem(gd->new_gd),
747 gd->start_addr_sp);
748
749 return 0;
750}
751
752#ifdef CONFIG_OF_BOARD_FIXUP
753static int fix_fdt(void)
754{
755 return board_fix_fdt((void *)gd->fdt_blob);
756}
757#endif
758
759
760#if !defined(CONFIG_ARM) && !defined(CONFIG_SANDBOX) && \
761 !CONFIG_IS_ENABLED(X86_64)
762
763static int jump_to_copy(void)
764{
765 if (gd->flags & GD_FLG_SKIP_RELOC)
766 return 0;
767
768
769
770
771
772
773
774
775#if defined(CONFIG_X86) || defined(CONFIG_ARC)
776
777
778
779
780
781
782 arch_setup_gd(gd->new_gd);
783 board_init_f_r_trampoline(gd->start_addr_sp);
784#else
785 relocate_code(gd->start_addr_sp, gd->new_gd, gd->relocaddr);
786#endif
787
788 return 0;
789}
790#endif
791
792
793static int initf_bootstage(void)
794{
795 bool from_spl = IS_ENABLED(CONFIG_SPL_BOOTSTAGE) &&
796 IS_ENABLED(CONFIG_BOOTSTAGE_STASH);
797 int ret;
798
799 ret = bootstage_init(!from_spl);
800 if (ret)
801 return ret;
802 if (from_spl) {
803 const void *stash = map_sysmem(CONFIG_BOOTSTAGE_STASH_ADDR,
804 CONFIG_BOOTSTAGE_STASH_SIZE);
805
806 ret = bootstage_unstash(stash, CONFIG_BOOTSTAGE_STASH_SIZE);
807 if (ret && ret != -ENOENT) {
808 debug("Failed to unstash bootstage: err=%d\n", ret);
809 return ret;
810 }
811 }
812
813 bootstage_mark_name(BOOTSTAGE_ID_START_UBOOT_F, "board_init_f");
814
815 return 0;
816}
817
818static int initf_console_record(void)
819{
820#if defined(CONFIG_CONSOLE_RECORD) && CONFIG_VAL(SYS_MALLOC_F_LEN)
821 return console_record_init();
822#else
823 return 0;
824#endif
825}
826
827static int initf_dm(void)
828{
829#if defined(CONFIG_DM) && CONFIG_VAL(SYS_MALLOC_F_LEN)
830 int ret;
831
832 bootstage_start(BOOTSTATE_ID_ACCUM_DM_F, "dm_f");
833 ret = dm_init_and_scan(true);
834 bootstage_accum(BOOTSTATE_ID_ACCUM_DM_F);
835 if (ret)
836 return ret;
837#endif
838#ifdef CONFIG_TIMER_EARLY
839 ret = dm_timer_init();
840 if (ret)
841 return ret;
842#endif
843
844 return 0;
845}
846
847
848__weak int reserve_arch(void)
849{
850 return 0;
851}
852
853__weak int arch_cpu_init_dm(void)
854{
855 return 0;
856}
857
858static const init_fnc_t init_sequence_f[] = {
859 setup_mon_len,
860#ifdef CONFIG_OF_CONTROL
861 fdtdec_setup,
862#endif
863#ifdef CONFIG_TRACE_EARLY
864 trace_early_init,
865#endif
866 initf_malloc,
867 log_init,
868 initf_bootstage,
869#ifdef CONFIG_BLOBLIST
870 bloblist_init,
871#endif
872 setup_spl_handoff,
873 initf_console_record,
874#if defined(CONFIG_HAVE_FSP)
875 arch_fsp_init,
876#endif
877 arch_cpu_init,
878 mach_cpu_init,
879 initf_dm,
880 arch_cpu_init_dm,
881#if defined(CONFIG_BOARD_EARLY_INIT_F)
882 board_early_init_f,
883#endif
884#if defined(CONFIG_PPC) || defined(CONFIG_SYS_FSL_CLK) || defined(CONFIG_M68K)
885
886 get_clocks,
887#endif
888#if !defined(CONFIG_M68K)
889 timer_init,
890#endif
891#if defined(CONFIG_BOARD_POSTCLK_INIT)
892 board_postclk_init,
893#endif
894 env_init,
895 init_baud_rate,
896 serial_init,
897 console_init_f,
898 display_options,
899 display_text_info,
900#if defined(CONFIG_PPC) || defined(CONFIG_SH) || defined(CONFIG_X86)
901 checkcpu,
902#endif
903#if defined(CONFIG_SYSRESET)
904 print_resetinfo,
905#endif
906#if defined(CONFIG_DISPLAY_CPUINFO)
907 print_cpuinfo,
908#endif
909#if defined(CONFIG_DTB_RESELECT)
910 embedded_dtb_select,
911#endif
912#if defined(CONFIG_DISPLAY_BOARDINFO)
913 show_board_info,
914#endif
915 INIT_FUNC_WATCHDOG_INIT
916#if defined(CONFIG_MISC_INIT_F)
917 misc_init_f,
918#endif
919 INIT_FUNC_WATCHDOG_RESET
920#if defined(CONFIG_SYS_I2C)
921 init_func_i2c,
922#endif
923#if defined(CONFIG_VID) && !defined(CONFIG_SPL)
924 init_func_vid,
925#endif
926 announce_dram_init,
927 dram_init,
928#ifdef CONFIG_POST
929 post_init_f,
930#endif
931 INIT_FUNC_WATCHDOG_RESET
932#if defined(CONFIG_SYS_DRAM_TEST)
933 testdram,
934#endif
935 INIT_FUNC_WATCHDOG_RESET
936
937#ifdef CONFIG_POST
938 init_post,
939#endif
940 INIT_FUNC_WATCHDOG_RESET
941
942
943
944
945
946
947
948
949
950
951
952
953 setup_dest_addr,
954#ifdef CONFIG_PRAM
955 reserve_pram,
956#endif
957 reserve_round_4k,
958#ifdef CONFIG_ARM
959 reserve_mmu,
960#endif
961 reserve_video,
962 reserve_trace,
963 reserve_uboot,
964 reserve_malloc,
965 reserve_board,
966 setup_machine,
967 reserve_global_data,
968 reserve_fdt,
969 reserve_bootstage,
970 reserve_bloblist,
971 reserve_arch,
972 reserve_stacks,
973 dram_init_banksize,
974 show_dram_config,
975#if defined(CONFIG_M68K) || defined(CONFIG_MIPS) || defined(CONFIG_PPC) || \
976 defined(CONFIG_SH)
977 setup_board_part1,
978#endif
979#if defined(CONFIG_PPC) || defined(CONFIG_M68K)
980 INIT_FUNC_WATCHDOG_RESET
981 setup_board_part2,
982#endif
983 display_new_sp,
984#ifdef CONFIG_OF_BOARD_FIXUP
985 fix_fdt,
986#endif
987 INIT_FUNC_WATCHDOG_RESET
988 reloc_fdt,
989 reloc_bootstage,
990 reloc_bloblist,
991 setup_reloc,
992#if defined(CONFIG_X86) || defined(CONFIG_ARC)
993 copy_uboot_to_ram,
994 do_elf_reloc_fixups,
995 clear_bss,
996#endif
997#if defined(CONFIG_XTENSA)
998 clear_bss,
999#endif
1000#if !defined(CONFIG_ARM) && !defined(CONFIG_SANDBOX) && \
1001 !CONFIG_IS_ENABLED(X86_64)
1002 jump_to_copy,
1003#endif
1004 NULL,
1005};
1006
1007void board_init_f(ulong boot_flags)
1008{
1009 gd->flags = boot_flags;
1010 gd->have_console = 0;
1011
1012 if (initcall_run_list(init_sequence_f))
1013 hang();
1014
1015#if !defined(CONFIG_ARM) && !defined(CONFIG_SANDBOX) && \
1016 !defined(CONFIG_EFI_APP) && !CONFIG_IS_ENABLED(X86_64) && \
1017 !defined(CONFIG_ARC)
1018
1019 hang();
1020#endif
1021}
1022
1023#if defined(CONFIG_X86) || defined(CONFIG_ARC)
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041static const init_fnc_t init_sequence_f_r[] = {
1042#if !CONFIG_IS_ENABLED(X86_64)
1043 init_cache_f_r,
1044#endif
1045
1046 NULL,
1047};
1048
1049void board_init_f_r(void)
1050{
1051 if (initcall_run_list(init_sequence_f_r))
1052 hang();
1053
1054
1055
1056
1057
1058
1059
1060
1061 gd->flags &= ~(GD_FLG_SERIAL_READY | GD_FLG_LOG_READY);
1062#ifdef CONFIG_TIMER
1063 gd->timer = NULL;
1064#endif
1065
1066
1067
1068
1069
1070
1071 (board_init_r + gd->reloc_off)((gd_t *)gd, gd->relocaddr);
1072
1073
1074 hang();
1075}
1076#endif
1077