Rev 3133 | Rev 3145 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 3133 | Rev 3134 | ||
---|---|---|---|
Line 55... | Line 55... | ||
55 | #define read_barrier() \ |
55 | #define read_barrier() \ |
56 | asm volatile ("membar #LoadLoad\n" ::: "memory") |
56 | asm volatile ("membar #LoadLoad\n" ::: "memory") |
57 | #define write_barrier() \ |
57 | #define write_barrier() \ |
58 | asm volatile ("membar #StoreStore\n" ::: "memory") |
58 | asm volatile ("membar #StoreStore\n" ::: "memory") |
59 | 59 | ||
60 | static inline void flush(uintptr_t addr) |
60 | #define flush(a) \ |
61 | { |
- | |
62 | asm volatile ("flush %0\n" :: "r" (addr) : "memory"); |
61 | asm volatile ("flush %0\n" :: "r" ((a)) : "memory") |
63 | } |
- | |
64 | 62 | ||
65 | /** Flush Instruction Memory instruction. */ |
63 | /** Flush Instruction Memory instruction. */ |
66 | static inline void flush_blind(void) |
64 | static inline void flush_blind(void) |
67 | { |
65 | { |
68 | /* |
66 | /* |
Line 88... | Line 86... | ||
88 | { \ |
86 | { \ |
89 | write_barrier(); \ |
87 | write_barrier(); \ |
90 | flush((a)); \ |
88 | flush((a)); \ |
91 | } |
89 | } |
92 | 90 | ||
- | 91 | #define FLUSH_INVAL_MIN 4 |
|
- | 92 | #define smc_coherence_block(a, l) \ |
|
- | 93 | { \ |
|
- | 94 | unsigned long i; \ |
|
- | 95 | write_barrier(); \ |
|
- | 96 | for (i = 0; i < (l); i += FLUSH_INVAL_MIN) \ |
|
- | 97 | flush((void *)(a) + i); \ |
|
- | 98 | } |
|
- | 99 | ||
93 | #endif |
100 | #endif |
94 | 101 | ||
95 | /** @} |
102 | /** @} |
96 | */ |
103 | */ |