]> git.sur5r.net Git - u-boot/blobdiff - arch/arm/lib/crt0_64.S
ARMv8: Allow dynamic early stack pointer
[u-boot] / arch / arm / lib / crt0_64.S
index ccefce0b20a4658d383c61f7981009ca6855cd0f..a181283e0fa9008162cfad63b5ddfd9adf98ed39 100644 (file)
@@ -73,6 +73,9 @@ ENTRY(_main)
        ldr     x0, =(CONFIG_TPL_STACK)
 #elif defined(CONFIG_SPL_BUILD) && defined(CONFIG_SPL_STACK)
        ldr     x0, =(CONFIG_SPL_STACK)
+#elif defined(CONFIG_SYS_INIT_SP_BSS_OFFSET)
+       adr     x0, __bss_start
+       add     x0, x0, #CONFIG_SYS_INIT_SP_BSS_OFFSET
 #else
        ldr     x0, =(CONFIG_SYS_INIT_SP_ADDR)
 #endif
@@ -120,8 +123,9 @@ relocation_return:
 #endif /* !CONFIG_SPL_BUILD */
 #if defined(CONFIG_SPL_BUILD)
        bl      spl_relocate_stack_gd           /* may return NULL */
-       /* set up gd here, outside any C code */
-       mov     x18, x0
+       /* set up gd here, outside any C code, if new stack is returned */
+       cmp     x0, #0
+       csel    x18, x0, x18, ne
        /*
         * Perform 'sp = (x0 != NULL) ? x0 : sp' while working
         * around the constraint that conditional moves can not