diff options
Diffstat (limited to 'bsps/arm/shared/start/start.S')
-rw-r--r-- | bsps/arm/shared/start/start.S | 31 |
1 files changed, 22 insertions, 9 deletions
diff --git a/bsps/arm/shared/start/start.S b/bsps/arm/shared/start/start.S index bc87e7b36d..dfd0d3891d 100644 --- a/bsps/arm/shared/start/start.S +++ b/bsps/arm/shared/start/start.S @@ -5,13 +5,7 @@ */ /* - * Copyright (c) 2008, 2020 embedded brains GmbH. All rights reserved. - * - * embedded brains GmbH - * Dornierstr. 4 - * 82178 Puchheim - * Germany - * <rtems@embedded-brains.de> + * Copyright (C) 2008, 2020 embedded brains GmbH & Co. KG * * Copyright (c) 2016 Pavel Pisa <pisa@cmp.felk.cvut.cz> * @@ -35,7 +29,9 @@ /* Global symbols */ .globl _start + .type _start, %function .globl bsp_start_hook_0_done + .type bsp_start_hook_0_done, %function .globl bsp_start_vector_table_begin .globl bsp_start_vector_table_end .globl bsp_start_vector_table_size @@ -81,6 +77,10 @@ bsp_start_vector_table_begin: ldr pc, .Lhandler_addr_irq ldr pc, .Lhandler_addr_fiq +#ifdef BSP_START_VECTOR_ADDRESS_TABLE_ALIGNMENT +.balign BSP_START_VECTOR_ADDRESS_TABLE_ALIGNMENT +#endif + .Lhandler_addr_reset: #ifdef BSP_START_RESET_VECTOR @@ -197,9 +197,21 @@ _start: /* Read MPIDR and get current processor index */ mrc p15, 0, r7, c0, c0, 5 and r7, #0xff -#endif -#ifdef RTEMS_SMP + /* + * Check that this is a configured processor. If not, then there is + * not much that can be done since we do not have a stack available for + * this processor. Just loop forever in this case. + */ + ldr r1, =_SMP_Processor_configured_maximum + ldr r1, [r1] + cmp r1, r7 + bgt .Lconfigured_processor +.Linvalid_processor_wait_for_ever: + wfe + b .Linvalid_processor_wait_for_ever +.Lconfigured_processor: + /* * Get current per-CPU control and store it in PL1 only Thread ID * Register (TPIDRPRW). @@ -279,6 +291,7 @@ _start: sub r3, r3, r1 #ifdef BSP_START_NEEDS_REGISTER_INITIALIZATION + /* These are banked FIQ mode registers */ mov r8, #0 mov r9, #0 mov r10, #0 |