/******************************************************* * Routine: misc_init_r * Description: Init ethernet (done here so udelay works) ********************************************************/ int misc_init_r (void) { int ret = 0; #ifdef CFG_UBOOT_PROFILING unsigned int time_load_logo; unsigned int time_boot_mode; unsigned int time_part_init; #endif #ifdef CFG_UBOOT_PROFILING time_part_init = get_timer(0); #endif mt6575_part_init(BLK_NUM(16 * GB)); // mt6575_part_dump(); #ifdef CFG_UBOOT_PROFILING printf("[PROFILE] ------- part_init takes %d ms -------- \n", get_timer(time_part_init)); #endif //***************** //* check mode (1) factory mode (2) meta mode ... #ifdef CFG_UBOOT_PROFILING time_boot_mode = get_timer(0); #endif boot_mode_select(); #ifdef CFG_UBOOT_PROFILING printf("[PROFILE] ------- boot mode select takes %d ms -------- \n", get_timer(time_boot_mode)); #endif #if 1 //Remove tmp for 6575 porting #ifdef CONFIG_MMC mmc_legacy_init(1); mt6575_part_dump(); #endif #ifdef CFG_UBOOT_PROFILING time_load_logo = get_timer(0); #endif ret = mboot_common_load_logo((unsigned long)mt65xx_get_logo_db_addr(), CFG_LOGO_NAME); printf("Show BLACK_PICTURE\n"); mt65xx_disp_fill_rect(0, 0, CFG_DISPLAY_WIDTH, CFG_DISPLAY_HEIGHT, 0x0); mt65xx_disp_power(TRUE); mt65xx_disp_update(0, 0, CFG_DISPLAY_WIDTH, CFG_DISPLAY_HEIGHT); #ifdef CFG_UBOOT_PROFILING printf("[PROFILE] ------- load_logo takes %d ms -------- \n", get_timer(time_load_logo)); #endif if (ret <= 0) { printf("[ERROR] load logo partition failed, ret: %d\n", ret); } return 0; #endif//Remove tmp for 6575 porting }
void start_armboot (void) { init_fnc_t **init_fnc_ptr; char *s; ulong size; #if defined(CONFIG_VFD) || defined(CONFIG_LCD) unsigned long addr; #endif #ifdef CFG_UBOOT_PROFILING unsigned int time_start_armboot = get_timer(0); unsigned int time_init_sequence; unsigned int time_misc_init; unsigned int time_env; unsigned int time_nand; unsigned int time_bat; unsigned int time_show_logo; unsigned int time_backlight; unsigned int time_sw_env; #endif #ifdef CFG_UBOOT_PROFILING boot_time = get_timer(0); #endif /* Pointer is writable since we allocated a register for it */ gd = (gd_t*)(_armboot_start - CONFIG_SYS_MALLOC_LEN - sizeof(gd_t)); /* compiler optimization barrier needed for GCC >= 3.4 */ __asm__ __volatile__("": : :"memory"); memset ((void*)gd, 0, sizeof (gd_t)); gd->bd = (bd_t*)((char*)gd - sizeof(bd_t)); memset (gd->bd, 0, sizeof (bd_t)); monitor_flash_len = _bss_start - _armboot_start; #ifdef CFG_UBOOT_PROFILING time_init_sequence = get_timer(0); #endif for (init_fnc_ptr = init_sequence; *init_fnc_ptr; ++init_fnc_ptr) { if ((*init_fnc_ptr)() != 0) { hang (); } } /* armboot_start is defined in the board-specific linker script */ mem_malloc_init (_armboot_start - CONFIG_SYS_MALLOC_LEN, CONFIG_SYS_MALLOC_LEN); #ifdef CFG_UBOOT_PROFILING printf("[PROFILE] ------- init_sequence takes %d ms -------- \n", get_timer(time_init_sequence)); #endif #ifndef CONFIG_SYS_NO_FLASH /* configure available FLASH banks */ display_flash_config (flash_init ()); #endif /* CONFIG_SYS_NO_FLASH */ #ifdef CONFIG_VFD #ifndef PAGE_SIZE #define PAGE_SIZE 4096 #endif /* * reserve memory for VFD display (always full pages) */ /* bss_end is defined in the board-specific linker script */ addr = (_bss_end + (PAGE_SIZE - 1)) & ~(PAGE_SIZE - 1); size = vfd_setmem (addr); gd->fb_base = addr; #endif /* CONFIG_VFD */ #ifdef CONFIG_LCD #ifndef PAGE_SIZE #define PAGE_SIZE 4096 #endif /* * reserve memory for LCD display (always full pages) */ /* bss_end is defined in the board-specific linker script */ addr = (_bss_end + (PAGE_SIZE - 1)) & ~(PAGE_SIZE - 1); size = lcd_setmem (addr); gd->fb_base = addr; #endif /* CONFIG_LCD */ #ifdef CONFIG_HAS_DATAFLASH AT91F_DataflashInit(); dataflash_print_info(); #endif #ifdef CFG_UBOOT_PROFILING time_env = get_timer(0); #endif /* initialize environment */ env_relocate (); #ifdef CFG_UBOOT_PROFILING printf("[PROFILE] ------- env relocate takes %d ms -------- \n", get_timer(time_env)); #endif #ifdef CONFIG_VFD /* must do this after the framebuffer is allocated */ drv_vfd_init(); #endif /* CONFIG_VFD */ /* IP Address */ //gd->bd->bi_ip_addr = getenv_IPaddr ("ipaddr"); stdio_init (); /* get the devices list going. */ #ifdef CONFIG_CMC_PU2 load_sernum_ethaddr (); #endif /* CONFIG_CMC_PU2 */ jumptable_init (); //console_init_r (); /* fully init console as a device */ //marked by hong-rong #if defined(CONFIG_CMD_NAND) #ifdef CFG_UBOOT_PROFILING time_nand= get_timer(0); #endif puts ("NAND: "); nand_init(); /* go init the NAND */ #ifdef CFG_UBOOT_PROFILING printf("[PROFILE] ------- nand init takes %d ms -------- \n", get_timer(time_nand)); #endif #endif #if defined(CONFIG_ARCH_MISC_INIT) /* miscellaneous arch dependent initialisations */ arch_misc_init (); #endif #ifdef CFG_UBOOT_PROFILING time_misc_init= get_timer(0); #endif #if defined(CONFIG_MISC_INIT_R) /* miscellaneous platform dependent initialisations */ misc_init_r (); #endif #ifdef CFG_UBOOT_PROFILING printf("[PROFILE] ------- misc_init takes %d ms -------- \n", get_timer(time_misc_init)); #endif #ifdef CONFIG_GENERIC_MMC puts ("MMC: "); mmc_initialize (gd->bd); #endif #ifdef CFG_POWER_CHARGING #ifdef CFG_UBOOT_PROFILING time_bat= get_timer(0); #endif #if defined(MT6516) mt6516_bat_init(); #else mt65xx_bat_init(); #endif #ifdef CFG_UBOOT_PROFILING printf("[PROFILE] ------- battery init takes %d ms -------- \n", get_timer(time_bat)); #endif #else /* NOTE: if define CFG_POWER_CHARGING, will rtc_boot_check() in mt65xx_bat_init() */ rtc_boot_check(false); #endif #ifdef CFG_UBOOT_PROFILING time_show_logo= get_timer(0); #endif // Some driver refresh RAM data to LCM after sleeping out. // LCM must sleep out before backlight on. Or Users may see the mess data in LCM in a instance. mt65xx_disp_power(1); if(g_boot_mode != ALARM_BOOT) { mt65xx_disp_show_boot_logo(); } #ifdef CFG_UBOOT_PROFILING printf("[PROFILE] ------- show logo takes %d ms -------- \n", get_timer(time_show_logo)); #endif #ifdef CFG_UBOOT_PROFILING time_show_logo= get_timer(0); #endif #ifdef CFG_UBOOT_PROFILING time_backlight= get_timer(0); #endif mt65xx_backlight_on(); #ifdef CFG_UBOOT_PROFILING printf("[PROFILE] ------- backlight takes %d ms -------- \n", get_timer(time_backlight)); #endif #ifdef CFG_UBOOT_PROFILING time_sw_env= get_timer(0); #endif //***************** //* prepare mt65xx sw enviroment #if defined(MT6516) mt6516_sw_env(); #else mt65xx_sw_env(); #endif #ifdef CFG_UBOOT_PROFILING printf("[PROFILE] ------- sw_env takes %d ms -------- \n", get_timer(time_sw_env)); #endif #ifdef CFG_UBOOT_PROFILING printf("[PROFILE] ------- start_armboot takes %d ms -------- \n", get_timer(time_start_armboot)); #endif /* main_loop() can return to retry autoboot, if so just run it again */ for (;;) { main_loop (); } /* NOTREACHED - no way out of command loop except booting */ }