X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=common%2Fboard_r.c;h=adc1f1937ed1fd9bec0b1b6080e658a1f4f52fb0;hb=5b8e76c35ec312a3f73126bd1a2d2c0965b98a9f;hp=5af32dd65be2632d3df7b8b1fd5cbc4126007929;hpb=25ef4bea59dadbd25dec1dbb376ed84dfc735f02;p=platform%2Fkernel%2Fu-boot.git diff --git a/common/board_r.c b/common/board_r.c index 5af32dd..adc1f19 100644 --- a/common/board_r.c +++ b/common/board_r.c @@ -11,10 +11,12 @@ */ #include +#include /* TODO: can we just include all these headers whether needed or not? */ #if defined(CONFIG_CMD_BEDBUG) #include #endif +#include #include #ifdef CONFIG_HAS_DATAFLASH #include @@ -22,10 +24,9 @@ #include #include #include -#if defined(CONFIG_CMD_IDE) #include -#endif #include +#include #ifdef CONFIG_PS2KBD #include #endif @@ -40,36 +41,29 @@ #endif #include #include +#include #include #include #include #include #include +#include #include #include -#ifdef CONFIG_CMD_AMBAPP -#include -#endif #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; -#if defined(CONFIG_SPARC) -extern int prom_init(void); -#endif - ulong monitor_flash_len; __weak int board_flash_wp_on(void) @@ -175,6 +169,9 @@ static int initr_reloc_global_data(void) */ gd->fdt_blob += gd->reloc_off; #endif +#ifdef CONFIG_EFI_LOADER + efi_runtime_relocate(gd->relocaddr, NULL); +#endif return 0; } @@ -185,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) { /* @@ -230,13 +227,6 @@ static int initr_post_backlog(void) } #endif -#ifdef CONFIG_SYS_DELAYED_ICACHE -static int initr_icache_enable(void) -{ - return 0; -} -#endif - #if defined(CONFIG_SYS_INIT_RAM_LOCK) && defined(CONFIG_E500) static int initr_unlock_ram_in_cache(void) { @@ -256,17 +246,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 @@ -308,22 +287,49 @@ static int initr_noncached(void) } #endif +#ifdef CONFIG_OF_LIVE +static int initr_of_live(void) +{ + 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; +} +#endif + #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); + bootstage_start(BOOTSTATE_ID_ACCUM_DM_R, "dm_r"); + ret = dm_init_and_scan(false); + bootstage_accum(BOOTSTATE_ID_ACCUM_DM_R); + 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; @@ -349,7 +355,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; @@ -420,6 +426,7 @@ static int initr_nand(void) { puts("NAND: "); nand_init(); + printf("%lu MiB\n", nand_size() / 1024); return 0; } #endif @@ -434,7 +441,7 @@ static int initr_onenand(void) } #endif -#ifdef CONFIG_GENERIC_MMC +#ifdef CONFIG_MMC static int initr_mmc(void) { puts("MMC: "); @@ -455,7 +462,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 @@ -487,24 +494,7 @@ static int initr_env(void) /* Initialize from environment */ load_addr = getenv_ulong("loadaddr", 16, load_addr); -#if defined(CONFIG_SYS_EXTBDINFO) -#if defined(CONFIG_405GP) || defined(CONFIG_405EP) -#if defined(CONFIG_I2CFAST) - /* - * set bi_iic_fast for linux taking environment variable - * "i2cfast" into account - */ - { - char *s = getenv("i2cfast"); - if (s && ((*s == 'y') || (*s == 'Y'))) { - gd->bd->bi_iic_fast[0] = 1; - gd->bd->bi_iic_fast[1] = 1; - } - } -#endif /* CONFIG_I2CFAST */ -#endif /* CONFIG_405GP, CONFIG_405EP */ -#endif /* CONFIG_SYS_EXTBDINFO */ return 0; } @@ -579,11 +569,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 @@ -591,19 +581,7 @@ static int initr_status_led(void) } #endif -#if defined(CONFIG_CMD_AMBAPP) && defined(CONFIG_SYS_AMBAPP_PRINT_ON_STARTUP) -extern int do_ambapp_print(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]); - -static int initr_ambapp_print(void) -{ - puts("AMBA:\n"); - do_ambapp_print(NULL, 0, 0, NULL); - - return 0; -} -#endif - -#if defined(CONFIG_CMD_SCSI) +#if defined(CONFIG_SCSI) && !defined(CONFIG_DM_SCSI) static int initr_scsi(void) { puts("SCSI: "); @@ -613,15 +591,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) { @@ -651,7 +620,7 @@ static int initr_post(void) } #endif -#if defined(CONFIG_CMD_PCMCIA) && !defined(CONFIG_CMD_IDE) +#if defined(CONFIG_CMD_PCMCIA) && !defined(CONFIG_IDE) static int initr_pcmcia(void) { puts("PCMCIA:"); @@ -660,14 +629,10 @@ static int initr_pcmcia(void) } #endif -#if defined(CONFIG_CMD_IDE) +#if defined(CONFIG_IDE) static int initr_ide(void) { -#ifdef CONFIG_IDE_8xx_PCCARD - puts("PCMCIA:"); -#else puts("IDE: "); -#endif #if defined(CONFIG_START_IDE) if (board_start_ide()) ide_init(); @@ -740,7 +705,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? */ @@ -759,15 +724,18 @@ init_fnc_t init_sequence_r[] = { #endif initr_barrier, initr_malloc, + initr_bootstage, /* Needs malloc() but has its own timer */ initr_console_record, #ifdef CONFIG_SYS_NONCACHED_MEMORY initr_noncached, #endif bootstage_relocate, +#ifdef CONFIG_OF_LIVE + initr_of_live, +#endif #ifdef CONFIG_DM initr_dm, #endif - initr_bootstage, #if defined(CONFIG_ARM) || defined(CONFIG_NDS32) board_init, /* Setup chipselects */ #endif @@ -780,6 +748,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, initr_announce, @@ -787,7 +758,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 @@ -804,9 +775,6 @@ init_fnc_t init_sequence_r[] = { initr_post_backlog, #endif INIT_FUNC_WATCHDOG_RESET -#ifdef CONFIG_SYS_DELAYED_ICACHE - initr_icache_enable, -#endif #if defined(CONFIG_PCI) && defined(CONFIG_SYS_EARLY_PCI_INIT) /* * Do early PCI configuration _before_ the flash gets initialised, @@ -814,19 +782,15 @@ 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 -#if defined(CONFIG_PPC) || defined(CONFIG_M68K) || defined(CONFIG_X86) || \ - defined(CONFIG_SPARC) +#if defined(CONFIG_PPC) || defined(CONFIG_M68K) || defined(CONFIG_X86) /* initialize higher level parts of CPU like time base and timers */ cpu_init_r, #endif @@ -839,7 +803,7 @@ init_fnc_t init_sequence_r[] = { #ifdef CONFIG_CMD_ONENAND initr_onenand, #endif -#ifdef CONFIG_GENERIC_MMC +#ifdef CONFIG_MMC initr_mmc, #endif #ifdef CONFIG_HAS_DATAFLASH @@ -887,7 +851,7 @@ init_fnc_t init_sequence_r[] = { #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? */ @@ -897,20 +861,10 @@ init_fnc_t init_sequence_r[] = { #ifdef CONFIG_BOARD_LATE_INIT board_late_init, #endif -#if defined(CONFIG_CMD_AMBAPP) - ambapp_init_reloc, -#if defined(CONFIG_SYS_AMBAPP_PRINT_ON_STARTUP) - initr_ambapp_print, -#endif -#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 @@ -921,10 +875,10 @@ init_fnc_t init_sequence_r[] = { #ifdef CONFIG_POST initr_post, #endif -#if defined(CONFIG_CMD_PCMCIA) && !defined(CONFIG_CMD_IDE) +#if defined(CONFIG_CMD_PCMCIA) && !defined(CONFIG_IDE) initr_pcmcia, #endif -#if defined(CONFIG_CMD_IDE) +#if defined(CONFIG_IDE) initr_ide, #endif #ifdef CONFIG_LAST_STAGE_INIT @@ -946,14 +900,21 @@ init_fnc_t init_sequence_r[] = { #ifdef CONFIG_PS2KBD initr_kbd, #endif -#if defined(CONFIG_SPARC) - prom_init, -#endif run_main_loop, }; 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