|
|
1.1 root 1: .include "macros.inc"
2:
3: test_suite interrupt
4:
5: .macro clear_interrupts
6: movi a2, 0
7: wsr a2, intenable
8: wsr a2, ccompare0
9: wsr a2, ccompare1
10: wsr a2, ccompare2
11: esync
12: rsr a2, interrupt
13: wsr a2, intclear
14:
15: esync
16: rsr a2, interrupt
17: assert eqi, a2, 0
18: .endm
19:
20: .macro check_l1
21: rsr a2, ps
22: movi a3, 0x1f /* EXCM | INTMASK */
23: and a2, a2, a3
24: assert eqi, a2, 0x10 /* only EXCM is set for level-1 interrupt */
25: rsr a2, exccause
26: assert eqi, a2, 4
27: .endm
28:
29: test rsil
30: clear_interrupts
31:
32: rsr a2, ps
33: rsil a3, 7
34: rsr a4, ps
35: assert eq, a2, a3
36: movi a2, 0xf
37: and a2, a4, a2
38: assert eqi, a2, 7
39: xor a3, a3, a4
40: movi a2, 0xfffffff0
41: and a2, a3, a2
42: assert eqi, a2, 0
43: test_end
44:
45: test soft_disabled
46: set_vector kernel, 1f
47: clear_interrupts
48:
49: movi a2, 0x80
50: wsr a2, intset
51: esync
52: rsr a3, interrupt
53: assert eq, a2, a3
54: wsr a2, intclear
55: esync
56: rsr a3, interrupt
57: assert eqi, a3, 0
58: j 2f
59: 1:
60: test_fail
61: 2:
62: test_end
63:
64: test soft_intenable
65: set_vector kernel, 1f
66: clear_interrupts
67:
68: movi a2, 0x80
69: wsr a2, intset
70: esync
71: rsr a3, interrupt
72: assert eq, a2, a3
73: rsil a3, 0
74: wsr a2, intenable
75: esync
76: test_fail
77: 1:
78: check_l1
79: test_end
80:
81: test soft_rsil
82: set_vector kernel, 1f
83: clear_interrupts
84:
85: movi a2, 0x80
86: wsr a2, intset
87: esync
88: rsr a3, interrupt
89: assert eq, a2, a3
90: wsr a2, intenable
91: rsil a3, 0
92: esync
93: test_fail
94: 1:
95: check_l1
96: test_end
97:
98: test soft_waiti
99: set_vector kernel, 1f
100: clear_interrupts
101:
102: movi a2, 0x80
103: wsr a2, intset
104: esync
105: rsr a3, interrupt
106: assert eq, a2, a3
107: wsr a2, intenable
108: waiti 0
109: test_fail
110: 1:
111: check_l1
112: test_end
113:
114: test soft_user
115: set_vector kernel, 1f
116: set_vector user, 2f
117: clear_interrupts
118:
119: movi a2, 0x80
120: wsr a2, intset
121: esync
122: rsr a3, interrupt
123: assert eq, a2, a3
124: wsr a2, intenable
125:
126: rsr a2, ps
127: movi a3, 0x20
128: or a2, a2, a3
129: wsr a2, ps
130: waiti 0
131: 1:
132: test_fail
133: 2:
134: check_l1
135: test_end
136:
137: test soft_priority
138: set_vector kernel, 1f
139: set_vector level3, 2f
140: clear_interrupts
141:
142: movi a2, 0x880
143: wsr a2, intenable
144: rsil a3, 0
145: esync
146: wsr a2, intset
147: esync
148: 1:
149: test_fail
150: 2:
151: rsr a2, ps
152: movi a3, 0x1f /* EXCM | INTMASK */
153: and a2, a2, a3
154: movi a3, 0x13
155: assert eq, a2, a3 /* EXCM and INTMASK are set
156: for high-priority interrupt */
157: test_end
158:
159: test eps_epc_rfi
160: set_vector level3, 3f
161: clear_interrupts
162: reset_ps
163:
164: movi a2, 0x880
165: wsr a2, intenable
166: rsil a3, 0
167: rsr a3, ps
168: esync
169: wsr a2, intset
170: 1:
171: esync
172: 2:
173: test_fail
174: 3:
175: rsr a2, eps3
176: assert eq, a2, a3
177: rsr a2, epc3
178: movi a3, 1b
179: assert ge, a2, a3
180: movi a3, 2b
181: assert ge, a3, a2
182: movi a2, 4f
183: wsr a2, epc3
184: movi a2, 0x40003
185: wsr a2, eps3
186: rfi 3
187: test_fail
188: 4:
189: rsr a2, ps
190: movi a3, 0x40003
191: assert eq, a2, a3
192: test_end
193:
194: test_suite_end
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.