From aa19873f6823a419331f30592e1856e196cc1532 Mon Sep 17 00:00:00 2001 From: Martin Aberg Date: Mon, 24 Apr 2017 16:39:49 +0200 Subject: leon: allow SMP boot from any CPU --- c/src/lib/libbsp/sparc/shared/start/start.S | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) (limited to 'c/src/lib/libbsp/sparc/shared') diff --git a/c/src/lib/libbsp/sparc/shared/start/start.S b/c/src/lib/libbsp/sparc/shared/start/start.S index 529a3c79b5..6a9faaff5d 100644 --- a/c/src/lib/libbsp/sparc/shared/start/start.S +++ b/c/src/lib/libbsp/sparc/shared/start/start.S @@ -281,13 +281,16 @@ SYM(hard_reset): rd %asr17, %o0 ! get CPU identifier srl %o0, LEON3_ASR17_PROCESSOR_INDEX_SHIFT, %o0 - cmp %o0, 0 - beq cpu0 - nop - sll %o0, PER_CPU_CONTROL_SIZE_LOG2, %l0 add %g6, %l0, %g6 + /* If LEON3_Boot_Cpu < 0 then assign us as boot CPU and continue. */ + set SYM(LEON3_Boot_Cpu), %o1 + ld [%o1], %o2 + tst %o2 + bneg .Lbootcpu + nop + ld [%g6 + PER_CPU_INTERRUPT_STACK_HIGH], %sp ! set stack pointer sub %sp, 4, %sp ! stack starts at end of area - 4 andn %sp, 0x0f, %sp ! align stack on 16-byte boundary @@ -295,7 +298,8 @@ SYM(hard_reset): call SYM(bsp_start_on_secondary_processor) ! does not return sub %sp, SPARC_MINIMUM_STACK_FRAME_SIZE, %sp -cpu0: +.Lbootcpu: + st %o0, [%o1] #endif set (SYM(rdb_start)), %g5 ! End of RAM -- cgit v1.2.3