summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorSimon Glass <sjg@chromium.org>2017-11-14 04:55:03 +0300
committerSimon Glass <sjg@chromium.org>2017-12-13 05:53:45 +0300
commit8bee2d251afb61c203aa94877cf5077731822ed5 (patch)
tree38dce2f79df048900946da20b32fb5bb1e0e236c /include
parentcf2a8fd66d8d4b855f5955e15e4d8e436b4bc3d5 (diff)
downloadu-boot-8bee2d251afb61c203aa94877cf5077731822ed5.tar.xz
binman: Add binman symbol support to SPL
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@chromium.org>
Diffstat (limited to 'include')
-rw-r--r--include/binman_sym.h13
-rw-r--r--include/spl.h11
2 files changed, 24 insertions, 0 deletions
diff --git a/include/binman_sym.h b/include/binman_sym.h
index 3999b26d8d..87d03d5294 100644
--- a/include/binman_sym.h
+++ b/include/binman_sym.h
@@ -38,6 +38,17 @@
__attribute__((aligned(4), unused, section(".binman_sym")))
/**
+ * binman_sym_extern() - Declare a extern symbol that will be used at run-time
+ *
+ * @_type: Type f the symbol (e.g. unsigned long)
+ * @entry_name: Name of the entry to look for (e.g. 'u_boot_spl')
+ * @_prop_name: Property value to get from that entry (e.g. 'pos')
+ */
+#define binman_sym_extern(_type, _entry_name, _prop_name) \
+ extern _type binman_symname(_entry_name, _prop_name) \
+ __attribute__((aligned(4), unused, section(".binman_sym")))
+
+/**
* binman_sym_declare_optional() - Declare an optional symbol
*
* If this symbol cannot be provided by binman, an error will not be generated.
@@ -73,6 +84,8 @@
#define binman_sym_declare_optional(_type, _entry_name, _prop_name)
+#define binman_sym_extern(_type, _entry_name, _prop_name)
+
#define binman_sym(_type, _entry_name, _prop_name) BINMAN_SYM_MISSING
#endif /* BINMAN */
diff --git a/include/spl.h b/include/spl.h
index 308ce7b563..c14448b8fc 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>
@@ -51,6 +53,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.
+ */
+binman_sym_extern(ulong, u_boot_any, pos);
+
/**
* spl_load_simple_fit() - Loads a fit image from a device.
* @spl_image: Image description to set up