Merge branch '2019-08-11-ti-imports'
[oweals/u-boot.git] / common / spl / spl.c
index c182705b3fc9cad2b6fac694ed937cdeca5fe895..2c696f2a79c9304c6eaa8f1a2279836148efa3b1 100644 (file)
@@ -709,6 +709,28 @@ void preloader_console_init(void)
 }
 #endif
 
+/**
+ * This function is called before the stack is changed from initial stack to
+ * relocated stack. It tries to dump the stack size used
+ */
+__weak void spl_relocate_stack_check(void)
+{
+#if CONFIG_IS_ENABLED(SYS_REPORT_STACK_F_USAGE)
+       ulong init_sp = gd->start_addr_sp;
+       ulong stack_bottom = init_sp - CONFIG_VAL(SIZE_LIMIT_PROVIDE_STACK);
+       u8 *ptr = (u8 *)stack_bottom;
+       ulong i;
+
+       for (i = 0; i < CONFIG_VAL(SIZE_LIMIT_PROVIDE_STACK); i++) {
+               if (*ptr != CONFIG_VAL(SYS_STACK_F_CHECK_BYTE))
+                       break;
+               ptr++;
+       }
+       printf("SPL initial stack usage: %lu bytes\n",
+              CONFIG_VAL(SIZE_LIMIT_PROVIDE_STACK) - i);
+#endif
+}
+
 /**
  * spl_relocate_stack_gd() - Relocate stack ready for board_init_r() execution
  *
@@ -733,6 +755,9 @@ ulong spl_relocate_stack_gd(void)
        gd_t *new_gd;
        ulong ptr = CONFIG_SPL_STACK_R_ADDR;
 
+       if (CONFIG_IS_ENABLED(SYS_REPORT_STACK_F_USAGE))
+               spl_relocate_stack_check();
+
 #if defined(CONFIG_SPL_SYS_MALLOC_SIMPLE) && CONFIG_VAL(SYS_MALLOC_F_LEN)
        if (CONFIG_SPL_STACK_R_MALLOC_SIMPLE_LEN) {
                debug("SPL malloc() before relocation used 0x%lx bytes (%ld KB)\n",