X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=common%2Fboard_r.c;h=347bb7f7c02df5e87799371083ea6b26cac5850f;hb=65cc0e2a65d2c9f107b2f42db6396d9ade6c5ad8;hp=31a59c585a8d93861c2a39b92891b10ffb76da41;hpb=50c84208ad50a27382c64af911abba4510a8b608;p=platform%2Fkernel%2Fu-boot.git diff --git a/common/board_r.c b/common/board_r.c index 31a59c5..347bb7f 100644 --- a/common/board_r.c +++ b/common/board_r.c @@ -13,8 +13,12 @@ #include #include #include +#include +#include #include +#ifdef CONFIG_MTD_NOR_FLASH #include +#endif #include #include #include @@ -23,10 +27,6 @@ #include #include #include -/* TODO: can we just include all these headers whether needed or not? */ -#if defined(CONFIG_CMD_BEDBUG) -#include -#endif #include #include #include @@ -37,15 +37,11 @@ #include #include #include -#if defined(CONFIG_CMD_KGDB) #include -#endif #include #include #include -#ifdef CONFIG_BITBANGMII #include -#endif #include #include #include @@ -59,12 +55,7 @@ #include #include #include -#ifdef CONFIG_XEN #include -#endif -#ifdef CONFIG_ADDR_MAP -#include -#endif #include #include #include @@ -72,12 +63,9 @@ #include #include #include -#if defined(CONFIG_GPIO_HOG) -#include -#endif -#ifdef CONFIG_EFI_SETUP_EARLY +#include #include -#endif +#include DECLARE_GLOBAL_DATA_PTR; @@ -137,7 +125,7 @@ static int initr_reloc_global_data(void) { #ifdef __ARM__ monitor_flash_len = _end - __image_copy_start; -#elif defined(CONFIG_NDS32) || defined(CONFIG_RISCV) +#elif defined(CONFIG_RISCV) monitor_flash_len = (ulong)&_end - (ulong)&_start; #elif !defined(CONFIG_SANDBOX) && !defined(CONFIG_NIOS2) monitor_flash_len = (ulong)&__init_end - gd->relocaddr; @@ -163,13 +151,13 @@ static int initr_reloc_global_data(void) */ gd->env_addr += gd->reloc_off; #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 + if (CONFIG_IS_ENABLED(OF_EMBED) && CONFIG_IS_ENABLED(NEEDS_MANUAL_RELOC)) + gd->fdt_blob += gd->reloc_off; + #ifdef CONFIG_EFI_LOADER /* * On the ARM architecture gd is mapped to a fixed register (r9 or x18). @@ -189,15 +177,6 @@ __weak int arch_initr_trap(void) return 0; } -#ifdef CONFIG_ADDR_MAP -static int initr_addr_map(void) -{ - init_addr_map(); - - return 0; -} -#endif - #if defined(CONFIG_SYS_INIT_RAM_LOCK) && defined(CONFIG_E500) static int initr_unlock_ram_in_cache(void) { @@ -255,6 +234,8 @@ static int initr_dm(void) { int ret; + oftree_reset(); + /* Save the pre-reloc driver model and start a new one */ gd->dm_root_f = gd->dm_root; gd->dm_root = NULL; @@ -362,10 +343,10 @@ static int initr_flash(void) /* * Compute and print flash CRC if flashchecksum is set to 'y' * - * NOTE: Maybe we should add some WATCHDOG_RESET()? XXX + * NOTE: Maybe we should add some schedule()? XXX */ if (env_get_yesno("flashchecksum") == 1) { - const uchar *flash_base = (const uchar *)CONFIG_SYS_FLASH_BASE; + const uchar *flash_base = (const uchar *)CFG_SYS_FLASH_BASE; printf(" CRC: %08X", crc32(0, flash_base, @@ -375,8 +356,8 @@ static int initr_flash(void) putc('\n'); /* update start of FLASH memory */ -#ifdef CONFIG_SYS_FLASH_BASE - bd->bi_flashstart = CONFIG_SYS_FLASH_BASE; +#ifdef CFG_SYS_FLASH_BASE + bd->bi_flashstart = CFG_SYS_FLASH_BASE; #endif /* size of FLASH memory (final value) */ bd->bi_flashsize = flash_size; @@ -388,8 +369,8 @@ static int initr_flash(void) #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 = CONFIG_TEXT_BASE + flash_size; +#elif CONFIG_SYS_MONITOR_BASE == CFG_SYS_FLASH_BASE bd->bi_flashoffset = monitor_flash_len; /* reserved area for monitor */ #endif return 0; @@ -444,7 +425,7 @@ static int initr_pvblock(void) * 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 + * Return: 0 if environment should not be loaded, !=0 if it is ok to load */ static int should_load_env(void) { @@ -471,13 +452,18 @@ static int initr_env(void) env_set_hex("fdtcontroladdr", (unsigned long)map_to_sysmem(gd->fdt_blob)); + #if (CONFIG_IS_ENABLED(SAVE_PREV_BL_INITRAMFS_START_ADDR) || \ + CONFIG_IS_ENABLED(SAVE_PREV_BL_FDT_ADDR)) + save_prev_bl_data(); + #endif + /* Initialize from environment */ image_load_addr = env_get_ulong("loadaddr", 16, image_load_addr); return 0; } -#ifdef CONFIG_SYS_BOOTPARAMS_LEN +#ifdef CONFIG_SYS_MALLOC_BOOTPARAMS static int initr_malloc_bootparams(void) { gd->bd->bi_boot_params = (ulong)malloc(CONFIG_SYS_BOOTPARAMS_LEN); @@ -489,27 +475,6 @@ static int initr_malloc_bootparams(void) } #endif -#ifdef CONFIG_CMD_NET -static int initr_ethaddr(void) -{ - struct bd_info *bd = gd->bd; - - /* kept around for legacy kernels only ... ignore the next section */ - eth_env_get_enetaddr("ethaddr", bd->bi_enetaddr); - - return 0; -} -#endif /* CONFIG_CMD_NET */ - -#ifdef CONFIG_CMD_KGDB -static int initr_kgdb(void) -{ - puts("KGDB: "); - kgdb_init(); - return 0; -} -#endif - #if defined(CONFIG_LED_STATUS) static int initr_status_led(void) { @@ -586,11 +551,37 @@ int initr_mem(void) } #endif +static int dm_announce(void) +{ + int device_count; + int uclass_count; + + if (IS_ENABLED(CONFIG_DM)) { + dm_get_stats(&device_count, &uclass_count); + printf("Core: %d devices, %d uclasses", device_count, + uclass_count); + if (CONFIG_IS_ENABLED(OF_REAL)) + printf(", devicetree: %s", fdtdec_get_srcname()); + printf("\n"); + if (IS_ENABLED(CONFIG_OF_HAS_PRIOR_STAGE) && + (gd->fdt_src == FDTSRC_SEPARATE || + gd->fdt_src == FDTSRC_EMBED)) { + printf("Warning: Unexpected devicetree source (not from a prior stage)"); + printf("Warning: U-Boot may not function properly\n"); + } + } + + return 0; +} + static int run_main_loop(void) { #ifdef CONFIG_SANDBOX sandbox_main_loop_init(); #endif + + event_notify_null(EVT_MAIN_LOOP); + /* main_loop() can return to retry autoboot, if so just run it again */ for (;;) main_loop(); @@ -606,6 +597,7 @@ static int run_main_loop(void) static init_fnc_t init_sequence_r[] = { initr_trace, initr_reloc, + event_init, /* TODO: could x86/PPC have this also perhaps? */ #if defined(CONFIG_ARM) || defined(CONFIG_RISCV) initr_caches, @@ -617,6 +609,9 @@ static init_fnc_t init_sequence_r[] = { */ #endif initr_reloc_global_data, +#if CONFIG_IS_ENABLED(NEEDS_MANUAL_RELOC) && CONFIG_IS_ENABLED(EVENT) + event_manual_reloc, +#endif #if defined(CONFIG_SYS_INIT_RAM_LOCK) && defined(CONFIG_E500) initr_unlock_ram_in_cache, #endif @@ -635,10 +630,9 @@ static init_fnc_t init_sequence_r[] = { initr_dm, #endif #ifdef CONFIG_ADDR_MAP - initr_addr_map, + init_addr_map, #endif -#if defined(CONFIG_ARM) || defined(CONFIG_NDS32) || defined(CONFIG_RISCV) || \ - defined(CONFIG_SANDBOX) +#if defined(CONFIG_ARM) || defined(CONFIG_RISCV) || defined(CONFIG_SANDBOX) board_init, /* Setup chipselects */ #endif /* @@ -661,6 +655,7 @@ static init_fnc_t init_sequence_r[] = { stdio_init_tables, serial_initialize, initr_announce, + dm_announce, #if CONFIG_IS_ENABLED(WDT) initr_watchdog, #endif @@ -699,6 +694,9 @@ static init_fnc_t init_sequence_r[] = { /* initialize higher level parts of CPU like time base and timers */ cpu_init_r, #endif +#ifdef CONFIG_EFI_LOADER + efi_init_early, +#endif #ifdef CONFIG_CMD_NAND initr_nand, #endif @@ -715,7 +713,7 @@ static init_fnc_t init_sequence_r[] = { initr_pvblock, #endif initr_env, -#ifdef CONFIG_SYS_BOOTPARAMS_LEN +#ifdef CONFIG_SYS_MALLOC_BOOTPARAMS initr_malloc_bootparams, #endif INIT_FUNC_WATCHDOG_RESET @@ -748,7 +746,7 @@ static init_fnc_t init_sequence_r[] = { #endif INIT_FUNC_WATCHDOG_RESET #ifdef CONFIG_CMD_KGDB - initr_kgdb, + kgdb_init, #endif interrupt_init, #if defined(CONFIG_MICROBLAZE) || defined(CONFIG_M68K) @@ -758,9 +756,6 @@ static init_fnc_t init_sequence_r[] = { initr_status_led, #endif /* PPC has a udelay(20) here dating from 2002. Why? */ -#ifdef CONFIG_CMD_NET - initr_ethaddr, -#endif #if defined(CONFIG_GPIO_HOG) gpio_hog_probe_all, #endif @@ -796,16 +791,9 @@ static init_fnc_t init_sequence_r[] = { */ last_stage_init, #endif -#ifdef CONFIG_CMD_BEDBUG - INIT_FUNC_WATCHDOG_RESET - bedbug_init, -#endif #if defined(CONFIG_PRAM) initr_mem, #endif -#ifdef CONFIG_EFI_SETUP_EARLY - (init_fnc_t)efi_init_obj_list, -#endif run_main_loop, }; @@ -817,23 +805,18 @@ void board_init_r(gd_t *new_gd, ulong dest_addr) * 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 + if (CONFIG_IS_ENABLED(X86_64) && !IS_ENABLED(CONFIG_EFI_APP)) + arch_setup_gd(new_gd); #if !defined(CONFIG_X86) && !defined(CONFIG_ARM) && !defined(CONFIG_ARM64) gd = new_gd; #endif gd->flags &= ~GD_FLG_LOG_READY; -#ifdef CONFIG_NEEDS_MANUAL_RELOC - for (i = 0; i < ARRAY_SIZE(init_sequence_r); i++) - init_sequence_r[i] += gd->reloc_off; -#endif + if (IS_ENABLED(CONFIG_NEEDS_MANUAL_RELOC)) { + for (int i = 0; i < ARRAY_SIZE(init_sequence_r); i++) + MANUAL_RELOC(init_sequence_r[i]); + } if (initcall_run_list(init_sequence_r)) hang();