X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=lib_avr32%2Fboard.c;h=917ed6ce75ef8f7eccd29605dfece339778a1c36;hb=27f13075a659da046372dfe249d808f2f6ddb432;hp=265328aa487696a11862aa12ae6e491fd60e64cb;hpb=3c4bd60de15d79ddfc0cf3170a55847b2025d93f;p=u-boot diff --git a/lib_avr32/board.c b/lib_avr32/board.c index 265328aa48..917ed6ce75 100644 --- a/lib_avr32/board.c +++ b/lib_avr32/board.c @@ -22,10 +22,15 @@ #include #include #include -#include +#include +#include #include #include +#ifdef CONFIG_BITBANGMII +#include +#endif + #include #include @@ -36,48 +41,20 @@ DECLARE_GLOBAL_DATA_PTR; const char version_string[] = - U_BOOT_VERSION " (" __DATE__ " - " __TIME__ ") " CONFIG_IDENT_STRING; + U_BOOT_VERSION " ("U_BOOT_DATE" - "U_BOOT_TIME") " CONFIG_IDENT_STRING; unsigned long monitor_flash_len; -/* - * Begin and end of memory area for malloc(), and current "brk" - */ -static unsigned long mem_malloc_start = 0; -static unsigned long mem_malloc_end = 0; -static unsigned long mem_malloc_brk = 0; - -/* The malloc area is right below the monitor image in RAM */ -static void mem_malloc_init(void) -{ - unsigned long monitor_addr; - - monitor_addr = CFG_MONITOR_BASE + gd->reloc_off; - mem_malloc_end = monitor_addr; - mem_malloc_start = mem_malloc_end - CFG_MALLOC_LEN; - mem_malloc_brk = mem_malloc_start; - - printf("malloc: Using memory from 0x%08lx to 0x%08lx\n", - mem_malloc_start, mem_malloc_end); - - memset ((void *)mem_malloc_start, 0, - mem_malloc_end - mem_malloc_start); -} - -void *sbrk(ptrdiff_t increment) +/* Weak aliases for optional board functions */ +static int __do_nothing(void) { - unsigned long old = mem_malloc_brk; - unsigned long new = old + increment; - - if ((new < mem_malloc_start) || (new > mem_malloc_end)) - return NULL; - - mem_malloc_brk = new; - return ((void *)old); + return 0; } +int board_postclk_init(void) __attribute__((weak, alias("__do_nothing"))); +int board_early_init_r(void) __attribute__((weak, alias("__do_nothing"))); -#ifdef CFG_DMA_ALLOC_LEN -#include +#ifdef CONFIG_SYS_DMA_ALLOC_LEN +#include #include static unsigned long dma_alloc_start; @@ -88,9 +65,9 @@ static void dma_alloc_init(void) { unsigned long monitor_addr; - monitor_addr = CFG_MONITOR_BASE + gd->reloc_off; - dma_alloc_end = monitor_addr - CFG_MALLOC_LEN; - dma_alloc_start = dma_alloc_end - CFG_DMA_ALLOC_LEN; + monitor_addr = CONFIG_SYS_MONITOR_BASE + gd->reloc_off; + dma_alloc_end = monitor_addr - CONFIG_SYS_MALLOC_LEN; + dma_alloc_start = dma_alloc_end - CONFIG_SYS_DMA_ALLOC_LEN; dma_alloc_brk = dma_alloc_start; printf("DMA: Using memory from 0x%08lx to 0x%08lx\n", @@ -107,8 +84,8 @@ void *dma_alloc_coherent(size_t len, unsigned long *handle) if (dma_alloc_brk + len > dma_alloc_end) return NULL; - dma_alloc_brk = ((paddr + len + CFG_DCACHE_LINESZ - 1) - & ~(CFG_DCACHE_LINESZ - 1)); + dma_alloc_brk = ((paddr + len + CONFIG_SYS_DCACHE_LINESZ - 1) + & ~(CONFIG_SYS_DCACHE_LINESZ - 1)); *handle = paddr; return uncached(paddr); @@ -187,6 +164,7 @@ void board_init_f(ulong board_type) /* Perform initialization sequence */ board_early_init_f(); cpu_init(); + board_postclk_init(); env_init(); init_baudrate(); serial_init(); @@ -209,7 +187,7 @@ void board_init_f(ulong board_type) * - global data struct * - stack */ - addr = CFG_SDRAM_BASE + sdram_size; + addr = CONFIG_SYS_SDRAM_BASE + sdram_size; monitor_len = _end - _text; /* @@ -221,14 +199,26 @@ void board_init_f(ulong board_type) monitor_addr = addr; /* Reserve memory for malloc() */ - addr -= CFG_MALLOC_LEN; + addr -= CONFIG_SYS_MALLOC_LEN; -#ifdef CFG_DMA_ALLOC_LEN +#ifdef CONFIG_SYS_DMA_ALLOC_LEN /* Reserve DMA memory (must be cache aligned) */ - addr &= ~(CFG_DCACHE_LINESZ - 1); - addr -= CFG_DMA_ALLOC_LEN; + addr &= ~(CONFIG_SYS_DCACHE_LINESZ - 1); + addr -= CONFIG_SYS_DMA_ALLOC_LEN; #endif +#ifdef CONFIG_LCD +#ifdef CONFIG_FB_ADDR + printf("LCD: Frame buffer allocated at preset 0x%08x\n", + CONFIG_FB_ADDR); + gd->fb_base = (void *)CONFIG_FB_ADDR; +#else + addr = lcd_setmem(addr); + printf("LCD: Frame buffer allocated at 0x%08lx\n", addr); + gd->fb_base = (void *)addr; +#endif /* CONFIG_FB_ADDR */ +#endif /* CONFIG_LCD */ + /* Allocate a Board Info struct on a word boundary */ addr -= sizeof(bd_t); addr &= ~3UL; @@ -249,7 +239,7 @@ void board_init_f(ulong board_type) * Initialize the board information struct with the * information we have. */ - bd->bi_dram[0].start = CFG_SDRAM_BASE; + bd->bi_dram[0].start = CONFIG_SYS_SDRAM_BASE; bd->bi_dram[0].size = sdram_size; bd->bi_baudrate = gd->baudrate; @@ -261,9 +251,10 @@ void board_init_f(ulong board_type) void board_init_r(gd_t *new_gd, ulong dest_addr) { extern void malloc_bin_reloc (void); -#ifndef CFG_ENV_IS_NOWHERE +#ifndef CONFIG_ENV_IS_NOWHERE extern char * env_name_spec; #endif + char *s; cmd_tbl_t *cmdtp; bd_t *bd; @@ -271,7 +262,9 @@ void board_init_r(gd_t *new_gd, ulong dest_addr) bd = gd->bd; gd->flags |= GD_FLG_RELOC; - gd->reloc_off = dest_addr - CFG_MONITOR_BASE; + gd->reloc_off = dest_addr - CONFIG_SYS_MONITOR_BASE; + + board_early_init_r(); monitor_flash_len = _edata - _text; @@ -292,7 +285,7 @@ void board_init_r(gd_t *new_gd, ulong dest_addr) addr = (unsigned long)cmdtp->usage + gd->reloc_off; cmdtp->usage = (typeof(cmdtp->usage))addr; } -#ifdef CFG_LONGHELP +#ifdef CONFIG_SYS_LONGHELP if (cmdtp->help) { addr = (unsigned long)cmdtp->help + gd->reloc_off; cmdtp->help = (typeof(cmdtp->help))addr; @@ -301,34 +294,60 @@ void board_init_r(gd_t *new_gd, ulong dest_addr) } /* there are some other pointer constants we must deal with */ -#ifndef CFG_ENV_IS_NOWHERE +#ifndef CONFIG_ENV_IS_NOWHERE env_name_spec += gd->reloc_off; #endif timer_init(); - mem_malloc_init(); + + /* The malloc area is right below the monitor image in RAM */ + mem_malloc_init(CONFIG_SYS_MONITOR_BASE + gd->reloc_off - + CONFIG_SYS_MALLOC_LEN, CONFIG_SYS_MALLOC_LEN); malloc_bin_reloc(); dma_alloc_init(); - board_init_info(); - flash_init(); + + enable_interrupts(); + + bd->bi_flashstart = 0; + bd->bi_flashsize = 0; + bd->bi_flashoffset = 0; + +#ifndef CONFIG_SYS_NO_FLASH + bd->bi_flashstart = CONFIG_SYS_FLASH_BASE; + bd->bi_flashsize = flash_init(); + bd->bi_flashoffset = (unsigned long)_edata - (unsigned long)_text; if (bd->bi_flashsize) display_flash_config(); +#endif + if (bd->bi_dram[0].size) display_dram_config(); - gd->bd->bi_boot_params = malloc(CFG_BOOTPARAMS_LEN); + gd->bd->bi_boot_params = malloc(CONFIG_SYS_BOOTPARAMS_LEN); if (!gd->bd->bi_boot_params) puts("WARNING: Cannot allocate space for boot parameters\n"); /* initialize environment */ env_relocate(); - devices_init(); + bd->bi_ip_addr = getenv_IPaddr ("ipaddr"); + + stdio_init(); jumptable_init(); console_init_r(); -#if (CONFIG_COMMANDS & CFG_CMD_NET) + s = getenv("loadaddr"); + if (s) + load_addr = simple_strtoul(s, NULL, 16); + +#ifdef CONFIG_BITBANGMII + bb_miiphy_init(); +#endif +#if defined(CONFIG_CMD_NET) + s = getenv("bootfile"); + if (s) + copy_filename(BootFile, s, sizeof(BootFile)); #if defined(CONFIG_NET_MULTI) puts("Net: "); #endif