diff options
Diffstat (limited to 'c/src/lib/libbsp/arm/xilinx-zynq/startup/bspsmp.c')
-rw-r--r-- | c/src/lib/libbsp/arm/xilinx-zynq/startup/bspsmp.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/c/src/lib/libbsp/arm/xilinx-zynq/startup/bspsmp.c b/c/src/lib/libbsp/arm/xilinx-zynq/startup/bspsmp.c index 3940352d9b..310014d8de 100644 --- a/c/src/lib/libbsp/arm/xilinx-zynq/startup/bspsmp.c +++ b/c/src/lib/libbsp/arm/xilinx-zynq/startup/bspsmp.c @@ -14,9 +14,24 @@ #include <rtems/score/smpimpl.h> +extern void _start(void); + bool _CPU_SMP_Start_processor(uint32_t cpu_index) { /* + * Enable the second CPU. + */ + if (cpu_index != 0) { + volatile uint32_t* const kick_address = (uint32_t*) 0xfffffff0UL; + _ARM_Data_synchronization_barrier(); + _ARM_Instruction_synchronization_barrier(); + *kick_address = (uint32_t) _start; + _ARM_Data_synchronization_barrier(); + _ARM_Instruction_synchronization_barrier(); + _ARM_Send_event(); + } + + /* * Wait for secondary processor to complete its basic initialization so that * we can enable the unified L2 cache. */ |