
On Thursday 20 March 2008, Wolfgang Denk wrote:
At the cost of an #ifdef, this could be added to the memory reservation code in "lib_ppc/board.c", i. e. somewhere after
... 427 * Reserve memory at end of RAM for (top down in that order): 428 * - kernel log buffer 429 * - protected RAM 430 * - LCD framebuffer 431 * - monitor code 432 * - board info struct 433 */ 434 len = (ulong)&_end - CFG_MONITOR_BASE; 435 436 addr = CFG_SDRAM_BASE + get_effective_memsize();
OK. I'll add it here with an additional #ifdef here. How about something like this:
len = (ulong)&_end - CFG_MONITOR_BASE;
+#ifdef CONFIG_MEM_TOP_HIDE + /* + * 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 -= CONFIG_MEM_TOP_HIDE; +#endif
addr = CFG_SDRAM_BASE + get_effective_memsize();
Or even better this somewhere above:
#ifndef CONFIG_MEM_TOP_HIDE #define CONFIG_MEM_TOP_HIDE 0 #endif
and we can drop the #ifdef completely.
Of course you need to make sure that the linux kernel understands this changed behaviour / shifted addresses, too.
Right. By fixing up gd->ram_size in the new patch version above, this should get handled for arch/ppc and arch/powerpc kernel versions. So no need for 'mem=xxx' in the bootargs anymore. Or did I miss something here?
Thanks.
Best regards, Stefan
===================================================================== DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: +49-8142-66989-0 Fax: +49-8142-66989-80 Email: office@denx.de =====================================================================