1
2
3
4
5
6
7
8
9
10
11
12
13
14#ifndef __BARRIERS_H__
15#define __BARRIERS_H__
16
17#ifndef __ASSEMBLY__
18
19#ifndef CONFIG_ARM64
20
21
22
23
24
25
26#define CP15ISB asm volatile ("mcr p15, 0, %0, c7, c5, 4" : : "r" (0))
27#define CP15DSB asm volatile ("mcr p15, 0, %0, c7, c10, 4" : : "r" (0))
28#define CP15DMB asm volatile ("mcr p15, 0, %0, c7, c10, 5" : : "r" (0))
29
30#endif
31
32#if __LINUX_ARM_ARCH__ >= 7
33#define ISB asm volatile ("isb sy" : : : "memory")
34#define DSB asm volatile ("dsb sy" : : : "memory")
35#define DMB asm volatile ("dmb sy" : : : "memory")
36#elif __LINUX_ARM_ARCH__ == 6
37#define ISB CP15ISB
38#define DSB CP15DSB
39#define DMB CP15DMB
40#else
41#define ISB asm volatile ("" : : : "memory")
42#define DSB CP15DSB
43#define DMB asm volatile ("" : : : "memory")
44#endif
45
46#define isb() ISB
47#define dsb() DSB
48#define dmb() DMB
49#endif
50#endif
51