X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=common%2Fboard_f.c;h=2b4edf30c930f2dfa368169b6893e1e1e825ecb2;hb=0b9b01517f0b1398ec27dbb47faf3645b719e02c;hp=3df4efeeff6ec36204845eb07cff3ead90266765;hpb=01c88e3dcd667281cf3aa6f6b47f90900177aff9;p=platform%2Fkernel%2Fu-boot.git diff --git a/common/board_f.c b/common/board_f.c index 3df4efe..2b4edf3 100644 --- a/common/board_f.c +++ b/common/board_f.c @@ -28,7 +28,6 @@ #include #include #include -#include #include #include #include @@ -36,9 +35,7 @@ #include #include #include -#ifdef CONFIG_SPL #include -#endif #include #include #include @@ -46,12 +43,6 @@ #include #include #include -#ifdef CONFIG_MACH_TYPE -#include -#endif -#if defined(CONFIG_MP) && defined(CONFIG_PPC) -#include -#endif #include #include #include @@ -59,18 +50,7 @@ #include #include -/* - * Pointer to initial global data area - * - * Here we initialize it if needed. - */ -#ifdef XTRN_DECLARE_GLOBAL_DATA_PTR -#undef XTRN_DECLARE_GLOBAL_DATA_PTR -#define XTRN_DECLARE_GLOBAL_DATA_PTR /* empty = allocate here */ -DECLARE_GLOBAL_DATA_PTR = (gd_t *)(CONFIG_SYS_INIT_GD_ADDR); -#else DECLARE_GLOBAL_DATA_PTR; -#endif /* * TODO(sjg@chromium.org): IMO this code should be @@ -147,8 +127,8 @@ static int display_text_info(void) bss_start = (ulong)&__bss_start; bss_end = (ulong)&__bss_end; -#ifdef CONFIG_SYS_TEXT_BASE - text_base = CONFIG_SYS_TEXT_BASE; +#ifdef CONFIG_TEXT_BASE + text_base = CONFIG_TEXT_BASE; #else text_base = CONFIG_SYS_MONITOR_BASE; #endif @@ -165,20 +145,27 @@ static int print_resetinfo(void) { struct udevice *dev; char status[256]; + bool status_printed = false; int ret; - ret = uclass_first_device_err(UCLASS_SYSRESET, &dev); - if (ret) { - debug("%s: No sysreset device found (error: %d)\n", - __func__, ret); - /* Not all boards have sysreset drivers available during early - * boot, so don't fail if one can't be found. - */ - return 0; - } + /* Not all boards have sysreset drivers available during early + * boot, so don't fail if one can't be found. + */ + for (ret = uclass_first_device_check(UCLASS_SYSRESET, &dev); dev; + ret = uclass_next_device_check(&dev)) { + if (ret) { + debug("%s: %s sysreset device (error: %d)\n", + __func__, dev->name, ret); + continue; + } - if (!sysreset_get_status(dev, status, sizeof(status))) - printf("%s", status); + if (!sysreset_get_status(dev, status, sizeof(status))) { + printf("%s%s", status_printed ? " " : "", status); + status_printed = true; + } + } + if (status_printed) + printf("\n"); return 0; } @@ -342,12 +329,12 @@ __weak int mach_cpu_init(void) /* Get the top of usable RAM */ __weak phys_size_t board_get_usable_ram_top(phys_size_t total_size) { -#if defined(CONFIG_SYS_SDRAM_BASE) && CONFIG_SYS_SDRAM_BASE > 0 +#if defined(CFG_SYS_SDRAM_BASE) && CFG_SYS_SDRAM_BASE > 0 /* * Detect whether we have so much RAM that it goes past the end of our * 32-bit address space. If so, clip the usable RAM so it doesn't. */ - if (gd->ram_top < CONFIG_SYS_SDRAM_BASE) + if (gd->ram_top < CFG_SYS_SDRAM_BASE) /* * Will wrap back to top of 32-bit space when reservations * are made. @@ -357,6 +344,11 @@ __weak phys_size_t board_get_usable_ram_top(phys_size_t total_size) return gd->ram_top; } +__weak int arch_setup_dest_addr(void) +{ + return 0; +} + static int setup_dest_addr(void) { debug("Monitor len: %08lX\n", gd->mon_len); @@ -377,39 +369,30 @@ static int setup_dest_addr(void) */ gd->ram_size -= CONFIG_SYS_MEM_TOP_HIDE; #endif -#ifdef CONFIG_SYS_SDRAM_BASE - gd->ram_base = CONFIG_SYS_SDRAM_BASE; +#ifdef CFG_SYS_SDRAM_BASE + gd->ram_base = CFG_SYS_SDRAM_BASE; #endif gd->ram_top = gd->ram_base + get_effective_memsize(); gd->ram_top = board_get_usable_ram_top(gd->mon_len); gd->relocaddr = gd->ram_top; debug("Ram top: %08llX\n", (unsigned long long)gd->ram_top); -#if defined(CONFIG_MP) && (defined(CONFIG_MPC86xx) || defined(CONFIG_E500)) - /* - * We need to make sure the location we intend to put secondary core - * boot code is reserved and not used by any part of u-boot - */ - if (gd->relocaddr > determine_mp_bootpg(NULL)) { - gd->relocaddr = determine_mp_bootpg(NULL); - debug("Reserving MP boot page to %08lx\n", gd->relocaddr); - } -#endif - return 0; + + return arch_setup_dest_addr(); } -#ifdef CONFIG_PRAM +#ifdef CFG_PRAM /* reserve protected RAM */ static int reserve_pram(void) { ulong reg; - reg = env_get_ulong("pram", 10, CONFIG_PRAM); + reg = env_get_ulong("pram", 10, CFG_PRAM); gd->relocaddr -= (reg << 10); /* size is in kB */ debug("Reserving %ldk for protected RAM at %08lx\n", reg, gd->relocaddr); return 0; } -#endif /* CONFIG_PRAM */ +#endif /* CFG_PRAM */ /* Round memory pointer down to next 4 kB limit */ static int reserve_round_4k(void) @@ -425,22 +408,18 @@ __weak int arch_reserve_mmu(void) static int reserve_video(void) { -#ifdef CONFIG_DM_VIDEO - ulong addr; - int ret; + if (IS_ENABLED(CONFIG_VIDEO)) { + ulong addr; + int ret; - addr = gd->relocaddr; - ret = video_reserve(&addr); - if (ret) - return ret; - debug("Reserving %luk for video at: %08lx\n", - ((unsigned long)gd->relocaddr - addr) >> 10, addr); - gd->relocaddr = addr; -#elif defined(CONFIG_LCD) - /* reserve memory for LCD display (always full pages) */ - gd->relocaddr = lcd_setmem(gd->relocaddr); - gd->fb_base = gd->relocaddr; -#endif + addr = gd->relocaddr; + ret = video_reserve(&addr); + if (ret) + return ret; + debug("Reserving %luk for video at: %08lx\n", + ((unsigned long)gd->relocaddr - addr) >> 10, addr); + gd->relocaddr = addr; + } return 0; } @@ -496,8 +475,8 @@ static int reserve_noncached(void) { /* * The value of gd->start_addr_sp must match the value of malloc_start - * calculated in boatrd_f.c:initr_malloc(), which is passed to - * board_r.c:mem_malloc_init() and then used by + * calculated in board_r.c:initr_malloc(), which is passed to + * dlmalloc.c:mem_malloc_init() and then used by * cache.c:noncached_init() * * These calculations must match the code in cache.c:noncached_init() @@ -635,10 +614,6 @@ int setup_bdinfo(void) bd->bi_sramsize = CONFIG_SYS_SRAM_SIZE; /* size of SRAM */ } -#ifdef CONFIG_MACH_TYPE - bd->bi_arch_number = CONFIG_MACH_TYPE; /* board id for Linux */ -#endif - return arch_setup_bdinfo(); } @@ -714,7 +689,7 @@ static int reloc_bloblist(void) static int setup_reloc(void) { if (!(gd->flags & GD_FLG_SKIP_RELOC)) { -#ifdef CONFIG_SYS_TEXT_BASE +#ifdef CONFIG_TEXT_BASE #ifdef ARM gd->reloc_off = gd->relocaddr - (unsigned long)__image_copy_start; #elif defined(CONFIG_MICROBLAZE) @@ -724,9 +699,9 @@ static int setup_reloc(void) * On all ColdFire arch cpu, monitor code starts always * just after the default vector table location, so at 0x400 */ - gd->reloc_off = gd->relocaddr - (CONFIG_SYS_TEXT_BASE + 0x400); + gd->reloc_off = gd->relocaddr - (CONFIG_TEXT_BASE + 0x400); #elif !defined(CONFIG_SANDBOX) - gd->reloc_off = gd->relocaddr - CONFIG_SYS_TEXT_BASE; + gd->reloc_off = gd->relocaddr - CONFIG_TEXT_BASE; #endif #endif } @@ -864,7 +839,6 @@ static const init_fnc_t init_sequence_f[] = { initf_malloc, log_init, initf_bootstage, /* uses its own timer, so does not need DM */ - cyclic_init, event_init, #ifdef CONFIG_BLOBLIST bloblist_init, @@ -926,9 +900,9 @@ static const init_fnc_t init_sequence_f[] = { post_init_f, #endif INIT_FUNC_WATCHDOG_RESET -#if defined(CONFIG_SYS_DRAM_TEST) +#if defined(CFG_SYS_DRAM_TEST) testdram, -#endif /* CONFIG_SYS_DRAM_TEST */ +#endif /* CFG_SYS_DRAM_TEST */ INIT_FUNC_WATCHDOG_RESET #ifdef CONFIG_POST @@ -951,7 +925,7 @@ static const init_fnc_t init_sequence_f[] = { #ifdef CONFIG_OF_BOARD_FIXUP fix_fdt, #endif -#ifdef CONFIG_PRAM +#ifdef CFG_PRAM reserve_pram, #endif reserve_round_4k, @@ -982,6 +956,16 @@ static const init_fnc_t init_sequence_f[] = { do_elf_reloc_fixups, #endif clear_bss, + /* + * Deregister all cyclic functions before relocation, so that + * gd->cyclic_list does not contain any references to pre-relocation + * devices. Drivers will register their cyclic functions anew when the + * devices are probed again. + * + * This should happen as late as possible so that the window where a + * watchdog device is not serviced is as small as possible. + */ + cyclic_unregister_all, #if !defined(CONFIG_ARM) && !defined(CONFIG_SANDBOX) && \ !CONFIG_IS_ENABLED(X86_64) jump_to_copy,