diff options
Diffstat (limited to 'lib_ppc/board.c')
| -rw-r--r-- | lib_ppc/board.c | 22 | 
1 files changed, 20 insertions, 2 deletions
| diff --git a/lib_ppc/board.c b/lib_ppc/board.c index 30383027c..7d3391449 100644 --- a/lib_ppc/board.c +++ b/lib_ppc/board.c @@ -120,6 +120,11 @@ 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 _start;  extern ulong __init_end;  extern ulong _end;  ulong monitor_flash_len; @@ -428,13 +433,26 @@ 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  	 *  - monitor code  	 *  - board info struct  	 */ -	len = (ulong)&_end - CFG_MONITOR_BASE; +	len = (ulong)&_end - (ulong)&_start + EXC_OFF_SYS_RESET; + +	/* +	 * 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) @@ -876,7 +894,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 |