via: some PCI posting flushes
[linux-2.6/mini2440.git] / arch / xtensa / mm / misc.S
blobae085332c607095281bf1ad963c0f6c213c5eeeb
1 /*
2  * arch/xtensa/mm/misc.S
3  *
4  * Miscellaneous assembly functions.
5  *
6  * This file is subject to the terms and conditions of the GNU General Public
7  * License.  See the file "COPYING" in the main directory of this archive
8  * for more details.
9  *
10  * Copyright (C) 2001 - 2005 Tensilica Inc.
11  *
12  * Chris Zankel <chris@zankel.net>
13  */
15 /* Note: we might want to implement some of the loops as zero-overhead-loops,
16  *       where applicable and if supported by the processor.
17  */
19 #include <linux/linkage.h>
20 #include <asm/page.h>
21 #include <asm/pgtable.h>
22 #include <asm/asmmacro.h>
23 #include <asm/cacheasm.h>
25 /* clear_page (page) */
27 ENTRY(clear_page)
28         entry   a1, 16
29         addi    a4, a2, PAGE_SIZE
30         movi    a3, 0
32 1:      s32i    a3, a2, 0
33         s32i    a3, a2, 4
34         s32i    a3, a2, 8
35         s32i    a3, a2, 12
36         s32i    a3, a2, 16
37         s32i    a3, a2, 20
38         s32i    a3, a2, 24
39         s32i    a3, a2, 28
40         addi    a2, a2, 32
41         blt     a2, a4, 1b
43         retw
46  * copy_page (void *to, void *from)
47  *                  a2        a3
48  */
50 ENTRY(copy_page)
51         entry   a1, 16
52         addi    a4, a2, PAGE_SIZE
54 1:      l32i    a5, a3, 0
55         l32i    a6, a3, 4
56         l32i    a7, a3, 8
57         s32i    a5, a2, 0
58         s32i    a6, a2, 4
59         s32i    a7, a2, 8
60         l32i    a5, a3, 12
61         l32i    a6, a3, 16
62         l32i    a7, a3, 20
63         s32i    a5, a2, 12
64         s32i    a6, a2, 16
65         s32i    a7, a2, 20
66         l32i    a5, a3, 24
67         l32i    a6, a3, 28
68         s32i    a5, a2, 24
69         s32i    a6, a2, 28
70         addi    a2, a2, 32
71         addi    a3, a3, 32
72         blt     a2, a4, 1b
74         retw
77  * void __invalidate_icache_page(ulong start)
78  */
80 ENTRY(__invalidate_icache_page)
81         entry   sp, 16
83         ___invalidate_icache_page a2 a3
84         isync
86         retw
89  * void __invalidate_dcache_page(ulong start)
90  */
92 ENTRY(__invalidate_dcache_page)
93         entry   sp, 16
95         ___invalidate_dcache_page a2 a3
96         dsync
98         retw
101  * void __flush_invalidate_dcache_page(ulong start)
102  */
104 ENTRY(__flush_invalidate_dcache_page)
105         entry   sp, 16
107         ___flush_invalidate_dcache_page a2 a3
109         dsync
110         retw
113  * void __flush_dcache_page(ulong start)
114  */
116 ENTRY(__flush_dcache_page)
117         entry   sp, 16
119         ___flush_dcache_page a2 a3
121         dsync
122         retw
127  * void __invalidate_icache_range(ulong start, ulong size)
128  */
130 ENTRY(__invalidate_icache_range)
131         entry   sp, 16
133         ___invalidate_icache_range a2 a3 a4
134         isync
136         retw
139  * void __flush_invalidate_dcache_range(ulong start, ulong size)
140  */
142 ENTRY(__flush_invalidate_dcache_range)
143         entry   sp, 16
145         ___flush_invalidate_dcache_range a2 a3 a4
146         dsync
148         retw
151  * void _flush_dcache_range(ulong start, ulong size)
152  */
154 ENTRY(__flush_dcache_range)
155         entry   sp, 16
157         ___flush_dcache_range a2 a3 a4
158         dsync
160         retw
163  * void _invalidate_dcache_range(ulong start, ulong size)
164  */
166 ENTRY(__invalidate_dcache_range)
167         entry   sp, 16
169         ___invalidate_dcache_range a2 a3 a4
172         retw
175  * void _invalidate_icache_all(void)
176  */
178 ENTRY(__invalidate_icache_all)
179         entry   sp, 16
181         ___invalidate_icache_all a2 a3
182         isync
184         retw
187  * void _flush_invalidate_dcache_all(void)
188  */
190 ENTRY(__flush_invalidate_dcache_all)
191         entry   sp, 16
193         ___flush_invalidate_dcache_all a2 a3
194         dsync
196         retw
199  * void _invalidate_dcache_all(void)
200  */
202 ENTRY(__invalidate_dcache_all)
203         entry   sp, 16
205         ___invalidate_dcache_all a2 a3
206         dsync
208         retw