diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/asm-arm/system.h | 43 |
1 files changed, 30 insertions, 13 deletions
diff --git a/include/asm-arm/system.h b/include/asm-arm/system.h index f05fbe31576c..f60faccf01fa 100644 --- a/include/asm-arm/system.h +++ b/include/asm-arm/system.h | |||
@@ -139,19 +139,36 @@ static inline int cpu_is_xsc3(void) | |||
139 | #define cpu_is_xscale() 1 | 139 | #define cpu_is_xscale() 1 |
140 | #endif | 140 | #endif |
141 | 141 | ||
142 | #define set_cr(x) \ | 142 | static inline unsigned int get_cr(void) |
143 | __asm__ __volatile__( \ | 143 | { |
144 | "mcr p15, 0, %0, c1, c0, 0 @ set CR" \ | 144 | unsigned int val; |
145 | : : "r" (x) : "cc") | 145 | asm("mrc p15, 0, %0, c1, c0, 0 @ get CR" : "=r" (val) : : "cc"); |
146 | 146 | return val; | |
147 | #define get_cr() \ | 147 | } |
148 | ({ \ | 148 | |
149 | unsigned int __val; \ | 149 | static inline void set_cr(unsigned int val) |
150 | __asm__ __volatile__( \ | 150 | { |
151 | "mrc p15, 0, %0, c1, c0, 0 @ get CR" \ | 151 | asm volatile("mcr p15, 0, %0, c1, c0, 0 @ set CR" |
152 | : "=r" (__val) : : "cc"); \ | 152 | : : "r" (val) : "cc"); |
153 | __val; \ | 153 | } |
154 | }) | 154 | |
155 | #define CPACC_FULL(n) (3 << (n * 2)) | ||
156 | #define CPACC_SVC(n) (1 << (n * 2)) | ||
157 | #define CPACC_DISABLE(n) (0 << (n * 2)) | ||
158 | |||
159 | static inline unsigned int get_copro_access(void) | ||
160 | { | ||
161 | unsigned int val; | ||
162 | asm("mrc p15, 0, %0, c1, c0, 2 @ get copro access" | ||
163 | : "=r" (val) : : "cc"); | ||
164 | return val; | ||
165 | } | ||
166 | |||
167 | static inline void set_copro_access(unsigned int val) | ||
168 | { | ||
169 | asm volatile("mcr p15, 0, %0, c1, c0, 2 @ set copro access" | ||
170 | : : "r" (val) : "cc"); | ||
171 | } | ||
155 | 172 | ||
156 | extern unsigned long cr_no_alignment; /* defined in entry-armv.S */ | 173 | extern unsigned long cr_no_alignment; /* defined in entry-armv.S */ |
157 | extern unsigned long cr_alignment; /* defined in entry-armv.S */ | 174 | extern unsigned long cr_alignment; /* defined in entry-armv.S */ |