Go to the documentation of this file.
25 #ifndef __CPU_ARCH__CPU_H__
26 #define __CPU_ARCH__CPU_H__
30 #define CACHELINE_SIZE 32
33 #define __asmeq(x, y) ".ifnc " x "," y " ; .err ; .endif\n\t"
36 #define SCTLR_M 0x00000001
37 #define SCTLR_C (1 << 2)
38 #define SCTLR_I (1 << 12)
39 #define SCTLR_Z (1 << 11)
41 #define isb() __asm__ __volatile__("ISB")
42 #define dmb() __asm__ __volatile__("DMB")
43 #define dsb() __asm__ __volatile__("DSB")
52 #define nop() __asm__ __volatile__("mov\tr0,r0\t@ nop\n\t");
57 #define get_mpid() ({ u32 rval; asm volatile(\
58 " mrc p15, 0, %0, c0, c0, 5\n\t" \
59 : "=r" (rval) : : "memory", "cc"); rval;})
63 #define read_sctlr() ({ u32 rval; asm volatile(\
64 " mrc p15, 0, %0, c1, c0, 0\n\t" \
65 : "=r" (rval) : : "memory", "cc"); rval;})
70 #define write_sctlr(val) ({ asm volatile(\
71 " mcr p15, 0, %0, c1, c0, 0\n\t" \
73 :: "r" ((val)) : "memory", "cc");})
78 #define read_dfsr() ({ u32 rval; asm volatile(\
79 " mrc p15, 0, %0, c5, c0, 0\n\t" \
80 : "=r" (rval) : : "memory", "cc"); rval;})
85 #define read_dfar() ({ u32 rval; asm volatile(\
86 " mrc p15, 0, %0, c6, c0, 0\n\t" \
87 : "=r" (rval) : : "memory", "cc"); rval;})
92 #define read_ifsr() ({ u32 rval; asm volatile(\
93 " mrc p15, 0, %0, c5, c0, 1\n\t" \
94 : "=r" (rval) : : "memory", "cc"); rval;})
99 #define read_ifar() ({ u32 rval; asm volatile(\
100 " mrc p15, 0, %0, c6, c0, 2\n\t" \
101 : "=r" (rval) : : "memory", "cc"); rval;})
106 #define read_vbar() ({ u32 rval; asm volatile(\
107 " mrc p15, 0, %0, c12, c0, 0\n\t" \
108 : "=r" (rval) : : "memory", "cc"); rval;})
113 #define clear_icache() ({ asm volatile(\
114 " mcr p15, 0, r0, c7, c5, 0\n\t" \
115 ::: "memory", "cc");})
120 #define inv_branch_predict() ({ asm volatile(\
121 " mcr p15, 0, r0, c7, c5, 6\n\t" \
122 ::: "memory", "cc");})
127 #define get_ttbcr() ({ u32 rval; asm volatile(\
128 " mrc p15, 0, %0, c2, c0, 0\n\t" \
129 : "=r" (rval) : : "memory", "cc"); rval;})
134 #define set_ttbcr(val) ({ asm volatile(\
135 " mcr p15, 0, %0, c2, c0, 0\n\t" \
136 :: "r" ((val)) : "memory", "cc");})
141 #define read_domain() ({ u32 rval; asm volatile(\
142 " mrc p15, 0, %0, c3, c0, 0\n\t" \
143 : "=r" (rval) : : "memory", "cc"); rval;})
148 #define write_domain(val) ({ asm volatile(\
149 " mcr p15, 0, %0, c3, c0, 0\n\t" \
150 :: "r" ((val)) : "memory", "cc");})
155 #define read_ttbr0() ({ u32 rval; asm volatile(\
156 " mrc p15, 0, %0, c2, c0, 0\n\t" \
157 : "=r" (rval) : : "memory", "cc"); rval;})
162 #define write_ttbr0(val) asm volatile(\
163 " mcr p15, 0, %0, c2, c0, 0\n\t" \
164 :: "r" ((val)) : "memory", "cc")
169 #define read_ttbr1() ({ u32 rval; asm volatile(\
170 " mrc p15, 0, %0, c2, c0, 1\n\t" \
171 : "=r" (rval) : : "memory", "cc"); rval;})
176 #define write_ttbr1(val) asm volatile(\
177 " mcr p15, 0, %0, c2, c0, 1\n\t" \
178 :: "r" ((val)) : "memory", "cc")
185 #define read_thread_id() ({u32 rval; asm volatile(\
186 "mrc p15, 0, %0, c13, c0, 4\n\t" \
187 : "=r" (rval) : : "memory", "cc"); rval;})
193 #define write_thread_id(val) asm volatile(\
194 "mcr p15, 0, %0, c13, c0, 4\n\t" \
195 :: "r" ((val)) : "memory" , "cc")
201 #define infinite_idle_loop() \
205 __asm__ __volatile__ ("WFI"); \