summaryrefslogtreecommitdiff
path: root/lib/lmb.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/lmb.c')
-rw-r--r--lib/lmb.c12
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,