block: Make bdrv_img_create() size selection easier to read
[qemu/kevin.git] / tests / tcg / xtensa / test_timer.S
blob6cda71adbb0697eaccab000b73ca2c24b7420031
1 #include "macros.inc"
3 #define CCOUNT_SHIFT 4
4 #define WAIT_LOOPS 20
6 .macro      make_ccount_delta target, delta
7     rsr     \delta, ccount
8     rsr     \target, ccount
9     sub     \delta, \target, \delta
10     slli    \delta, \delta, CCOUNT_SHIFT
11     add     \target, \target, \delta
12 .endm
14 test_suite timer
16 test ccount
17     rsr     a3, ccount
18     rsr     a4, ccount
19     assert  ne, a3, a4
20 test_end
22 test ccount_write
23     rsr     a3, ccount
24     rsr     a4, ccount
25     sub     a4, a4, a3
26     movi    a2, 0x12345678
27     wsr     a2, ccount
28     esync
29     rsr     a3, ccount
30     sub     a3, a3, a2
31     slli    a4, a4, 2
32     assert  ltu, a3, a4
33 test_end
35 test ccount_update_deadline
36     movi    a2, 0
37     wsr     a2, intenable
38     rsr     a2, interrupt
39     wsr     a2, intclear
40     movi    a2, 0
41     wsr     a2, ccompare1
42     wsr     a2, ccompare2
43     movi    a2, 0x12345678
44     wsr     a2, ccompare0
45     rsr     a3, interrupt
46     assert  eqi, a3, 0
47     movi    a2, 0x12345677
48     wsr     a2, ccount
49     esync
50     nop
51     rsr     a2, interrupt
52     movi    a3, 1 << XCHAL_TIMER0_INTERRUPT
53     assert  eq, a2, a3
54 test_end
56 test ccompare
57     movi    a2, 0
58     wsr     a2, intenable
59     rsr     a2, interrupt
60     wsr     a2, intclear
61     movi    a2, 0
62     wsr     a2, ccompare1
63     wsr     a2, ccompare2
65     make_ccount_delta a2, a15
66     wsr     a2, ccompare0
68     rsr     a3, interrupt
69     rsr     a4, ccount
70     rsr     a5, interrupt
71     sub     a4, a4, a2
72     bgez    a4, 2f
73     assert  eqi, a3, 0
74     j       1b
76     assert  nei, a5, 0
77 test_end
79 test ccompare0_interrupt
80     set_vector kernel, 2f
81     movi    a2, 0
82     wsr     a2, intenable
83     rsr     a2, interrupt
84     wsr     a2, intclear
85     movi    a2, 0
86     wsr     a2, ccompare1
87     wsr     a2, ccompare2
89     movi    a3, WAIT_LOOPS
90     make_ccount_delta a2, a15
91     wsr     a2, ccompare0
92     rsync
93     rsr     a2, interrupt
94     assert  eqi, a2, 0
96     movi    a2, 1 << XCHAL_TIMER0_INTERRUPT
97     wsr     a2, intenable
98     rsil    a2, 0
99     loop    a3, 1f
100     nop
102     test_fail
104     rsr     a2, exccause
105     assert  eqi, a2, 4 /* LEVEL1_INTERRUPT_CAUSE */
106 test_end
108 test ccompare1_interrupt
109     set_vector level3, 2f
110     movi    a2, 0
111     wsr     a2, intenable
112     rsr     a2, interrupt
113     wsr     a2, intclear
114     movi    a2, 0
115     wsr     a2, ccompare0
116     wsr     a2, ccompare2
118     movi    a3, WAIT_LOOPS
119     make_ccount_delta a2, a15
120     wsr     a2, ccompare1
121     rsync
122     rsr     a2, interrupt
123     assert  eqi, a2, 0
124     movi    a2, 1 << XCHAL_TIMER1_INTERRUPT
125     wsr     a2, intenable
126     rsil    a2, 2
127     loop    a3, 1f
128     nop
130     test_fail
132 test_end
134 test ccompare2_interrupt
135     set_vector level5, 2f
136     movi    a2, 0
137     wsr     a2, intenable
138     rsr     a2, interrupt
139     wsr     a2, intclear
140     movi    a2, 0
141     wsr     a2, ccompare0
142     wsr     a2, ccompare1
144     movi    a3, WAIT_LOOPS
145     make_ccount_delta a2, a15
146     wsr     a2, ccompare2
147     rsync
148     rsr     a2, interrupt
149     assert  eqi, a2, 0
150     movi    a2, 1 << XCHAL_TIMER2_INTERRUPT
151     wsr     a2, intenable
152     rsil    a2, 4
153     loop    a3, 1f
154     nop
156     test_fail
158 test_end
160 test ccompare_interrupt_masked
161     set_vector kernel, 2f
162     movi    a2, 0
163     wsr     a2, intenable
164     rsr     a2, interrupt
165     wsr     a2, intclear
166     movi    a2, 0
167     wsr     a2, ccompare2
169     movi    a3, 2 * WAIT_LOOPS
170     make_ccount_delta a2, a15
171     wsr     a2, ccompare1
172     add     a2, a2, a15
173     wsr     a2, ccompare0
174     rsync
175     rsr     a2, interrupt
176     assert  eqi, a2, 0
178     movi    a2, 1 << XCHAL_TIMER0_INTERRUPT
179     wsr     a2, intenable
180     rsil    a2, 0
181     loop    a3, 1f
182     nop
184     test_fail
186     rsr     a2, exccause
187     assert  eqi, a2, 4 /* LEVEL1_INTERRUPT_CAUSE */
188 test_end
190 test ccompare_interrupt_masked_waiti
191     set_vector kernel, 2f
192     movi    a2, 0
193     wsr     a2, intenable
194     rsr     a2, interrupt
195     wsr     a2, intclear
196     movi    a2, 0
197     wsr     a2, ccompare2
199     movi    a3, 2 * WAIT_LOOPS
200     make_ccount_delta a2, a15
201     wsr     a2, ccompare1
202     add     a2, a2, a15
203     wsr     a2, ccompare0
204     rsync
205     rsr     a2, interrupt
206     assert  eqi, a2, 0
208     movi    a2, 1 << XCHAL_TIMER0_INTERRUPT
209     wsr     a2, intenable
210     waiti   0
211     test_fail
213     rsr     a2, exccause
214     assert  eqi, a2, 4 /* LEVEL1_INTERRUPT_CAUSE */
215 test_end
217 test_suite_end