diff options
author | Aaron Durbin <adurbin@chromium.org> | 2014-07-10 12:40:30 -0500 |
---|---|---|
committer | Marc Jones <marc.jones@se-eng.com> | 2015-03-04 20:00:18 +0100 |
commit | 0df877a65ac6563f1e46eea9e15e34a366d7105f (patch) | |
tree | 132bea64b5c92123ea72260eedb0da2a166b1380 /src/arch/arm64/armv8 | |
parent | 6ba1b628eeabef60ea6b0abeea0d2825ddf99dfe (diff) |
arm64: use one stage_entry for all stages
Ramstage needs an assembly entry point for setting up
the initial state of the CPU. Therefore, a function is
provided, arm64_el3_startup(), that bootstraps the state
of the processor, initializes the stack pointer, and
branches to a defined entry symbol. To make this work
without adding too much preprocessor macro conditions
provide _stack and _estack for all the stages.
Currently the entry point after initialization is 'main',
however it can be changed/extended to do more work such
as seeding the stack contents with tombstones, etc.
It should be noted that romstage and bootblock weren't
tested. Only ramstage is known to work.
BUG=chrome-os-partner:29923
BRANCH=None
TEST=Brought up 64-bit ramstage on rush.
Original-Change-Id: I1f07d5b6656e13e6667b038cdc1f4be8843d1960
Original-Signed-off-by: Aaron Durbin <adurbin@chromium.org>
Original-Reviewed-on: https://chromium-review.googlesource.com/207262
Original-Reviewed-by: Furquan Shaikh <furquan@chromium.org>
(cherry picked from commit 7850ee3a7bf48c05f2e64147edb92161f8308f19)
Signed-off-by: Marc Jones <marc.jones@se-eng.com>
Change-Id: Ia87697f49638c8c249215d441d95f1ec621e0949
Reviewed-on: http://review.coreboot.org/8585
Tested-by: build bot (Jenkins)
Reviewed-by: Aaron Durbin <adurbin@google.com>
Diffstat (limited to 'src/arch/arm64/armv8')
-rw-r--r-- | src/arch/arm64/armv8/bootblock.S | 62 |
1 files changed, 0 insertions, 62 deletions
diff --git a/src/arch/arm64/armv8/bootblock.S b/src/arch/arm64/armv8/bootblock.S index e65515f20b..ef7064580f 100644 --- a/src/arch/arm64/armv8/bootblock.S +++ b/src/arch/arm64/armv8/bootblock.S @@ -19,68 +19,6 @@ * MA 02111-1307 USA */ -.section ".start", "a", %progbits -.globl _start -_start: b reset - .balignl 16,0xdeadbeef - -_cbfs_master_header: - /* The CBFS master header is inserted by cbfstool at the first - * aligned offset after the above anchor string is found. - * Hence, we leave some space for it. - * Assumes 64-byte alignment. - */ - .skip 128 - -reset: - /* - * Set the cpu to SVC32 mode and unmask aborts. Aborts might happen - * before logging is turned on and may crash the machine, but at least - * the problem will show up near the code that causes it. - */ - /* FIXME: Not using supervisor mode, does it apply for aarch64? */ - - msr daifclr, #0xc /* Unmask Debug and System exceptions */ - msr daifset, #0x3 /* Mask IRQ, FIQ */ - - bl arm_init_caches - - /* - * Initialize the stack to a known value. This is used to check for - * stack overflow later in the boot process. - */ - ldr x0, .Stack - ldr x1, .Stack_size - sub x0, x0, x1 - ldr x1, .Stack - ldr x2, =0xdeadbeefdeadbeef -init_stack_loop: - str x2, [x0] - add x0, x0, #8 - cmp x0, x1 - bne init_stack_loop - -/* Set stackpointer in internal RAM to call bootblock main() */ -call_bootblock: - ldr x0, .Stack /* Set up stack pointer */ - mov sp, x0 - ldr x0, =0x00000000 - - sub sp, sp, #16 - - /* - * Switch to EL2 already because Linux requires to be - * in EL1 or EL2, see its "Booting AArch64 Linux" doc - */ - bl switch_el3_to_el2 - bl main - -.align 3 -.Stack: - .word CONFIG_STACK_TOP -.align 3 -.Stack_size: - .word CONFIG_STACK_SIZE .section ".id", "a", %progbits .globl __id_start |