X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=common%2Fboard_r.c;h=d69a33c4a3fdf5daac5d99537a508f31e2e0b9f3;hb=bd4a985f5021876cd410f4a8110fce2c1b652333;hp=c4fd3eaf8cc1834a1292c79062340847a006f681;hpb=588eec2a8603ee8a8e2e913895767c4c02d523af;p=u-boot diff --git a/common/board_r.c b/common/board_r.c index c4fd3eaf8c..d69a33c4a3 100644 --- a/common/board_r.c +++ b/common/board_r.c @@ -15,6 +15,8 @@ #if defined(CONFIG_CMD_BEDBUG) #include #endif +#include +#include #ifdef CONFIG_HAS_DATAFLASH #include #endif @@ -25,6 +27,7 @@ #include #endif #include +#include #ifdef CONFIG_PS2KBD #include #endif @@ -44,21 +47,20 @@ #include #include #include +#include #include #include #ifdef CONFIG_ADDR_MAP #include #endif #include -#ifdef CONFIG_X86 -#include -#endif #include #include #include #ifdef CONFIG_AVR32 #include #endif +#include DECLARE_GLOBAL_DATA_PTR; @@ -105,7 +107,6 @@ static int initr_reloc(void) { /* tell others: relocation done */ gd->flags |= GD_FLG_RELOC | GD_FLG_FULL_MALLOC_INIT; - bootstage_mark_name(BOOTSTAGE_ID_START_UBOOT_R, "board_init_r"); return 0; } @@ -161,6 +162,17 @@ static int initr_reloc_global_data(void) */ gd->env_addr += gd->relocaddr - CONFIG_SYS_MONITOR_BASE; #endif +#ifdef CONFIG_OF_EMBED + /* + * The fdt_blob needs to be moved to new relocation address + * incase of FDT blob is embedded with in image + */ + gd->fdt_blob += gd->reloc_off; +#endif +#ifdef CONFIG_EFI_LOADER + efi_runtime_relocate(gd->relocaddr, NULL); +#endif + return 0; } @@ -170,7 +182,7 @@ static int initr_serial(void) return 0; } -#if defined(CONFIG_PPC) || defined(CONFIG_M68K) +#if defined(CONFIG_PPC) || defined(CONFIG_M68K) || defined(CONFIG_MIPS) static int initr_trap(void) { /* @@ -241,17 +253,6 @@ static int initr_pci(void) } #endif -#ifdef CONFIG_WINBOND_83C553 -static int initr_w83c553f(void) -{ - /* - * Initialise the ISA bridge - */ - initialise_w83c553f(); - return 0; -} -#endif - static int initr_barrier(void) { #ifdef CONFIG_PPC @@ -276,6 +277,15 @@ static int initr_malloc(void) return 0; } +static int initr_console_record(void) +{ +#if defined(CONFIG_CONSOLE_RECORD) + return console_record_init(); +#else + return 0; +#endif +} + #ifdef CONFIG_SYS_NONCACHED_MEMORY static int initr_noncached(void) { @@ -287,16 +297,35 @@ static int initr_noncached(void) #ifdef CONFIG_DM static int initr_dm(void) { + int ret; + /* Save the pre-reloc driver model and start a new one */ gd->dm_root_f = gd->dm_root; gd->dm_root = NULL; #ifdef CONFIG_TIMER gd->timer = NULL; #endif - return dm_init_and_scan(false); + ret = dm_init_and_scan(false); + if (ret) + return ret; +#ifdef CONFIG_TIMER_EARLY + ret = dm_timer_init(); + if (ret) + return ret; +#endif + + return 0; } #endif +static int initr_bootstage(void) +{ + /* We cannot do this before initr_dm() */ + bootstage_mark_name(BOOTSTAGE_ID_START_UBOOT_R, "board_init_r"); + + return 0; +} + __weak int power_init_board(void) { return 0; @@ -317,7 +346,7 @@ static int initr_manual_reloc_cmdtable(void) } #endif -#if !defined(CONFIG_SYS_NO_FLASH) +#if defined(CONFIG_MTD_NOR_FLASH) static int initr_flash(void) { ulong flash_size = 0; @@ -388,6 +417,7 @@ static int initr_nand(void) { puts("NAND: "); nand_init(); + printf("%lu MiB\n", nand_size() / 1024); return 0; } #endif @@ -423,7 +453,7 @@ static int initr_dataflash(void) /* * Tell if it's OK to load the environment early in boot. * - * If CONFIG_OF_CONFIG is defined, we'll check with the FDT to see + * If CONFIG_OF_CONTROL is defined, we'll check with the FDT to see * if this is OK (defaulting to saying it's OK). * * NOTE: Loading the environment early can be a bad idea if security is @@ -547,11 +577,11 @@ static int initr_kgdb(void) } #endif -#if defined(CONFIG_STATUS_LED) +#if defined(CONFIG_LED_STATUS) static int initr_status_led(void) { -#if defined(STATUS_LED_BOOT) - status_led_set(STATUS_LED_BOOT, STATUS_LED_BLINKING); +#if defined(CONFIG_LED_STATUS_BOOT) + status_led_set(CONFIG_LED_STATUS_BOOT, CONFIG_LED_STATUS_BLINKING); #else status_led_init(); #endif @@ -559,7 +589,7 @@ static int initr_status_led(void) } #endif -#if defined(CONFIG_CMD_SCSI) +#if defined(CONFIG_SCSI) && !defined(CONFIG_DM_SCSI) static int initr_scsi(void) { puts("SCSI: "); @@ -569,15 +599,6 @@ static int initr_scsi(void) } #endif -#if defined(CONFIG_CMD_DOC) -static int initr_doc(void) -{ - puts("DOC: "); - doc_init(); - return 0; -} -#endif - #ifdef CONFIG_BITBANGMII static int initr_bbmii(void) { @@ -696,7 +717,7 @@ static int run_main_loop(void) * * TODO: perhaps reset the watchdog in the initcall function after each call? */ -init_fnc_t init_sequence_r[] = { +static init_fnc_t init_sequence_r[] = { initr_trace, initr_reloc, /* TODO: could x86/PPC have this also perhaps? */ @@ -715,6 +736,7 @@ init_fnc_t init_sequence_r[] = { #endif initr_barrier, initr_malloc, + initr_console_record, #ifdef CONFIG_SYS_NONCACHED_MEMORY initr_noncached, #endif @@ -722,6 +744,7 @@ init_fnc_t init_sequence_r[] = { #ifdef CONFIG_DM initr_dm, #endif + initr_bootstage, #if defined(CONFIG_ARM) || defined(CONFIG_NDS32) board_init, /* Setup chipselects */ #endif @@ -733,6 +756,9 @@ init_fnc_t init_sequence_r[] = { */ #ifdef CONFIG_CLOCKS set_cpu_clk_info, /* Setup clock information */ +#endif +#ifdef CONFIG_EFI_LOADER + efi_memory_init, #endif stdio_init_tables, initr_serial, @@ -741,7 +767,7 @@ init_fnc_t init_sequence_r[] = { #ifdef CONFIG_NEEDS_MANUAL_RELOC initr_manual_reloc_cmdtable, #endif -#if defined(CONFIG_PPC) || defined(CONFIG_M68K) +#if defined(CONFIG_PPC) || defined(CONFIG_M68K) || defined(CONFIG_MIPS) initr_trap, #endif #ifdef CONFIG_ADDR_MAP @@ -768,14 +794,11 @@ init_fnc_t init_sequence_r[] = { */ initr_pci, #endif -#ifdef CONFIG_WINBOND_83C553 - initr_w83c553f, -#endif #ifdef CONFIG_ARCH_EARLY_INIT_R arch_early_init_r, #endif power_init_board, -#ifndef CONFIG_SYS_NO_FLASH +#ifdef CONFIG_MTD_NOR_FLASH initr_flash, #endif INIT_FUNC_WATCHDOG_RESET @@ -837,11 +860,10 @@ init_fnc_t init_sequence_r[] = { #if defined(CONFIG_ARM) || defined(CONFIG_AVR32) initr_enable_interrupts, #endif -#if defined(CONFIG_X86) || defined(CONFIG_MICROBLAZE) || defined(CONFIG_AVR32) \ - || defined(CONFIG_M68K) +#if defined(CONFIG_MICROBLAZE) || defined(CONFIG_AVR32) || defined(CONFIG_M68K) timer_init, /* initialize timer */ #endif -#if defined(CONFIG_STATUS_LED) +#if defined(CONFIG_LED_STATUS) initr_status_led, #endif /* PPC has a udelay(20) here dating from 2002. Why? */ @@ -851,14 +873,10 @@ init_fnc_t init_sequence_r[] = { #ifdef CONFIG_BOARD_LATE_INIT board_late_init, #endif -#ifdef CONFIG_CMD_SCSI +#if defined(CONFIG_SCSI) && !defined(CONFIG_DM_SCSI) INIT_FUNC_WATCHDOG_RESET initr_scsi, #endif -#ifdef CONFIG_CMD_DOC - INIT_FUNC_WATCHDOG_RESET - initr_doc, -#endif #ifdef CONFIG_BITBANGMII initr_bbmii, #endif @@ -899,6 +917,16 @@ init_fnc_t init_sequence_r[] = { void board_init_r(gd_t *new_gd, ulong dest_addr) { + /* + * 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 + #ifdef CONFIG_NEEDS_MANUAL_RELOC int i; #endif