aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Schwierzeck <daniel.schwierzeck@gmail.com>2016-09-25 18:36:38 +0200
committerDaniel Schwierzeck <daniel.schwierzeck@gmail.com>2016-11-30 16:11:46 +0100
commitc3e72ab80135a19ac6eb2585b69de0acf19b87c1 (patch)
tree91f0f05ee7e3569f503555f0c9c07bb207e0a730
parent65d297af7c6a08ec65bf005fa9bd5cdb955efe39 (diff)
MIPS: factor out code for initial stack and global data
Move the code for setting up the initial stack and global data to a macro to be able to use it more than once. Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com>
-rw-r--r--arch/mips/cpu/start.S56
1 files changed, 30 insertions, 26 deletions
diff --git a/arch/mips/cpu/start.S b/arch/mips/cpu/start.S
index 1ad1884a8d..f1040c27b6 100644
--- a/arch/mips/cpu/start.S
+++ b/arch/mips/cpu/start.S
@@ -52,6 +52,34 @@
sdbbp 1 # Invoke UHI operation
.endm
+ .macro setup_stack_gd
+ li t0, -16
+ PTR_LI t1, CONFIG_SYS_INIT_SP_ADDR
+ and sp, t1, t0 # force 16 byte alignment
+ PTR_SUBU \
+ sp, sp, GD_SIZE # reserve space for gd
+ and sp, sp, t0 # force 16 byte alignment
+ move k0, sp # save gd pointer
+#ifdef CONFIG_SYS_MALLOC_F_LEN
+ li t2, CONFIG_SYS_MALLOC_F_LEN
+ PTR_SUBU \
+ sp, sp, t2 # reserve space for early malloc
+ and sp, sp, t0 # force 16 byte alignment
+#endif
+ move fp, sp
+
+ /* Clear gd */
+ move t0, k0
+1:
+ PTR_S zero, 0(t0)
+ blt t0, t1, 1b
+ PTR_ADDIU t0, PTRSIZE
+
+#ifdef CONFIG_SYS_MALLOC_F_LEN
+ PTR_S sp, GD_MALLOC_BASE(k0) # gd->malloc_base offset
+#endif
+ .endm
+
ENTRY(_start)
/* U-Boot entry point */
b reset
@@ -227,32 +255,8 @@ wr_done:
# endif
#endif
- /* Set up temporary stack */
- li t0, -16
- PTR_LI t1, CONFIG_SYS_INIT_SP_ADDR
- and sp, t1, t0 # force 16 byte alignment
- PTR_SUBU \
- sp, sp, GD_SIZE # reserve space for gd
- and sp, sp, t0 # force 16 byte alignment
- move k0, sp # save gd pointer
-#ifdef CONFIG_SYS_MALLOC_F_LEN
- li t2, CONFIG_SYS_MALLOC_F_LEN
- PTR_SUBU \
- sp, sp, t2 # reserve space for early malloc
- and sp, sp, t0 # force 16 byte alignment
-#endif
- move fp, sp
-
- /* Clear gd */
- move t0, k0
-1:
- PTR_S zero, 0(t0)
- blt t0, t1, 1b
- PTR_ADDIU t0, PTRSIZE
-
-#ifdef CONFIG_SYS_MALLOC_F_LEN
- PTR_S sp, GD_MALLOC_BASE(k0) # gd->malloc_base offset
-#endif
+ /* Set up initial stack and global data */
+ setup_stack_gd
move a0, zero # a0 <-- boot_flags = 0
PTR_LA t9, board_init_f