|
|
|
@ -258,14 +258,40 @@ in_flash: |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
/* set up the stack pointer in our newly created |
|
|
|
|
* cache-ram (r1) */ |
|
|
|
|
lis r1, (CONFIG_SYS_INIT_RAM_ADDR + CONFIG_SYS_GBL_DATA_OFFSET)@h
|
|
|
|
|
ori r1, r1, (CONFIG_SYS_INIT_RAM_ADDR + CONFIG_SYS_GBL_DATA_OFFSET)@l
|
|
|
|
|
* cache-ram; use r3 to keep the new SP for now to
|
|
|
|
|
* avoid overiding the SP it uselessly */ |
|
|
|
|
lis r3, (CONFIG_SYS_INIT_RAM_ADDR + CONFIG_SYS_GBL_DATA_OFFSET)@h
|
|
|
|
|
ori r3, r3, (CONFIG_SYS_INIT_RAM_ADDR + CONFIG_SYS_GBL_DATA_OFFSET)@l
|
|
|
|
|
|
|
|
|
|
/* r4 = end of GD area */ |
|
|
|
|
addi r4, r3, GENERATED_GBL_DATA_SIZE |
|
|
|
|
|
|
|
|
|
/* Zero GD area */ |
|
|
|
|
li r0, 0 |
|
|
|
|
1: |
|
|
|
|
subi r4, r4, 1 |
|
|
|
|
stb r0, 0(r4) |
|
|
|
|
cmplw r3, r4 |
|
|
|
|
bne 1b |
|
|
|
|
|
|
|
|
|
#ifdef CONFIG_SYS_MALLOC_F_LEN |
|
|
|
|
|
|
|
|
|
#if CONFIG_SYS_MALLOC_F_LEN + GENERATED_GBL_DATA_SIZE > CONFIG_SYS_INIT_RAM_SIZE |
|
|
|
|
#error "CONFIG_SYS_MALLOC_F_LEN too large to fit into initial RAM." |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
/* r3 = new stack pointer / pre-reloc malloc area */ |
|
|
|
|
subi r3, r3, CONFIG_SYS_MALLOC_F_LEN |
|
|
|
|
|
|
|
|
|
/* Set pointer to pre-reloc malloc area in GD */ |
|
|
|
|
stw r3, GD_MALLOC_BASE(r4) |
|
|
|
|
#endif |
|
|
|
|
li r0, 0 /* Make room for stack frame header and */ |
|
|
|
|
stwu r0, -4(r1) /* clear final stack frame so that */ |
|
|
|
|
stwu r0, -4(r1) /* stack backtraces terminate cleanly */ |
|
|
|
|
stwu r0, -4(r3) /* clear final stack frame so that */ |
|
|
|
|
stwu r0, -4(r3) /* stack backtraces terminate cleanly */ |
|
|
|
|
|
|
|
|
|
/* Finally, actually set SP */ |
|
|
|
|
mr r1, r3 |
|
|
|
|
|
|
|
|
|
/* let the C-code set up the rest */ |
|
|
|
|
/* */ |
|
|
|
|