diff options
Diffstat (limited to 'arch/xtensa/mm/misc.S')
-rw-r--r-- | arch/xtensa/mm/misc.S | 265 |
1 files changed, 50 insertions, 215 deletions
diff --git a/arch/xtensa/mm/misc.S b/arch/xtensa/mm/misc.S index 327c0f17187c..ae085332c607 100644 --- a/arch/xtensa/mm/misc.S +++ b/arch/xtensa/mm/misc.S | |||
@@ -19,9 +19,8 @@ | |||
19 | #include <linux/linkage.h> | 19 | #include <linux/linkage.h> |
20 | #include <asm/page.h> | 20 | #include <asm/page.h> |
21 | #include <asm/pgtable.h> | 21 | #include <asm/pgtable.h> |
22 | 22 | #include <asm/asmmacro.h> | |
23 | #include <xtensa/cacheasm.h> | 23 | #include <asm/cacheasm.h> |
24 | #include <xtensa/cacheattrasm.h> | ||
25 | 24 | ||
26 | /* clear_page (page) */ | 25 | /* clear_page (page) */ |
27 | 26 | ||
@@ -74,104 +73,66 @@ ENTRY(copy_page) | |||
74 | 73 | ||
75 | retw | 74 | retw |
76 | 75 | ||
77 | |||
78 | /* | 76 | /* |
79 | * void __flush_invalidate_cache_all(void) | 77 | * void __invalidate_icache_page(ulong start) |
80 | */ | 78 | */ |
81 | 79 | ||
82 | ENTRY(__flush_invalidate_cache_all) | 80 | ENTRY(__invalidate_icache_page) |
83 | entry sp, 16 | 81 | entry sp, 16 |
84 | dcache_writeback_inv_all a2, a3 | ||
85 | icache_invalidate_all a2, a3 | ||
86 | retw | ||
87 | 82 | ||
88 | /* | 83 | ___invalidate_icache_page a2 a3 |
89 | * void __invalidate_icache_all(void) | 84 | isync |
90 | */ | ||
91 | 85 | ||
92 | ENTRY(__invalidate_icache_all) | ||
93 | entry sp, 16 | ||
94 | icache_invalidate_all a2, a3 | ||
95 | retw | 86 | retw |
96 | 87 | ||
97 | /* | 88 | /* |
98 | * void __flush_invalidate_dcache_all(void) | 89 | * void __invalidate_dcache_page(ulong start) |
99 | */ | 90 | */ |
100 | 91 | ||
101 | ENTRY(__flush_invalidate_dcache_all) | 92 | ENTRY(__invalidate_dcache_page) |
102 | entry sp, 16 | 93 | entry sp, 16 |
103 | dcache_writeback_inv_all a2, a3 | ||
104 | retw | ||
105 | |||
106 | 94 | ||
107 | /* | 95 | ___invalidate_dcache_page a2 a3 |
108 | * void __flush_invalidate_cache_range(ulong start, ulong size) | 96 | dsync |
109 | */ | ||
110 | 97 | ||
111 | ENTRY(__flush_invalidate_cache_range) | ||
112 | entry sp, 16 | ||
113 | mov a4, a2 | ||
114 | mov a5, a3 | ||
115 | dcache_writeback_inv_region a4, a5, a6 | ||
116 | icache_invalidate_region a2, a3, a4 | ||
117 | retw | 98 | retw |
118 | 99 | ||
119 | /* | 100 | /* |
120 | * void __invalidate_icache_page(ulong start) | 101 | * void __flush_invalidate_dcache_page(ulong start) |
121 | */ | 102 | */ |
122 | 103 | ||
123 | ENTRY(__invalidate_icache_page) | 104 | ENTRY(__flush_invalidate_dcache_page) |
124 | entry sp, 16 | 105 | entry sp, 16 |
125 | movi a3, PAGE_SIZE | ||
126 | icache_invalidate_region a2, a3, a4 | ||
127 | retw | ||
128 | 106 | ||
129 | /* | 107 | ___flush_invalidate_dcache_page a2 a3 |
130 | * void __invalidate_dcache_page(ulong start) | ||
131 | */ | ||
132 | 108 | ||
133 | ENTRY(__invalidate_dcache_page) | 109 | dsync |
134 | entry sp, 16 | ||
135 | movi a3, PAGE_SIZE | ||
136 | dcache_invalidate_region a2, a3, a4 | ||
137 | retw | 110 | retw |
138 | 111 | ||
139 | /* | 112 | /* |
140 | * void __invalidate_icache_range(ulong start, ulong size) | 113 | * void __flush_dcache_page(ulong start) |
141 | */ | 114 | */ |
142 | 115 | ||
143 | ENTRY(__invalidate_icache_range) | 116 | ENTRY(__flush_dcache_page) |
144 | entry sp, 16 | 117 | entry sp, 16 |
145 | icache_invalidate_region a2, a3, a4 | ||
146 | retw | ||
147 | 118 | ||
148 | /* | 119 | ___flush_dcache_page a2 a3 |
149 | * void __invalidate_dcache_range(ulong start, ulong size) | ||
150 | */ | ||
151 | 120 | ||
152 | ENTRY(__invalidate_dcache_range) | 121 | dsync |
153 | entry sp, 16 | ||
154 | dcache_invalidate_region a2, a3, a4 | ||
155 | retw | 122 | retw |
156 | 123 | ||
157 | /* | ||
158 | * void __flush_dcache_page(ulong start) | ||
159 | */ | ||
160 | 124 | ||
161 | ENTRY(__flush_dcache_page) | ||
162 | entry sp, 16 | ||
163 | movi a3, PAGE_SIZE | ||
164 | dcache_writeback_region a2, a3, a4 | ||
165 | retw | ||
166 | 125 | ||
167 | /* | 126 | /* |
168 | * void __flush_invalidate_dcache_page(ulong start) | 127 | * void __invalidate_icache_range(ulong start, ulong size) |
169 | */ | 128 | */ |
170 | 129 | ||
171 | ENTRY(__flush_invalidate_dcache_page) | 130 | ENTRY(__invalidate_icache_range) |
172 | entry sp, 16 | 131 | entry sp, 16 |
173 | movi a3, PAGE_SIZE | 132 | |
174 | dcache_writeback_inv_region a2, a3, a4 | 133 | ___invalidate_icache_range a2 a3 a4 |
134 | isync | ||
135 | |||
175 | retw | 136 | retw |
176 | 137 | ||
177 | /* | 138 | /* |
@@ -180,195 +141,69 @@ ENTRY(__flush_invalidate_dcache_page) | |||
180 | 141 | ||
181 | ENTRY(__flush_invalidate_dcache_range) | 142 | ENTRY(__flush_invalidate_dcache_range) |
182 | entry sp, 16 | 143 | entry sp, 16 |
183 | dcache_writeback_inv_region a2, a3, a4 | ||
184 | retw | ||
185 | 144 | ||
186 | /* | 145 | ___flush_invalidate_dcache_range a2 a3 a4 |
187 | * void __invalidate_dcache_all(void) | 146 | dsync |
188 | */ | ||
189 | 147 | ||
190 | ENTRY(__invalidate_dcache_all) | ||
191 | entry sp, 16 | ||
192 | dcache_invalidate_all a2, a3 | ||
193 | retw | 148 | retw |
194 | 149 | ||
195 | /* | 150 | /* |
196 | * void __flush_invalidate_dcache_page_phys(ulong start) | 151 | * void _flush_dcache_range(ulong start, ulong size) |
197 | */ | 152 | */ |
198 | 153 | ||
199 | ENTRY(__flush_invalidate_dcache_page_phys) | 154 | ENTRY(__flush_dcache_range) |
200 | entry sp, 16 | 155 | entry sp, 16 |
201 | 156 | ||
202 | movi a3, XCHAL_DCACHE_SIZE | 157 | ___flush_dcache_range a2 a3 a4 |
203 | movi a4, PAGE_MASK | 1 | ||
204 | addi a2, a2, 1 | ||
205 | |||
206 | 1: addi a3, a3, -XCHAL_DCACHE_LINESIZE | ||
207 | |||
208 | ldct a6, a3 | ||
209 | dsync | 158 | dsync |
210 | and a6, a6, a4 | ||
211 | beq a6, a2, 2f | ||
212 | bgeui a3, 2, 1b | ||
213 | retw | ||
214 | 159 | ||
215 | 2: diwbi a3, 0 | ||
216 | bgeui a3, 2, 1b | ||
217 | retw | 160 | retw |
218 | 161 | ||
219 | ENTRY(check_dcache_low0) | 162 | /* |
220 | entry sp, 16 | 163 | * void _invalidate_dcache_range(ulong start, ulong size) |
221 | 164 | */ | |
222 | movi a3, XCHAL_DCACHE_SIZE / 4 | ||
223 | movi a4, PAGE_MASK | 1 | ||
224 | addi a2, a2, 1 | ||
225 | |||
226 | 1: addi a3, a3, -XCHAL_DCACHE_LINESIZE | ||
227 | |||
228 | ldct a6, a3 | ||
229 | dsync | ||
230 | and a6, a6, a4 | ||
231 | beq a6, a2, 2f | ||
232 | bgeui a3, 2, 1b | ||
233 | retw | ||
234 | |||
235 | 2: j 2b | ||
236 | |||
237 | ENTRY(check_dcache_high0) | ||
238 | entry sp, 16 | ||
239 | |||
240 | movi a5, XCHAL_DCACHE_SIZE / 4 | ||
241 | movi a3, XCHAL_DCACHE_SIZE / 2 | ||
242 | movi a4, PAGE_MASK | 1 | ||
243 | addi a2, a2, 1 | ||
244 | |||
245 | 1: addi a3, a3, -XCHAL_DCACHE_LINESIZE | ||
246 | addi a5, a5, -XCHAL_DCACHE_LINESIZE | ||
247 | |||
248 | ldct a6, a3 | ||
249 | dsync | ||
250 | and a6, a6, a4 | ||
251 | beq a6, a2, 2f | ||
252 | bgeui a5, 2, 1b | ||
253 | retw | ||
254 | |||
255 | 2: j 2b | ||
256 | 165 | ||
257 | ENTRY(check_dcache_low1) | 166 | ENTRY(__invalidate_dcache_range) |
258 | entry sp, 16 | 167 | entry sp, 16 |
259 | 168 | ||
260 | movi a5, XCHAL_DCACHE_SIZE / 4 | 169 | ___invalidate_dcache_range a2 a3 a4 |
261 | movi a3, XCHAL_DCACHE_SIZE * 3 / 4 | ||
262 | movi a4, PAGE_MASK | 1 | ||
263 | addi a2, a2, 1 | ||
264 | 170 | ||
265 | 1: addi a3, a3, -XCHAL_DCACHE_LINESIZE | ||
266 | addi a5, a5, -XCHAL_DCACHE_LINESIZE | ||
267 | 171 | ||
268 | ldct a6, a3 | ||
269 | dsync | ||
270 | and a6, a6, a4 | ||
271 | beq a6, a2, 2f | ||
272 | bgeui a5, 2, 1b | ||
273 | retw | 172 | retw |
274 | 173 | ||
275 | 2: j 2b | 174 | /* |
175 | * void _invalidate_icache_all(void) | ||
176 | */ | ||
276 | 177 | ||
277 | ENTRY(check_dcache_high1) | 178 | ENTRY(__invalidate_icache_all) |
278 | entry sp, 16 | 179 | entry sp, 16 |
279 | 180 | ||
280 | movi a5, XCHAL_DCACHE_SIZE / 4 | 181 | ___invalidate_icache_all a2 a3 |
281 | movi a3, XCHAL_DCACHE_SIZE | 182 | isync |
282 | movi a4, PAGE_MASK | 1 | ||
283 | addi a2, a2, 1 | ||
284 | |||
285 | 1: addi a3, a3, -XCHAL_DCACHE_LINESIZE | ||
286 | addi a5, a5, -XCHAL_DCACHE_LINESIZE | ||
287 | 183 | ||
288 | ldct a6, a3 | ||
289 | dsync | ||
290 | and a6, a6, a4 | ||
291 | beq a6, a2, 2f | ||
292 | bgeui a5, 2, 1b | ||
293 | retw | 184 | retw |
294 | 185 | ||
295 | 2: j 2b | ||
296 | |||
297 | |||
298 | /* | 186 | /* |
299 | * void __invalidate_icache_page_phys(ulong start) | 187 | * void _flush_invalidate_dcache_all(void) |
300 | */ | 188 | */ |
301 | 189 | ||
302 | ENTRY(__invalidate_icache_page_phys) | 190 | ENTRY(__flush_invalidate_dcache_all) |
303 | entry sp, 16 | 191 | entry sp, 16 |
304 | 192 | ||
305 | movi a3, XCHAL_ICACHE_SIZE | 193 | ___flush_invalidate_dcache_all a2 a3 |
306 | movi a4, PAGE_MASK | 1 | 194 | dsync |
307 | addi a2, a2, 1 | ||
308 | |||
309 | 1: addi a3, a3, -XCHAL_ICACHE_LINESIZE | ||
310 | |||
311 | lict a6, a3 | ||
312 | isync | ||
313 | and a6, a6, a4 | ||
314 | beq a6, a2, 2f | ||
315 | bgeui a3, 2, 1b | ||
316 | retw | ||
317 | 195 | ||
318 | 2: iii a3, 0 | ||
319 | bgeui a3, 2, 1b | ||
320 | retw | 196 | retw |
321 | 197 | ||
198 | /* | ||
199 | * void _invalidate_dcache_all(void) | ||
200 | */ | ||
322 | 201 | ||
323 | #if 0 | 202 | ENTRY(__invalidate_dcache_all) |
324 | |||
325 | movi a3, XCHAL_DCACHE_WAYS - 1 | ||
326 | movi a4, PAGE_SIZE | ||
327 | |||
328 | 1: mov a5, a2 | ||
329 | add a6, a2, a4 | ||
330 | |||
331 | 2: diwbi a5, 0 | ||
332 | diwbi a5, XCHAL_DCACHE_LINESIZE | ||
333 | diwbi a5, XCHAL_DCACHE_LINESIZE * 2 | ||
334 | diwbi a5, XCHAL_DCACHE_LINESIZE * 3 | ||
335 | |||
336 | addi a5, a5, XCHAL_DCACHE_LINESIZE * 4 | ||
337 | blt a5, a6, 2b | ||
338 | |||
339 | addi a3, a3, -1 | ||
340 | addi a2, a2, XCHAL_DCACHE_SIZE / XCHAL_DCACHE_WAYS | ||
341 | bgez a3, 1b | ||
342 | |||
343 | retw | ||
344 | |||
345 | ENTRY(__invalidate_icache_page_index) | ||
346 | entry sp, 16 | 203 | entry sp, 16 |
347 | 204 | ||
348 | movi a3, XCHAL_ICACHE_WAYS - 1 | 205 | ___invalidate_dcache_all a2 a3 |
349 | movi a4, PAGE_SIZE | 206 | dsync |
350 | |||
351 | 1: mov a5, a2 | ||
352 | add a6, a2, a4 | ||
353 | |||
354 | 2: iii a5, 0 | ||
355 | iii a5, XCHAL_ICACHE_LINESIZE | ||
356 | iii a5, XCHAL_ICACHE_LINESIZE * 2 | ||
357 | iii a5, XCHAL_ICACHE_LINESIZE * 3 | ||
358 | |||
359 | addi a5, a5, XCHAL_ICACHE_LINESIZE * 4 | ||
360 | blt a5, a6, 2b | ||
361 | |||
362 | addi a3, a3, -1 | ||
363 | addi a2, a2, XCHAL_ICACHE_SIZE / XCHAL_ICACHE_WAYS | ||
364 | bgez a3, 2b | ||
365 | 207 | ||
366 | retw | 208 | retw |
367 | 209 | ||
368 | #endif | ||
369 | |||
370 | |||
371 | |||
372 | |||
373 | |||
374 | |||