|
@@ -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
|