Skip to content

Commit f815ebf

Browse files
authored
ADD smclint testcase summary
Signed-off-by: Dan Smathers <dan.smathers@seagate.com>
1 parent 80ce4c4 commit f815ebf

File tree

1 file changed

+343
-0
lines changed

1 file changed

+343
-0
lines changed
Lines changed: 343 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,343 @@
1+
==== msw-01.S
2+
.Description: tests if RVMODEL_SET_MSW_INT is working, hangs in infinite loop otherwise
3+
- enable mie CSR
4+
- generate interrupt
5+
- enable mstatus.mie
6+
- trigger m-mode handler
7+
- clear interrupt
8+
- set mepc to finish
9+
- mret to finish
10+
[%autofit]
11+
----
12+
RVMODEL_SET_MIE = MIE_MSIE
13+
RVMODEL_SET_INT1 = RVMODEL_SET_MSW_INT
14+
RVMODEL_SET_INT2 = <EMPTY>
15+
RVMODEL_CLEAR_INT1 = RVMODEL_CLEAR_MSW_INT
16+
RVMODEL_CLEAR_INT2 = <EMPTY>
17+
RVMODEL_WFI = jump_to_self
18+
----
19+
Coverage
20+
----
21+
msip trigger | verify RVMODEL_SET_MSW_INT trigger
22+
msip clear | verify RVMODEL_CLEAR_MSW_INT clear
23+
mip.msip | verify mip signature 0/1
24+
mcause | verify machine software interrupt signature
25+
mstatus | verify mstatus.mie/mpie/mpp signature in interrupt handler and after mret
26+
mtvec | verify interrupt uses mtvec to calculate pc of interrupt handler (direct)
27+
mepc | verify mepc location is jump_to_self location
28+
----
29+
==== mtimer-01.S
30+
.Description: tests if RVMODEL_SET_MTIMER_INT is working, hangs in infinite loop otherwise
31+
- enable mie CSR
32+
- generate interrupt
33+
- enable mstatus.mie
34+
- trigger m-mode handler
35+
- clear interrupt
36+
- set mepc to finish
37+
- mret to finish
38+
[%autofit]
39+
----
40+
RVMODEL_SET_INT1 = RVMODEL_SET_MTIMER_INT
41+
RVMODEL_SET_INT2 = <EMPTY>
42+
RVMODEL_CLEAR_INT1 = RVMODEL_CLEAR_MTIMER_INT
43+
RVMODEL_CLEAR_INT2 = <EMPTY>
44+
RVMODEL_WFI = jump_to_self
45+
----
46+
Coverage
47+
----
48+
mtip trigger | verify RVMODEL_SET_MTIMER_INT trigger
49+
mtip clear | verify RVMODEL_CLEAR_MTIMER_INT clear
50+
mip.mtip | verify mip signature 0/1
51+
mcause | verify machine timer interrupt signature
52+
mstatus | verify mstatus.mie/mpie/mpp signature in interrupt handler and after mret
53+
mtvec | verify interrupt uses mtvec to calculate pc of interrupt handler (direct)
54+
mepc | verify mepc location is jump_to_self location
55+
----
56+
==== nomint-01.S
57+
.Description: expect interrupts will not trigger in m-mode unless mstatus.mie is set
58+
- enable mie
59+
- generate interrupts
60+
- nop
61+
- jump to finish
62+
[%autofit]
63+
----
64+
RVMODEL_MSTATUS_MIE = 0
65+
RVMODEL_SET_INT1 = RVMODEL_SET_MSW_INT
66+
RVMODEL_SET_INT2 = RVMODEL_SET_MTIMER_INT
67+
RVMODEL_CLEAR_INT1 = RVMODEL_CLEAR_MSW_INT
68+
RVMODEL_CLEAR_INT2 = RVMODEL_CLEAR_MTIMER_INT
69+
RVMODEL_WFI = nop
70+
----
71+
Coverage
72+
----
73+
mstatus.mie | verify no interrupt occurs in m-mode if mstatus.mie is 0
74+
----
75+
==== nomint-02.S
76+
.Description: expect interrupts will not trigger in m-mode unless mie.x is set
77+
- generate interrupts
78+
- enable mstatus.mie
79+
- nop
80+
- jump to finish
81+
[%autofit]
82+
----
83+
RVMODEL_SET_MIE = 0
84+
RVMODEL_SET_INT1 = RVMODEL_SET_MSW_INT
85+
RVMODEL_SET_INT2 = RVMODEL_SET_MTIMER_INT
86+
RVMODEL_CLEAR_INT1 = RVMODEL_CLEAR_MSW_INT
87+
RVMODEL_CLEAR_INT2 = RVMODEL_CLEAR_MTIMER_INT
88+
RVMODEL_WFI = nop
89+
----
90+
Coverage
91+
----
92+
mie.msip | verify no msw interrupt occurs if mie.msip is 0
93+
mie.mtip | verify no mtimer interrupt occurs if mie.mtip is 0
94+
----
95+
==== wfi-01.S
96+
.Description: expect wfi to behave like a nop when a single interrupt is pending when mstatus.mie is disabled
97+
- enable mie CSR
98+
- generate interrupts
99+
- wfi
100+
- wakeup
101+
- jump to finish
102+
[%autofit]
103+
----
104+
RVMODEL_MSTATUS_MIE = 0
105+
RVMODEL_SET_MIE = MIE_MSIE
106+
RVMODEL_SET_INT1 = RVMODEL_SET_MSW_INT
107+
RVMODEL_SET_INT2 = RVMODEL_SET_MSW_INT
108+
RVMODEL_CLEAR_INT1 = RVMODEL_CLEAR_MSW_INT
109+
RVMODEL_CLEAR_INT2 = RVMODEL_CLEAR_MSW_INT
110+
----
111+
Coverage
112+
----
113+
mstatus.mie | verify no interrupt occurs in m-mode if mstatus.mie is 0
114+
wfi | verify wakeup/nop occurs with mstatus.mie = 0
115+
wfi | verify wakeup/nop occurs with pending interrupt
116+
----
117+
==== direct-01.S
118+
.Description: trigger, clear, retrigger same interrupt.
119+
- enable mie CSR
120+
- generate interrupt
121+
- enable mstatus.mie
122+
- trigger m-mode handler
123+
- clear 1st interrupt
124+
- generate interrupt
125+
- trigger 2nd m-mode handler
126+
- clear 2nd interrupt
127+
- set mepc to finish
128+
- mret to finish
129+
[%autofit]
130+
----
131+
RVMODEL_SET_MIE = MIE_MSIE
132+
RVMODEL_SET_INT1 = RVMODEL_SET_MSW_INT
133+
RVMODEL_SET_INT2 = RVMODEL_SET_MSW_INT
134+
RVMODEL_CLEAR_INT1 = RVMODEL_CLEAR_MSW_INT
135+
RVMODEL_CLEAR_INT2 = RVMODEL_CLEAR_MSW_INT
136+
----
137+
Coverage - same as msw-01.S plus
138+
----
139+
mtvec.mode | verify direct mode is used to handle interrupt
140+
msip retrigger | verify after mstatus.mie is enabled in interrupt handler, msip will retrigger
141+
----
142+
==== direct-02.S
143+
.Description: trigger, clear, retrigger single interrupt, no 2nd clear.
144+
Stimulates pending interrupt after setting mstatus.mpie followed by mret
145+
mstatus.mie should be cleared after mret so pending interrupt is not taken
146+
- enable mie CSR
147+
- generate interrupt
148+
- enable mstatus.mie
149+
- trigger m-mode handler
150+
- clear 1st interrupt
151+
- generate interrupt
152+
- trigger 2nd m-mode handler
153+
- set mepc to finish
154+
- clear mstatus.mpie
155+
- mret to finish
156+
[%autofit]
157+
----
158+
RVMODEL_SET_MIE = MIE_MSIE
159+
RVMODEL_SET_INT1 = RVMODEL_SET_MSW_INT
160+
RVMODEL_SET_INT2 = RVMODEL_SET_MSW_INT
161+
RVMODEL_CLEAR_INT1 = RVMODEL_CLEAR_MSW_INT
162+
RVMODEL_CLEAR_INT2 = <EMPTY>
163+
----
164+
Coverage - same as msw-01.S plus
165+
----
166+
msip retrigger | verify after mstatus.mie is enabled after mret, msip will retrigger
167+
----
168+
==== vectored-01.S
169+
.Description: trigger, clear, retrigger single interrupt, vectored-mode.
170+
- enable mie CSR
171+
- generate interrupt
172+
- enable mstatus.mie
173+
- trigger vectored m-mode handler
174+
- clear 1st interrupt
175+
- generate interrupt
176+
- trigger 2nd vectored m-mode handler
177+
- clear 2nd interrupt
178+
- set mepc to finish
179+
- mret to finish
180+
[%autofit]
181+
----
182+
RVMODEL_SET_MIE = MIE_MSIE
183+
RVMODEL_MTVEC_MODE = 1
184+
RVMODEL_SET_INT1 = RVMODEL_SET_MSW_INT
185+
RVMODEL_SET_INT2 = RVMODEL_SET_MSW_INT
186+
RVMODEL_CLEAR_INT1 = RVMODEL_CLEAR_MSW_INT
187+
RVMODEL_CLEAR_INT2 = RVMODEL_CLEAR_MSW_INT
188+
----
189+
Coverage - same as msw-01.S plus
190+
----
191+
mtvec.mode | verify vectored mode is used to handle interrupt
192+
msip retrigger | verify after mstatus.mie is enabled in interrupt handler, msip will retrigger
193+
----
194+
==== vectored-02.S
195+
.Description: trigger, clear, retrigger single interrupt, no 2nd clear.
196+
Stimulates pending interrupt after setting mstatus.mpie followed by mret, vectored-mode.
197+
mstatus.mie should be cleared after mret so pending interrupt is not taken
198+
- enable mie CSR
199+
- generate interrupt
200+
- enable mstatus.mie
201+
- trigger vectored m-mode handler
202+
- clear 1st interrupt
203+
- generate interrupt
204+
- trigger 2nd vectored m-mode handler
205+
- set mepc to finish
206+
- clear mstatus.mpie
207+
- mret to finish
208+
[%autofit]
209+
----
210+
RVMODEL_SET_MIE = MIE_MSIE
211+
RVMODEL_MTVEC_MODE = 1
212+
RVMODEL_SET_INT1 = RVMODEL_SET_MSW_INT
213+
RVMODEL_SET_INT2 = RVMODEL_SET_MSW_INT
214+
RVMODEL_CLEAR_INT1 = RVMODEL_CLEAR_MSW_INT
215+
RVMODEL_CLEAR_INT2 = <EMPTY>
216+
----
217+
Coverage - same as msw-01.S plus
218+
----
219+
mtvec.mode | verify vectored mode is used to handle interrupt
220+
msip retrigger | verify after mstatus.mie is enabled after mret, msip will retrigger
221+
----
222+
==== ecall-01.S
223+
.Description: trigger, clear, set interrupt pending, ecall
224+
Stimulates ecall within an interrupt handler to stimulate mcause.interrupt toggling
225+
mstatus.mie should be cleared after mret so pending interrupt is not taken
226+
- enable mie CSR
227+
- generate interrupt
228+
- enable mstatus.mie
229+
- trigger m-mode vectored interrupt handler
230+
- ecall instruction to trigger (direct) exception handler
231+
- set mepc to finish
232+
- clear mstatus.mpie
233+
- mret to finish
234+
- re-trigger interrupt
235+
[%autofit]
236+
----
237+
RVMODEL_SET_MIE = MIE_MSIE
238+
RVMODEL_MTVEC_MODE = 1
239+
RVMODEL_SET_INT1 = RVMODEL_SET_MSW_INT
240+
RVMODEL_SET_INT2 = <EMPTY>
241+
RVMODEL_CLEAR_INT1 = <EMPTY>
242+
RVMODEL_CLEAR_INT2 = <EMPTY>
243+
RVMODEL_ECALL = ecall
244+
----
245+
Coverage - same as msw-01.S plus
246+
----
247+
mtvec.mode | verify vectored mode is used to handle interrupt
248+
mcause.interrupt 0/1 | verify ecall toggles mcause.interrupt, uses direct exception handler
249+
----
250+
==== level-01.S
251+
.Description: verify interrupt level order, 2 interrupts asserted in 1st interrupt handler, mtvec.mode=direct
252+
- enable mie CSR
253+
- generate interrupt 1
254+
- enable mstatus.mie
255+
- trigger m-mode handler
256+
- generate interrupt 2 (both interrupts now pending)
257+
- trigger 2nd m-mode handler
258+
- set mepc to finish
259+
- clear mstatus.mpie
260+
- mret to finish
261+
[%autofit]
262+
----
263+
RVMODEL_SET_INT1 = RVMODEL_SET_MSW_INT
264+
RVMODEL_SET_INT2 = RVMODEL_SET_MTIMER_INT
265+
RVMODEL_CLEAR_INT1 = <EMPTY>
266+
RVMODEL_CLEAR_INT2 = RVMODEL_CLEAR_MTIMER_INT
267+
----
268+
Coverage
269+
----
270+
Interrupt ordering - both interrupts asserted in msw interrupt handler
271+
----
272+
==== level-02.S
273+
.Description: verify interrupt level order, swap 2 interrupt order, mtvec.mode=direct
274+
- enable mie CSR
275+
- generate interrupt 1
276+
- enable mstatus.mie
277+
- trigger m-mode handler
278+
- generate interrupt 2 (both interrupts now pending)
279+
- set mstatus.mie
280+
- trigger 2nd m-mode handler
281+
- set mepc to finish
282+
- clear mstatus.mpie
283+
- mret to finish
284+
[%autofit]
285+
----
286+
RVMODEL_SET_INT1 = RVMODEL_SET_MTIMER_INT
287+
RVMODEL_SET_INT2 = RVMODEL_SET_MSW_INT
288+
RVMODEL_CLEAR_INT1 = <EMPTY>
289+
RVMODEL_CLEAR_INT2 = RVMODEL_CLEAR_MSW_INT
290+
----
291+
----
292+
Interrupt ordering - both interrupts asserted in mtimer interrupt handler
293+
----
294+
==== level-03.S
295+
.Description: verify interrupt level order, 2 interrupts asserted in 1st interrupt handler, mtvec.mode=vectored
296+
- enable mie CSR
297+
- generate interrupt 1
298+
- enable mstatus.mie
299+
- trigger vectored m-mode handler
300+
- generate interrupt 2 (both interrupts now pending)
301+
- set mstatus.mie
302+
- trigger 2nd vectored m-mode handler
303+
- set mepc to finish
304+
- clear mstatus.mpie
305+
- mret to finish
306+
[%autofit]
307+
----
308+
RVMODEL_MTVEC_MODE = 1
309+
RVMODEL_SET_INT1 = RVMODEL_SET_MSW_INT
310+
RVMODEL_SET_INT2 = RVMODEL_SET_MTIMER_INT
311+
RVMODEL_CLEAR_INT1 = <EMPTY>
312+
RVMODEL_CLEAR_INT2 = RVMODEL_CLEAR_MTIMER_INT
313+
----
314+
Coverage
315+
----
316+
mtvec.mode | verify vectored mode is used to handle interrupt, signature of higher priority interrupt
317+
Interrupt ordering | both interrupts asserted in msw interrupt handler
318+
----
319+
==== level-04.S
320+
.Description: verify interrupt level order, swap 2 interrupt order, mtvec.mode=vectored
321+
- enable mie CSR
322+
- generate interrupt 1
323+
- enable mstatus.mie
324+
- trigger vectored m-mode handler
325+
- generate interrupt 2 (both interrupts now pending)
326+
- set mstatus.mie
327+
- trigger 2nd vectored m-mode handler
328+
- set mepc to finish
329+
- clear mstatus.mpie
330+
- mret to finish
331+
[%autofit]
332+
----
333+
RVMODEL_MTVEC_MODE = 1
334+
RVMODEL_SET_INT1 = RVMODEL_SET_MTIMER_INT
335+
RVMODEL_SET_INT2 = RVMODEL_SET_MSW_INT
336+
RVMODEL_CLEAR_INT1 = <EMPTY>
337+
RVMODEL_CLEAR_INT2 = RVMODEL_CLEAR_MSW_INT
338+
----
339+
Coverage
340+
----
341+
mtvec.mode | verify vectored mode is used to handle interrupt, signature of higher priority interrupt
342+
Interrupt ordering | both interrupts asserted in mtimer interrupt handler
343+
----

0 commit comments

Comments
 (0)