Thank you for your comments Joel! > I really don't like adding calls to anything BSP_xxx in score/cpu. > > Can this be done in bsp_postdriver_hook() for the LEON3?
It is only the main cpu that calls bsp_postdriver_hook() and the cache invalidation code needs to be run on the secondary cpus. I could rename it to _SPARC_Start_multitasking and place it in score/cpu instead, as was done for ARM7VM?
Daniel Cederman Software Engineer Aeroflex Gaisler AB Aeroflex Microelectronic Solutions – HiRel Kungsgatan 12 SE-411 19 Gothenburg, Sweden Phone: +46 31 7758665 [email protected] www.Aeroflex.com/Gaisler On 2014-07-03 17:55, Joel Sherrill wrote:
On 7/3/2014 4:39 AM, Daniel Cederman wrote: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. --- c/src/lib/libbsp/sparc/leon3/startup/bspsmp.c | 9 +++++++++ cpukit/score/cpu/sparc/rtems/score/cpu.h | 4 ++++ 2 files changed, 13 insertions(+) diff --git a/c/src/lib/libbsp/sparc/leon3/startup/bspsmp.c b/c/src/lib/libbsp/sparc/leon3/startup/bspsmp.c index 567eecc..9166ad5 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 c010005..4a08441 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 +I really don't like adding calls to anything BSP_xxx in score/cpu. Can this be done in bsp_postdriver_hook() for the LEON3?static inline void _CPU_SMP_Processor_event_broadcast( void ) { __asm__ volatile ( "" : : : "memory" );
_______________________________________________ devel mailing list [email protected] http://lists.rtems.org/mailman/listinfo/devel
