xref: /OK3568_Linux_fs/kernel/arch/xtensa/mm/misc.S (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun/*
2*4882a593Smuzhiyun * arch/xtensa/mm/misc.S
3*4882a593Smuzhiyun *
4*4882a593Smuzhiyun * Miscellaneous assembly functions.
5*4882a593Smuzhiyun *
6*4882a593Smuzhiyun * This file is subject to the terms and conditions of the GNU General Public
7*4882a593Smuzhiyun * License.  See the file "COPYING" in the main directory of this archive
8*4882a593Smuzhiyun * for more details.
9*4882a593Smuzhiyun *
10*4882a593Smuzhiyun * Copyright (C) 2001 - 2007 Tensilica Inc.
11*4882a593Smuzhiyun *
12*4882a593Smuzhiyun * Chris Zankel	<chris@zankel.net>
13*4882a593Smuzhiyun */
14*4882a593Smuzhiyun
15*4882a593Smuzhiyun
16*4882a593Smuzhiyun#include <linux/linkage.h>
17*4882a593Smuzhiyun#include <linux/pgtable.h>
18*4882a593Smuzhiyun#include <asm/page.h>
19*4882a593Smuzhiyun#include <asm/asmmacro.h>
20*4882a593Smuzhiyun#include <asm/cacheasm.h>
21*4882a593Smuzhiyun#include <asm/tlbflush.h>
22*4882a593Smuzhiyun
23*4882a593Smuzhiyun
24*4882a593Smuzhiyun/*
25*4882a593Smuzhiyun * clear_page and clear_user_page are the same for non-cache-aliased configs.
26*4882a593Smuzhiyun *
27*4882a593Smuzhiyun * clear_page (unsigned long page)
28*4882a593Smuzhiyun *                    a2
29*4882a593Smuzhiyun */
30*4882a593Smuzhiyun
31*4882a593SmuzhiyunENTRY(clear_page)
32*4882a593Smuzhiyun
33*4882a593Smuzhiyun	abi_entry_default
34*4882a593Smuzhiyun
35*4882a593Smuzhiyun	movi	a3, 0
36*4882a593Smuzhiyun	__loopi	a2, a7, PAGE_SIZE, 32
37*4882a593Smuzhiyun	s32i	a3, a2, 0
38*4882a593Smuzhiyun	s32i	a3, a2, 4
39*4882a593Smuzhiyun	s32i	a3, a2, 8
40*4882a593Smuzhiyun	s32i	a3, a2, 12
41*4882a593Smuzhiyun	s32i	a3, a2, 16
42*4882a593Smuzhiyun	s32i	a3, a2, 20
43*4882a593Smuzhiyun	s32i	a3, a2, 24
44*4882a593Smuzhiyun	s32i	a3, a2, 28
45*4882a593Smuzhiyun	__endla	a2, a7, 32
46*4882a593Smuzhiyun
47*4882a593Smuzhiyun	abi_ret_default
48*4882a593Smuzhiyun
49*4882a593SmuzhiyunENDPROC(clear_page)
50*4882a593Smuzhiyun
51*4882a593Smuzhiyun/*
52*4882a593Smuzhiyun * copy_page and copy_user_page are the same for non-cache-aliased configs.
53*4882a593Smuzhiyun *
54*4882a593Smuzhiyun * copy_page (void *to, void *from)
55*4882a593Smuzhiyun *               a2          a3
56*4882a593Smuzhiyun */
57*4882a593Smuzhiyun
58*4882a593SmuzhiyunENTRY(copy_page)
59*4882a593Smuzhiyun
60*4882a593Smuzhiyun	abi_entry_default
61*4882a593Smuzhiyun
62*4882a593Smuzhiyun	__loopi a2, a4, PAGE_SIZE, 32
63*4882a593Smuzhiyun
64*4882a593Smuzhiyun	l32i    a8, a3, 0
65*4882a593Smuzhiyun	l32i    a9, a3, 4
66*4882a593Smuzhiyun	s32i    a8, a2, 0
67*4882a593Smuzhiyun	s32i    a9, a2, 4
68*4882a593Smuzhiyun
69*4882a593Smuzhiyun	l32i    a8, a3, 8
70*4882a593Smuzhiyun	l32i    a9, a3, 12
71*4882a593Smuzhiyun	s32i    a8, a2, 8
72*4882a593Smuzhiyun	s32i    a9, a2, 12
73*4882a593Smuzhiyun
74*4882a593Smuzhiyun	l32i    a8, a3, 16
75*4882a593Smuzhiyun	l32i    a9, a3, 20
76*4882a593Smuzhiyun	s32i    a8, a2, 16
77*4882a593Smuzhiyun	s32i    a9, a2, 20
78*4882a593Smuzhiyun
79*4882a593Smuzhiyun	l32i    a8, a3, 24
80*4882a593Smuzhiyun	l32i    a9, a3, 28
81*4882a593Smuzhiyun	s32i    a8, a2, 24
82*4882a593Smuzhiyun	s32i    a9, a2, 28
83*4882a593Smuzhiyun
84*4882a593Smuzhiyun	addi    a2, a2, 32
85*4882a593Smuzhiyun	addi    a3, a3, 32
86*4882a593Smuzhiyun
87*4882a593Smuzhiyun	__endl  a2, a4
88*4882a593Smuzhiyun
89*4882a593Smuzhiyun	abi_ret_default
90*4882a593Smuzhiyun
91*4882a593SmuzhiyunENDPROC(copy_page)
92*4882a593Smuzhiyun
93*4882a593Smuzhiyun#ifdef CONFIG_MMU
94*4882a593Smuzhiyun/*
95*4882a593Smuzhiyun * If we have to deal with cache aliasing, we use temporary memory mappings
96*4882a593Smuzhiyun * to ensure that the source and destination pages have the same color as
97*4882a593Smuzhiyun * the virtual address. We use way 0 and 1 for temporary mappings in such cases.
98*4882a593Smuzhiyun *
99*4882a593Smuzhiyun * The temporary DTLB entries shouldn't be flushed by interrupts, but are
100*4882a593Smuzhiyun * flushed by preemptive task switches. Special code in the
101*4882a593Smuzhiyun * fast_second_level_miss handler re-established the temporary mapping.
102*4882a593Smuzhiyun * It requires that the PPNs for the destination and source addresses are
103*4882a593Smuzhiyun * in a6, and a7, respectively.
104*4882a593Smuzhiyun */
105*4882a593Smuzhiyun
106*4882a593Smuzhiyun/* TLB miss exceptions are treated special in the following region */
107*4882a593Smuzhiyun
108*4882a593SmuzhiyunENTRY(__tlbtemp_mapping_start)
109*4882a593Smuzhiyun
110*4882a593Smuzhiyun#if (DCACHE_WAY_SIZE > PAGE_SIZE)
111*4882a593Smuzhiyun
112*4882a593Smuzhiyun/*
113*4882a593Smuzhiyun * clear_page_alias(void *addr, unsigned long paddr)
114*4882a593Smuzhiyun *                     a2              a3
115*4882a593Smuzhiyun */
116*4882a593Smuzhiyun
117*4882a593SmuzhiyunENTRY(clear_page_alias)
118*4882a593Smuzhiyun
119*4882a593Smuzhiyun	abi_entry_default
120*4882a593Smuzhiyun
121*4882a593Smuzhiyun	/* Skip setting up a temporary DTLB if not aliased low page. */
122*4882a593Smuzhiyun
123*4882a593Smuzhiyun	movi	a5, PAGE_OFFSET
124*4882a593Smuzhiyun	movi	a6, 0
125*4882a593Smuzhiyun	beqz	a3, 1f
126*4882a593Smuzhiyun
127*4882a593Smuzhiyun	/* Setup a temporary DTLB for the addr. */
128*4882a593Smuzhiyun
129*4882a593Smuzhiyun	addi	a6, a3, (PAGE_KERNEL | _PAGE_HW_WRITE)
130*4882a593Smuzhiyun	mov	a4, a2
131*4882a593Smuzhiyun	wdtlb	a6, a2
132*4882a593Smuzhiyun	dsync
133*4882a593Smuzhiyun
134*4882a593Smuzhiyun1:	movi	a3, 0
135*4882a593Smuzhiyun	__loopi	a2, a7, PAGE_SIZE, 32
136*4882a593Smuzhiyun	s32i	a3, a2, 0
137*4882a593Smuzhiyun	s32i	a3, a2, 4
138*4882a593Smuzhiyun	s32i	a3, a2, 8
139*4882a593Smuzhiyun	s32i	a3, a2, 12
140*4882a593Smuzhiyun	s32i	a3, a2, 16
141*4882a593Smuzhiyun	s32i	a3, a2, 20
142*4882a593Smuzhiyun	s32i	a3, a2, 24
143*4882a593Smuzhiyun	s32i	a3, a2, 28
144*4882a593Smuzhiyun	__endla	a2, a7, 32
145*4882a593Smuzhiyun
146*4882a593Smuzhiyun	bnez	a6, 1f
147*4882a593Smuzhiyun	abi_ret_default
148*4882a593Smuzhiyun
149*4882a593Smuzhiyun	/* We need to invalidate the temporary idtlb entry, if any. */
150*4882a593Smuzhiyun
151*4882a593Smuzhiyun1:	idtlb	a4
152*4882a593Smuzhiyun	dsync
153*4882a593Smuzhiyun
154*4882a593Smuzhiyun	abi_ret_default
155*4882a593Smuzhiyun
156*4882a593SmuzhiyunENDPROC(clear_page_alias)
157*4882a593Smuzhiyun
158*4882a593Smuzhiyun/*
159*4882a593Smuzhiyun * copy_page_alias(void *to, void *from,
160*4882a593Smuzhiyun *			a2	  a3
161*4882a593Smuzhiyun *                 unsigned long to_paddr, unsigned long from_paddr)
162*4882a593Smuzhiyun *	        		 a4			 a5
163*4882a593Smuzhiyun */
164*4882a593Smuzhiyun
165*4882a593SmuzhiyunENTRY(copy_page_alias)
166*4882a593Smuzhiyun
167*4882a593Smuzhiyun	abi_entry_default
168*4882a593Smuzhiyun
169*4882a593Smuzhiyun	/* Skip setting up a temporary DTLB for destination if not aliased. */
170*4882a593Smuzhiyun
171*4882a593Smuzhiyun	movi	a6, 0
172*4882a593Smuzhiyun	movi	a7, 0
173*4882a593Smuzhiyun	beqz	a4, 1f
174*4882a593Smuzhiyun
175*4882a593Smuzhiyun	/* Setup a temporary DTLB for destination. */
176*4882a593Smuzhiyun
177*4882a593Smuzhiyun	addi	a6, a4, (PAGE_KERNEL | _PAGE_HW_WRITE)
178*4882a593Smuzhiyun	wdtlb	a6, a2
179*4882a593Smuzhiyun	dsync
180*4882a593Smuzhiyun
181*4882a593Smuzhiyun	/* Skip setting up a temporary DTLB for source if not aliased. */
182*4882a593Smuzhiyun
183*4882a593Smuzhiyun1:	beqz	a5, 1f
184*4882a593Smuzhiyun
185*4882a593Smuzhiyun	/* Setup a temporary DTLB for source. */
186*4882a593Smuzhiyun
187*4882a593Smuzhiyun	addi	a7, a5, PAGE_KERNEL
188*4882a593Smuzhiyun	addi	a8, a3, 1				# way1
189*4882a593Smuzhiyun
190*4882a593Smuzhiyun	wdtlb	a7, a8
191*4882a593Smuzhiyun	dsync
192*4882a593Smuzhiyun
193*4882a593Smuzhiyun1:	__loopi a2, a4, PAGE_SIZE, 32
194*4882a593Smuzhiyun
195*4882a593Smuzhiyun	l32i    a8, a3, 0
196*4882a593Smuzhiyun	l32i    a9, a3, 4
197*4882a593Smuzhiyun	s32i    a8, a2, 0
198*4882a593Smuzhiyun	s32i    a9, a2, 4
199*4882a593Smuzhiyun
200*4882a593Smuzhiyun	l32i    a8, a3, 8
201*4882a593Smuzhiyun	l32i    a9, a3, 12
202*4882a593Smuzhiyun	s32i    a8, a2, 8
203*4882a593Smuzhiyun	s32i    a9, a2, 12
204*4882a593Smuzhiyun
205*4882a593Smuzhiyun	l32i    a8, a3, 16
206*4882a593Smuzhiyun	l32i    a9, a3, 20
207*4882a593Smuzhiyun	s32i    a8, a2, 16
208*4882a593Smuzhiyun	s32i    a9, a2, 20
209*4882a593Smuzhiyun
210*4882a593Smuzhiyun	l32i    a8, a3, 24
211*4882a593Smuzhiyun	l32i    a9, a3, 28
212*4882a593Smuzhiyun	s32i    a8, a2, 24
213*4882a593Smuzhiyun	s32i    a9, a2, 28
214*4882a593Smuzhiyun
215*4882a593Smuzhiyun	addi    a2, a2, 32
216*4882a593Smuzhiyun	addi    a3, a3, 32
217*4882a593Smuzhiyun
218*4882a593Smuzhiyun	__endl  a2, a4
219*4882a593Smuzhiyun
220*4882a593Smuzhiyun	/* We need to invalidate any temporary mapping! */
221*4882a593Smuzhiyun
222*4882a593Smuzhiyun	bnez	a6, 1f
223*4882a593Smuzhiyun	bnez	a7, 2f
224*4882a593Smuzhiyun	abi_ret_default
225*4882a593Smuzhiyun
226*4882a593Smuzhiyun1:	addi	a2, a2, -PAGE_SIZE
227*4882a593Smuzhiyun	idtlb	a2
228*4882a593Smuzhiyun	dsync
229*4882a593Smuzhiyun	bnez	a7, 2f
230*4882a593Smuzhiyun	abi_ret_default
231*4882a593Smuzhiyun
232*4882a593Smuzhiyun2:	addi	a3, a3, -PAGE_SIZE+1
233*4882a593Smuzhiyun	idtlb	a3
234*4882a593Smuzhiyun	dsync
235*4882a593Smuzhiyun
236*4882a593Smuzhiyun	abi_ret_default
237*4882a593Smuzhiyun
238*4882a593SmuzhiyunENDPROC(copy_page_alias)
239*4882a593Smuzhiyun
240*4882a593Smuzhiyun#endif
241*4882a593Smuzhiyun
242*4882a593Smuzhiyun#if (DCACHE_WAY_SIZE > PAGE_SIZE)
243*4882a593Smuzhiyun
244*4882a593Smuzhiyun/*
245*4882a593Smuzhiyun * void __flush_invalidate_dcache_page_alias (addr, phys)
246*4882a593Smuzhiyun *                                             a2    a3
247*4882a593Smuzhiyun */
248*4882a593Smuzhiyun
249*4882a593SmuzhiyunENTRY(__flush_invalidate_dcache_page_alias)
250*4882a593Smuzhiyun
251*4882a593Smuzhiyun	abi_entry_default
252*4882a593Smuzhiyun
253*4882a593Smuzhiyun	movi	a7, 0			# required for exception handler
254*4882a593Smuzhiyun	addi	a6, a3, (PAGE_KERNEL | _PAGE_HW_WRITE)
255*4882a593Smuzhiyun	mov	a4, a2
256*4882a593Smuzhiyun	wdtlb	a6, a2
257*4882a593Smuzhiyun	dsync
258*4882a593Smuzhiyun
259*4882a593Smuzhiyun	___flush_invalidate_dcache_page a2 a3
260*4882a593Smuzhiyun
261*4882a593Smuzhiyun	idtlb	a4
262*4882a593Smuzhiyun	dsync
263*4882a593Smuzhiyun
264*4882a593Smuzhiyun	abi_ret_default
265*4882a593Smuzhiyun
266*4882a593SmuzhiyunENDPROC(__flush_invalidate_dcache_page_alias)
267*4882a593Smuzhiyun
268*4882a593Smuzhiyun/*
269*4882a593Smuzhiyun * void __invalidate_dcache_page_alias (addr, phys)
270*4882a593Smuzhiyun *                                       a2    a3
271*4882a593Smuzhiyun */
272*4882a593Smuzhiyun
273*4882a593SmuzhiyunENTRY(__invalidate_dcache_page_alias)
274*4882a593Smuzhiyun
275*4882a593Smuzhiyun	abi_entry_default
276*4882a593Smuzhiyun
277*4882a593Smuzhiyun	movi	a7, 0			# required for exception handler
278*4882a593Smuzhiyun	addi	a6, a3, (PAGE_KERNEL | _PAGE_HW_WRITE)
279*4882a593Smuzhiyun	mov	a4, a2
280*4882a593Smuzhiyun	wdtlb	a6, a2
281*4882a593Smuzhiyun	dsync
282*4882a593Smuzhiyun
283*4882a593Smuzhiyun	___invalidate_dcache_page a2 a3
284*4882a593Smuzhiyun
285*4882a593Smuzhiyun	idtlb	a4
286*4882a593Smuzhiyun	dsync
287*4882a593Smuzhiyun
288*4882a593Smuzhiyun	abi_ret_default
289*4882a593Smuzhiyun
290*4882a593SmuzhiyunENDPROC(__invalidate_dcache_page_alias)
291*4882a593Smuzhiyun#endif
292*4882a593Smuzhiyun
293*4882a593SmuzhiyunENTRY(__tlbtemp_mapping_itlb)
294*4882a593Smuzhiyun
295*4882a593Smuzhiyun#if (ICACHE_WAY_SIZE > PAGE_SIZE)
296*4882a593Smuzhiyun
297*4882a593SmuzhiyunENTRY(__invalidate_icache_page_alias)
298*4882a593Smuzhiyun
299*4882a593Smuzhiyun	abi_entry_default
300*4882a593Smuzhiyun
301*4882a593Smuzhiyun	addi	a6, a3, (PAGE_KERNEL_EXEC | _PAGE_HW_WRITE)
302*4882a593Smuzhiyun	mov	a4, a2
303*4882a593Smuzhiyun	witlb	a6, a2
304*4882a593Smuzhiyun	isync
305*4882a593Smuzhiyun
306*4882a593Smuzhiyun	___invalidate_icache_page a2 a3
307*4882a593Smuzhiyun
308*4882a593Smuzhiyun	iitlb	a4
309*4882a593Smuzhiyun	isync
310*4882a593Smuzhiyun	abi_ret_default
311*4882a593Smuzhiyun
312*4882a593SmuzhiyunENDPROC(__invalidate_icache_page_alias)
313*4882a593Smuzhiyun
314*4882a593Smuzhiyun#endif
315*4882a593Smuzhiyun
316*4882a593Smuzhiyun/* End of special treatment in tlb miss exception */
317*4882a593Smuzhiyun
318*4882a593SmuzhiyunENTRY(__tlbtemp_mapping_end)
319*4882a593Smuzhiyun
320*4882a593Smuzhiyun#endif /* CONFIG_MMU
321*4882a593Smuzhiyun
322*4882a593Smuzhiyun/*
323*4882a593Smuzhiyun * void __invalidate_icache_page(ulong start)
324*4882a593Smuzhiyun */
325*4882a593Smuzhiyun
326*4882a593SmuzhiyunENTRY(__invalidate_icache_page)
327*4882a593Smuzhiyun
328*4882a593Smuzhiyun	abi_entry_default
329*4882a593Smuzhiyun
330*4882a593Smuzhiyun	___invalidate_icache_page a2 a3
331*4882a593Smuzhiyun	isync
332*4882a593Smuzhiyun
333*4882a593Smuzhiyun	abi_ret_default
334*4882a593Smuzhiyun
335*4882a593SmuzhiyunENDPROC(__invalidate_icache_page)
336*4882a593Smuzhiyun
337*4882a593Smuzhiyun/*
338*4882a593Smuzhiyun * void __invalidate_dcache_page(ulong start)
339*4882a593Smuzhiyun */
340*4882a593Smuzhiyun
341*4882a593SmuzhiyunENTRY(__invalidate_dcache_page)
342*4882a593Smuzhiyun
343*4882a593Smuzhiyun	abi_entry_default
344*4882a593Smuzhiyun
345*4882a593Smuzhiyun	___invalidate_dcache_page a2 a3
346*4882a593Smuzhiyun	dsync
347*4882a593Smuzhiyun
348*4882a593Smuzhiyun	abi_ret_default
349*4882a593Smuzhiyun
350*4882a593SmuzhiyunENDPROC(__invalidate_dcache_page)
351*4882a593Smuzhiyun
352*4882a593Smuzhiyun/*
353*4882a593Smuzhiyun * void __flush_invalidate_dcache_page(ulong start)
354*4882a593Smuzhiyun */
355*4882a593Smuzhiyun
356*4882a593SmuzhiyunENTRY(__flush_invalidate_dcache_page)
357*4882a593Smuzhiyun
358*4882a593Smuzhiyun	abi_entry_default
359*4882a593Smuzhiyun
360*4882a593Smuzhiyun	___flush_invalidate_dcache_page a2 a3
361*4882a593Smuzhiyun
362*4882a593Smuzhiyun	dsync
363*4882a593Smuzhiyun	abi_ret_default
364*4882a593Smuzhiyun
365*4882a593SmuzhiyunENDPROC(__flush_invalidate_dcache_page)
366*4882a593Smuzhiyun
367*4882a593Smuzhiyun/*
368*4882a593Smuzhiyun * void __flush_dcache_page(ulong start)
369*4882a593Smuzhiyun */
370*4882a593Smuzhiyun
371*4882a593SmuzhiyunENTRY(__flush_dcache_page)
372*4882a593Smuzhiyun
373*4882a593Smuzhiyun	abi_entry_default
374*4882a593Smuzhiyun
375*4882a593Smuzhiyun	___flush_dcache_page a2 a3
376*4882a593Smuzhiyun
377*4882a593Smuzhiyun	dsync
378*4882a593Smuzhiyun	abi_ret_default
379*4882a593Smuzhiyun
380*4882a593SmuzhiyunENDPROC(__flush_dcache_page)
381*4882a593Smuzhiyun
382*4882a593Smuzhiyun/*
383*4882a593Smuzhiyun * void __invalidate_icache_range(ulong start, ulong size)
384*4882a593Smuzhiyun */
385*4882a593Smuzhiyun
386*4882a593SmuzhiyunENTRY(__invalidate_icache_range)
387*4882a593Smuzhiyun
388*4882a593Smuzhiyun	abi_entry_default
389*4882a593Smuzhiyun
390*4882a593Smuzhiyun	___invalidate_icache_range a2 a3 a4
391*4882a593Smuzhiyun	isync
392*4882a593Smuzhiyun
393*4882a593Smuzhiyun	abi_ret_default
394*4882a593Smuzhiyun
395*4882a593SmuzhiyunENDPROC(__invalidate_icache_range)
396*4882a593Smuzhiyun
397*4882a593Smuzhiyun/*
398*4882a593Smuzhiyun * void __flush_invalidate_dcache_range(ulong start, ulong size)
399*4882a593Smuzhiyun */
400*4882a593Smuzhiyun
401*4882a593SmuzhiyunENTRY(__flush_invalidate_dcache_range)
402*4882a593Smuzhiyun
403*4882a593Smuzhiyun	abi_entry_default
404*4882a593Smuzhiyun
405*4882a593Smuzhiyun	___flush_invalidate_dcache_range a2 a3 a4
406*4882a593Smuzhiyun	dsync
407*4882a593Smuzhiyun
408*4882a593Smuzhiyun	abi_ret_default
409*4882a593Smuzhiyun
410*4882a593SmuzhiyunENDPROC(__flush_invalidate_dcache_range)
411*4882a593Smuzhiyun
412*4882a593Smuzhiyun/*
413*4882a593Smuzhiyun * void _flush_dcache_range(ulong start, ulong size)
414*4882a593Smuzhiyun */
415*4882a593Smuzhiyun
416*4882a593SmuzhiyunENTRY(__flush_dcache_range)
417*4882a593Smuzhiyun
418*4882a593Smuzhiyun	abi_entry_default
419*4882a593Smuzhiyun
420*4882a593Smuzhiyun	___flush_dcache_range a2 a3 a4
421*4882a593Smuzhiyun	dsync
422*4882a593Smuzhiyun
423*4882a593Smuzhiyun	abi_ret_default
424*4882a593Smuzhiyun
425*4882a593SmuzhiyunENDPROC(__flush_dcache_range)
426*4882a593Smuzhiyun
427*4882a593Smuzhiyun/*
428*4882a593Smuzhiyun * void _invalidate_dcache_range(ulong start, ulong size)
429*4882a593Smuzhiyun */
430*4882a593Smuzhiyun
431*4882a593SmuzhiyunENTRY(__invalidate_dcache_range)
432*4882a593Smuzhiyun
433*4882a593Smuzhiyun	abi_entry_default
434*4882a593Smuzhiyun
435*4882a593Smuzhiyun	___invalidate_dcache_range a2 a3 a4
436*4882a593Smuzhiyun
437*4882a593Smuzhiyun	abi_ret_default
438*4882a593Smuzhiyun
439*4882a593SmuzhiyunENDPROC(__invalidate_dcache_range)
440*4882a593Smuzhiyun
441*4882a593Smuzhiyun/*
442*4882a593Smuzhiyun * void _invalidate_icache_all(void)
443*4882a593Smuzhiyun */
444*4882a593Smuzhiyun
445*4882a593SmuzhiyunENTRY(__invalidate_icache_all)
446*4882a593Smuzhiyun
447*4882a593Smuzhiyun	abi_entry_default
448*4882a593Smuzhiyun
449*4882a593Smuzhiyun	___invalidate_icache_all a2 a3
450*4882a593Smuzhiyun	isync
451*4882a593Smuzhiyun
452*4882a593Smuzhiyun	abi_ret_default
453*4882a593Smuzhiyun
454*4882a593SmuzhiyunENDPROC(__invalidate_icache_all)
455*4882a593Smuzhiyun
456*4882a593Smuzhiyun/*
457*4882a593Smuzhiyun * void _flush_invalidate_dcache_all(void)
458*4882a593Smuzhiyun */
459*4882a593Smuzhiyun
460*4882a593SmuzhiyunENTRY(__flush_invalidate_dcache_all)
461*4882a593Smuzhiyun
462*4882a593Smuzhiyun	abi_entry_default
463*4882a593Smuzhiyun
464*4882a593Smuzhiyun	___flush_invalidate_dcache_all a2 a3
465*4882a593Smuzhiyun	dsync
466*4882a593Smuzhiyun
467*4882a593Smuzhiyun	abi_ret_default
468*4882a593Smuzhiyun
469*4882a593SmuzhiyunENDPROC(__flush_invalidate_dcache_all)
470*4882a593Smuzhiyun
471*4882a593Smuzhiyun/*
472*4882a593Smuzhiyun * void _invalidate_dcache_all(void)
473*4882a593Smuzhiyun */
474*4882a593Smuzhiyun
475*4882a593SmuzhiyunENTRY(__invalidate_dcache_all)
476*4882a593Smuzhiyun
477*4882a593Smuzhiyun	abi_entry_default
478*4882a593Smuzhiyun
479*4882a593Smuzhiyun	___invalidate_dcache_all a2 a3
480*4882a593Smuzhiyun	dsync
481*4882a593Smuzhiyun
482*4882a593Smuzhiyun	abi_ret_default
483*4882a593Smuzhiyun
484*4882a593SmuzhiyunENDPROC(__invalidate_dcache_all)
485