X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=lib_ppc%2Fboard.c;h=a30acee4febf5ee5c675953cfd2feeacfa8da8e7;hb=116095eb1f0f7017ea8062aa8a8ba8ceecb430b5;hp=9faf7f2a0b438ebbc12f11f25a4ba7b010461abb;hpb=0e870980a64584a591af775bb9c9fe9450124df9;p=u-boot diff --git a/lib_ppc/board.c b/lib_ppc/board.c index 9faf7f2a0b..a30acee4fe 100644 --- a/lib_ppc/board.c +++ b/lib_ppc/board.c @@ -1,5 +1,5 @@ /* - * (C) Copyright 2000-2006 + * (C) Copyright 2000-2010 * Wolfgang Denk, DENX Software Engineering, wd@denx.de. * * See file CREDITS for list of people who contributed to this @@ -83,6 +83,10 @@ #include #endif +#ifdef CONFIG_BITBANGMII +#include +#endif + #ifdef CONFIG_SYS_UPDATE_FLASH_SIZE extern int update_flash_size (int flash_size); #endif @@ -136,46 +140,11 @@ ulong monitor_flash_len; #include #endif -/* - * Begin and End of memory area for malloc(), and current "brk" - */ -static ulong mem_malloc_start = 0; -static ulong mem_malloc_end = 0; -static ulong mem_malloc_brk = 0; - /************************************************************************ * Utilities * ************************************************************************ */ -/* - * The Malloc area is immediately below the monitor copy in DRAM - */ -static void mem_malloc_init (void) -{ -#if !defined(CONFIG_RELOC_FIXUP_WORKS) - mem_malloc_end = CONFIG_SYS_MONITOR_BASE + gd->reloc_off; -#endif - mem_malloc_start = mem_malloc_end - TOTAL_MALLOC_LEN; - mem_malloc_brk = mem_malloc_start; - - memset ((void *) mem_malloc_start, - 0, - mem_malloc_end - mem_malloc_start); -} - -void *sbrk (ptrdiff_t increment) -{ - ulong old = mem_malloc_brk; - ulong new = old + increment; - - if ((new < mem_malloc_start) || (new > mem_malloc_end)) { - return (NULL); - } - mem_malloc_brk = new; - return ((void *) old); -} - /* * All attempts to come up with a "common" initialization sequence * that works for all boards and architectures failed: some of the @@ -286,14 +255,12 @@ static int init_func_watchdog_reset (void) */ init_fnc_t *init_sequence[] = { - -#if defined(CONFIG_BOARD_EARLY_INIT_F) - board_early_init_f, -#endif - #if defined(CONFIG_MPC85xx) || defined(CONFIG_MPC86xx) probecpu, #endif +#if defined(CONFIG_BOARD_EARLY_INIT_F) + board_early_init_f, +#endif #if !defined(CONFIG_8xx_CPUCLK_DEFAULT) get_clocks, /* get CPU and bus clocks (etc.) */ #if defined(CONFIG_TQM8xxL) && !defined(CONFIG_TQM866M) \ @@ -411,8 +378,9 @@ void board_init_f (ulong bootflag) /* compiler optimization barrier needed for GCC >= 3.4 */ __asm__ __volatile__("": : :"memory"); -#if !defined(CONFIG_CPM2) && !defined(CONFIG_MPC83xx) && \ - !defined(CONFIG_MPC85xx) && !defined(CONFIG_MPC86xx) +#if !defined(CONFIG_CPM2) && !defined(CONFIG_MPC512X) && \ + !defined(CONFIG_MPC83xx) && !defined(CONFIG_MPC85xx) && \ + !defined(CONFIG_MPC86xx) /* Clear initial global data */ memset ((void *) gd, 0, sizeof (gd_t)); #endif @@ -509,10 +477,6 @@ void board_init_f (ulong bootflag) debug ("Reserving %ldk for U-Boot at: %08lx\n", len >> 10, addr); -#ifdef CONFIG_AMIGAONEG3SE - gd->relocaddr = addr; -#endif - /* * reserve memory for malloc() arena */ @@ -644,6 +608,8 @@ void board_init_f (ulong bootflag) WATCHDOG_RESET(); + gd->relocaddr = addr; /* Record relocation address, useful for debug */ + memcpy (id, (void *)gd, sizeof (gd_t)); relocate_code (addr_sp, id, addr); @@ -662,13 +628,9 @@ void board_init_f (ulong bootflag) */ void board_init_r (gd_t *id, ulong dest_addr) { - cmd_tbl_t *cmdtp; char *s; bd_t *bd; - extern void malloc_bin_reloc (void); -#ifndef CONFIG_ENV_IS_NOWHERE - extern char * env_name_spec; -#endif + ulong malloc_start; #ifndef CONFIG_SYS_NO_FLASH ulong flash_size; @@ -679,11 +641,15 @@ void board_init_r (gd_t *id, ulong dest_addr) gd->flags |= GD_FLG_RELOC; /* tell others: relocation done */ -#if defined(CONFIG_RELOC_FIXUP_WORKS) - gd->reloc_off = 0; - mem_malloc_end = dest_addr; -#else - gd->reloc_off = dest_addr - CONFIG_SYS_MONITOR_BASE; + /* The Malloc area is immediately below the monitor copy in DRAM */ + malloc_start = dest_addr - TOTAL_MALLOC_LEN; + +#if defined(CONFIG_MPC85xx) || defined(CONFIG_MPC86xx) + /* + * The gd->cpu pointer is set to an address in flash before relocation. + * We need to update it to point to the same CPU entry in RAM. + */ + gd->cpu += dest_addr - CONFIG_SYS_MONITOR_BASE; #endif #ifdef CONFIG_SERIAL_MULTI @@ -709,38 +675,6 @@ void board_init_r (gd_t *id, ulong dest_addr) monitor_flash_len = (ulong)&__init_end - dest_addr; - /* - * We have to relocate the command table manually - */ - for (cmdtp = &__u_boot_cmd_start; cmdtp != &__u_boot_cmd_end; cmdtp++) { - ulong addr; - addr = (ulong) (cmdtp->cmd) + gd->reloc_off; -#if 0 - printf ("Command \"%s\": 0x%08lx => 0x%08lx\n", - cmdtp->name, (ulong) (cmdtp->cmd), addr); -#endif - cmdtp->cmd = - (int (*)(struct cmd_tbl_s *, int, int, char *[]))addr; - - addr = (ulong)(cmdtp->name) + gd->reloc_off; - cmdtp->name = (char *)addr; - - if (cmdtp->usage) { - addr = (ulong)(cmdtp->usage) + gd->reloc_off; - cmdtp->usage = (char *)addr; - } -#ifdef CONFIG_SYS_LONGHELP - if (cmdtp->help) { - addr = (ulong)(cmdtp->help) + gd->reloc_off; - cmdtp->help = (char *)addr; - } -#endif - } - /* there are some other pointer constants we must deal with */ -#ifndef CONFIG_ENV_IS_NOWHERE - env_name_spec += gd->reloc_off; -#endif - WATCHDOG_RESET (); #ifdef CONFIG_LOGBUFFER @@ -748,7 +682,6 @@ void board_init_r (gd_t *id, ulong dest_addr) #endif #ifdef CONFIG_POST post_output_backlog (); - post_reloc (); #endif WATCHDOG_RESET(); @@ -778,9 +711,7 @@ void board_init_r (gd_t *id, ulong dest_addr) asm ("sync ; isync"); - /* initialize malloc() area */ - mem_malloc_init (); - malloc_bin_reloc (); + mem_malloc_init (malloc_start, TOTAL_MALLOC_LEN); #if !defined(CONFIG_SYS_NO_FLASH) puts ("FLASH: "); @@ -949,17 +880,7 @@ void board_init_r (gd_t *id, ulong dest_addr) /* Initialize the console (after the relocation and devices init) */ console_init_r (); -#if defined(CONFIG_CCM) || \ - defined(CONFIG_COGENT) || \ - defined(CONFIG_CPCI405) || \ - defined(CONFIG_EVB64260) || \ - defined(CONFIG_KUP4K) || \ - defined(CONFIG_KUP4X) || \ - defined(CONFIG_LWMON) || \ - defined(CONFIG_PCU_E) || \ - defined(CONFIG_SC3) || \ - defined(CONFIG_W7O) || \ - defined(CONFIG_MISC_INIT_R) +#if defined(CONFIG_MISC_INIT_R) /* miscellaneous platform dependent initialisations */ misc_init_r (); #endif @@ -1030,6 +951,9 @@ void board_init_r (gd_t *id, ulong dest_addr) doc_init (); #endif +#ifdef CONFIG_BITBANGMII + bb_miiphy_init(); +#endif #if defined(CONFIG_CMD_NET) #if defined(CONFIG_NET_MULTI) WATCHDOG_RESET (); @@ -1038,22 +962,7 @@ void board_init_r (gd_t *id, ulong dest_addr) eth_initialize (bd); #endif -#if defined(CONFIG_CMD_NET) && ( \ - defined(CONFIG_CCM) || \ - defined(CONFIG_ELPT860) || \ - defined(CONFIG_EP8260) || \ - defined(CONFIG_IP860) || \ - defined(CONFIG_IVML24) || \ - defined(CONFIG_IVMS8) || \ - defined(CONFIG_MPC8260ADS) || \ - defined(CONFIG_MPC8266ADS) || \ - defined(CONFIG_MPC8560ADS) || \ - defined(CONFIG_PCU_E) || \ - defined(CONFIG_RPXSUPER) || \ - defined(CONFIG_STXGP3) || \ - defined(CONFIG_SPD823TS) || \ - defined(CONFIG_RESET_PHY_R) ) - +#if defined(CONFIG_CMD_NET) && defined(CONFIG_RESET_PHY_R) WATCHDOG_RESET (); debug ("Reset Ethernet PHY\n"); reset_phy ();