]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
spl: binman: Split binman symbols support from enabling binman
authorAlper Nebi Yasak <alpernebiyasak@gmail.com>
Sat, 18 Jun 2022 12:13:09 +0000 (15:13 +0300)
committerSimon Glass <sjg@chromium.org>
Tue, 28 Jun 2022 02:09:52 +0000 (03:09 +0100)
Enabling CONFIG_BINMAN makes binman run after a build to package any
images specified in the device-tree. It also enables a mechanism for
SPL/TPL to declare and use special linker symbols that refer to other
entries in the same binman image. A similar feature that gets this info
from the device-tree exists for U-Boot proper, but it is gated behind a
CONFIG_BINMAN_FDT unlike the symbols.

Confusingly, CONFIG_SPL/TPL_BINMAN_SYMBOLS also exist. These configs
don't actually enable/disable the symbols mechanism as one would expect,
but declare some symbols for U-Boot using this mechanism.

Reuse the BINMAN_SYMBOLS configs to make them toggle the symbols
mechanism, and declare symbols for the U-Boot phases in a dependent
BINMAN_UBOOT_SYMBOLS config. Extend it to cover symbols of all phases.
Update the config prompt and help message to make it clearer about this.
Fix binman test binaries to work with CONFIG_IS_ENABLED(BINMAN_SYMBOLS).

Co-developed-by: Peng Fan <peng.fan@nxp.com>
[Alper: New config for phase symbols, update Kconfigs, commit message]
Signed-off-by: Alper Nebi Yasak <alpernebiyasak@gmail.com>
common/spl/Kconfig
common/spl/Kconfig.tpl
common/spl/spl.c
include/binman_sym.h
tools/binman/test/Makefile
tools/binman/test/generated/autoconf.h [new file with mode: 0644]
tools/binman/test/u_boot_binman_syms.c
tools/binman/test/u_boot_binman_syms_size.c

index 2ad2351c6eb3f16674c5e32a04189878b7d92a04..46d9be73bb1fb54ad88a5798ef56aeaf2671f0a7 100644 (file)
@@ -190,12 +190,24 @@ config SPL_BINMAN_SYMBOLS
        depends on SPL_FRAMEWORK && BINMAN
        default y
        help
-         This enables use of symbols in SPL which refer to U-Boot, enabling SPL
-         to obtain the location of U-Boot simply by calling spl_get_image_pos()
-         and spl_get_image_size().
+         This enables use of symbols in SPL which refer to other entries in
+         the same binman image as the SPL. These can be declared with the
+         binman_sym_declare(type, entry, prop) macro and accessed by the
+         binman_sym(type, entry, prop) macro defined in binman_sym.h.
 
-         For this to work, you must have a U-Boot image in the binman image, so
-         binman can update SPL with the location of it.
+         See tools/binman/binman.rst for a detailed explanation.
+
+config SPL_BINMAN_UBOOT_SYMBOLS
+       bool "Declare binman symbols for U-Boot phases in SPL"
+       depends on SPL_BINMAN_SYMBOLS
+       default y
+       help
+         This enables use of symbols in SPL which refer to U-Boot phases,
+         enabling SPL to obtain the location and size of its next phase simply
+         by calling spl_get_image_pos() and spl_get_image_size().
+
+         For this to work, you must have all U-Boot phases in the same binman
+         image, so binman can update SPL with the locations of everything.
 
 source "common/spl/Kconfig.nxp"
 
index 834cb6b6dd826ee0d71e6f1f2935f93f1b9bc6c3..8c59c767302f1e239c173f241b8bb438271e2a7a 100644 (file)
@@ -9,16 +9,28 @@ config TPL_SIZE_LIMIT
          If this value is zero, it is ignored.
 
 config TPL_BINMAN_SYMBOLS
-       bool "Declare binman symbols in TPL"
+       bool "Support binman symbols in TPL"
        depends on TPL_FRAMEWORK && BINMAN
        default y
        help
-         This enables use of symbols in TPL which refer to U-Boot, enabling TPL
-         to obtain the location of U-Boot simply by calling spl_get_image_pos()
-         and spl_get_image_size().
+         This enables use of symbols in TPL which refer to other entries in
+         the same binman image as the TPL. These can be declared with the
+         binman_sym_declare(type, entry, prop) macro and accessed by the
+         binman_sym(type, entry, prop) macro defined in binman_sym.h.
 
-         For this to work, you must have a U-Boot image in the binman image, so
-         binman can update TPL with the location of it.
+         See tools/binman/binman.rst for a detailed explanation.
+
+config TPL_BINMAN_UBOOT_SYMBOLS
+       bool "Declare binman symbols for U-Boot phases in TPL"
+       depends on TPL_BINMAN_SYMBOLS
+       default y
+       help
+         This enables use of symbols in TPL which refer to U-Boot phases,
+         enabling TPL to obtain the location and size of its next phase simply
+         by calling spl_get_image_pos() and spl_get_image_size().
+
+         For this to work, you must have all U-Boot phases in the same binman
+         image, so binman can update TPL with the locations of everything.
 
 config TPL_FRAMEWORK
        bool "Support TPL based upon the common SPL framework"
index 7505165624901239f76b30b34520ab9e431737d9..5dd122611c27db104bb5a6c7b9c618b89a25e66c 100644 (file)
@@ -52,11 +52,10 @@ DECLARE_GLOBAL_DATA_PTR;
 
 u32 *boot_params_ptr = NULL;
 
-#if CONFIG_IS_ENABLED(BINMAN_SYMBOLS)
+#if CONFIG_IS_ENABLED(BINMAN_UBOOT_SYMBOLS)
 /* See spl.h for information about this */
 binman_sym_declare(ulong, u_boot_any, image_pos);
 binman_sym_declare(ulong, u_boot_any, size);
-#endif
 
 #ifdef CONFIG_TPL
 binman_sym_declare(ulong, u_boot_spl, image_pos);
@@ -68,6 +67,8 @@ binman_sym_declare(ulong, u_boot_vpl, image_pos);
 binman_sym_declare(ulong, u_boot_vpl, size);
 #endif
 
+#endif /* BINMAN_UBOOT_SYMBOLS */
+
 /* Define board data structure */
 static struct bd_info bdata __attribute__ ((section(".data")));
 
@@ -152,7 +153,7 @@ void spl_fixup_fdt(void *fdt_blob)
 
 ulong spl_get_image_pos(void)
 {
-       if (!CONFIG_IS_ENABLED(BINMAN_SYMBOLS))
+       if (!CONFIG_IS_ENABLED(BINMAN_UBOOT_SYMBOLS))
                return BINMAN_SYM_MISSING;
 
 #ifdef CONFIG_VPL
@@ -166,7 +167,7 @@ ulong spl_get_image_pos(void)
 
 ulong spl_get_image_size(void)
 {
-       if (!CONFIG_IS_ENABLED(BINMAN_SYMBOLS))
+       if (!CONFIG_IS_ENABLED(BINMAN_UBOOT_SYMBOLS))
                return BINMAN_SYM_MISSING;
 
 #ifdef CONFIG_VPL
index 72e6765fe52004504c7de1738d04aa1d2c1250c9..8586ef8731b683d2c11aa9364fdc1ce4b9366e1d 100644 (file)
@@ -13,7 +13,7 @@
 
 #define BINMAN_SYM_MISSING     (-1UL)
 
-#ifdef CONFIG_BINMAN
+#if CONFIG_IS_ENABLED(BINMAN_SYMBOLS)
 
 /**
  * binman_symname() - Internal function to get a binman symbol name
@@ -77,7 +77,7 @@
 #define binman_sym(_type, _entry_name, _prop_name) \
        (*(_type *)&binman_symname(_entry_name, _prop_name))
 
-#else /* !BINMAN */
+#else /* !CONFIG_IS_ENABLED(BINMAN_SYMBOLS) */
 
 #define binman_sym_declare(_type, _entry_name, _prop_name)
 
@@ -87,6 +87,6 @@
 
 #define binman_sym(_type, _entry_name, _prop_name) BINMAN_SYM_MISSING
 
-#endif /* BINMAN */
+#endif /* CONFIG_IS_ENABLED(BINMAN_SYMBOLS) */
 
 #endif
index 57057e2d588fd7db0573c2edd2e5807e748661b4..bea8567c9b45c0e3763d2dce6bbaf7947440304d 100644 (file)
@@ -21,7 +21,7 @@ CC            = $(CROSS_COMPILE)gcc
 OBJCOPY                = $(CROSS_COMPILE)objcopy
 
 VPATH := $(SRC)
-CFLAGS := -march=i386 -m32 -nostdlib -I $(SRC)../../../include \
+CFLAGS := -march=i386 -m32 -nostdlib -I $(SRC)../../../include -I $(SRC) \
        -Wl,--no-dynamic-linker
 
 LDS_UCODE := -T $(SRC)u_boot_ucode_ptr.lds
diff --git a/tools/binman/test/generated/autoconf.h b/tools/binman/test/generated/autoconf.h
new file mode 100644 (file)
index 0000000..6a23039
--- /dev/null
@@ -0,0 +1,3 @@
+#define CONFIG_BINMAN 1
+#define CONFIG_SPL_BUILD 1
+#define CONFIG_SPL_BINMAN_SYMBOLS 1
index 37fc339ce84bfb5792e0672188e196bca36af8ce..89fee5567e1d4f7bf99fd07fb6f9e278869b676c 100644 (file)
@@ -5,7 +5,7 @@
  * Simple program to create some binman symbols. This is used by binman tests.
  */
 
-#define CONFIG_BINMAN
+#include <linux/kconfig.h>
 #include <binman_sym.h>
 
 binman_sym_declare(unsigned long, u_boot_spl_any, offset);
index 7224bc1863c75b4e51d30ba3f73841d7fad28659..c4a053f96f1a1ce9865d1f1e95054d5046b9f57a 100644 (file)
@@ -5,7 +5,7 @@
  * Simple program to create some binman symbols. This is used by binman tests.
  */
 
-#define CONFIG_BINMAN
+#include <linux/kconfig.h>
 #include <binman_sym.h>
 
 binman_sym_declare(char, u_boot_spl, pos);