[new uImage] Provide ability to restrict region used for boot images

Allow the user to set 'bootm_low' and 'bootm_size' env vars as a way
to restrict what memory range is used for bootm.

Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
Acked-by: Marian Balakowicz <m8@semihalf.com>
diff --git a/common/cmd_bootm.c b/common/cmd_bootm.c
index a32a5a2..8595ef6 100644
--- a/common/cmd_bootm.c
+++ b/common/cmd_bootm.c
@@ -124,6 +124,7 @@
 	ulong		os_data, os_len;
 	ulong		image_start, image_end;
 	ulong		load_start, load_end;
+	ulong		mem_start, mem_size;
 
 	struct lmb lmb;
 
@@ -134,11 +135,10 @@
 
 	lmb_init(&lmb);
 
-#ifdef CFG_SDRAM_BASE
-	lmb_add(&lmb, CFG_SDRAM_BASE, gd->bd->bi_memsize);
-#else
-	lmb_add(&lmb, 0, gd->bd->bi_memsize);
-#endif
+	mem_start = getenv_bootm_low();
+	mem_size = getenv_bootm_size();
+
+	lmb_add(&lmb, mem_start, mem_size);
 
 	board_lmb_reserve(&lmb);
 
diff --git a/common/image.c b/common/image.c
index 0b71811..9e446fa 100644
--- a/common/image.c
+++ b/common/image.c
@@ -132,6 +132,32 @@
 	return (s && (*s == 'n')) ? 0 : 1;
 }
 
+ulong getenv_bootm_low(void)
+{
+	char *s = getenv ("bootm_low");
+	if (s) {
+		ulong tmp = simple_strtoul (s, NULL, 16);
+		return tmp;
+	}
+
+#ifdef CFG_SDRAM_BASE
+	return CFG_SDRAM_BASE;
+#else
+	return 0;
+#endif
+}
+
+ulong getenv_bootm_size(void)
+{
+	char *s = getenv ("bootm_size");
+	if (s) {
+		ulong tmp = simple_strtoul (s, NULL, 16);
+		return tmp;
+	}
+
+	return gd->bd->bi_memsize;
+}
+
 void memmove_wd (void *to, void *from, size_t len, ulong chunksz)
 {
 #if defined(CONFIG_HW_WATCHDOG) || defined(CONFIG_WATCHDOG)