Changeset d92bf462 in mainline for kernel/arch/ppc32/include/barrier.h
- Timestamp:
- 2010-05-22T22:31:17Z (15 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- ba7371f9
- Parents:
- d354d57
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/arch/ppc32/include/barrier.h
rd354d57 rd92bf462 27 27 */ 28 28 29 /** @addtogroup ppc32 29 /** @addtogroup ppc32 30 30 * @{ 31 31 */ … … 36 36 #define KERN_ppc32_BARRIER_H_ 37 37 38 #define CS_ENTER_BARRIER() 39 #define CS_LEAVE_BARRIER() 38 #define CS_ENTER_BARRIER() asm volatile ("" ::: "memory") 39 #define CS_LEAVE_BARRIER() asm volatile ("" ::: "memory") 40 40 41 #define memory_barrier() asm volatile ("sync" ::: "memory") 42 #define read_barrier() asm volatile ("sync" ::: "memory") 43 #define write_barrier() asm volatile ("eieio" ::: "memory") 41 #define memory_barrier() asm volatile ("sync" ::: "memory") 42 #define read_barrier() asm volatile ("sync" ::: "memory") 43 #define write_barrier() asm volatile ("eieio" ::: "memory") 44 45 #define instruction_barrier() \ 46 asm volatile ( \ 47 "sync\n" \ 48 "isync\n" \ 49 ) 50 51 #define COHERENCE_INVAL_MIN 4 44 52 45 53 /* … … 53 61 { 54 62 asm volatile ( 55 "dcbst 0, % 0\n"63 "dcbst 0, %[addr]\n" 56 64 "sync\n" 57 "icbi 0, % 0\n"65 "icbi 0, %[addr]\n" 58 66 "sync\n" 59 67 "isync\n" 60 :: "r" (addr)68 :: [addr] "r" (addr) 61 69 ); 62 70 } 63 71 64 #define COHERENCE_INVAL_MIN 4 65 66 static inline void smc_coherence_block(void *addr, unsigned long len) 72 static inline void smc_coherence_block(void *addr, unsigned int len) 67 73 { 68 unsigned long i; 69 70 for (i = 0; i < len; i += COHERENCE_INVAL_MIN) { 71 asm volatile ("dcbst 0, %0\n" :: "r" (addr + i)); 72 } 73 74 asm volatile ("sync"); 75 76 for (i = 0; i < len; i += COHERENCE_INVAL_MIN) { 77 asm volatile ("icbi 0, %0\n" :: "r" (addr + i)); 78 } 79 80 asm volatile ( 81 "sync\n" 82 "isync\n" 83 ); 74 unsigned int i; 75 76 for (i = 0; i < len; i += COHERENCE_INVAL_MIN) 77 asm volatile ( 78 "dcbst 0, %[addr]\n" 79 :: [addr] "r" (addr + i) 80 ); 81 82 memory_barrier(); 83 84 for (i = 0; i < len; i += COHERENCE_INVAL_MIN) 85 asm volatile ( 86 "icbi 0, %[addr]\n" 87 :: [addr] "r" (addr + i) 88 ); 89 90 instruction_barrier(); 84 91 } 85 92
Note:
See TracChangeset
for help on using the changeset viewer.