Merge remote-tracking branch 'qemu-kvm-tmp/memory/core' into staging
[qemu.git] / tests / xtensa / test_mmu.S
blob52d5774212503d573e5d6ca1b79198e2816d1f16
1 .include "macros.inc"
3 test_suite mmu
5 .purgem test
7 .macro test name
8     movi    a2, 0x00000004
9     idtlb   a2
10     movi    a2, 0x00100004
11     idtlb   a2
12     movi    a2, 0x00200004
13     idtlb   a2
14     movi    a2, 0x00300004
15     idtlb   a2
16     movi    a2, 0x00000007
17     idtlb   a2
18 .endm
20 test tlb_group
21     movi    a2, 0x04000002 /* PPN */
22     movi    a3, 0x01200004 /* VPN */
23     wdtlb   a2, a3
24     witlb   a2, a3
25     movi    a3, 0x00200004
26     rdtlb0  a1, a3
27     ritlb0  a2, a3
28     movi    a3, 0x01000001
29     assert  eq, a1, a3
30     assert  eq, a2, a3
31     movi    a3, 0x00200004
32     rdtlb1  a1, a3
33     ritlb1  a2, a3
34     movi    a3, 0x04000002
35     assert  eq, a1, a3
36     assert  eq, a2, a3
37     movi    a3, 0x01234567
38     pdtlb   a1, a3
39     pitlb   a2, a3
40     movi    a3, 0x01234014
41     assert  eq, a1, a3
42     movi    a3, 0x0123400c
43     assert  eq, a2, a3
44     movi    a3, 0x00200004
45     idtlb   a3
46     iitlb   a3
47     movi    a3, 0x01234567
48     pdtlb   a1, a3
49     pitlb   a2, a3
50     movi    a3, 0x00000010
51     and     a1, a1, a3
52     assert  eqi, a1, 0
53     movi    a3, 0x00000008
54     and     a2, a2, a3
55     assert  eqi, a2, 0
56 test_end
58 test itlb_miss
59     set_vector kernel, 1f
61     movi    a3, 0x00100000
62     jx      a3
63     test_fail
65     rsr     a2, excvaddr
66     assert  eq, a2, a3
67     rsr     a2, exccause
68     movi    a3, 16
69     assert  eq, a2, a3
70 test_end
72 test dtlb_miss
73     set_vector kernel, 1f
75     movi    a3, 0x00100000
76     l8ui    a2, a3, 0
77     test_fail
79     rsr     a2, excvaddr
80     assert  eq, a2, a3
81     rsr     a2, exccause
82     movi    a3, 24
83     assert  eq, a2, a3
84 test_end
86 test itlb_multi_hit
87     set_vector kernel, 1f
89     movi    a2, 0x04000002 /* PPN */
90     movi    a3, 0xf0000004 /* VPN */
91     witlb   a2, a3
92     movi    a3, 0xf0000000
93     pitlb   a2, a3
94     test_fail
96     rsr     a2, exccause
97     movi    a3, 17
98     assert  eq, a2, a3
99 test_end
101 test dtlb_multi_hit
102     set_vector kernel, 1f
104     movi    a2, 0x04000002 /* PPN */
105     movi    a3, 0x01200004 /* VPN */
106     wdtlb   a2, a3
107     movi    a3, 0x01200007 /* VPN */
108     wdtlb   a2, a3
109     movi    a3, 0x01200000
110     pdtlb   a2, a3
111     test_fail
113     rsr     a2, exccause
114     movi    a3, 25
115     assert  eq, a2, a3
116 test_end
118 test inst_fetch_privilege
119     set_vector kernel, 3f
121     movi    a2, 0x4004f
122     wsr     a2, ps
124     isync
125     nop
127     test_fail
129     movi    a1, 1b
130     rsr     a2, excvaddr
131     rsr     a3, epc1
132     assert  ge, a2, a1
133     assert  ge, a3, a1
134     movi    a1, 2b
135     assert  lt, a2, a1
136     assert  lt, a3, a1
137     rsr     a2, exccause
138     movi    a3, 18
139     assert  eq, a2, a3
140     rsr     a2, ps
141     movi    a3, 0x4005f
142     assert  eq, a2, a3
143 test_end
145 test load_store_privilege
146     set_vector kernel, 2f
148     movi    a3, 10f
149     pitlb   a3, a3
150     ritlb1  a2, a3
151     movi    a1, 0x10
152     or      a2, a2, a1
153     movi    a1, 0x000ff000
154     and     a3, a3, a1
155     movi    a1, 4
156     or      a3, a3, a1
157     witlb   a2, a3
158     movi    a3, 10f
159     movi    a1, 0x000fffff
160     and     a1, a3, a1
162     movi    a2, 0x04000003 /* PPN */
163     movi    a3, 0x01200004 /* VPN */
164     wdtlb   a2, a3
165     movi    a3, 0x01200001
166     movi    a2, 0x4004f
167     jx      a1
169     wsr     a2, ps
170     isync
172     l8ui    a2, a3, 0
173     test_fail
175     rsr     a2, excvaddr
176     assert  eq, a2, a3
177     rsr     a2, epc1
178     movi    a3, 1b
179     movi    a1, 0x000fffff
180     and     a3, a3, a1
181     assert  eq, a2, a3
182     rsr     a2, exccause
183     movi    a3, 26
184     assert  eq, a2, a3
185     rsr     a2, ps
186     movi    a3, 0x4005f
187     assert  eq, a2, a3
188 test_end
190 test cring_load_store_privilege
191     set_vector kernel, 0
192     set_vector double, 2f
194     movi    a2, 0x04000003 /* PPN */
195     movi    a3, 0x01200004 /* VPN */
196     wdtlb   a2, a3
197     movi    a3, 0x01200004
198     movi    a2, 0x4005f    /* ring 1 + excm => cring == 0 */
199     wsr     a2, ps
200     isync
201     l8ui    a2, a3, 0      /* cring used */
203     l32e    a2, a3, -4     /* ring used */
204     test_fail
206     rsr     a2, excvaddr
207     addi    a2, a2, 4
208     assert  eq, a2, a3
209     rsr     a2, depc
210     movi    a3, 1b
211     assert  eq, a2, a3
212     rsr     a2, exccause
213     movi    a3, 26
214     assert  eq, a2, a3
215     rsr     a2, ps
216     movi    a3, 0x4005f
217     assert  eq, a2, a3
218 test_end
220 test inst_fetch_prohibited
221     set_vector kernel, 2f
223     movi    a3, 10f
224     pitlb   a3, a3
225     ritlb1  a2, a3
226     movi    a1, 0xfffff000
227     and     a2, a2, a1
228     movi    a1, 0x4
229     or      a2, a2, a1
230     movi    a1, 0x000ff000
231     and     a3, a3, a1
232     movi    a1, 4
233     or      a3, a3, a1
234     witlb   a2, a3
235     movi    a3, 10f
236     movi    a1, 0x000fffff
237     and     a1, a3, a1
238     jx      a1
239     .align  4
241     nop
242     test_fail
244     rsr     a2, excvaddr
245     assert  eq, a2, a1
246     rsr     a2, epc1
247     assert  eq, a2, a1
248     rsr     a2, exccause
249     movi    a3, 20
250     assert  eq, a2, a3
251 test_end
253 test load_prohibited
254     set_vector kernel, 2f
256     movi    a2, 0x0400000c /* PPN */
257     movi    a3, 0x01200004 /* VPN */
258     wdtlb   a2, a3
259     movi    a3, 0x01200002
261     l8ui    a2, a3, 0
262     test_fail
264     rsr     a2, excvaddr
265     assert  eq, a2, a3
266     rsr     a2, epc1
267     movi    a3, 1b
268     assert  eq, a2, a3
269     rsr     a2, exccause
270     movi    a3, 28
271     assert  eq, a2, a3
272 test_end
274 test store_prohibited
275     set_vector kernel, 2f
277     movi    a2, 0x04000001 /* PPN */
278     movi    a3, 0x01200004 /* VPN */
279     wdtlb   a2, a3
280     movi    a3, 0x01200003
281     l8ui    a2, a3, 0
283     s8i     a2, a3, 0
284     test_fail
286     rsr     a2, excvaddr
287     assert  eq, a2, a3
288     rsr     a2, epc1
289     movi    a3, 1b
290     assert  eq, a2, a3
291     rsr     a2, exccause
292     movi    a3, 29
293     assert  eq, a2, a3
294 test_end
296 test dtlb_autoload
297     set_vector kernel, 0
299     movi    a2, 0xd4000000
300     wsr     a2, ptevaddr
301     movi    a3, 0x00001013
302     s32i    a3, a2, 4
303     pdtlb   a2, a3
304     movi    a1, 0x10
305     and     a1, a1, a2
306     assert  eqi, a1, 0
307     l8ui    a1, a3, 0
308     pdtlb   a2, a3
309     movi    a1, 0xfffff010
310     and     a1, a1, a2
311     movi    a3, 0x00001010
312     assert  eq, a1, a3
313     movi    a1, 0xf
314     and     a1, a1, a2
315     assert  lti, a1, 4
316 test_end
318 test_suite_end