[U-Boot] [PATCH 10/13] binman: Add binman symbol support to SPL
Simon Glass
sjg at chromium.org
Tue Nov 14 01:55:03 UTC 2017
Allow SPL to access binman symbols and use this to get the address of
U-Boot. This falls back to CONFIG_SYS_TEXT_BASE if the binman symbol
is not available.
Signed-off-by: Simon Glass <sjg at chromium.org>
---
common/spl/spl.c | 16 ++++++++++++++--
include/spl.h | 11 +++++++++++
2 files changed, 25 insertions(+), 2 deletions(-)
diff --git a/common/spl/spl.c b/common/spl/spl.c
index aaddddd9958..9e4a1ad0edc 100644
--- a/common/spl/spl.c
+++ b/common/spl/spl.c
@@ -8,6 +8,7 @@
*/
#include <common.h>
+#include <binman_sym.h>
#include <dm.h>
#include <spl.h>
#include <asm/u-boot.h>
@@ -32,6 +33,9 @@ DECLARE_GLOBAL_DATA_PTR;
u32 *boot_params_ptr = NULL;
+/* See spl.h for information about this */
+binman_sym_declare(ulong, u_boot_any, pos);
+
/* Define board data structure */
static bd_t bdata __attribute__ ((section(".data")));
@@ -120,9 +124,17 @@ __weak void spl_board_prepare_for_boot(void)
void spl_set_header_raw_uboot(struct spl_image_info *spl_image)
{
+ ulong u_boot_pos = binman_sym(ulong, u_boot_any, pos);
+
spl_image->size = CONFIG_SYS_MONITOR_LEN;
- spl_image->entry_point = CONFIG_SYS_UBOOT_START;
- spl_image->load_addr = CONFIG_SYS_TEXT_BASE;
+ if (u_boot_pos != BINMAN_SYM_MISSING) {
+ /* biman does not support separate entry addresses at present */
+ spl_image->entry_point = u_boot_pos;
+ spl_image->load_addr = u_boot_pos;
+ } else {
+ spl_image->entry_point = CONFIG_SYS_UBOOT_START;
+ spl_image->load_addr = CONFIG_SYS_TEXT_BASE;
+ }
spl_image->os = IH_OS_U_BOOT;
spl_image->name = "U-Boot";
}
diff --git a/include/spl.h b/include/spl.h
index b14a29c57cc..36af553c167 100644
--- a/include/spl.h
+++ b/include/spl.h
@@ -7,6 +7,8 @@
#ifndef _SPL_H_
#define _SPL_H_
+#include <binman_sym.h>
+
/* Platform-specific defines */
#include <linux/compiler.h>
#include <asm/spl.h>
@@ -48,6 +50,15 @@ struct spl_load_info {
void *buf);
};
+/*
+ * We need to know the position of U-Boot in memory so we can jump to it. We
+ * allow any U-Boot binary to be used (u-boot.bin, u-boot-nodtb.bin,
+ * u-boot.img), hence the '_any'. These is no checking here that the correct
+ * image is found. For * example if u-boot.img is used we don't check that
+ * spl_parse_image_header() can parse a valid header.
+ */
+extern binman_sym_declare(ulong, u_boot_any, pos);
+
/**
* spl_load_simple_fit() - Loads a fit image from a device.
* @spl_image: Image description to set up
--
2.15.0.448.gf294e3d99a-goog
More information about the U-Boot
mailing list