x86: Add a way to jump from TPL to SPL
authorSimon Glass <sjg@chromium.org>
Thu, 2 May 2019 16:52:27 +0000 (10:52 -0600)
committerBin Meng <bmeng.cn@gmail.com>
Wed, 8 May 2019 05:02:18 +0000 (13:02 +0800)
When TPL finishes it needs to jump to SPL with the stack set up correctly.
Add a function to handle this.

Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
arch/x86/cpu/start.S

index 30fa7def464337d57f425d88ed60a86c6457c89c..4a82add76b754fcb9726503c73c8d51dd91afc66 100644 (file)
@@ -190,6 +190,19 @@ board_init_f_r_trampoline:
        /* Re-enter U-Boot by calling board_init_f_r() */
        call    board_init_f_r
 
+#ifdef CONFIG_TPL
+.globl jump_to_spl
+.type jump_to_spl, @function
+jump_to_spl:
+       /* Reset stack to the top of CAR space */
+       movl    $(CONFIG_SYS_CAR_ADDR + CONFIG_SYS_CAR_SIZE - 4), %esp
+#ifdef CONFIG_DCACHE_RAM_MRC_VAR_SIZE
+       subl    $CONFIG_DCACHE_RAM_MRC_VAR_SIZE, %esp
+#endif
+
+       jmp     *%eax
+#endif
+
 die:
        hlt
        jmp     die