bsp/sparc: Flush icache before first time enabling interrupts

A secondary processor might miss changes done to the trap table
if the instruction cache is not flushed. Once interrupts are enabled
any other required cache flushes can be ordered via the cache
manager.
This commit is contained in:
Daniel Cederman
2014-07-03 11:18:55 +02:00
committed by Daniel Hellstrom
parent aed38189be
commit 54f3476e24
2 changed files with 13 additions and 0 deletions

View File

@@ -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 );
}

View File

@@ -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" );