Commit | Line | Data |
---|---|---|
3f65ce4d CZ |
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 | */ | |
14 | ||
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 | */ | |
18 | ||
19 | #include <linux/linkage.h> | |
20 | #include <asm/page.h> | |
21 | #include <asm/pgtable.h> | |
173d6681 CZ |
22 | #include <asm/asmmacro.h> |
23 | #include <asm/cacheasm.h> | |
3f65ce4d CZ |
24 | |
25 | /* clear_page (page) */ | |
26 | ||
27 | ENTRY(clear_page) | |
28 | entry a1, 16 | |
29 | addi a4, a2, PAGE_SIZE | |
30 | movi a3, 0 | |
31 | ||
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 | |
42 | ||
43 | retw | |
44 | ||
45 | /* | |
46 | * copy_page (void *to, void *from) | |
47 | * a2 a3 | |
48 | */ | |
49 | ||
50 | ENTRY(copy_page) | |
51 | entry a1, 16 | |
52 | addi a4, a2, PAGE_SIZE | |
53 | ||
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 | |
73 | ||
74 | retw | |
75 | ||
3f65ce4d | 76 | /* |
173d6681 | 77 | * void __invalidate_icache_page(ulong start) |
3f65ce4d CZ |
78 | */ |
79 | ||
173d6681 | 80 | ENTRY(__invalidate_icache_page) |
3f65ce4d | 81 | entry sp, 16 |
3f65ce4d | 82 | |
173d6681 CZ |
83 | ___invalidate_icache_page a2 a3 |
84 | isync | |
3f65ce4d | 85 | |
3f65ce4d CZ |
86 | retw |
87 | ||
88 | /* | |
173d6681 | 89 | * void __invalidate_dcache_page(ulong start) |
3f65ce4d CZ |
90 | */ |
91 | ||
173d6681 | 92 | ENTRY(__invalidate_dcache_page) |
3f65ce4d | 93 | entry sp, 16 |
3f65ce4d | 94 | |
173d6681 CZ |
95 | ___invalidate_dcache_page a2 a3 |
96 | dsync | |
3f65ce4d | 97 | |
3f65ce4d CZ |
98 | retw |
99 | ||
100 | /* | |
173d6681 | 101 | * void __flush_invalidate_dcache_page(ulong start) |
3f65ce4d CZ |
102 | */ |
103 | ||
173d6681 | 104 | ENTRY(__flush_invalidate_dcache_page) |
3f65ce4d | 105 | entry sp, 16 |
3f65ce4d | 106 | |
173d6681 | 107 | ___flush_invalidate_dcache_page a2 a3 |
3f65ce4d | 108 | |
173d6681 | 109 | dsync |
3f65ce4d CZ |
110 | retw |
111 | ||
112 | /* | |
173d6681 | 113 | * void __flush_dcache_page(ulong start) |
3f65ce4d CZ |
114 | */ |
115 | ||
173d6681 | 116 | ENTRY(__flush_dcache_page) |
3f65ce4d | 117 | entry sp, 16 |
3f65ce4d | 118 | |
173d6681 | 119 | ___flush_dcache_page a2 a3 |
3f65ce4d | 120 | |
173d6681 | 121 | dsync |
3f65ce4d CZ |
122 | retw |
123 | ||
3f65ce4d | 124 | |
3f65ce4d CZ |
125 | |
126 | /* | |
173d6681 | 127 | * void __invalidate_icache_range(ulong start, ulong size) |
3f65ce4d CZ |
128 | */ |
129 | ||
173d6681 | 130 | ENTRY(__invalidate_icache_range) |
3f65ce4d | 131 | entry sp, 16 |
173d6681 CZ |
132 | |
133 | ___invalidate_icache_range a2 a3 a4 | |
134 | isync | |
135 | ||
3f65ce4d CZ |
136 | retw |
137 | ||
138 | /* | |
139 | * void __flush_invalidate_dcache_range(ulong start, ulong size) | |
140 | */ | |
141 | ||
142 | ENTRY(__flush_invalidate_dcache_range) | |
143 | entry sp, 16 | |
3f65ce4d | 144 | |
173d6681 CZ |
145 | ___flush_invalidate_dcache_range a2 a3 a4 |
146 | dsync | |
3f65ce4d | 147 | |
3f65ce4d CZ |
148 | retw |
149 | ||
150 | /* | |
173d6681 | 151 | * void _flush_dcache_range(ulong start, ulong size) |
3f65ce4d CZ |
152 | */ |
153 | ||
173d6681 | 154 | ENTRY(__flush_dcache_range) |
3f65ce4d CZ |
155 | entry sp, 16 |
156 | ||
173d6681 | 157 | ___flush_dcache_range a2 a3 a4 |
3f65ce4d | 158 | dsync |
3f65ce4d | 159 | |
3f65ce4d CZ |
160 | retw |
161 | ||
173d6681 CZ |
162 | /* |
163 | * void _invalidate_dcache_range(ulong start, ulong size) | |
164 | */ | |
3f65ce4d | 165 | |
173d6681 | 166 | ENTRY(__invalidate_dcache_range) |
3f65ce4d CZ |
167 | entry sp, 16 |
168 | ||
173d6681 | 169 | ___invalidate_dcache_range a2 a3 a4 |
3f65ce4d | 170 | |
3f65ce4d | 171 | |
3f65ce4d CZ |
172 | retw |
173 | ||
173d6681 CZ |
174 | /* |
175 | * void _invalidate_icache_all(void) | |
176 | */ | |
3f65ce4d | 177 | |
173d6681 | 178 | ENTRY(__invalidate_icache_all) |
3f65ce4d CZ |
179 | entry sp, 16 |
180 | ||
173d6681 CZ |
181 | ___invalidate_icache_all a2 a3 |
182 | isync | |
3f65ce4d | 183 | |
3f65ce4d CZ |
184 | retw |
185 | ||
3f65ce4d | 186 | /* |
173d6681 | 187 | * void _flush_invalidate_dcache_all(void) |
3f65ce4d CZ |
188 | */ |
189 | ||
173d6681 | 190 | ENTRY(__flush_invalidate_dcache_all) |
3f65ce4d CZ |
191 | entry sp, 16 |
192 | ||
173d6681 CZ |
193 | ___flush_invalidate_dcache_all a2 a3 |
194 | dsync | |
3f65ce4d | 195 | |
3f65ce4d CZ |
196 | retw |
197 | ||
173d6681 CZ |
198 | /* |
199 | * void _invalidate_dcache_all(void) | |
200 | */ | |
3f65ce4d | 201 | |
173d6681 | 202 | ENTRY(__invalidate_dcache_all) |
3f65ce4d CZ |
203 | entry sp, 16 |
204 | ||
173d6681 CZ |
205 | ___invalidate_dcache_all a2 a3 |
206 | dsync | |
3f65ce4d CZ |
207 | |
208 | retw | |
209 |