diff options
Diffstat (limited to 'lib/lmb.c')
-rw-r--r-- | lib/lmb.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/lib/lmb.c b/lib/lmb.c index e5a0677e3f9..e2d9fe86c14 100644 --- a/lib/lmb.c +++ b/lib/lmb.c @@ -8,6 +8,7 @@ #include <alist.h> #include <efi_loader.h> +#include <env.h> #include <event.h> #include <image.h> #include <mapmem.h> @@ -214,8 +215,6 @@ static long lmb_add_region_flags(struct alist *lmb_rgn_lst, phys_addr_t base, coalesced++; break; - - return -1; } } @@ -538,6 +537,7 @@ static void lmb_reserve_uboot_region(void) int bank; ulong end, bank_end; phys_addr_t rsv_start; + ulong pram = 0; rsv_start = gd->start_addr_sp - CONFIG_STACK_SIZE; end = gd->ram_top; @@ -548,6 +548,11 @@ static void lmb_reserve_uboot_region(void) */ debug("## Current stack ends at 0x%08lx ", (ulong)rsv_start); +#ifdef CFG_PRAM + pram = env_get_ulong("pram", 10, CFG_PRAM); + pram = pram << 10; /* size is in kB */ +#endif + for (bank = 0; bank < CONFIG_NR_DRAM_BANKS; bank++) { if (!gd->bd->bi_dram[bank].size || rsv_start < gd->bd->bi_dram[bank].start) @@ -560,7 +565,8 @@ static void lmb_reserve_uboot_region(void) if (bank_end > end) bank_end = end - 1; - lmb_reserve(rsv_start, bank_end - rsv_start + 1, LMB_NOOVERWRITE); + lmb_reserve(rsv_start, bank_end - rsv_start - pram + 1, + LMB_NOOVERWRITE); if (gd->flags & GD_FLG_SKIP_RELOC) lmb_reserve((phys_addr_t)(uintptr_t)_start, |