Statistics
| Branch: | Revision:

root / tests / tcg / xtensa / test_mmu.S @ c09015dd

History | View | Annotate | Download (6 kB)

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