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

@@ -106,14 +106,18 @@ _reloc:
stw r0, 4(sp)
mov fp, sp
/* Allocate and zero GD, update SP */
/* Allocate and initialize reserved area, update SP */
mov r4, sp
movhi r2, %hi(board_init_f_mem@h)
ori r2, r2, %lo(board_init_f_mem@h)
movhi r2, %hi(board_init_f_alloc_reserve@h)
ori r2, r2, %lo(board_init_f_alloc_reserve@h)
callr r2
mov sp, r2
mov r4, sp
movhi r2, %hi(board_init_f_init_reserve@h)
ori r2, r2, %lo(board_init_f_init_reserve@h)
callr r2
/* Update stack- and frame-pointers */
mov sp, r2
/* Update frame-pointer */
mov fp, sp
/* Call board_init_f -- never returns */