int spr_post_test (int flags) { int ret = 0; int ic = icache_status (); int i; unsigned long code[] = { 0x7c6002a6, /* mfspr r3,SPR */ 0x4e800020 /* blr */ }; unsigned long (*get_spr) (void) = (void *) code; if (ic) icache_disable (); for (i = 0; i < spr_test_list_size; i++) { int num = spr_test_list[i].number; /* mfspr r3,num */ code[0] = 0x7c6002a6 | ((num & 0x1F) << 16) | ((num & 0x3E0) << 6); if ((get_spr () & spr_test_list[i].mask) != (spr_test_list[i].value & spr_test_list[i].mask)) { post_log ("The value of %s special register " "is incorrect: 0x%08X\n", spr_test_list[i].name, get_spr ()); ret = -1; } } if (ic) icache_enable (); return ret; }
int do_icache ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) { switch (argc) { case 2: /* on / off */ switch (on_off(argv[1])) { #if 0 /* prevented by varargs handling; FALLTROUGH is harmless, too */ default: printf ("Usage:\n%s\n", cmdtp->usage); return; #endif case 0: icache_disable(); break; case 1: icache_enable (); break; } /* FALL TROUGH */ case 1: /* get status */ printf ("Instruction Cache is %s\n", icache_status() ? "ON" : "OFF"); return 0; default: printf ("Usage:\n%s\n", cmdtp->usage); return 1; } return 0; }
void kgdb_flush_cache_all(void) { if (dcache_status()) { dcache_disable(); dcache_enable(); } if (icache_status()) { icache_disable(); icache_enable(); } }
void flush_cache(unsigned long addr, unsigned long size) { /* no need to flush stuff in on chip memory (L1/L2/etc...) */ if (addr >= 0xE0000000) return; if (icache_status()) blackfin_icache_flush_range((void *)addr, (void *)(addr + size)); if (dcache_status()) blackfin_dcache_flush_range((void *)addr, (void *)(addr + size)); }
static int do_icache(struct command *cmdtp, int argc, char *argv[]) { if (argc == 1) { printf("icache is %sabled\n", icache_status() ? "en" : "dis"); return 0; } if (simple_strtoul(argv[1], NULL, 0) > 0) icache_enable(); else icache_disable(); return 0; }
void flush_cache(unsigned long dummy1, unsigned long dummy2) { if ((dummy1 >= L1_ISRAM) && (dummy1 < L1_ISRAM_END)) return; if ((dummy1 >= DATA_BANKA_SRAM) && (dummy1 < DATA_BANKA_SRAM_END)) return; if ((dummy1 >= DATA_BANKB_SRAM) && (dummy1 < DATA_BANKB_SRAM_END)) return; if (icache_status()) blackfin_icache_flush_range((void*)dummy1, (void*)(dummy1 + dummy2)); if (dcache_status()) blackfin_dcache_flush_range((void*)dummy1, (void*)(dummy1 + dummy2)); return; }
int last_stage_init(void) { int ic = icache_status (); printf ("icache_status: %d\n", ic); return 0; }
int do_icache_dump(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) { int cache_status = icache_status(); if (cache_status) icache_disable(); uint32_t cmd_base, tag, cache_upper, cache_lower; size_t way, way_start = 0, way_end = 3; size_t sbnk, sbnk_start = 0, sbnk_end = 3; size_t set, set_start = 0, set_end = 31; size_t dw; if (argc > 1) { way_start = way_end = simple_strtoul(argv[1], NULL, 10); if (argc > 2) { sbnk_start = sbnk_end = simple_strtoul(argv[2], NULL, 10); if (argc > 3) set_start = set_end = simple_strtoul(argv[3], NULL, 10); } } if (check_limit("way", 0, 3, way_start, way_end) || \ check_limit("subbank", 0, 3, sbnk_start, sbnk_end) || \ check_limit("set", 0, 31, set_start, set_end)) return 1; puts("Way:Subbank:Set: [valid-tag lower upper] {invalid-tag lower upper}...\n"); for (way = way_start; way <= way_end; ++way) { for (sbnk = sbnk_start; sbnk <= sbnk_end; ++sbnk) { for (set = set_start; set <= set_end; ++set) { printf("%zu:%zu:%2zu: ", way, sbnk, set); for (dw = 0; dw < 4; ++dw) { if (ctrlc()) return 1; cmd_base = \ (way << 26) | \ (sbnk << 16) | \ (set << 5) | \ (dw << 3); /* first read the tag */ bfin_write_ITEST_COMMAND(cmd_base | 0x0); SSYNC(); tag = bfin_read_ITEST_DATA0(); printf("%c%08x ", (tag & 0x1 ? ' ' : '{'), tag); /* grab the data at this loc */ bfin_write_ITEST_COMMAND(cmd_base | 0x4); SSYNC(); cache_lower = bfin_read_ITEST_DATA0(); cache_upper = bfin_read_ITEST_DATA1(); printf("%08x %08x%c ", cache_lower, cache_upper, (tag & 0x1 ? ' ' : '}')); } puts("\n"); } } } if (cache_status) icache_enable(); return 0; }
void board_init (void) { bd_t *bd; init_fnc_t **init_fnc_ptr; gd = (gd_t *) (CONFIG_SYS_SDRAM_BASE + CONFIG_SYS_GBL_DATA_OFFSET); bd = (bd_t *) (CONFIG_SYS_SDRAM_BASE + CONFIG_SYS_GBL_DATA_OFFSET \ - GENERATED_BD_INFO_SIZE); char *s; #if defined(CONFIG_CMD_FLASH) ulong flash_size = 0; #endif asm ("nop"); /* FIXME gd is not initialize - wait */ memset ((void *)gd, 0, GENERATED_GBL_DATA_SIZE); memset ((void *)bd, 0, GENERATED_BD_INFO_SIZE); gd->bd = bd; gd->baudrate = CONFIG_BAUDRATE; bd->bi_baudrate = CONFIG_BAUDRATE; bd->bi_memstart = CONFIG_SYS_SDRAM_BASE; bd->bi_memsize = CONFIG_SYS_SDRAM_SIZE; gd->flags |= GD_FLG_RELOC; /* tell others: relocation done */ /* * The Malloc area is immediately below the monitor copy in DRAM * aka CONFIG_SYS_MONITOR_BASE - Note there is no need for reloc_off * as our monitory code is run from SDRAM */ mem_malloc_init (CONFIG_SYS_MALLOC_BASE, CONFIG_SYS_MALLOC_LEN); for (init_fnc_ptr = init_sequence; *init_fnc_ptr; ++init_fnc_ptr) { WATCHDOG_RESET (); if ((*init_fnc_ptr) () != 0) { hang (); } } puts ("SDRAM :\n"); printf ("\t\tIcache:%s\n", icache_status() ? "ON" : "OFF"); printf ("\t\tDcache:%s\n", dcache_status() ? "ON" : "OFF"); printf ("\tU-Boot Start:0x%08x\n", CONFIG_SYS_TEXT_BASE); #if defined(CONFIG_CMD_FLASH) puts ("FLASH: "); bd->bi_flashstart = CONFIG_SYS_FLASH_BASE; if (0 < (flash_size = flash_init ())) { bd->bi_flashsize = flash_size; bd->bi_flashoffset = CONFIG_SYS_FLASH_BASE + flash_size; # ifdef CONFIG_SYS_FLASH_CHECKSUM print_size (flash_size, ""); /* * Compute and print flash CRC if flashchecksum is set to 'y' * * NOTE: Maybe we should add some WATCHDOG_RESET()? XXX */ s = getenv ("flashchecksum"); if (s && (*s == 'y')) { printf (" CRC: %08X", crc32 (0, (const unsigned char *) CONFIG_SYS_FLASH_BASE, flash_size) ); } putc ('\n'); # else /* !CONFIG_SYS_FLASH_CHECKSUM */ print_size (flash_size, "\n"); # endif /* CONFIG_SYS_FLASH_CHECKSUM */ } else { puts ("Flash init FAILED"); bd->bi_flashstart = 0; bd->bi_flashsize = 0; bd->bi_flashoffset = 0; } #endif /* relocate environment function pointers etc. */ env_relocate (); /* Initialize stdio devices */ stdio_init (); if ((s = getenv ("loadaddr")) != NULL) { load_addr = simple_strtoul (s, NULL, 16); } #if defined(CONFIG_CMD_NET) /* IP Address */ bd->bi_ip_addr = getenv_IPaddr("ipaddr"); printf("Net: "); eth_initialize(gd->bd); uchar enetaddr[6]; eth_getenv_enetaddr("ethaddr", enetaddr); printf("MAC: %pM\n", enetaddr); #endif /* main_loop */ for (;;) { WATCHDOG_RESET (); main_loop (); } }
int flash_erase (flash_info_t *info, int s_first, int s_last) { int iflag, cflag, prot, sect; int rc = ERR_OK; /* first look for protection bits */ if (info->flash_id == FLASH_UNKNOWN) return ERR_UNKNOWN_FLASH_TYPE; if ((s_first < 0) || (s_first > s_last)) return ERR_INVAL; if ((info->flash_id & FLASH_VENDMASK) != (FLASH_MAN_MT & FLASH_VENDMASK)) return ERR_UNKNOWN_FLASH_VENDOR; prot = 0; for (sect = s_first; sect <= s_last; ++sect) { if (info->protect[sect]) prot++; } if (prot) { printf("protected!\n"); return ERR_PROTECTED; } /* * Disable interrupts which might cause a timeout * here. Remember that our exception vectors are * at address 0 in the flash, and we don't want a * (ticker) exception to happen while the flash * chip is in programming mode. */ cflag = icache_status(); icache_disable(); iflag = disable_interrupts(); /* Start erase on unprotected sectors */ for (sect = s_first; sect <= s_last && !ctrlc(); sect++) { printf("Erasing sector %2d ... ", sect); /* arm simple, non interrupt dependent timer */ reset_timer_masked(); SF_NvmodeErase(); SF_NvmodeWrite(); SF_Erase(CFG_FLASH_BASE + (0x0100000 * sect)); SF_Normal(); printf("ok.\n"); } if (ctrlc()) printf("User Interrupt!\n"); if (iflag) enable_interrupts(); if (cflag) icache_enable(); return rc; }
int cpu_post_test (int flags) { int ic = icache_status (); int ret = 0; WATCHDOG_RESET(); if (ic) icache_disable (); if (ret == 0) ret = cpu_post_test_cmp (); if (ret == 0) ret = cpu_post_test_cmpi (); if (ret == 0) ret = cpu_post_test_two (); if (ret == 0) ret = cpu_post_test_twox (); WATCHDOG_RESET(); if (ret == 0) ret = cpu_post_test_three (); if (ret == 0) ret = cpu_post_test_threex (); if (ret == 0) ret = cpu_post_test_threei (); if (ret == 0) ret = cpu_post_test_andi (); WATCHDOG_RESET(); if (ret == 0) ret = cpu_post_test_srawi (); if (ret == 0) ret = cpu_post_test_rlwnm (); if (ret == 0) ret = cpu_post_test_rlwinm (); if (ret == 0) ret = cpu_post_test_rlwimi (); WATCHDOG_RESET(); if (ret == 0) ret = cpu_post_test_store (); if (ret == 0) ret = cpu_post_test_load (); if (ret == 0) ret = cpu_post_test_cr (); if (ret == 0) ret = cpu_post_test_b (); WATCHDOG_RESET(); if (ret == 0) ret = cpu_post_test_multi (); WATCHDOG_RESET(); if (ret == 0) ret = cpu_post_test_string (); if (ret == 0) ret = cpu_post_test_complex (); WATCHDOG_RESET(); if (ic) icache_enable (); WATCHDOG_RESET(); return ret; }
int cpu_post_test (int flags) { int ic = icache_status (); int ret = 0; WATCHDOG_RESET(); if (ic) icache_disable (); #ifdef CONFIG_4xx_DCACHE /* disable cache */ change_tlb(gd->bd->bi_memstart, gd->bd->bi_memsize, TLB_WORD2_I_ENABLE); #endif if (ret == 0) ret = cpu_post_test_cmp (); if (ret == 0) ret = cpu_post_test_cmpi (); if (ret == 0) ret = cpu_post_test_two (); if (ret == 0) ret = cpu_post_test_twox (); WATCHDOG_RESET(); if (ret == 0) ret = cpu_post_test_three (); if (ret == 0) ret = cpu_post_test_threex (); if (ret == 0) ret = cpu_post_test_threei (); if (ret == 0) ret = cpu_post_test_andi (); WATCHDOG_RESET(); if (ret == 0) ret = cpu_post_test_srawi (); if (ret == 0) ret = cpu_post_test_rlwnm (); if (ret == 0) ret = cpu_post_test_rlwinm (); if (ret == 0) ret = cpu_post_test_rlwimi (); WATCHDOG_RESET(); if (ret == 0) ret = cpu_post_test_store (); if (ret == 0) ret = cpu_post_test_load (); if (ret == 0) ret = cpu_post_test_cr (); if (ret == 0) ret = cpu_post_test_b (); WATCHDOG_RESET(); if (ret == 0) ret = cpu_post_test_multi (); WATCHDOG_RESET(); if (ret == 0) ret = cpu_post_test_string (); if (ret == 0) ret = cpu_post_test_complex (); WATCHDOG_RESET(); if (ic) icache_enable (); #ifdef CONFIG_4xx_DCACHE /* enable cache */ change_tlb(gd->bd->bi_memstart, gd->bd->bi_memsize, 0); #endif WATCHDOG_RESET(); return ret; }
void board_init_f(ulong not_used) { bd_t *bd; init_fnc_t **init_fnc_ptr; gd = (gd_t *)(CONFIG_SYS_SDRAM_BASE + CONFIG_SYS_GBL_DATA_OFFSET); bd = (bd_t *)(CONFIG_SYS_SDRAM_BASE + CONFIG_SYS_GBL_DATA_OFFSET - GENERATED_BD_INFO_SIZE); #if defined(CONFIG_CMD_FLASH) && !defined(CONFIG_SPL_BUILD) ulong flash_size = 0; #endif asm ("nop"); /* FIXME gd is not initialize - wait */ memset((void *)gd, 0, GENERATED_GBL_DATA_SIZE); memset((void *)bd, 0, GENERATED_BD_INFO_SIZE); gd->bd = bd; gd->baudrate = CONFIG_BAUDRATE; bd->bi_memstart = CONFIG_SYS_SDRAM_BASE; bd->bi_memsize = CONFIG_SYS_SDRAM_SIZE; gd->flags |= GD_FLG_RELOC; /* tell others: relocation done */ monitor_flash_len = __end - __text_start; #ifdef CONFIG_OF_EMBED /* Get a pointer to the FDT */ gd->fdt_blob = __dtb_dt_begin; #elif defined CONFIG_OF_SEPARATE /* FDT is at end of image */ gd->fdt_blob = (void *)__end; #endif #ifndef CONFIG_SPL_BUILD /* Allow the early environment to override the fdt address */ gd->fdt_blob = (void *)getenv_ulong("fdtcontroladdr", 16, (uintptr_t)gd->fdt_blob); #endif /* * The Malloc area is immediately below the monitor copy in DRAM * aka CONFIG_SYS_MONITOR_BASE - Note there is no need for reloc_off * as our monitory code is run from SDRAM */ mem_malloc_init(CONFIG_SYS_MALLOC_BASE, CONFIG_SYS_MALLOC_LEN); serial_initialize(); #ifdef CONFIG_XILINX_TB_WATCHDOG hw_watchdog_init(); #endif for (init_fnc_ptr = init_sequence; *init_fnc_ptr; ++init_fnc_ptr) { WATCHDOG_RESET(); if ((*init_fnc_ptr) () != 0) hang(); } #ifndef CONFIG_SPL_BUILD #ifdef CONFIG_OF_CONTROL /* For now, put this check after the console is ready */ if (fdtdec_prepare_fdt()) panic("** No FDT - please see doc/README.fdt-control"); else printf("DTB: 0x%x\n", (u32)gd->fdt_blob); #endif puts("SDRAM :\n"); printf("\t\tIcache:%s\n", icache_status() ? "ON" : "OFF"); printf("\t\tDcache:%s\n", dcache_status() ? "ON" : "OFF"); printf("\tU-Boot Start:0x%08x\n", CONFIG_SYS_TEXT_BASE); #if defined(CONFIG_CMD_FLASH) puts("Flash: "); bd->bi_flashstart = CONFIG_SYS_FLASH_BASE; flash_size = flash_init(); if (bd->bi_flashstart && flash_size > 0) { # ifdef CONFIG_SYS_FLASH_CHECKSUM print_size(flash_size, ""); /* * Compute and print flash CRC if flashchecksum is set to 'y' * * NOTE: Maybe we should add some WATCHDOG_RESET()? XXX */ if (getenv_yesno("flashchecksum") == 1) { printf(" CRC: %08X", crc32(0, (const u8 *)bd->bi_flashstart, flash_size) ); } putc('\n'); # else /* !CONFIG_SYS_FLASH_CHECKSUM */ print_size(flash_size, "\n"); # endif /* CONFIG_SYS_FLASH_CHECKSUM */ bd->bi_flashsize = flash_size; bd->bi_flashoffset = bd->bi_flashstart + flash_size; } else { puts("Flash init FAILED"); bd->bi_flashstart = 0; bd->bi_flashsize = 0; bd->bi_flashoffset = 0; } #endif #ifdef CONFIG_SPI spi_init(); #endif /* relocate environment function pointers etc. */ env_relocate(); /* Initialize stdio devices */ stdio_init(); /* Initialize the jump table for applications */ jumptable_init(); /* Initialize the console (after the relocation and devices init) */ console_init_r(); board_init(); /* Initialize from environment */ load_addr = getenv_ulong("loadaddr", 16, load_addr); #if defined(CONFIG_CMD_NET) printf("Net: "); eth_initialize(gd->bd); uchar enetaddr[6]; eth_getenv_enetaddr("ethaddr", enetaddr); printf("MAC: %pM\n", enetaddr); #endif /* main_loop */ for (;;) { WATCHDOG_RESET(); main_loop(); } #endif /* CONFIG_SPL_BUILD */ }
void start_arcboot(void) { DECLARE_GLOBAL_DATA_PTR; static gd_t gd_data; static bd_t bd_data; init_fnc_t **init_fnc_ptr; extern void *__text_end; unsigned stage = sizeof(init_sequence)/sizeof(init_sequence[0]); show_boot_progress(stage--); /* Init Global Data */ gd = global_data = &gd_data; gd->bd = &bd_data; gd->cpu_clk=get_cpu_clk(); gd->bd->bi_boot_params=BOOT_PARAMS_OFFSET; gd->bd->bi_memstart=PHYS_MEMORY_START; gd->bd->bi_memsize=PHYS_MEMORY_SIZE; gd->bd->bi_flashstart=CONFIG_SYS_FLASH_BASE; gd->bd->bi_flashoffset=0; /* frame buffer will sit after end of program */ gd->fb_base = TEXT_BASE; for (init_fnc_ptr = init_sequence;*init_fnc_ptr;++init_fnc_ptr) { show_boot_progress(stage--); if ((*init_fnc_ptr)() != 0) { printf("stage:%d",stage); hang(); } } /* Setup malloc area */ mem_malloc_init((ulong)&_start - CONFIG_SYS_MALLOC_LEN, CONFIG_SYS_MALLOC_LEN); // __builtin_arc_sleep(0); #ifdef CONFIG_CMD_NAND puts ("NAND: "); nand_init(); #endif env_relocate(); stdio_init (); /* get the devices list going. */ jumptable_init(); console_init_r(); #ifdef CONFIG_MMC mmc_initialize(&bd_data); #endif #ifdef CONFIG_CMD_NET puts ("Net: "); gd->bd->bi_ip_addr = getenv_IPaddr ("ipaddr"); // eth_io_init(); eth_initialize(gd->bd); #if defined(CONFIG_RESET_PHY_R) debug ("Reset Ethernet PHY\n"); reset_phy(); #endif #endif #if defined(CONFIG_ARCH_MISC_INIT) /* miscellaneous arch dependent initialisations */ arch_misc_init (); #endif #if defined(CONFIG_MISC_INIT_R) /* miscellaneous platform dependent initialisations */ misc_init_r (); #endif #if defined(CONFIG_CMD_KGDB) puts("KGDB: "); kgdb_init(); #endif /* enable exceptions */ enable_interrupts (); icache_enable(); dcache_enable(); printf("Dcache status %d\n",dcache_status()); printf("Icache status %d\n",icache_status()); #ifdef CONFIG_A3_DISPLAY osd_display(); #endif #ifdef CONFIG_A3_I2C disable_i2c_pinmux();//disable hard i2c pinmux #endif // kgdb_test(); // init_osd_dev() ; for(;;){ main_loop(); } }
void start_armboot (void) { init_fnc_t **init_fnc_ptr; char *s; #if defined(CONFIG_VFD) || defined(CONFIG_LCD) unsigned long addr; #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)); gd->flags |= GD_FLG_RELOC; monitor_flash_len = _bss_start - _armboot_start; 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); #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); vfd_setmem (addr); gd->fb_base = addr; #endif /* CONFIG_VFD */ #ifdef CONFIG_LCD /* board init may have inited fb_base */ if (!gd->fb_base) { # 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); lcd_setmem (addr); gd->fb_base = addr; } #endif /* CONFIG_LCD */ #if defined(CONFIG_CMD_NAND) puts ("NAND: "); nand_init(); /* go init the NAND */ #endif #if defined(CONFIG_CMD_ONENAND) onenand_init(); #endif #ifdef CONFIG_HAS_DATAFLASH AT91F_DataflashInit(); dataflash_print_info(); #endif #ifdef CONFIG_GENERIC_MMC puts ("MMC: "); mmc_initialize (gd->bd); #endif /* initialize environment */ env_relocate (); #ifdef CONFIG_VFD /* must do this after the framebuffer is allocated */ drv_vfd_init(); #endif /* CONFIG_VFD */ #ifdef CONFIG_SERIAL_MULTI serial_initialize(); #endif /* IP Address */ gd->bd->bi_ip_addr = getenv_IPaddr ("ipaddr"); stdio_init (); /* get the devices list going. */ jumptable_init (); #if defined(CONFIG_API) /* Initialize API */ api_init (); #endif console_init_r (); /* fully init console as a device */ #if defined(CONFIG_ARCH_MISC_INIT) /* miscellaneous arch dependent initialisations */ arch_misc_init (); #endif #if defined(CONFIG_MISC_INIT_R) /* miscellaneous platform dependent initialisations */ misc_init_r (); #endif #if defined(CONFIG_CMD_KGDB) puts("KGDB: "); kgdb_init(); #endif /* enable exceptions */ enable_interrupts (); /* Perform network card initialisation if necessary */ #ifdef CONFIG_DRIVER_TI_EMAC /* XXX: this needs to be moved to board init */ extern void davinci_eth_set_mac_addr (const u_int8_t *addr); if (getenv ("ethaddr")) { uchar enetaddr[6]; eth_getenv_enetaddr("ethaddr", enetaddr); davinci_eth_set_mac_addr(enetaddr); } #endif #if defined(CONFIG_DRIVER_SMC91111) || defined (CONFIG_DRIVER_LAN91C96) /* XXX: this needs to be moved to board init */ if (getenv ("ethaddr")) { uchar enetaddr[6]; eth_getenv_enetaddr("ethaddr", enetaddr); smc_set_mac_addr(enetaddr); } #endif /* CONFIG_DRIVER_SMC91111 || CONFIG_DRIVER_LAN91C96 */ /* Initialize from environment */ if ((s = getenv ("loadaddr")) != NULL) { load_addr = simple_strtoul (s, NULL, 16); } #if defined(CONFIG_CMD_NET) if ((s = getenv ("bootfile")) != NULL) { copy_filename (BootFile, s, sizeof (BootFile)); } #endif #ifdef BOARD_LATE_INIT board_late_init (); #endif #ifdef CONFIG_BITBANGMII bb_miiphy_init(); #endif #if defined(CONFIG_CMD_NET) #if defined(CONFIG_NET_MULTI) puts ("Net: "); #endif eth_initialize(gd->bd); #if defined(CONFIG_RESET_PHY_R) debug ("Reset Ethernet PHY\n"); reset_phy(); #endif #endif #ifdef CONFIG_LCD_AML lcd_init(); #endif printf("Dcache status %d\n",dcache_status()); printf("Icache status %d\n",icache_status()); /* 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 */ }