summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--c/src/lib/libbsp/sparc/leon3/startup/bspsmp.c9
-rw-r--r--cpukit/score/cpu/sparc/rtems/score/cpu.h4
2 files changed, 13 insertions, 0 deletions
diff --git a/c/src/lib/libbsp/sparc/leon3/startup/bspsmp.c b/c/src/lib/libbsp/sparc/leon3/startup/bspsmp.c
index 567eecc819..9166ad5630 100644
--- a/c/src/lib/libbsp/sparc/leon3/startup/bspsmp.c
+++ b/c/src/lib/libbsp/sparc/leon3/startup/bspsmp.c
@@ -15,6 +15,7 @@
#include <bsp.h>
#include <bsp/bootcard.h>
+#include <cache_.h>
#include <leon.h>
#include <rtems/bspIo.h>
#include <rtems/score/smpimpl.h>
@@ -80,3 +81,11 @@ void _CPU_SMP_Send_interrupt(uint32_t target_processor_index)
/* send interrupt to destination CPU */
LEON3_IrqCtrl_Regs->force[target_processor_index] = 1 << LEON3_MP_IRQ;
}
+
+void _BSP_Start_multitasking(
+ Context_Control *heir
+)
+{
+ _CPU_cache_invalidate_entire_instruction();
+ _CPU_Context_Restart_self( heir );
+}
diff --git a/cpukit/score/cpu/sparc/rtems/score/cpu.h b/cpukit/score/cpu/sparc/rtems/score/cpu.h
index 39b78258c1..9c38b55e7d 100644
--- a/cpukit/score/cpu/sparc/rtems/score/cpu.h
+++ b/cpukit/score/cpu/sparc/rtems/score/cpu.h
@@ -1203,6 +1203,10 @@ register struct Per_CPU_Control *_SPARC_Per_CPU_current __asm__( "g6" );
void _CPU_SMP_Send_interrupt( uint32_t target_processor_index );
+ void _BSP_Start_multitasking( Context_Control *heir )
+ RTEMS_COMPILER_NO_RETURN_ATTRIBUTE;
+ #define _CPU_Start_multitasking _BSP_Start_multitasking
+
static inline void _CPU_SMP_Processor_event_broadcast( void )
{
__asm__ volatile ( "" : : : "memory" );