Fix board init code to respect the C runtime environment

board_init_f_mem() alters the C runtime environment's
stack it is actually already using. This is not a valid
behaviour within a C runtime environment.

Split board_init_f_mem into C functions which do not alter
their own stack and always behave properly with respect to
their C runtime environment.

Signed-off-by: Albert ARIBAUD <albert.u.boot@aribaud.net>
Acked-by: Thomas Chou <thomas@wytron.com.tw>
This commit is contained in:
Albert ARIBAUD
2015-11-25 17:56:32 +01:00
committed by Tom Rini
parent 20d08f59fa
commit ecc306639e
10 changed files with 146 additions and 51 deletions

View File

@@ -50,18 +50,20 @@ ENTRY(_start)
1:
#endif
/* Setup stack- and frame-pointers */
/* Establish C runtime stack and frame */
mov %sp, CONFIG_SYS_INIT_SP_ADDR
mov %fp, %sp
/* Allocate and zero GD, update SP */
/* Allocate reserved area from current top of stack */
mov %r0, %sp
bl board_init_f_mem
/* Update stack- and frame-pointers */
bl board_init_f_alloc_reserve
/* Set stack below reserved area, adjust frame pointer accordingly */
mov %sp, %r0
mov %fp, %sp
/* Initialize reserved area - note: r0 already contains address */
bl board_init_f_init_reserve
/* Zero the one and only argument of "board_init_f" */
mov_s %r0, 0
j board_init_f