From 8bee2d251afb61c203aa94877cf5077731822ed5 Mon Sep 17 00:00:00 2001 From: Simon Glass Date: Mon, 13 Nov 2017 18:55:03 -0700 Subject: 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 --- include/binman_sym.h | 13 +++++++++++++ include/spl.h | 11 +++++++++++ 2 files changed, 24 insertions(+) (limited to 'include') 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 @@ -37,6 +37,17 @@ _type binman_symname(_entry_name, _prop_name) \ __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 * @@ -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 + /* Platform-specific defines */ #include #include @@ -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 -- cgit v1.2.3