summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2014-09-10 11:10:04 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2014-09-10 11:29:54 +0200
commit4768ae0feb0d6fdfa02fbd7a8c0e9965efd505e9 (patch)
tree9811416646cec1a3023fae1756e7c8f4a315a7e0
parentbsp/altera-cyclone-v: Add BSP_USE_UART_INTERRUPTS (diff)
downloadrtems-4768ae0feb0d6fdfa02fbd7a8c0e9965efd505e9.tar.bz2
bsps/arm: Fix invalidate instruction cache
Do not invalidate the entire L2 cache since it is a uniform cache in _CPU_cache_invalidate_entire_instruction(). For consitency do not touch the L2 cache even for the range function _CPU_cache_invalidate_instruction_range().
-rw-r--r--c/src/lib/libbsp/arm/shared/arm-l2c-310/cache_.h35
1 files changed, 2 insertions, 33 deletions
diff --git a/c/src/lib/libbsp/arm/shared/arm-l2c-310/cache_.h b/c/src/lib/libbsp/arm/shared/arm-l2c-310/cache_.h
index 577fd2f2e2..f88608a5db 100644
--- a/c/src/lib/libbsp/arm/shared/arm-l2c-310/cache_.h
+++ b/c/src/lib/libbsp/arm/shared/arm-l2c-310/cache_.h
@@ -1485,45 +1485,14 @@ _CPU_cache_unfreeze_data( void )
}
static inline void
-_CPU_cache_invalidate_instruction_range(
- const void *i_addr,
- size_t n_bytes
-)
+_CPU_cache_invalidate_instruction_range( const void *i_addr, size_t n_bytes)
{
- if ( n_bytes != 0 ) {
- uint32_t adx = (uint32_t) i_addr
- & ~CACHE_L2C_310_DATA_LINE_MASK;
- const uint32_t ADDR_LAST =
- (uint32_t)( (size_t)i_addr + n_bytes - 1 );
- uint32_t block_end =
- CACHE_MIN( ADDR_LAST, adx + CACHE_MAX_LOCKING_BYTES );
-
- /* Invalidate L2 cache lines */
- for (;
- adx <= ADDR_LAST;
- adx = block_end + 1,
- block_end = CACHE_MIN( ADDR_LAST, adx + CACHE_MAX_LOCKING_BYTES )) {
- cache_l2c_310_invalidate_range(
- adx,
- block_end
- );
- }
-
- arm_cache_l1_invalidate_instruction_range(
- i_addr,
- n_bytes
- );
- }
+ arm_cache_l1_invalidate_instruction_range( i_addr, n_bytes );
}
static inline void
_CPU_cache_invalidate_entire_instruction( void )
{
- rtems_interrupt_lock_context lock_context;
-
- rtems_interrupt_lock_acquire( &l2c_310_cache_lock, &lock_context );
- cache_l2c_310_invalidate_entire();
- rtems_interrupt_lock_release( &l2c_310_cache_lock, &lock_context );
arm_cache_l1_invalidate_entire_instruction();
}