|
|
1.1 root 1: .include "macros.inc"
2:
3: test_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:
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
57:
58: test itlb_miss
59: set_vector kernel, 1f
60:
61: movi a3, 0x00100000
62: jx a3
63: test_fail
64: 1:
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
71:
72: test dtlb_miss
73: set_vector kernel, 1f
74:
75: movi a3, 0x00100000
76: l8ui a2, a3, 0
77: test_fail
78: 1:
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
85:
86: test 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
95: 1:
96: rsr a2, exccause
97: movi a3, 17
98: assert eq, a2, a3
99: test_end
100:
101: test 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
112: 1:
113: rsr a2, exccause
114: movi a3, 25
115: assert eq, a2, a3
116: test_end
117:
118: test inst_fetch_privilege
119: set_vector kernel, 3f
120:
121: movi a2, 0x4004f
122: wsr a2, ps
123: 1:
124: isync
125: nop
126: 2:
127: test_fail
128: 3:
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
144:
145: test 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
168: 10:
169: wsr a2, ps
170: isync
171: 1:
172: l8ui a2, a3, 0
173: test_fail
174: 2:
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
189:
190: test 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 */
202: 1:
203: l32e a2, a3, -4 /* ring used */
204: test_fail
205: 2:
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
219:
220: test 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
240: 10:
241: nop
242: test_fail
243: 2:
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
252:
253: test 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
260: 1:
261: l8ui a2, a3, 0
262: test_fail
263: 2:
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
273:
274: test 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
282: 1:
283: s8i a2, a3, 0
284: test_fail
285: 2:
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
295:
296: test 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
316: test_end
317:
318: test_suite_end
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.