diff options
Diffstat (limited to 'lib_ppc/board.c')
| -rw-r--r-- | lib_ppc/board.c | 38 |
1 files changed, 37 insertions, 1 deletions
diff --git a/lib_ppc/board.c b/lib_ppc/board.c index ee0213e1a..1b8a8721a 100644 --- a/lib_ppc/board.c +++ b/lib_ppc/board.c @@ -38,6 +38,9 @@ #if defined(CONFIG_CMD_IDE) #include <ide.h> #endif +#if defined(CONFIG_CMD_SATA) +#include <sata.h> +#endif #if defined(CONFIG_CMD_SCSI) #include <scsi.h> #endif @@ -117,6 +120,10 @@ DECLARE_GLOBAL_DATA_PTR; #define TOTAL_MALLOC_LEN CFG_MALLOC_LEN #endif +#if !defined(CFG_MEM_TOP_HIDE) +#define CFG_MEM_TOP_HIDE 0 +#endif + extern ulong __init_end; extern ulong _end; ulong monitor_flash_len; @@ -425,6 +432,7 @@ void board_init_f (ulong bootflag) * relocate the code and continue running from DRAM. * * Reserve memory at end of RAM for (top down in that order): + * - area that won't get touched by U-Boot and Linux (optional) * - kernel log buffer * - protected RAM * - LCD framebuffer @@ -433,7 +441,30 @@ void board_init_f (ulong bootflag) */ len = (ulong)&_end - CFG_MONITOR_BASE; + /* + * Subtract specified amount of memory to hide so that it won't + * get "touched" at all by U-Boot. By fixing up gd->ram_size + * the Linux kernel should now get passed the now "corrected" + * memory size and won't touch it either. This should work + * for arch/ppc and arch/powerpc. Only Linux board ports in + * arch/powerpc with bootwrapper support, that recalculate the + * memory size from the SDRAM controller setup will have to + * get fixed. + */ + gd->ram_size -= CFG_MEM_TOP_HIDE; + +#ifndef CONFIG_MAX_MEM_MAPPED +#define CONFIG_MAX_MEM_MAPPED (256 << 20) +#endif + +#ifndef CONFIG_VERY_BIG_RAM addr = CFG_SDRAM_BASE + get_effective_memsize(); +#else + /* only allow stack below 256M */ + addr = CFG_SDRAM_BASE + + (gd->ram_size > CONFIG_MAX_MEM_MAPPED) ? + CONFIG_MAX_MEM_MAPPED : get_effective_memsize(); +#endif #ifdef CONFIG_LOGBUFFER #ifndef CONFIG_ALT_LB_ADDR @@ -862,7 +893,7 @@ void board_init_r (gd_t *id, ulong dest_addr) sc3_read_eeprom(); #endif -#ifdef CFG_ID_EEPROM +#if defined (CFG_ID_EEPROM) || defined (CFG_I2C_MAC_OFFSET) mac_read_from_eeprom(); #endif @@ -1093,6 +1124,11 @@ void board_init_r (gd_t *id, ulong dest_addr) #endif #endif +#if defined(CONFIG_CMD_SATA) + puts ("SATA: "); + sata_initialize (); +#endif + #ifdef CONFIG_LAST_STAGE_INIT WATCHDOG_RESET (); /* |