1
2
3
4
5
6
7#include <asm/asm-offsets.h>
8#include <asm/thread_info.h>
9
10
11
12
13 .macro vma_vm_mm, rd, rn
14 ldr \rd, [\rn,
15 .endm
16
17
18
19
20 .macro vma_vm_flags, rd, rn
21 ldr \rd, [\rn,
22 .endm
23
24 .macro tsk_mm, rd, rn
25 ldr \rd, [\rn,
26 ldr \rd, [\rd,
27 .endm
28
29
30
31
32 .macro act_mm, rd
33 bic \rd, sp,
34 bic \rd, \rd,
35 ldr \rd, [\rd,
36 ldr \rd, [\rd,
37 .endm
38
39
40
41
42
43 .macro mmid, rd, rn
44#ifdef __ARMEB__
45 ldr \rd, [\rn,
46#else
47 ldr \rd, [\rn,
48#endif
49 .endm
50
51
52
53
54 .macro asid, rd, rn
55 and \rd, \rn,
56 .endm
57
58 .macro crval, clear, mmuset, ucset
59#ifdef CONFIG_MMU
60 .word \clear
61 .word \mmuset
62#else
63 .word \clear
64 .word \ucset
65#endif
66 .endm
67
68
69
70
71
72 .macro dcache_line_size, reg, tmp
73 mrc p15, 0, \tmp, c0, c0, 1 @ read ctr
74 lsr \tmp, \tmp,
75 and \tmp, \tmp,
76 mov \reg,
77 mov \reg, \reg, lsl \tmp @ actual cache line size
78 .endm
79
80
81
82
83
84 .macro icache_line_size, reg, tmp
85 mrc p15, 0, \tmp, c0, c0, 1 @ read ctr
86 and \tmp, \tmp,
87 mov \reg,
88 mov \reg, \reg, lsl \tmp @ actual cache line size
89 .endm
90
91
92
93
94
95#ifdef CONFIG_MMU
96
97
98#endif
99
100 (L_PTE_XN+L_PTE_USER+L_PTE_RDONLY+L_PTE_DIRTY+L_PTE_YOUNG+\
101 L_PTE_FILE+L_PTE_PRESENT) > L_PTE_SHARED
102
103#endif
104#endif
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123 .macro armv6_mt_table pfx
124\pfx\()_mt_table:
125 .long 0x00 @ L_PTE_MT_UNCACHED
126 .long PTE_EXT_TEX(1) @ L_PTE_MT_BUFFERABLE
127 .long PTE_CACHEABLE @ L_PTE_MT_WRITETHROUGH
128 .long PTE_CACHEABLE | PTE_BUFFERABLE @ L_PTE_MT_WRITEBACK
129 .long PTE_BUFFERABLE @ L_PTE_MT_DEV_SHARED
130 .long 0x00 @ unused
131 .long 0x00 @ L_PTE_MT_MINICACHE (not present)
132 .long PTE_EXT_TEX(1) | PTE_CACHEABLE | PTE_BUFFERABLE @ L_PTE_MT_WRITEALLOC
133 .long 0x00 @ unused
134 .long PTE_EXT_TEX(1) @ L_PTE_MT_DEV_WC
135 .long 0x00 @ unused
136 .long PTE_CACHEABLE | PTE_BUFFERABLE @ L_PTE_MT_DEV_CACHED
137 .long PTE_EXT_TEX(2) @ L_PTE_MT_DEV_NONSHARED
138 .long 0x00 @ unused
139 .long 0x00 @ unused
140 .long 0x00 @ unused
141 .endm
142
143 .macro armv6_set_pte_ext pfx
144 str r1, [r0],
145
146 bic r3, r1,
147 bic r3, r3,
148 orr r3, r3, r2
149 orr r3, r3,
150
151 adr ip, \pfx\()_mt_table
152 and r2, r1,
153 ldr r2, [ip, r2]
154
155 eor r1, r1,
156 tst r1,
157 orrne r3, r3,
158
159 tst r1,
160 orrne r3, r3,
161#ifdef CONFIG_CPU_USE_DOMAINS
162 @ allow kernel read/write access to read-only user pages
163 tstne r3,
164 bicne r3, r3,
165#endif
166
167 tst r1,
168 orrne r3, r3,
169
170 orr r3, r3, r2
171
172 tst r1,
173 tstne r1,
174 moveq r3,
175#ifndef CONFIG_CPU_USE_DOMAINS
176 tstne r1,
177 movne r3,
178#endif
179
180 str r3, [r0]
181 mcr p15, 0, r0, c7, c10, 1 @ flush_pte
182 .endm
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199 .macro armv3_set_pte_ext wc_disable=1
200 str r1, [r0],
201
202 eor r3, r1,
203
204 bic r2, r1,
205 bic r2, r2,
206 orr r2, r2,
207
208 tst r3,
209 orrne r2, r2,
210
211 tst r3,
212 orreq r2, r2,
213
214 tst r3,
215 movne r2,
216
217 .if \wc_disable
218#ifdef CONFIG_CPU_DCACHE_WRITETHROUGH
219 tst r2,
220 bicne r2, r2,
221#endif
222 .endif
223 str r2, [r0] @ hardware version
224 .endm
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242 .macro xscale_set_pte_ext_prologue
243 str r1, [r0] @ linux version
244
245 eor r3, r1,
246
247 bic r2, r1,
248 orr r2, r2,
249
250 tst r3,
251 orrne r2, r2,
252
253 tst r3,
254 orreq r2, r2,
255 @ combined with user -> user r/w
256 .endm
257
258 .macro xscale_set_pte_ext_epilogue
259 tst r3,
260 movne r2,
261
262 str r2, [r0,
263 mov ip,
264 mcr p15, 0, r0, c7, c10, 1 @ clean L1 D line
265 mcr p15, 0, ip, c7, c10, 4 @ data write barrier
266 .endm
267
268.macro define_processor_functions name:req, dabort:req, pabort:req, nommu=0, suspend=0
269 .type \name\()_processor_functions,
270 .align 2
271ENTRY(\name\()_processor_functions)
272 .word \dabort
273 .word \pabort
274 .word cpu_\name\()_proc_init
275 .word cpu_\name\()_proc_fin
276 .word cpu_\name\()_reset
277 .word cpu_\name\()_do_idle
278 .word cpu_\name\()_dcache_clean_area
279 .word cpu_\name\()_switch_mm
280
281 .if \nommu
282 .word 0
283 .else
284 .word cpu_\name\()_set_pte_ext
285 .endif
286
287 .if \suspend
288 .word cpu_\name\()_suspend_size
289#ifdef CONFIG_PM_SLEEP
290 .word cpu_\name\()_do_suspend
291 .word cpu_\name\()_do_resume
292#else
293 .word 0
294 .word 0
295#endif
296 .else
297 .word 0
298 .word 0
299 .word 0
300 .endif
301
302 .size \name\()_processor_functions, . - \name\()_processor_functions
303.endm
304
305.macro define_cache_functions name:req
306 .align 2
307 .type \name\()_cache_fns,
308ENTRY(\name\()_cache_fns)
309 .long \name\()_flush_icache_all
310 .long \name\()_flush_kern_cache_all
311 .long \name\()_flush_kern_cache_louis
312 .long \name\()_flush_user_cache_all
313 .long \name\()_flush_user_cache_range
314 .long \name\()_coherent_kern_range
315 .long \name\()_coherent_user_range
316 .long \name\()_flush_kern_dcache_area
317 .long \name\()_dma_map_area
318 .long \name\()_dma_unmap_area
319 .long \name\()_dma_flush_range
320 .size \name\()_cache_fns, . - \name\()_cache_fns
321.endm
322
323.macro define_tlb_functions name:req, flags_up:req, flags_smp
324 .type \name\()_tlb_fns,
325ENTRY(\name\()_tlb_fns)
326 .long \name\()_flush_user_tlb_range
327 .long \name\()_flush_kern_tlb_range
328 .ifnb \flags_smp
329 ALT_SMP(.long \flags_smp )
330 ALT_UP(.long \flags_up )
331 .else
332 .long \flags_up
333 .endif
334 .size \name\()_tlb_fns, . - \name\()_tlb_fns
335.endm
336