Changeset d5610b9 in mainline for kernel/arch/arm32/include/arch/barrier.h
- Timestamp:
- 2015-10-03T08:37:37Z (9 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- afe5e09
- Parents:
- 8ca6f08
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/arch/arm32/include/arch/barrier.h
r8ca6f08 rd5610b9 38 38 39 39 #ifdef KERNEL 40 #include <arch/cache.h> 40 41 #include <arch/cp15.h> 41 42 #else … … 71 72 * CP15 implementation is mandatory only for armv6+. 72 73 */ 74 #if defined(PROCESSOR_ARCH_armv6) || defined(PROCESSOR_ARCH_armv7_a) 73 75 #define memory_barrier() CP15DMB_write(0) 74 #define read_barrier() CP15DSB_write(0) 76 #else 77 #define memory_barrier() CP15DSB_write(0) 78 #endif 79 #define read_barrier() CP15DSB_write(0) 75 80 #define write_barrier() read_barrier() 81 #if defined(PROCESSOR_ARCH_armv6) || defined(PROCESSOR_ARCH_armv7_a) 76 82 #define inst_barrier() CP15ISB_write(0) 83 #else 84 #define inst_barrier() 85 #endif 77 86 #else 78 87 /* Older manuals mention syscalls as a way to implement cache coherency and … … 103 112 104 113 #if defined PROCESSOR_ARCH_armv7_a | defined PROCESSOR_ARCH_armv6 | defined KERNEL 105 /* Available on all supported arms,106 * invalidates entire ICache so the written value does not matter. */107 114 //TODO might be PL1 only on armv5- 108 115 #define smc_coherence(a) \ 109 116 do { \ 110 DCCMVAU_write((uint32_t)(a)); /* Flush changed memory */\117 dcache_clean_mva_pou((uintptr_t) a);\ 111 118 write_barrier(); /* Wait for completion */\ 112 ICIALLU_write(0); /* Flush ICache */\119 icache_invalidate();\ 113 120 inst_barrier(); /* Wait for Inst refetch */\ 114 121 } while (0)
Note:
See TracChangeset
for help on using the changeset viewer.