int misc_init_r(void) { volatile immap_t *immap = (immap_t *) CONFIG_SYS_IMMR; #ifdef CONFIG_IDE_LED /* Configure PA8 as output port */ setbits_be16(&immap->im_ioport.iop_padir, PA_8); setbits_be16(&immap->im_ioport.iop_paodr, PA_8); clrbits_be16(&immap->im_ioport.iop_papar, PA_8); setbits_be16(&immap->im_ioport.iop_padat, PA_8); /* turn it off */ #endif load_sernum_ethaddr(); setenv("hw","4k"); poweron_key(); return (0); }
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 */ }