SPDX: Convert all of our single license tags to Linux Kernel style
[platform/kernel/u-boot.git] / common / spl / spl.c
index 3bb20c7..3dafeae 100644 (file)
@@ -1,13 +1,13 @@
+// SPDX-License-Identifier: GPL-2.0+
 /*
  * (C) Copyright 2010
  * Texas Instruments, <www.ti.com>
  *
  * Aneesh V <aneesh@ti.com>
- *
- * SPDX-License-Identifier:    GPL-2.0+
  */
 
 #include <common.h>
+#include <binman_sym.h>
 #include <dm.h>
 #include <spl.h>
 #include <asm/u-boot.h>
@@ -32,6 +32,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 +123,23 @@ __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;
+
+       /*
+        * Binman error cases: address of the end of the previous region or the
+        * start of the image's entry area (usually 0) if there is no previous
+        * region.
+        */
+       if (u_boot_pos && u_boot_pos != BINMAN_SYM_MISSING) {
+               /* Binman does not support separated entry addresses */
+               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";
 }
@@ -395,7 +412,7 @@ void board_init_r(gd_t *dummy1, ulong dummy2)
        timer_init();
 #endif
 
-#ifdef CONFIG_SPL_BOARD_INIT
+#if CONFIG_IS_ENABLED(BOARD_INIT)
        spl_board_init();
 #endif
 
@@ -453,6 +470,7 @@ void board_init_r(gd_t *dummy1, ulong dummy2)
        jump_to_image_no_args(&spl_image);
 }
 
+#ifdef CONFIG_SPL_SERIAL_SUPPORT
 /*
  * This requires UART clocks to be enabled.  In order for this to work the
  * caller must ensure that the gd pointer is valid.
@@ -465,12 +483,15 @@ void preloader_console_init(void)
 
        gd->have_console = 1;
 
+#ifndef CONFIG_SPL_DISABLE_BANNER_PRINT
        puts("\nU-Boot SPL " PLAIN_VERSION " (" U_BOOT_DATE " - " \
-                       U_BOOT_TIME ")\n");
+                       U_BOOT_TIME " " U_BOOT_TZ ")\n");
+#endif
 #ifdef CONFIG_SPL_DISPLAY_PRINT
        spl_display_print();
 #endif
 }
+#endif
 
 /**
  * spl_relocate_stack_gd() - Relocate stack ready for board_init_r() execution