Blame view

common/board_r.c 19.1 KB
83d290c56   Tom Rini   SPDX: Convert all...
1
  // SPDX-License-Identifier: GPL-2.0+
6f6430d72   Simon Glass   Introduce generic...
2
3
4
5
6
7
8
9
  /*
   * Copyright (c) 2011 The Chromium OS Authors.
   * (C) Copyright 2002-2006
   * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
   *
   * (C) Copyright 2002
   * Sysgo Real-Time Solutions, GmbH <www.elinos.com>
   * Marius Groeger <mgroeger@sysgo.de>
6f6430d72   Simon Glass   Introduce generic...
10
11
12
   */
  
  #include <common.h>
12d738ae4   Simon Glass   api: Add a header...
13
  #include <api.h>
1eb69ae49   Simon Glass   common: Move ARM ...
14
  #include <cpu_func.h>
a6f2aafe0   Simon Glass   common: Move jump...
15
  #include <exports.h>
db41d65a9   Simon Glass   common: Move hang...
16
  #include <hang.h>
8e8ccfe1a   Simon Glass   common: Move the ...
17
  #include <image.h>
36bf446b6   Simon Glass   common: Move enab...
18
  #include <irq_func.h>
5e6267af3   Simon Glass   common: Move rese...
19
  #include <net.h>
3db711085   Simon Glass   crc32: Use the cr...
20
  #include <u-boot/crc.h>
c2240d4db   Simon Glass   Adjust board_r.c ...
21
22
23
24
  /* TODO: can we just include all these headers whether needed or not? */
  #if defined(CONFIG_CMD_BEDBUG)
  #include <bedbug/type.h>
  #endif
3c10dc95b   Simon Glass   binman: Add a lib...
25
  #include <binman.h>
cbb2df201   Tom Rini   CONFIG_NEEDS_MANU...
26
  #include <command.h>
24b852a7a   Simon Glass   Move console defi...
27
  #include <console.h>
1ce601767   Simon Glass   dm: Set up driver...
28
  #include <dm.h>
3f989e7b0   Simon Glass   env: Move env_rel...
29
  #include <env.h>
f3998fdc4   Simon Glass   env: Rename envir...
30
  #include <env_internal.h>
6f6430d72   Simon Glass   Introduce generic...
31
  #include <fdtdec.h>
c2240d4db   Simon Glass   Adjust board_r.c ...
32
  #include <ide.h>
6b8d3ceaf   Simon Glass   common: Move main...
33
  #include <init.h>
6f6430d72   Simon Glass   Introduce generic...
34
  #include <initcall.h>
c2240d4db   Simon Glass   Adjust board_r.c ...
35
36
37
  #if defined(CONFIG_CMD_KGDB)
  #include <kgdb.h>
  #endif
c30b7adbc   Simon Glass   common: Move inte...
38
  #include <irq_func.h>
6f6430d72   Simon Glass   Introduce generic...
39
  #include <malloc.h>
0eb25b619   Joe Hershberger   common: Make sure...
40
  #include <mapmem.h>
c2240d4db   Simon Glass   Adjust board_r.c ...
41
42
43
  #ifdef CONFIG_BITBANGMII
  #include <miiphy.h>
  #endif
6f6430d72   Simon Glass   Introduce generic...
44
45
  #include <mmc.h>
  #include <nand.h>
3af86a4e2   Simon Glass   dm: Build a live ...
46
  #include <of_live.h>
6f6430d72   Simon Glass   Introduce generic...
47
  #include <onenand_uboot.h>
c2240d4db   Simon Glass   Adjust board_r.c ...
48
  #include <scsi.h>
6f6430d72   Simon Glass   Introduce generic...
49
  #include <serial.h>
c3e4430ef   Simon Glass   common: Drop glob...
50
  #include <status_led.h>
6f6430d72   Simon Glass   Introduce generic...
51
  #include <stdio_dev.h>
1057e6cfe   Simon Glass   timer: Set up the...
52
  #include <timer.h>
71c52dba2   Simon Glass   Add trace support...
53
  #include <trace.h>
c2240d4db   Simon Glass   Adjust board_r.c ...
54
55
56
57
  #include <watchdog.h>
  #ifdef CONFIG_ADDR_MAP
  #include <asm/mmu.h>
  #endif
6f6430d72   Simon Glass   Introduce generic...
58
  #include <asm/sections.h>
1ce601767   Simon Glass   dm: Set up driver...
59
  #include <dm/root.h>
c2240d4db   Simon Glass   Adjust board_r.c ...
60
  #include <linux/compiler.h>
1ce601767   Simon Glass   dm: Set up driver...
61
  #include <linux/err.h>
50149ea37   Alexander Graf   efi_loader: Add r...
62
  #include <efi_loader.h>
06985289d   Stefan Roese   watchdog: Impleme...
63
  #include <wdt.h>
49b10cb49   Heiko Schocher   gpio: fixes for g...
64
  #if defined(CONFIG_GPIO_HOG)
5fc7cf8c8   Heiko Schocher   gpio: add gpio-ho...
65
66
  #include <asm/gpio.h>
  #endif
a2018ab0d   Ye Li   MLK-18591-3 andro...
67
68
69
  #ifdef CONFIG_FSL_FASTBOOT
  #include <fb_fsl.h>
  #endif
6f6430d72   Simon Glass   Introduce generic...
70
71
72
73
  
  DECLARE_GLOBAL_DATA_PTR;
  
  ulong monitor_flash_len;
dd2a6cd0f   Jeroen Hofstee   common: board: us...
74
  __weak int board_flash_wp_on(void)
c2240d4db   Simon Glass   Adjust board_r.c ...
75
76
77
78
79
80
81
82
  {
  	/*
  	 * Most flashes can't be detected when write protection is enabled,
  	 * so provide a way to let U-Boot gracefully ignore write protected
  	 * devices.
  	 */
  	return 0;
  }
dd2a6cd0f   Jeroen Hofstee   common: board: us...
83
  __weak void cpu_secondary_init_r(void)
c2240d4db   Simon Glass   Adjust board_r.c ...
84
85
  {
  }
c2240d4db   Simon Glass   Adjust board_r.c ...
86
87
88
89
90
91
92
93
94
95
96
97
98
  static int initr_secondary_cpu(void)
  {
  	/*
  	 * after non-volatile devices & environment is setup and cpu code have
  	 * another round to deal with any initialization that might require
  	 * full access to the environment or loading of some image (firmware)
  	 * from a non-volatile device
  	 */
  	/* TODO: maybe define this for all archs? */
  	cpu_secondary_init_r();
  
  	return 0;
  }
6f6430d72   Simon Glass   Introduce generic...
99

71c52dba2   Simon Glass   Add trace support...
100
101
102
103
104
105
106
107
  static int initr_trace(void)
  {
  #ifdef CONFIG_TRACE
  	trace_init(gd->trace_buff, CONFIG_TRACE_BUFFER_SIZE);
  #endif
  
  	return 0;
  }
6f6430d72   Simon Glass   Introduce generic...
108
109
  static int initr_reloc(void)
  {
c9356be30   Simon Glass   dm: Split the sim...
110
111
  	/* tell others: relocation done */
  	gd->flags |= GD_FLG_RELOC | GD_FLG_FULL_MALLOC_INIT;
6f6430d72   Simon Glass   Introduce generic...
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
  
  	return 0;
  }
  
  #ifdef CONFIG_ARM
  /*
   * Some of these functions are needed purely because the functions they
   * call return void. If we change them to return 0, these stubs can go away.
   */
  static int initr_caches(void)
  {
  	/* Enable caches */
  	enable_caches();
  	return 0;
  }
  #endif
c2240d4db   Simon Glass   Adjust board_r.c ...
128
129
130
131
  __weak int fixup_cpu(void)
  {
  	return 0;
  }
6f6430d72   Simon Glass   Introduce generic...
132
133
  static int initr_reloc_global_data(void)
  {
b60eff31f   Albert ARIBAUD   arm: remove unnee...
134
135
  #ifdef __ARM__
  	monitor_flash_len = _end - __image_copy_start;
068feb9b8   Rick Chen   riscv: Modify gen...
136
  #elif defined(CONFIG_NDS32) || defined(CONFIG_RISCV)
2e88bb28d   Kun-Hua Huang   NDS32: Generic Bo...
137
  	monitor_flash_len = (ulong)&_end - (ulong)&_start;
5ff10aa7e   Thomas Chou   nios2: add generi...
138
  #elif !defined(CONFIG_SANDBOX) && !defined(CONFIG_NIOS2)
a0ba279ac   Masahiro Yamada   generic_board: re...
139
  	monitor_flash_len = (ulong)&__init_end - gd->relocaddr;
6f6430d72   Simon Glass   Introduce generic...
140
  #endif
c2240d4db   Simon Glass   Adjust board_r.c ...
141
142
143
144
145
146
  #if defined(CONFIG_MPC85xx) || defined(CONFIG_MPC86xx)
  	/*
  	 * The gd->cpu pointer is set to an address in flash before relocation.
  	 * We need to update it to point to the same CPU entry in RAM.
  	 * TODO: why not just add gd->reloc_ofs?
  	 */
a0ba279ac   Masahiro Yamada   generic_board: re...
147
  	gd->arch.cpu += gd->relocaddr - CONFIG_SYS_MONITOR_BASE;
c2240d4db   Simon Glass   Adjust board_r.c ...
148
149
150
151
152
153
154
  
  	/*
  	 * If we didn't know the cpu mask & # cores, we can save them of
  	 * now rather than 'computing' them constantly
  	 */
  	fixup_cpu();
  #endif
8d8ee47e0   Tom Rini   env: Add CONFIG_S...
155
  #ifdef CONFIG_SYS_RELOC_GD_ENV_ADDR
c2240d4db   Simon Glass   Adjust board_r.c ...
156
  	/*
6c6add602   Simon Goldschmidt   configs: drop CON...
157
158
  	 * Relocate the early env_addr pointer unless we know it is not inside
  	 * the binary. Some systems need this and for the rest, it doesn't hurt.
c2240d4db   Simon Glass   Adjust board_r.c ...
159
  	 */
6c6add602   Simon Goldschmidt   configs: drop CON...
160
  	gd->env_addr += gd->reloc_off;
c2240d4db   Simon Glass   Adjust board_r.c ...
161
  #endif
e9acb9ea4   Siva Durga Prasad Paladugu   common: board: Do...
162
163
  #ifdef CONFIG_OF_EMBED
  	/*
92f84b67e   Mario Six   common: board_r: ...
164
165
166
  	 * The fdt_blob needs to be moved to new relocation address
  	 * incase of FDT blob is embedded with in image
  	 */
e9acb9ea4   Siva Durga Prasad Paladugu   common: board: Do...
167
168
  	gd->fdt_blob += gd->reloc_off;
  #endif
50149ea37   Alexander Graf   efi_loader: Add r...
169
  #ifdef CONFIG_EFI_LOADER
e7ac009b0   Heinrich Schuchardt   efi_loader: move ...
170
171
172
173
174
175
  	/*
  	 * On the ARM architecture gd is mapped to a fixed register (r9 or x18).
  	 * As this register may be overwritten by an EFI payload we save it here
  	 * and restore it on every callback entered.
  	 */
  	efi_save_gd();
50149ea37   Alexander Graf   efi_loader: Add r...
176
177
  	efi_runtime_relocate(gd->relocaddr, NULL);
  #endif
e9acb9ea4   Siva Durga Prasad Paladugu   common: board: Do...
178

c2240d4db   Simon Glass   Adjust board_r.c ...
179
  	return 0;
6f6430d72   Simon Glass   Introduce generic...
180
181
182
183
184
185
186
  }
  
  static int initr_serial(void)
  {
  	serial_initialize();
  	return 0;
  }
4c2cb1151   Daniel Schwierzeck   common/board_f: e...
187
  #if defined(CONFIG_PPC) || defined(CONFIG_M68K) || defined(CONFIG_MIPS)
c2240d4db   Simon Glass   Adjust board_r.c ...
188
189
190
191
192
  static int initr_trap(void)
  {
  	/*
  	 * Setup trap handlers
  	 */
e310b93ec   angelo@sysam.it   m68k: add generic...
193
  #if defined(CONFIG_PPC)
a0ba279ac   Masahiro Yamada   generic_board: re...
194
  	trap_init(gd->relocaddr);
e310b93ec   angelo@sysam.it   m68k: add generic...
195
196
197
  #else
  	trap_init(CONFIG_SYS_SDRAM_BASE);
  #endif
c2240d4db   Simon Glass   Adjust board_r.c ...
198
199
200
201
202
203
204
205
206
207
208
209
  	return 0;
  }
  #endif
  
  #ifdef CONFIG_ADDR_MAP
  static int initr_addr_map(void)
  {
  	init_addr_map();
  
  	return 0;
  }
  #endif
6f6430d72   Simon Glass   Introduce generic...
210
211
212
213
214
215
216
  #ifdef CONFIG_POST
  static int initr_post_backlog(void)
  {
  	post_output_backlog();
  	return 0;
  }
  #endif
c2240d4db   Simon Glass   Adjust board_r.c ...
217
218
219
220
221
222
223
224
225
226
227
  #if defined(CONFIG_SYS_INIT_RAM_LOCK) && defined(CONFIG_E500)
  static int initr_unlock_ram_in_cache(void)
  {
  	unlock_ram_in_cache();	/* it's time to unlock D-cache in e500 */
  	return 0;
  }
  #endif
  
  #ifdef CONFIG_PCI
  static int initr_pci(void)
  {
ff3e077bd   Simon Glass   dm: pci: Add a uc...
228
  #ifndef CONFIG_DM_PCI
c2240d4db   Simon Glass   Adjust board_r.c ...
229
  	pci_init();
ff3e077bd   Simon Glass   dm: pci: Add a uc...
230
  #endif
c2240d4db   Simon Glass   Adjust board_r.c ...
231
232
233
234
  
  	return 0;
  }
  #endif
c2240d4db   Simon Glass   Adjust board_r.c ...
235
236
237
238
239
240
241
242
  static int initr_barrier(void)
  {
  #ifdef CONFIG_PPC
  	/* TODO: Can we not use dmb() macros for this? */
  	asm("sync ; isync");
  #endif
  	return 0;
  }
6f6430d72   Simon Glass   Introduce generic...
243
244
245
  static int initr_malloc(void)
  {
  	ulong malloc_start;
f1896c45c   Andy Yan   spl: make SPL and...
246
  #if CONFIG_VAL(SYS_MALLOC_F_LEN)
d59476b64   Simon Glass   Add a simple mall...
247
248
249
250
  	debug("Pre-reloc malloc() used %#lx bytes (%ld KB)
  ", gd->malloc_ptr,
  	      gd->malloc_ptr / 1024);
  #endif
6f6430d72   Simon Glass   Introduce generic...
251
  	/* The malloc area is immediately below the monitor copy in DRAM */
5e0404ff8   Stephen Warren   board_f: fix nonc...
252
253
254
255
  	/*
  	 * This value MUST match the value of gd->start_addr_sp in board_f.c:
  	 * reserve_noncached().
  	 */
a0ba279ac   Masahiro Yamada   generic_board: re...
256
  	malloc_start = gd->relocaddr - TOTAL_MALLOC_LEN;
a733b06b6   Simon Glass   sandbox: Switch o...
257
258
  	mem_malloc_init((ulong)map_sysmem(malloc_start, TOTAL_MALLOC_LEN),
  			TOTAL_MALLOC_LEN);
6f6430d72   Simon Glass   Introduce generic...
259
260
  	return 0;
  }
9854a8748   Simon Glass   console: Add a co...
261
262
263
264
265
266
267
268
  static int initr_console_record(void)
  {
  #if defined(CONFIG_CONSOLE_RECORD)
  	return console_record_init();
  #else
  	return 0;
  #endif
  }
671fa63e7   Jan Kiszka   common/board_r: R...
269
270
271
272
273
274
275
  #ifdef CONFIG_SYS_NONCACHED_MEMORY
  static int initr_noncached(void)
  {
  	noncached_init();
  	return 0;
  }
  #endif
3af86a4e2   Simon Glass   dm: Build a live ...
276
277
278
  #ifdef CONFIG_OF_LIVE
  static int initr_of_live(void)
  {
a132f7708   Simon Glass   bootstage: Record...
279
280
281
282
283
284
285
286
287
  	int ret;
  
  	bootstage_start(BOOTSTAGE_ID_ACCUM_OF_LIVE, "of_live");
  	ret = of_live_build(gd->fdt_blob, (struct device_node **)&gd->of_root);
  	bootstage_accum(BOOTSTAGE_ID_ACCUM_OF_LIVE);
  	if (ret)
  		return ret;
  
  	return 0;
3af86a4e2   Simon Glass   dm: Build a live ...
288
289
  }
  #endif
1ce601767   Simon Glass   dm: Set up driver...
290
291
292
  #ifdef CONFIG_DM
  static int initr_dm(void)
  {
1057e6cfe   Simon Glass   timer: Set up the...
293
  	int ret;
ab7cd6279   Simon Glass   dm: Support drive...
294
295
296
  	/* Save the pre-reloc driver model and start a new one */
  	gd->dm_root_f = gd->dm_root;
  	gd->dm_root = NULL;
d74d6b444   Simon Glass   dm: timer: Correc...
297
298
299
  #ifdef CONFIG_TIMER
  	gd->timer = NULL;
  #endif
63c5bf48d   Simon Glass   bootstage: Record...
300
  	bootstage_start(BOOTSTATE_ID_ACCUM_DM_R, "dm_r");
1057e6cfe   Simon Glass   timer: Set up the...
301
  	ret = dm_init_and_scan(false);
63c5bf48d   Simon Glass   bootstage: Record...
302
  	bootstage_accum(BOOTSTATE_ID_ACCUM_DM_R);
1057e6cfe   Simon Glass   timer: Set up the...
303
304
  	if (ret)
  		return ret;
1057e6cfe   Simon Glass   timer: Set up the...
305
306
  
  	return 0;
1ce601767   Simon Glass   dm: Set up driver...
307
308
  }
  #endif
dd0edcb25   Simon Glass   board_r: Move ear...
309
310
311
312
313
314
315
316
317
318
319
320
  static int initr_dm_devices(void)
  {
  	int ret;
  
  	if (IS_ENABLED(CONFIG_TIMER_EARLY)) {
  		ret = dm_timer_init();
  		if (ret)
  			return ret;
  	}
  
  	return 0;
  }
881c124ab   Simon Glass   dm: timer: Avoid ...
321
322
  static int initr_bootstage(void)
  {
881c124ab   Simon Glass   dm: timer: Avoid ...
323
324
325
326
  	bootstage_mark_name(BOOTSTAGE_ID_START_UBOOT_R, "board_init_r");
  
  	return 0;
  }
6f6430d72   Simon Glass   Introduce generic...
327
328
329
330
331
332
333
  __weak int power_init_board(void)
  {
  	return 0;
  }
  
  static int initr_announce(void)
  {
a0ba279ac   Masahiro Yamada   generic_board: re...
334
335
  	debug("Now running in RAM - U-Boot at: %08lx
  ", gd->relocaddr);
6f6430d72   Simon Glass   Introduce generic...
336
337
  	return 0;
  }
61d7b1bb5   Andreas Bießmann   common/board_r: m...
338
339
340
341
342
343
344
345
  #ifdef CONFIG_NEEDS_MANUAL_RELOC
  static int initr_manual_reloc_cmdtable(void)
  {
  	fixup_cmdtable(ll_entry_start(cmd_tbl_t, cmd),
  		       ll_entry_count(cmd_tbl_t, cmd));
  	return 0;
  }
  #endif
3c10dc95b   Simon Glass   binman: Add a lib...
346
347
348
349
350
351
352
  static int initr_binman(void)
  {
  	if (!CONFIG_IS_ENABLED(BINMAN_FDT))
  		return 0;
  
  	return binman_init();
  }
e856bdcfb   Masahiro Yamada   flash: complete C...
353
  #if defined(CONFIG_MTD_NOR_FLASH)
6f6430d72   Simon Glass   Introduce generic...
354
355
  static int initr_flash(void)
  {
c2240d4db   Simon Glass   Adjust board_r.c ...
356
357
  	ulong flash_size = 0;
  	bd_t *bd = gd->bd;
6f6430d72   Simon Glass   Introduce generic...
358
359
  
  	puts("Flash: ");
70879a925   Masahiro Yamada   flash: do not fai...
360
  	if (board_flash_wp_on())
c2240d4db   Simon Glass   Adjust board_r.c ...
361
362
  		printf("Uninitialized - Write Protect On
  ");
70879a925   Masahiro Yamada   flash: do not fai...
363
  	else
c2240d4db   Simon Glass   Adjust board_r.c ...
364
  		flash_size = flash_init();
70879a925   Masahiro Yamada   flash: do not fai...
365

6f6430d72   Simon Glass   Introduce generic...
366
367
368
  	print_size(flash_size, "");
  #ifdef CONFIG_SYS_FLASH_CHECKSUM
  	/*
92f84b67e   Mario Six   common: board_r: ...
369
370
371
372
  	 * Compute and print flash CRC if flashchecksum is set to 'y'
  	 *
  	 * NOTE: Maybe we should add some WATCHDOG_RESET()? XXX
  	 */
bfebc8c96   Simon Glass   env: Rename geten...
373
  	if (env_get_yesno("flashchecksum") == 1) {
92f84b67e   Mario Six   common: board_r: ...
374
  		const uchar *flash_base = (const uchar *)CONFIG_SYS_FLASH_BASE;
6f6430d72   Simon Glass   Introduce generic...
375
  		printf("  CRC: %08X", crc32(0,
92f84b67e   Mario Six   common: board_r: ...
376
377
  					    flash_base,
  					    flash_size));
6f6430d72   Simon Glass   Introduce generic...
378
379
380
381
  	}
  #endif /* CONFIG_SYS_FLASH_CHECKSUM */
  	putc('
  ');
c2240d4db   Simon Glass   Adjust board_r.c ...
382
383
384
385
386
387
388
389
390
391
392
  	/* update start of FLASH memory    */
  #ifdef CONFIG_SYS_FLASH_BASE
  	bd->bi_flashstart = CONFIG_SYS_FLASH_BASE;
  #endif
  	/* size of FLASH memory (final value) */
  	bd->bi_flashsize = flash_size;
  
  #if defined(CONFIG_SYS_UPDATE_FLASH_SIZE)
  	/* Make a update of the Memctrl. */
  	update_flash_size(flash_size);
  #endif
c2240d4db   Simon Glass   Adjust board_r.c ...
393
394
395
396
397
398
399
400
401
  #if defined(CONFIG_OXC) || defined(CONFIG_RMU)
  	/* flash mapped at end of memory map */
  	bd->bi_flashoffset = CONFIG_SYS_TEXT_BASE + flash_size;
  #elif CONFIG_SYS_MONITOR_BASE == CONFIG_SYS_FLASH_BASE
  	bd->bi_flashoffset = monitor_flash_len;	/* reserved area for monitor */
  #endif
  	return 0;
  }
  #endif
6f6430d72   Simon Glass   Introduce generic...
402
403
  #ifdef CONFIG_CMD_NAND
  /* go init the NAND */
2588ba14d   Jeroen Hofstee   common: board_r: ...
404
  static int initr_nand(void)
6f6430d72   Simon Glass   Introduce generic...
405
406
407
  {
  	puts("NAND:  ");
  	nand_init();
203db38a9   Hou Zhiqiang   mtd: nand: remove...
408
409
  	printf("%lu MiB
  ", nand_size() / 1024);
6f6430d72   Simon Glass   Introduce generic...
410
411
412
413
414
415
  	return 0;
  }
  #endif
  
  #if defined(CONFIG_CMD_ONENAND)
  /* go init the NAND */
2588ba14d   Jeroen Hofstee   common: board_r: ...
416
  static int initr_onenand(void)
6f6430d72   Simon Glass   Introduce generic...
417
418
419
420
421
422
  {
  	puts("NAND:  ");
  	onenand_init();
  	return 0;
  }
  #endif
4aa2ba3a3   Masahiro Yamada   mmc: replace CONF...
423
  #ifdef CONFIG_MMC
2588ba14d   Jeroen Hofstee   common: board_r: ...
424
  static int initr_mmc(void)
6f6430d72   Simon Glass   Introduce generic...
425
426
427
428
429
430
  {
  	puts("MMC:   ");
  	mmc_initialize(gd->bd);
  	return 0;
  }
  #endif
6f6430d72   Simon Glass   Introduce generic...
431
432
433
  /*
   * Tell if it's OK to load the environment early in boot.
   *
776babd78   Masahiro Yamada   board_r: fix a ty...
434
   * If CONFIG_OF_CONTROL is defined, we'll check with the FDT to see
6f6430d72   Simon Glass   Introduce generic...
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
   * if this is OK (defaulting to saying it's OK).
   *
   * NOTE: Loading the environment early can be a bad idea if security is
   *       important, since no verification is done on the environment.
   *
   * @return 0 if environment should not be loaded, !=0 if it is ok to load
   */
  static int should_load_env(void)
  {
  #ifdef CONFIG_OF_CONTROL
  	return fdtdec_get_config_int(gd->fdt_blob, "load-environment", 1);
  #elif defined CONFIG_DELAY_ENVIRONMENT
  	return 0;
  #else
  	return 1;
  #endif
  }
  
  static int initr_env(void)
  {
  	/* initialize environment */
  	if (should_load_env())
  		env_relocate();
  	else
0ac7d722e   Simon Glass   env: Move get/set...
459
  		env_set_default(NULL, 0);
545dfd101   Thomas Chou   env: export fdt_b...
460
  #ifdef CONFIG_OF_CONTROL
f980c9998   Heinrich Schuchardt   fdt: sandbox: cor...
461
462
  	env_set_hex("fdtcontroladdr",
  		    (unsigned long)map_to_sysmem(gd->fdt_blob));
545dfd101   Thomas Chou   env: export fdt_b...
463
  #endif
6f6430d72   Simon Glass   Introduce generic...
464
465
  
  	/* Initialize from environment */
bb872dd93   Simon Glass   image: Rename loa...
466
  	image_load_addr = env_get_ulong("loadaddr", 16, image_load_addr);
c2240d4db   Simon Glass   Adjust board_r.c ...
467

c2240d4db   Simon Glass   Adjust board_r.c ...
468
469
  	return 0;
  }
c722f0b02   Andreas Bießmann   common/board_r: a...
470
471
472
473
474
475
476
477
478
479
480
481
  #ifdef CONFIG_SYS_BOOTPARAMS_LEN
  static int initr_malloc_bootparams(void)
  {
  	gd->bd->bi_boot_params = (ulong)malloc(CONFIG_SYS_BOOTPARAMS_LEN);
  	if (!gd->bd->bi_boot_params) {
  		puts("WARNING: Cannot allocate space for boot parameters
  ");
  		return -ENOMEM;
  	}
  	return 0;
  }
  #endif
6f6430d72   Simon Glass   Introduce generic...
482
483
484
485
486
487
488
489
490
491
492
493
494
495
  static int initr_jumptable(void)
  {
  	jumptable_init();
  	return 0;
  }
  
  #if defined(CONFIG_API)
  static int initr_api(void)
  {
  	/* Initialize API */
  	api_init();
  	return 0;
  }
  #endif
6f6430d72   Simon Glass   Introduce generic...
496
  /* enable exceptions */
daab59ac0   Andy Shevchenko   avr32: Retire AVR...
497
  #ifdef CONFIG_ARM
6f6430d72   Simon Glass   Introduce generic...
498
499
500
501
502
  static int initr_enable_interrupts(void)
  {
  	enable_interrupts();
  	return 0;
  }
e424c15c1   Simon Glass   x86: Enable gener...
503
  #endif
6f6430d72   Simon Glass   Introduce generic...
504
505
506
507
  
  #ifdef CONFIG_CMD_NET
  static int initr_ethaddr(void)
  {
c2240d4db   Simon Glass   Adjust board_r.c ...
508
509
510
  	bd_t *bd = gd->bd;
  
  	/* kept around for legacy kernels only ... ignore the next section */
35affd7a2   Simon Glass   env: Rename eth_g...
511
  	eth_env_get_enetaddr("ethaddr", bd->bi_enetaddr);
c2240d4db   Simon Glass   Adjust board_r.c ...
512
  #ifdef CONFIG_HAS_ETH1
35affd7a2   Simon Glass   env: Rename eth_g...
513
  	eth_env_get_enetaddr("eth1addr", bd->bi_enet1addr);
c2240d4db   Simon Glass   Adjust board_r.c ...
514
515
  #endif
  #ifdef CONFIG_HAS_ETH2
35affd7a2   Simon Glass   env: Rename eth_g...
516
  	eth_env_get_enetaddr("eth2addr", bd->bi_enet2addr);
c2240d4db   Simon Glass   Adjust board_r.c ...
517
518
  #endif
  #ifdef CONFIG_HAS_ETH3
35affd7a2   Simon Glass   env: Rename eth_g...
519
  	eth_env_get_enetaddr("eth3addr", bd->bi_enet3addr);
c2240d4db   Simon Glass   Adjust board_r.c ...
520
521
  #endif
  #ifdef CONFIG_HAS_ETH4
35affd7a2   Simon Glass   env: Rename eth_g...
522
  	eth_env_get_enetaddr("eth4addr", bd->bi_enet4addr);
c2240d4db   Simon Glass   Adjust board_r.c ...
523
524
  #endif
  #ifdef CONFIG_HAS_ETH5
35affd7a2   Simon Glass   env: Rename eth_g...
525
  	eth_env_get_enetaddr("eth5addr", bd->bi_enet5addr);
c2240d4db   Simon Glass   Adjust board_r.c ...
526
527
528
529
530
531
532
533
534
535
536
537
538
  #endif
  	return 0;
  }
  #endif /* CONFIG_CMD_NET */
  
  #ifdef CONFIG_CMD_KGDB
  static int initr_kgdb(void)
  {
  	puts("KGDB:  ");
  	kgdb_init();
  	return 0;
  }
  #endif
2d8d190c8   Uri Mashiach   status_led: Kconf...
539
  #if defined(CONFIG_LED_STATUS)
c2240d4db   Simon Glass   Adjust board_r.c ...
540
541
  static int initr_status_led(void)
  {
2d8d190c8   Uri Mashiach   status_led: Kconf...
542
543
  #if defined(CONFIG_LED_STATUS_BOOT)
  	status_led_set(CONFIG_LED_STATUS_BOOT, CONFIG_LED_STATUS_BLINKING);
13cfbe513   Bernhard Nortmann   allow LED initial...
544
545
546
  #else
  	status_led_init();
  #endif
c2240d4db   Simon Glass   Adjust board_r.c ...
547
548
549
  	return 0;
  }
  #endif
e8a016b53   Michal Simek   dm: Add support f...
550
  #if defined(CONFIG_SCSI) && !defined(CONFIG_DM_SCSI)
c2240d4db   Simon Glass   Adjust board_r.c ...
551
552
  static int initr_scsi(void)
  {
c2240d4db   Simon Glass   Adjust board_r.c ...
553
554
  	puts("SCSI:  ");
  	scsi_init();
3804f5bb4   Heinrich Schuchardt   common: print \n ...
555
556
  	puts("
  ");
6f6430d72   Simon Glass   Introduce generic...
557
558
559
  
  	return 0;
  }
2c997e7a8   Ian Campbell   board_r: run scsi...
560
  #endif
6f6430d72   Simon Glass   Introduce generic...
561
562
563
564
565
566
567
568
569
570
571
572
573
  
  #ifdef CONFIG_BITBANGMII
  static int initr_bbmii(void)
  {
  	bb_miiphy_init();
  	return 0;
  }
  #endif
  
  #ifdef CONFIG_CMD_NET
  static int initr_net(void)
  {
  	puts("Net:   ");
d2eaec600   Joe Hershberger   net: Remove the b...
574
  	eth_initialize();
6f6430d72   Simon Glass   Introduce generic...
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
  #if defined(CONFIG_RESET_PHY_R)
  	debug("Reset Ethernet PHY
  ");
  	reset_phy();
  #endif
  	return 0;
  }
  #endif
  
  #ifdef CONFIG_POST
  static int initr_post(void)
  {
  	post_run(NULL, POST_RAM | post_bootmode_get(0));
  	return 0;
  }
  #endif
ec15d5f6e   Bin Meng   board_r: Do not i...
591
  #if defined(CONFIG_IDE) && !defined(CONFIG_BLK)
c2240d4db   Simon Glass   Adjust board_r.c ...
592
593
  static int initr_ide(void)
  {
c2240d4db   Simon Glass   Adjust board_r.c ...
594
  	puts("IDE:   ");
c2240d4db   Simon Glass   Adjust board_r.c ...
595
596
597
598
599
600
601
602
603
  #if defined(CONFIG_START_IDE)
  	if (board_start_ide())
  		ide_init();
  #else
  	ide_init();
  #endif
  	return 0;
  }
  #endif
c5404b64f   Simon Glass   Drop the log buffer
604
  #if defined(CONFIG_PRAM)
6f6430d72   Simon Glass   Introduce generic...
605
606
607
608
609
610
611
612
  /*
   * Export available size of memory for Linux, taking into account the
   * protected RAM at top of memory
   */
  int initr_mem(void)
  {
  	ulong pram = 0;
  	char memsz[32];
bfebc8c96   Simon Glass   env: Rename geten...
613
  	pram = env_get_ulong("pram", 10, CONFIG_PRAM);
92f84b67e   Mario Six   common: board_r: ...
614
  	sprintf(memsz, "%ldk", (long int)((gd->ram_size / 1024) - pram));
382bee57f   Simon Glass   env: Rename seten...
615
  	env_set("mem", memsz);
c2240d4db   Simon Glass   Adjust board_r.c ...
616
617
618
619
620
621
622
623
624
625
626
627
628
  
  	return 0;
  }
  #endif
  
  #ifdef CONFIG_CMD_BEDBUG
  static int initr_bedbug(void)
  {
  	bedbug_init();
  
  	return 0;
  }
  #endif
6932a10a1   Ye Li   MLK-18591-1 andro...
629
630
631
632
633
634
635
  #if defined(AVB_RPMB) && !defined(CONFIG_SPL)
  extern int init_avbkey(void);
  static int initr_avbkey(void)
  {
  	return init_avbkey();
  }
  #endif
a2018ab0d   Ye Li   MLK-18591-3 andro...
636
637
638
639
640
641
642
643
644
645
646
647
648
  #ifdef CONFIG_FSL_FASTBOOT
  static int initr_fastboot_setup(void)
  {
  	fastboot_setup();
  	return 0;
  }
  
  static int initr_check_fastboot(void)
  {
  	fastboot_run_bootmode();
  	return 0;
  }
  #endif
e94fde4df   Ye Li   MLK-18591-6 andro...
649
650
651
652
653
654
655
656
  #ifdef CONFIG_IMX_TRUSTY_OS
  extern void tee_setup(void);
  static int initr_tee_setup(void)
  {
  	tee_setup();
  	return 0;
  }
  #endif
e543be2df   Ji Luo   MA-15158 Set spl ...
657
658
659
660
661
662
663
664
  #ifdef CONFIG_DUAL_BOOTLOADER
  extern void check_spl_recovery(void);
  static int initr_check_spl_recovery(void)
  {
  	check_spl_recovery();
  	return 0;
  }
  #endif
6f6430d72   Simon Glass   Introduce generic...
665
666
  static int run_main_loop(void)
  {
a733b06b6   Simon Glass   sandbox: Switch o...
667
668
669
  #ifdef CONFIG_SANDBOX
  	sandbox_main_loop_init();
  #endif
6f6430d72   Simon Glass   Introduce generic...
670
671
672
673
674
675
676
  	/* main_loop() can return to retry autoboot, if so just run it again */
  	for (;;)
  		main_loop();
  	return 0;
  }
  
  /*
47870afab   Alexander Graf   initcall: Move to...
677
   * We hope to remove most of the driver-related init and do it if/when
6f6430d72   Simon Glass   Introduce generic...
678
   * the driver is later used.
c2240d4db   Simon Glass   Adjust board_r.c ...
679
680
   *
   * TODO: perhaps reset the watchdog in the initcall function after each call?
6f6430d72   Simon Glass   Introduce generic...
681
   */
4acff4524   Simon Glass   board_f/r: Use st...
682
  static init_fnc_t init_sequence_r[] = {
71c52dba2   Simon Glass   Add trace support...
683
  	initr_trace,
6f6430d72   Simon Glass   Introduce generic...
684
  	initr_reloc,
c2240d4db   Simon Glass   Adjust board_r.c ...
685
  	/* TODO: could x86/PPC have this also perhaps? */
6f6430d72   Simon Glass   Introduce generic...
686
687
  #ifdef CONFIG_ARM
  	initr_caches,
12eaf31c0   York Sun   armv8/fsl-lsch3: ...
688
689
  	/* Note: For Freescale LS2 SoCs, new MMU table is created in DDR.
  	 *	 A temporary mapping of IFC high region is since removed,
92f84b67e   Mario Six   common: board_r: ...
690
  	 *	 so environmental variables in NOR flash is not available
12eaf31c0   York Sun   armv8/fsl-lsch3: ...
691
692
693
  	 *	 until board_init() is called below to remap IFC to high
  	 *	 region.
  	 */
9fb02491f   Simon Glass   dm: Make driver m...
694
695
  #endif
  	initr_reloc_global_data,
fef3e25fc   York Sun   common/board_r: F...
696
697
698
  #if defined(CONFIG_SYS_INIT_RAM_LOCK) && defined(CONFIG_E500)
  	initr_unlock_ram_in_cache,
  #endif
9fb02491f   Simon Glass   dm: Make driver m...
699
700
  	initr_barrier,
  	initr_malloc,
af1bc0cf4   Simon Glass   log: Plumb loggin...
701
  	log_init,
5ac44a554   Simon Glass   bootstage: Init a...
702
  	initr_bootstage,	/* Needs malloc() but has its own timer */
9854a8748   Simon Glass   console: Add a co...
703
  	initr_console_record,
671fa63e7   Jan Kiszka   common/board_r: R...
704
705
706
  #ifdef CONFIG_SYS_NONCACHED_MEMORY
  	initr_noncached,
  #endif
3af86a4e2   Simon Glass   dm: Build a live ...
707
708
709
  #ifdef CONFIG_OF_LIVE
  	initr_of_live,
  #endif
9fb02491f   Simon Glass   dm: Make driver m...
710
711
712
  #ifdef CONFIG_DM
  	initr_dm,
  #endif
17585e2dc   Patrick Delaunay   sandbox: led: use...
713
714
  #if defined(CONFIG_ARM) || defined(CONFIG_NDS32) || defined(CONFIG_RISCV) || \
  	defined(CONFIG_SANDBOX)
6f6430d72   Simon Glass   Introduce generic...
715
716
  	board_init,	/* Setup chipselects */
  #endif
c2240d4db   Simon Glass   Adjust board_r.c ...
717
718
719
720
721
722
723
724
725
  	/*
  	 * TODO: printing of the clock inforamtion of the board is now
  	 * implemented as part of bdinfo command. Currently only support for
  	 * davinci SOC's is added. Remove this check once all the board
  	 * implement this.
  	 */
  #ifdef CONFIG_CLOCKS
  	set_cpu_clk_info, /* Setup clock information */
  #endif
5d00995c3   Alexander Graf   efi_loader: Imple...
726
727
728
  #ifdef CONFIG_EFI_LOADER
  	efi_memory_init,
  #endif
3c10dc95b   Simon Glass   binman: Add a lib...
729
  	initr_binman,
fe08d39d1   Simon Glass   x86: fsp: Add a n...
730
731
732
  #ifdef CONFIG_FSP_VERSION2
  	arch_fsp_init_r,
  #endif
dd0edcb25   Simon Glass   board_r: Move ear...
733
  	initr_dm_devices,
9fb02491f   Simon Glass   dm: Make driver m...
734
  	stdio_init_tables,
6f6430d72   Simon Glass   Introduce generic...
735
736
  	initr_serial,
  	initr_announce,
6874cb722   Marek Vasut   watchdog: Split W...
737
  #if CONFIG_IS_ENABLED(WDT)
84b2416b6   Weijie Gao   board_r: move ini...
738
739
  	initr_watchdog,
  #endif
c2240d4db   Simon Glass   Adjust board_r.c ...
740
  	INIT_FUNC_WATCHDOG_RESET
61d7b1bb5   Andreas Bießmann   common/board_r: m...
741
742
743
  #ifdef CONFIG_NEEDS_MANUAL_RELOC
  	initr_manual_reloc_cmdtable,
  #endif
4c2cb1151   Daniel Schwierzeck   common/board_f: e...
744
  #if defined(CONFIG_PPC) || defined(CONFIG_M68K) || defined(CONFIG_MIPS)
c2240d4db   Simon Glass   Adjust board_r.c ...
745
746
747
748
749
750
751
752
753
  	initr_trap,
  #endif
  #ifdef CONFIG_ADDR_MAP
  	initr_addr_map,
  #endif
  #if defined(CONFIG_BOARD_EARLY_INIT_R)
  	board_early_init_r,
  #endif
  	INIT_FUNC_WATCHDOG_RESET
6f6430d72   Simon Glass   Introduce generic...
754
755
756
  #ifdef CONFIG_POST
  	initr_post_backlog,
  #endif
c2240d4db   Simon Glass   Adjust board_r.c ...
757
  	INIT_FUNC_WATCHDOG_RESET
c2240d4db   Simon Glass   Adjust board_r.c ...
758
759
760
  #if defined(CONFIG_PCI) && defined(CONFIG_SYS_EARLY_PCI_INIT)
  	/*
  	 * Do early PCI configuration _before_ the flash gets initialised,
92f84b67e   Mario Six   common: board_r: ...
761
  	 * because PCU resources are crucial for flash access on some boards.
c2240d4db   Simon Glass   Adjust board_r.c ...
762
763
764
  	 */
  	initr_pci,
  #endif
6f6430d72   Simon Glass   Introduce generic...
765
766
767
768
  #ifdef CONFIG_ARCH_EARLY_INIT_R
  	arch_early_init_r,
  #endif
  	power_init_board,
e856bdcfb   Masahiro Yamada   flash: complete C...
769
  #ifdef CONFIG_MTD_NOR_FLASH
6f6430d72   Simon Glass   Introduce generic...
770
771
  	initr_flash,
  #endif
c2240d4db   Simon Glass   Adjust board_r.c ...
772
  	INIT_FUNC_WATCHDOG_RESET
936478e79   Tom Rini   SPARC: Remove
773
  #if defined(CONFIG_PPC) || defined(CONFIG_M68K) || defined(CONFIG_X86)
c2240d4db   Simon Glass   Adjust board_r.c ...
774
775
  	/* initialize higher level parts of CPU like time base and timers */
  	cpu_init_r,
be274b99a   Simon Glass   x86: Adjust board...
776
  #endif
6f6430d72   Simon Glass   Introduce generic...
777
778
779
780
781
782
  #ifdef CONFIG_CMD_NAND
  	initr_nand,
  #endif
  #ifdef CONFIG_CMD_ONENAND
  	initr_onenand,
  #endif
4aa2ba3a3   Masahiro Yamada   mmc: replace CONF...
783
  #ifdef CONFIG_MMC
6f6430d72   Simon Glass   Introduce generic...
784
785
  	initr_mmc,
  #endif
6f6430d72   Simon Glass   Introduce generic...
786
  	initr_env,
c722f0b02   Andreas Bießmann   common/board_r: a...
787
788
789
  #ifdef CONFIG_SYS_BOOTPARAMS_LEN
  	initr_malloc_bootparams,
  #endif
c2240d4db   Simon Glass   Adjust board_r.c ...
790
791
  	INIT_FUNC_WATCHDOG_RESET
  	initr_secondary_cpu,
c2240d4db   Simon Glass   Adjust board_r.c ...
792
793
794
795
796
797
798
799
800
801
  #if defined(CONFIG_ID_EEPROM) || defined(CONFIG_SYS_I2C_MAC_OFFSET)
  	mac_read_from_eeprom,
  #endif
  	INIT_FUNC_WATCHDOG_RESET
  #if defined(CONFIG_PCI) && !defined(CONFIG_SYS_EARLY_PCI_INIT)
  	/*
  	 * Do pci configuration
  	 */
  	initr_pci,
  #endif
9fb02491f   Simon Glass   dm: Make driver m...
802
  	stdio_add_devices,
6f6430d72   Simon Glass   Introduce generic...
803
804
805
806
807
808
  	initr_jumptable,
  #ifdef CONFIG_API
  	initr_api,
  #endif
  	console_init_r,		/* fully init console as a device */
  #ifdef CONFIG_DISPLAY_BOARDINFO_LATE
b0895384b   Simon Glass   Allow displaying ...
809
  	console_announce_r,
0365ffcc0   Masahiro Yamada   generic-board: sh...
810
  	show_board_info,
6f6430d72   Simon Glass   Introduce generic...
811
812
813
814
815
816
817
  #endif
  #ifdef CONFIG_ARCH_MISC_INIT
  	arch_misc_init,		/* miscellaneous arch-dependent init */
  #endif
  #ifdef CONFIG_MISC_INIT_R
  	misc_init_r,		/* miscellaneous platform-dependent init */
  #endif
c2240d4db   Simon Glass   Adjust board_r.c ...
818
819
820
821
  	INIT_FUNC_WATCHDOG_RESET
  #ifdef CONFIG_CMD_KGDB
  	initr_kgdb,
  #endif
6f6430d72   Simon Glass   Introduce generic...
822
  	interrupt_init,
daab59ac0   Andy Shevchenko   avr32: Retire AVR...
823
  #ifdef CONFIG_ARM
6f6430d72   Simon Glass   Introduce generic...
824
  	initr_enable_interrupts,
c2240d4db   Simon Glass   Adjust board_r.c ...
825
  #endif
daab59ac0   Andy Shevchenko   avr32: Retire AVR...
826
  #if defined(CONFIG_MICROBLAZE) || defined(CONFIG_M68K)
be274b99a   Simon Glass   x86: Adjust board...
827
828
  	timer_init,		/* initialize timer */
  #endif
2d8d190c8   Uri Mashiach   status_led: Kconf...
829
  #if defined(CONFIG_LED_STATUS)
c2240d4db   Simon Glass   Adjust board_r.c ...
830
831
832
  	initr_status_led,
  #endif
  	/* PPC has a udelay(20) here dating from 2002. Why? */
6f6430d72   Simon Glass   Introduce generic...
833
834
835
  #ifdef CONFIG_CMD_NET
  	initr_ethaddr,
  #endif
49b10cb49   Heiko Schocher   gpio: fixes for g...
836
  #if defined(CONFIG_GPIO_HOG)
5fc7cf8c8   Heiko Schocher   gpio: add gpio-ho...
837
838
  	gpio_hog_probe_all,
  #endif
6f6430d72   Simon Glass   Introduce generic...
839
840
841
  #ifdef CONFIG_BOARD_LATE_INIT
  	board_late_init,
  #endif
a2018ab0d   Ye Li   MLK-18591-3 andro...
842
843
844
  #ifdef CONFIG_FSL_FASTBOOT
  	initr_fastboot_setup,
  #endif
e8a016b53   Michal Simek   dm: Add support f...
845
  #if defined(CONFIG_SCSI) && !defined(CONFIG_DM_SCSI)
c2240d4db   Simon Glass   Adjust board_r.c ...
846
847
848
  	INIT_FUNC_WATCHDOG_RESET
  	initr_scsi,
  #endif
6f6430d72   Simon Glass   Introduce generic...
849
850
851
852
  #ifdef CONFIG_BITBANGMII
  	initr_bbmii,
  #endif
  #ifdef CONFIG_CMD_NET
c2240d4db   Simon Glass   Adjust board_r.c ...
853
  	INIT_FUNC_WATCHDOG_RESET
6f6430d72   Simon Glass   Introduce generic...
854
855
856
857
858
  	initr_net,
  #endif
  #ifdef CONFIG_POST
  	initr_post,
  #endif
ec15d5f6e   Bin Meng   board_r: Do not i...
859
  #if defined(CONFIG_IDE) && !defined(CONFIG_BLK)
c2240d4db   Simon Glass   Adjust board_r.c ...
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
  	initr_ide,
  #endif
  #ifdef CONFIG_LAST_STAGE_INIT
  	INIT_FUNC_WATCHDOG_RESET
  	/*
  	 * Some parts can be only initialized if all others (like
  	 * Interrupts) are up and running (i.e. the PC-style ISA
  	 * keyboard).
  	 */
  	last_stage_init,
  #endif
  #ifdef CONFIG_CMD_BEDBUG
  	INIT_FUNC_WATCHDOG_RESET
  	initr_bedbug,
  #endif
c5404b64f   Simon Glass   Drop the log buffer
875
  #if defined(CONFIG_PRAM)
c2240d4db   Simon Glass   Adjust board_r.c ...
876
877
  	initr_mem,
  #endif
c05b38df4   Angelo Durgehello   common: fix regre...
878
  #if defined(CONFIG_M68K) && defined(CONFIG_BLOCK_CACHE)
1526bcce0   Angelo Durgehello   common: add blkca...
879
880
  	blkcache_init,
  #endif
6932a10a1   Ye Li   MLK-18591-1 andro...
881
882
883
  #if defined(AVB_RPMB) && !defined(CONFIG_SPL)
  	initr_avbkey,
  #endif
e94fde4df   Ye Li   MLK-18591-6 andro...
884
885
886
  #ifdef CONFIG_IMX_TRUSTY_OS
  	initr_tee_setup,
  #endif
a2018ab0d   Ye Li   MLK-18591-3 andro...
887
888
889
  #ifdef CONFIG_FSL_FASTBOOT
  	initr_check_fastboot,
  #endif
e543be2df   Ji Luo   MA-15158 Set spl ...
890
891
892
  #ifdef CONFIG_DUAL_BOOTLOADER
  	initr_check_spl_recovery,
  #endif
6f6430d72   Simon Glass   Introduce generic...
893
894
895
896
897
  	run_main_loop,
  };
  
  void board_init_r(gd_t *new_gd, ulong dest_addr)
  {
fb92308b9   Simon Glass   x86: board_r: Set...
898
899
900
901
902
903
904
905
906
  	/*
  	 * Set up the new global data pointer. So far only x86 does this
  	 * here.
  	 * TODO(sjg@chromium.org): Consider doing this for all archs, or
  	 * dropping the new_gd parameter.
  	 */
  #if CONFIG_IS_ENABLED(X86_64)
  	arch_setup_gd(new_gd);
  #endif
7395398ad   Alexey Brodkin   board_r - fixup f...
907
908
909
  #ifdef CONFIG_NEEDS_MANUAL_RELOC
  	int i;
  #endif
47a602eab   Jeroen Hofstee   board_r: ARM[64] ...
910
  #if !defined(CONFIG_X86) && !defined(CONFIG_ARM) && !defined(CONFIG_ARM64)
6f6430d72   Simon Glass   Introduce generic...
911
  	gd = new_gd;
be274b99a   Simon Glass   x86: Adjust board...
912
  #endif
af1bc0cf4   Simon Glass   log: Plumb loggin...
913
  	gd->flags &= ~GD_FLG_LOG_READY;
7395398ad   Alexey Brodkin   board_r - fixup f...
914
915
916
917
918
  
  #ifdef CONFIG_NEEDS_MANUAL_RELOC
  	for (i = 0; i < ARRAY_SIZE(init_sequence_r); i++)
  		init_sequence_r[i] += gd->reloc_off;
  #endif
6f6430d72   Simon Glass   Introduce generic...
919
920
921
922
923
924
  	if (initcall_run_list(init_sequence_r))
  		hang();
  
  	/* NOTREACHED - run_main_loop() does not return */
  	hang();
  }