1
0
Fork 0

common: Rewrite hiding the end of memory

As the name may be confusing, the CONFIG_SYS_MEM_TOP_HIDE reserves
some memory from the end of ram, tracked by gd->ram_size. It is not
always the top of u-boot visible memory. Rewrite the macro with a
weak function to provide flexibility for complex calcuation. Legacy
use of this macro is still supported.

Signed-off-by: York Sun <yorksun@freescale.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
utp
York Sun 2015-12-07 11:05:29 -08:00
parent c107c0c05c
commit aabd7ddb88
2 changed files with 16 additions and 9 deletions

2
README
View File

@ -3877,7 +3877,7 @@ Configuration Settings:
the RAM base is not zero, or RAM is divided into banks, the RAM base is not zero, or RAM is divided into banks,
this variable needs to be recalcuated to get the address. this variable needs to be recalcuated to get the address.
- CONFIG_SYS_MEM_TOP_HIDE (PPC only): - CONFIG_SYS_MEM_TOP_HIDE:
If CONFIG_SYS_MEM_TOP_HIDE is defined in the board config header, If CONFIG_SYS_MEM_TOP_HIDE is defined in the board config header,
this specified memory area will get subtracted from the top this specified memory area will get subtracted from the top
(end) of RAM and won't get "touched" at all by U-Boot. By (end) of RAM and won't get "touched" at all by U-Boot. By

View File

@ -317,6 +317,15 @@ __weak ulong board_get_usable_ram_top(ulong total_size)
return gd->ram_top; return gd->ram_top;
} }
__weak phys_size_t board_reserve_ram_top(phys_size_t ram_size)
{
#ifdef CONFIG_SYS_MEM_TOP_HIDE
return ram_size - CONFIG_SYS_MEM_TOP_HIDE;
#else
return ram_size;
#endif
}
static int setup_dest_addr(void) static int setup_dest_addr(void)
{ {
debug("Monitor len: %08lX\n", gd->mon_len); debug("Monitor len: %08lX\n", gd->mon_len);
@ -333,19 +342,17 @@ static int setup_dest_addr(void)
*/ */
gd->secure_ram = gd->ram_size; gd->secure_ram = gd->ram_size;
#endif #endif
#if defined(CONFIG_SYS_MEM_TOP_HIDE)
/* /*
* Subtract specified amount of memory to hide so that it won't * 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 * get "touched" at all by U-Boot. By fixing up gd->ram_size
* the Linux kernel should now get passed the now "corrected" * the Linux kernel should now get passed the now "corrected"
* memory size and won't touch it either. This should work * memory size and won't touch it either. This has been used
* for arch/ppc and arch/powerpc. Only Linux board ports in * by arch/powerpc exclusively. Now ARMv8 takes advantage of
* arch/powerpc with bootwrapper support, that recalculate the * thie mechanism. If memory is split into banks, addresses
* memory size from the SDRAM controller setup will have to * need to be calculated.
* get fixed.
*/ */
gd->ram_size -= CONFIG_SYS_MEM_TOP_HIDE; gd->ram_size = board_reserve_ram_top(gd->ram_size);
#endif
#ifdef CONFIG_SYS_SDRAM_BASE #ifdef CONFIG_SYS_SDRAM_BASE
gd->ram_top = CONFIG_SYS_SDRAM_BASE; gd->ram_top = CONFIG_SYS_SDRAM_BASE;
#endif #endif