xref: /qemu/tests/tcg/xtensa/test_mmu.S (revision 2f28d2ff)
1.include "macros.inc"
2
3test_suite mmu
4
5.purgem test
6
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
19
20test 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
56test_end
57
58test itlb_miss
59    set_vector kernel, 1f
60
61    movi    a3, 0x00100000
62    jx      a3
63    test_fail
641:
65    rsr     a2, excvaddr
66    assert  eq, a2, a3
67    rsr     a2, exccause
68    movi    a3, 16
69    assert  eq, a2, a3
70test_end
71
72test dtlb_miss
73    set_vector kernel, 1f
74
75    movi    a3, 0x00100000
76    l8ui    a2, a3, 0
77    test_fail
781:
79    rsr     a2, excvaddr
80    assert  eq, a2, a3
81    rsr     a2, exccause
82    movi    a3, 24
83    assert  eq, a2, a3
84test_end
85
86test itlb_multi_hit
87    set_vector kernel, 1f
88
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
951:
96    rsr     a2, exccause
97    movi    a3, 17
98    assert  eq, a2, a3
99test_end
100
101test dtlb_multi_hit
102    set_vector kernel, 1f
103
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
1121:
113    rsr     a2, exccause
114    movi    a3, 25
115    assert  eq, a2, a3
116test_end
117
118test inst_fetch_privilege
119    set_vector kernel, 3f
120
121    movi    a2, 0x4004f
122    wsr     a2, ps
1231:
124    isync
125    nop
1262:
127    test_fail
1283:
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
143test_end
144
145test load_store_privilege
146    set_vector kernel, 2f
147
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
161
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
16810:
169    wsr     a2, ps
170    isync
1711:
172    l8ui    a2, a3, 0
173    test_fail
1742:
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
188test_end
189
190test cring_load_store_privilege
191    set_vector kernel, 0
192    set_vector double, 2f
193
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 */
2021:
203    l32e    a2, a3, -4     /* ring used */
204    test_fail
2052:
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
218test_end
219
220test inst_fetch_prohibited
221    set_vector kernel, 2f
222
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
24010:
241    nop
242    test_fail
2432:
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
251test_end
252
253test load_prohibited
254    set_vector kernel, 2f
255
256    movi    a2, 0x0400000c /* PPN */
257    movi    a3, 0x01200004 /* VPN */
258    wdtlb   a2, a3
259    movi    a3, 0x01200002
2601:
261    l8ui    a2, a3, 0
262    test_fail
2632:
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
272test_end
273
274test store_prohibited
275    set_vector kernel, 2f
276
277    movi    a2, 0x04000001 /* PPN */
278    movi    a3, 0x01200004 /* VPN */
279    wdtlb   a2, a3
280    movi    a3, 0x01200003
281    l8ui    a2, a3, 0
2821:
283    s8i     a2, a3, 0
284    test_fail
2852:
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
294test_end
295
296test dtlb_autoload
297    set_vector kernel, 0
298
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
316test_end
317
318test_suite_end
319