[PATCH 1/2] bsp/sparc: Flush icache before first time enabling interrupts
Joel Sherrill
joel.sherrill at oarcorp.com
Thu Jul 3 15:55:34 UTC 2014
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" );
--
Joel Sherrill, Ph.D. Director of Research & Development
joel.sherrill at OARcorp.com On-Line Applications Research
Ask me about RTEMS: a free RTOS Huntsville AL 35805
Support Available (256) 722-9985
More information about the devel
mailing list