arm64: move seeding stack to C

Move the stack seeding out of assembly and into C so the
code in stage_entry.S can more easily be used. The seeding
of the stack doesn't touch at least 256 bytes to account
for current usage at time fo the call.

BUG=chrome-os-partner:31545
BRANCH=None
TEST=Built and booted into kernel on ryu.

Change-Id: Ib9659ec4265652461bde746140567f21533cc265
Signed-off-by: Patrick Georgi <pgeorgi@chromium.org>
Original-Commit-Id: f478cfe175aa674cdfdbbd890663eeaad9d82b1f
Original-Change-Id: I44004220a02b1ff06d27a0555eb4e96d9e213544
Original-Signed-off-by: Aaron Durbin <adurbin@chromium.org>
Original-Reviewed-on: https://chromium-review.googlesource.com/214770
Original-Reviewed-by: Furquan Shaikh <furquan@chromium.org>
Reviewed-on: http://review.coreboot.org/9014
Tested-by: build bot (Jenkins)
Reviewed-by: Stefan Reinauer <stefan.reinauer@coreboot.org>
This commit is contained in:
Aaron Durbin 2014-08-27 15:30:56 -05:00 committed by Patrick Georgi
parent a5c7f66810
commit 30f08ff094
2 changed files with 21 additions and 25 deletions

View File

@ -18,14 +18,34 @@
*/
#include <arch/stages.h>
#include <arch/cpu.h>
void __attribute__((weak)) arm64_soc_init(void)
{
/* Default weak implementation does nothing. */
}
static void seed_stack(void)
{
char *stack_begin;
uint64_t *slot;
int i;
int size;
stack_begin = cpu_get_stack(smp_processor_id());
stack_begin -= CONFIG_STACK_SIZE;
slot = (void *)stack_begin;
/* Pad out 256 bytes for current usage. */
size = CONFIG_STACK_SIZE - 256;
size /= sizeof(*slot);
for (i = 0; i < size; i++)
*slot++ = 0xdeadbeefdeadbeefULL;
}
void arm64_init(void)
{
seed_stack();
arm64_soc_init();
main();
}

View File

@ -74,30 +74,6 @@ ENTRY(cpu_get_exception_stack)
.quad _estack_exceptions
ENDPROC(cpu_get_exception_stack)
ENTRY(seed_stack)
/*
* Initialize the stack to a known value. This is used to check for
* stack overflow later in the boot process.
*/
ldr x0, .stack_bottom
mov x1, sp
ldr x2, =0xdeadbeefdeadbeef
ldr x3, =0x8
init_stack_loop:
str x2, [x0]
add x0, x0, x3
cmp x0, x1
bne init_stack_loop
load_stack:
b arm64_init
.align 4
.stack_bottom:
.quad _stack
ENDPROC(seed_stack)
/*
* Boot strap the processor into a C environemnt. That consists of providing
* 16-byte aligned stack. The programming enviroment uses SP_EL0 as its main
@ -123,7 +99,7 @@ ENTRY(arm64_c_environment)
bl cpu_get_stack
mov sp, x0
b seed_stack
b arm64_init
ENDPROC(arm64_c_environment)
CPU_RESET_ENTRY(arm64_cpu_startup)