~ahs3/+junk/cq-qemu

« back to all changes in this revision

Viewing changes to tests/xtensa/test_mmu.S

  • Committer: Al Stone
  • Date: 2012-02-09 01:17:20 UTC
  • Revision ID: albert.stone@canonical.com-20120209011720-tztl7ik3qayz80p4
first commit to bzr for qemu

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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