aboutsummaryrefslogtreecommitdiff
path: root/common/spl
diff options
context:
space:
mode:
authorSimon Glass <sjg@chromium.org>2017-11-13 18:55:04 -0700
committerSimon Glass <sjg@chromium.org>2017-12-12 19:53:45 -0700
commitdfce1799e71fd6f36efcea2867b668ab5665e7e1 (patch)
tree68ca1348291cad80d0703d55e18242fa1d21952e /common/spl
parent8bee2d251afb61c203aa94877cf5077731822ed5 (diff)
downloadu-boot-dfce1799e71fd6f36efcea2867b668ab5665e7e1.zip
u-boot-dfce1799e71fd6f36efcea2867b668ab5665e7e1.tar.gz
u-boot-dfce1799e71fd6f36efcea2867b668ab5665e7e1.tar.bz2
binman: Add binman support to spl_ram.c
SPL supports reading U-Boot from a RAM location. At present this is hard-coded to the U-Boot text base address. Use binman to allow this to come from the image file, if binman is used. Signed-off-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'common/spl')
-rw-r--r--common/spl/spl_ram.c19
1 files changed, 15 insertions, 4 deletions
diff --git a/common/spl/spl_ram.c b/common/spl/spl_ram.c
index b2645a1..fa8c768 100644
--- a/common/spl/spl_ram.c
+++ b/common/spl/spl_ram.c
@@ -11,6 +11,8 @@
* SPDX-License-Identifier: GPL-2.0+
*/
#include <common.h>
+#include <binman_sym.h>
+#include <mapmem.h>
#include <spl.h>
#include <libfdt.h>
@@ -48,15 +50,24 @@ static int spl_ram_load_image(struct spl_image_info *spl_image,
load.read = spl_ram_load_read;
spl_load_simple_fit(spl_image, &load, 0, header);
} else {
+ ulong u_boot_pos = binman_sym(ulong, u_boot_any, pos);
+
debug("Legacy image\n");
/*
* Get the header. It will point to an address defined by
* handoff which will tell where the image located inside
- * the flash. For now, it will temporary fixed to address
- * pointed by U-Boot.
+ * the flash.
*/
- header = (struct image_header *)
- (CONFIG_SYS_TEXT_BASE - sizeof(struct image_header));
+ debug("u_boot_pos = %lx\n", u_boot_pos);
+ if (u_boot_pos == BINMAN_SYM_MISSING) {
+ /*
+ * No binman support or no information. For now, fix it
+ * to the address pointed to by U-Boot.
+ */
+ u_boot_pos = CONFIG_SYS_TEXT_BASE -
+ sizeof(struct image_header);
+ }
+ header = (struct image_header *)map_sysmem(u_boot_pos, 0);
spl_parse_image_header(spl_image, header);
}