1882fac37SDmitry Osipenko /*
2882fac37SDmitry Osipenko * QTest testcase for the ARM MPTimer
3882fac37SDmitry Osipenko *
4882fac37SDmitry Osipenko * Copyright (c) 2016 Dmitry Osipenko <digetx@gmail.com>
5882fac37SDmitry Osipenko *
6882fac37SDmitry Osipenko * This work is licensed under the terms of the GNU GPL, version 2 or later.
7882fac37SDmitry Osipenko * See the COPYING file in the top-level directory.
8882fac37SDmitry Osipenko */
9882fac37SDmitry Osipenko
10882fac37SDmitry Osipenko #include "qemu/osdep.h"
11882fac37SDmitry Osipenko #include "qemu/timer.h"
12*dd210749SThomas Huth #include "libqtest-single.h"
13882fac37SDmitry Osipenko
14882fac37SDmitry Osipenko #define TIMER_BLOCK_SCALE(s) ((((s) & 0xff) + 1) * 10)
15882fac37SDmitry Osipenko
16882fac37SDmitry Osipenko #define TIMER_BLOCK_STEP(scaler, steps_nb) \
17882fac37SDmitry Osipenko clock_step(TIMER_BLOCK_SCALE(scaler) * (int64_t)(steps_nb) + 1)
18882fac37SDmitry Osipenko
19882fac37SDmitry Osipenko #define TIMER_BASE_PHYS 0x1e000600
20882fac37SDmitry Osipenko
21882fac37SDmitry Osipenko #define TIMER_LOAD 0x00
22882fac37SDmitry Osipenko #define TIMER_COUNTER 0x04
23882fac37SDmitry Osipenko #define TIMER_CONTROL 0x08
24882fac37SDmitry Osipenko #define TIMER_INTSTAT 0x0C
25882fac37SDmitry Osipenko
26882fac37SDmitry Osipenko #define TIMER_CONTROL_ENABLE (1 << 0)
27882fac37SDmitry Osipenko #define TIMER_CONTROL_PERIODIC (1 << 1)
28882fac37SDmitry Osipenko #define TIMER_CONTROL_IT_ENABLE (1 << 2)
29882fac37SDmitry Osipenko #define TIMER_CONTROL_PRESCALER(p) (((p) & 0xff) << 8)
30882fac37SDmitry Osipenko
31882fac37SDmitry Osipenko #define PERIODIC 1
32882fac37SDmitry Osipenko #define ONESHOT 0
33882fac37SDmitry Osipenko #define NOSCALE 0
34882fac37SDmitry Osipenko
35882fac37SDmitry Osipenko static int nonscaled = NOSCALE;
36882fac37SDmitry Osipenko static int scaled = 122;
37882fac37SDmitry Osipenko
timer_load(uint32_t load)38882fac37SDmitry Osipenko static void timer_load(uint32_t load)
39882fac37SDmitry Osipenko {
40882fac37SDmitry Osipenko writel(TIMER_BASE_PHYS + TIMER_LOAD, load);
41882fac37SDmitry Osipenko }
42882fac37SDmitry Osipenko
timer_start(int periodic,uint32_t scale)43882fac37SDmitry Osipenko static void timer_start(int periodic, uint32_t scale)
44882fac37SDmitry Osipenko {
45882fac37SDmitry Osipenko uint32_t ctl = TIMER_CONTROL_ENABLE | TIMER_CONTROL_PRESCALER(scale);
46882fac37SDmitry Osipenko
47882fac37SDmitry Osipenko if (periodic) {
48882fac37SDmitry Osipenko ctl |= TIMER_CONTROL_PERIODIC;
49882fac37SDmitry Osipenko }
50882fac37SDmitry Osipenko
51882fac37SDmitry Osipenko writel(TIMER_BASE_PHYS + TIMER_CONTROL, ctl);
52882fac37SDmitry Osipenko }
53882fac37SDmitry Osipenko
timer_stop(void)54882fac37SDmitry Osipenko static void timer_stop(void)
55882fac37SDmitry Osipenko {
56882fac37SDmitry Osipenko writel(TIMER_BASE_PHYS + TIMER_CONTROL, 0);
57882fac37SDmitry Osipenko }
58882fac37SDmitry Osipenko
timer_int_clr(void)59882fac37SDmitry Osipenko static void timer_int_clr(void)
60882fac37SDmitry Osipenko {
61882fac37SDmitry Osipenko writel(TIMER_BASE_PHYS + TIMER_INTSTAT, 1);
62882fac37SDmitry Osipenko }
63882fac37SDmitry Osipenko
timer_reset(void)64882fac37SDmitry Osipenko static void timer_reset(void)
65882fac37SDmitry Osipenko {
66882fac37SDmitry Osipenko timer_stop();
67882fac37SDmitry Osipenko timer_load(0);
68882fac37SDmitry Osipenko timer_int_clr();
69882fac37SDmitry Osipenko }
70882fac37SDmitry Osipenko
timer_get_and_clr_int_sts(void)71882fac37SDmitry Osipenko static uint32_t timer_get_and_clr_int_sts(void)
72882fac37SDmitry Osipenko {
73882fac37SDmitry Osipenko uint32_t int_sts = readl(TIMER_BASE_PHYS + TIMER_INTSTAT);
74882fac37SDmitry Osipenko
75882fac37SDmitry Osipenko if (int_sts) {
76882fac37SDmitry Osipenko timer_int_clr();
77882fac37SDmitry Osipenko }
78882fac37SDmitry Osipenko
79882fac37SDmitry Osipenko return int_sts;
80882fac37SDmitry Osipenko }
81882fac37SDmitry Osipenko
timer_counter(void)82882fac37SDmitry Osipenko static uint32_t timer_counter(void)
83882fac37SDmitry Osipenko {
84882fac37SDmitry Osipenko return readl(TIMER_BASE_PHYS + TIMER_COUNTER);
85882fac37SDmitry Osipenko }
86882fac37SDmitry Osipenko
timer_set_counter(uint32_t value)87882fac37SDmitry Osipenko static void timer_set_counter(uint32_t value)
88882fac37SDmitry Osipenko {
89882fac37SDmitry Osipenko writel(TIMER_BASE_PHYS + TIMER_COUNTER, value);
90882fac37SDmitry Osipenko }
91882fac37SDmitry Osipenko
test_timer_oneshot(gconstpointer arg)92882fac37SDmitry Osipenko static void test_timer_oneshot(gconstpointer arg)
93882fac37SDmitry Osipenko {
94882fac37SDmitry Osipenko int scaler = *((int *) arg);
95882fac37SDmitry Osipenko
96882fac37SDmitry Osipenko timer_reset();
97882fac37SDmitry Osipenko timer_load(9999999);
98882fac37SDmitry Osipenko timer_start(ONESHOT, scaler);
99882fac37SDmitry Osipenko
100882fac37SDmitry Osipenko TIMER_BLOCK_STEP(scaler, 9999);
101882fac37SDmitry Osipenko
102882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, 0);
103882fac37SDmitry Osipenko g_assert_cmpuint(timer_counter(), ==, 9990000);
104882fac37SDmitry Osipenko
105882fac37SDmitry Osipenko TIMER_BLOCK_STEP(scaler, 9990000);
106882fac37SDmitry Osipenko
107882fac37SDmitry Osipenko g_assert_cmpuint(timer_counter(), ==, 0);
108882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, 1);
109882fac37SDmitry Osipenko
110882fac37SDmitry Osipenko TIMER_BLOCK_STEP(scaler, 9990000);
111882fac37SDmitry Osipenko
112882fac37SDmitry Osipenko g_assert_cmpuint(timer_counter(), ==, 0);
113882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, 0);
114882fac37SDmitry Osipenko }
115882fac37SDmitry Osipenko
test_timer_pause(gconstpointer arg)116882fac37SDmitry Osipenko static void test_timer_pause(gconstpointer arg)
117882fac37SDmitry Osipenko {
118882fac37SDmitry Osipenko int scaler = *((int *) arg);
119882fac37SDmitry Osipenko
120882fac37SDmitry Osipenko timer_reset();
121882fac37SDmitry Osipenko timer_load(999999999);
122882fac37SDmitry Osipenko timer_start(ONESHOT, scaler);
123882fac37SDmitry Osipenko
124882fac37SDmitry Osipenko TIMER_BLOCK_STEP(scaler, 999);
125882fac37SDmitry Osipenko
126882fac37SDmitry Osipenko g_assert_cmpuint(timer_counter(), ==, 999999000);
127882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, 0);
128882fac37SDmitry Osipenko
129882fac37SDmitry Osipenko TIMER_BLOCK_STEP(scaler, 9000);
130882fac37SDmitry Osipenko
131882fac37SDmitry Osipenko g_assert_cmpuint(timer_counter(), ==, 999990000);
132882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, 0);
133882fac37SDmitry Osipenko
134882fac37SDmitry Osipenko timer_stop();
135882fac37SDmitry Osipenko
136882fac37SDmitry Osipenko g_assert_cmpuint(timer_counter(), ==, 999990000);
137882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, 0);
138882fac37SDmitry Osipenko
139882fac37SDmitry Osipenko TIMER_BLOCK_STEP(scaler, 90000);
140882fac37SDmitry Osipenko
141882fac37SDmitry Osipenko g_assert_cmpuint(timer_counter(), ==, 999990000);
142882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, 0);
143882fac37SDmitry Osipenko
144882fac37SDmitry Osipenko timer_start(ONESHOT, scaler);
145882fac37SDmitry Osipenko
146882fac37SDmitry Osipenko TIMER_BLOCK_STEP(scaler, 999990000);
147882fac37SDmitry Osipenko
148882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, 1);
149882fac37SDmitry Osipenko g_assert_cmpuint(timer_counter(), ==, 0);
150882fac37SDmitry Osipenko
151882fac37SDmitry Osipenko TIMER_BLOCK_STEP(scaler, 999990000);
152882fac37SDmitry Osipenko
153882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, 0);
154882fac37SDmitry Osipenko g_assert_cmpuint(timer_counter(), ==, 0);
155882fac37SDmitry Osipenko }
156882fac37SDmitry Osipenko
test_timer_reload(gconstpointer arg)157882fac37SDmitry Osipenko static void test_timer_reload(gconstpointer arg)
158882fac37SDmitry Osipenko {
159882fac37SDmitry Osipenko int scaler = *((int *) arg);
160882fac37SDmitry Osipenko
161882fac37SDmitry Osipenko timer_reset();
162882fac37SDmitry Osipenko timer_load(UINT32_MAX);
163882fac37SDmitry Osipenko timer_start(ONESHOT, scaler);
164882fac37SDmitry Osipenko
165882fac37SDmitry Osipenko TIMER_BLOCK_STEP(scaler, 90000);
166882fac37SDmitry Osipenko
167882fac37SDmitry Osipenko g_assert_cmpuint(timer_counter(), ==, UINT32_MAX - 90000);
168882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, 0);
169882fac37SDmitry Osipenko
170882fac37SDmitry Osipenko timer_load(UINT32_MAX);
171882fac37SDmitry Osipenko
172882fac37SDmitry Osipenko TIMER_BLOCK_STEP(scaler, 90000);
173882fac37SDmitry Osipenko
174882fac37SDmitry Osipenko g_assert_cmpuint(timer_counter(), ==, UINT32_MAX - 90000);
175882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, 0);
176882fac37SDmitry Osipenko }
177882fac37SDmitry Osipenko
test_timer_periodic(gconstpointer arg)178882fac37SDmitry Osipenko static void test_timer_periodic(gconstpointer arg)
179882fac37SDmitry Osipenko {
180882fac37SDmitry Osipenko int scaler = *((int *) arg);
181882fac37SDmitry Osipenko int repeat = 10;
182882fac37SDmitry Osipenko
183882fac37SDmitry Osipenko timer_reset();
184882fac37SDmitry Osipenko timer_load(100);
185882fac37SDmitry Osipenko timer_start(PERIODIC, scaler);
186882fac37SDmitry Osipenko
187882fac37SDmitry Osipenko while (repeat--) {
188882fac37SDmitry Osipenko clock_step(TIMER_BLOCK_SCALE(scaler) * (101 + repeat) + 1);
189882fac37SDmitry Osipenko
190882fac37SDmitry Osipenko g_assert_cmpuint(timer_counter(), ==, 100 - repeat);
191882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, 1);
192882fac37SDmitry Osipenko
193882fac37SDmitry Osipenko clock_step(TIMER_BLOCK_SCALE(scaler) * (101 - repeat) - 1);
194882fac37SDmitry Osipenko }
195882fac37SDmitry Osipenko }
196882fac37SDmitry Osipenko
test_timer_oneshot_to_periodic(gconstpointer arg)197882fac37SDmitry Osipenko static void test_timer_oneshot_to_periodic(gconstpointer arg)
198882fac37SDmitry Osipenko {
199882fac37SDmitry Osipenko int scaler = *((int *) arg);
200882fac37SDmitry Osipenko
201882fac37SDmitry Osipenko timer_reset();
202882fac37SDmitry Osipenko timer_load(10000);
203882fac37SDmitry Osipenko timer_start(ONESHOT, scaler);
204882fac37SDmitry Osipenko
205882fac37SDmitry Osipenko TIMER_BLOCK_STEP(scaler, 1000);
206882fac37SDmitry Osipenko
207882fac37SDmitry Osipenko g_assert_cmpuint(timer_counter(), ==, 9000);
208882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, 0);
209882fac37SDmitry Osipenko
210882fac37SDmitry Osipenko timer_start(PERIODIC, scaler);
211882fac37SDmitry Osipenko
212882fac37SDmitry Osipenko TIMER_BLOCK_STEP(scaler, 14001);
213882fac37SDmitry Osipenko
214882fac37SDmitry Osipenko g_assert_cmpuint(timer_counter(), ==, 5000);
215882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, 1);
216882fac37SDmitry Osipenko }
217882fac37SDmitry Osipenko
test_timer_periodic_to_oneshot(gconstpointer arg)218882fac37SDmitry Osipenko static void test_timer_periodic_to_oneshot(gconstpointer arg)
219882fac37SDmitry Osipenko {
220882fac37SDmitry Osipenko int scaler = *((int *) arg);
221882fac37SDmitry Osipenko
222882fac37SDmitry Osipenko timer_reset();
223882fac37SDmitry Osipenko timer_load(99999999);
224882fac37SDmitry Osipenko timer_start(PERIODIC, scaler);
225882fac37SDmitry Osipenko
226882fac37SDmitry Osipenko TIMER_BLOCK_STEP(scaler, 999);
227882fac37SDmitry Osipenko
228882fac37SDmitry Osipenko g_assert_cmpuint(timer_counter(), ==, 99999000);
229882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, 0);
230882fac37SDmitry Osipenko
231882fac37SDmitry Osipenko timer_start(ONESHOT, scaler);
232882fac37SDmitry Osipenko
233882fac37SDmitry Osipenko TIMER_BLOCK_STEP(scaler, 99999009);
234882fac37SDmitry Osipenko
235882fac37SDmitry Osipenko g_assert_cmpuint(timer_counter(), ==, 0);
236882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, 1);
237882fac37SDmitry Osipenko }
238882fac37SDmitry Osipenko
test_timer_prescaler(void)239882fac37SDmitry Osipenko static void test_timer_prescaler(void)
240882fac37SDmitry Osipenko {
241882fac37SDmitry Osipenko timer_reset();
242882fac37SDmitry Osipenko timer_load(9999999);
243882fac37SDmitry Osipenko timer_start(ONESHOT, NOSCALE);
244882fac37SDmitry Osipenko
245882fac37SDmitry Osipenko TIMER_BLOCK_STEP(NOSCALE, 9999998);
246882fac37SDmitry Osipenko
247882fac37SDmitry Osipenko g_assert_cmpuint(timer_counter(), ==, 1);
248882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, 0);
249882fac37SDmitry Osipenko
250882fac37SDmitry Osipenko TIMER_BLOCK_STEP(NOSCALE, 1);
251882fac37SDmitry Osipenko
252882fac37SDmitry Osipenko g_assert_cmpuint(timer_counter(), ==, 0);
253882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, 1);
254882fac37SDmitry Osipenko
255882fac37SDmitry Osipenko timer_reset();
256882fac37SDmitry Osipenko timer_load(9999999);
257882fac37SDmitry Osipenko timer_start(ONESHOT, 0xAB);
258882fac37SDmitry Osipenko
259882fac37SDmitry Osipenko TIMER_BLOCK_STEP(0xAB, 9999998);
260882fac37SDmitry Osipenko
261882fac37SDmitry Osipenko g_assert_cmpuint(timer_counter(), ==, 1);
262882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, 0);
263882fac37SDmitry Osipenko
264882fac37SDmitry Osipenko TIMER_BLOCK_STEP(0xAB, 1);
265882fac37SDmitry Osipenko
266882fac37SDmitry Osipenko g_assert_cmpuint(timer_counter(), ==, 0);
267882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, 1);
268882fac37SDmitry Osipenko }
269882fac37SDmitry Osipenko
test_timer_prescaler_on_the_fly(void)270882fac37SDmitry Osipenko static void test_timer_prescaler_on_the_fly(void)
271882fac37SDmitry Osipenko {
272882fac37SDmitry Osipenko timer_reset();
273882fac37SDmitry Osipenko timer_load(9999999);
274882fac37SDmitry Osipenko timer_start(ONESHOT, NOSCALE);
275882fac37SDmitry Osipenko
276882fac37SDmitry Osipenko TIMER_BLOCK_STEP(NOSCALE, 999);
277882fac37SDmitry Osipenko
278882fac37SDmitry Osipenko g_assert_cmpuint(timer_counter(), ==, 9999000);
279882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, 0);
280882fac37SDmitry Osipenko
281882fac37SDmitry Osipenko timer_start(ONESHOT, 0xAB);
282882fac37SDmitry Osipenko
283882fac37SDmitry Osipenko TIMER_BLOCK_STEP(0xAB, 9000);
284882fac37SDmitry Osipenko
285882fac37SDmitry Osipenko g_assert_cmpuint(timer_counter(), ==, 9990000);
286882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, 0);
287882fac37SDmitry Osipenko }
288882fac37SDmitry Osipenko
test_timer_set_oneshot_counter_to_0(gconstpointer arg)289882fac37SDmitry Osipenko static void test_timer_set_oneshot_counter_to_0(gconstpointer arg)
290882fac37SDmitry Osipenko {
291882fac37SDmitry Osipenko int scaler = *((int *) arg);
292882fac37SDmitry Osipenko
293882fac37SDmitry Osipenko timer_reset();
294882fac37SDmitry Osipenko timer_load(UINT32_MAX);
295882fac37SDmitry Osipenko timer_start(ONESHOT, scaler);
296882fac37SDmitry Osipenko
297882fac37SDmitry Osipenko TIMER_BLOCK_STEP(scaler, 1);
298882fac37SDmitry Osipenko
299882fac37SDmitry Osipenko g_assert_cmpuint(timer_counter(), ==, UINT32_MAX - 1);
300882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, 0);
301882fac37SDmitry Osipenko
302882fac37SDmitry Osipenko timer_set_counter(0);
303882fac37SDmitry Osipenko
304882fac37SDmitry Osipenko TIMER_BLOCK_STEP(scaler, 10);
305882fac37SDmitry Osipenko
306882fac37SDmitry Osipenko g_assert_cmpuint(timer_counter(), ==, 0);
307882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, !!scaler);
308882fac37SDmitry Osipenko }
309882fac37SDmitry Osipenko
test_timer_set_periodic_counter_to_0(gconstpointer arg)310882fac37SDmitry Osipenko static void test_timer_set_periodic_counter_to_0(gconstpointer arg)
311882fac37SDmitry Osipenko {
312882fac37SDmitry Osipenko int scaler = *((int *) arg);
313882fac37SDmitry Osipenko
314882fac37SDmitry Osipenko timer_reset();
315882fac37SDmitry Osipenko timer_load(UINT32_MAX);
316882fac37SDmitry Osipenko timer_start(PERIODIC, scaler);
317882fac37SDmitry Osipenko
318882fac37SDmitry Osipenko TIMER_BLOCK_STEP(scaler, 1);
319882fac37SDmitry Osipenko
320882fac37SDmitry Osipenko g_assert_cmpuint(timer_counter(), ==, UINT32_MAX - 1);
321882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, 0);
322882fac37SDmitry Osipenko
323882fac37SDmitry Osipenko timer_set_counter(0);
324882fac37SDmitry Osipenko
325882fac37SDmitry Osipenko TIMER_BLOCK_STEP(scaler, 1);
326882fac37SDmitry Osipenko
327882fac37SDmitry Osipenko g_assert_cmpuint(timer_counter(), ==, UINT32_MAX - (scaler ? 0 : 1));
328882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, !!scaler);
329882fac37SDmitry Osipenko
330882fac37SDmitry Osipenko timer_reset();
331882fac37SDmitry Osipenko timer_set_counter(UINT32_MAX);
332882fac37SDmitry Osipenko timer_start(PERIODIC, scaler);
333882fac37SDmitry Osipenko
334882fac37SDmitry Osipenko TIMER_BLOCK_STEP(scaler, 1);
335882fac37SDmitry Osipenko
336882fac37SDmitry Osipenko g_assert_cmpuint(timer_counter(), ==, UINT32_MAX - 1);
337882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, 0);
338882fac37SDmitry Osipenko
339882fac37SDmitry Osipenko timer_set_counter(0);
340882fac37SDmitry Osipenko
341882fac37SDmitry Osipenko TIMER_BLOCK_STEP(scaler, 1);
342882fac37SDmitry Osipenko
343882fac37SDmitry Osipenko g_assert_cmpuint(timer_counter(), ==, 0);
344882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, !!scaler);
345882fac37SDmitry Osipenko }
346882fac37SDmitry Osipenko
test_timer_noload_oneshot(gconstpointer arg)347882fac37SDmitry Osipenko static void test_timer_noload_oneshot(gconstpointer arg)
348882fac37SDmitry Osipenko {
349882fac37SDmitry Osipenko int scaler = *((int *) arg);
350882fac37SDmitry Osipenko
351882fac37SDmitry Osipenko timer_reset();
352882fac37SDmitry Osipenko timer_start(ONESHOT, scaler);
353882fac37SDmitry Osipenko
354882fac37SDmitry Osipenko TIMER_BLOCK_STEP(scaler, 1);
355882fac37SDmitry Osipenko
356882fac37SDmitry Osipenko g_assert_cmpuint(timer_counter(), ==, 0);
357882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, !!scaler);
358882fac37SDmitry Osipenko
359882fac37SDmitry Osipenko TIMER_BLOCK_STEP(scaler, 1);
360882fac37SDmitry Osipenko
361882fac37SDmitry Osipenko g_assert_cmpuint(timer_counter(), ==, 0);
362882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, 0);
363882fac37SDmitry Osipenko }
364882fac37SDmitry Osipenko
test_timer_noload_periodic(gconstpointer arg)365882fac37SDmitry Osipenko static void test_timer_noload_periodic(gconstpointer arg)
366882fac37SDmitry Osipenko {
367882fac37SDmitry Osipenko int scaler = *((int *) arg);
368882fac37SDmitry Osipenko
369882fac37SDmitry Osipenko timer_reset();
370882fac37SDmitry Osipenko timer_start(PERIODIC, scaler);
371882fac37SDmitry Osipenko
372882fac37SDmitry Osipenko TIMER_BLOCK_STEP(scaler, 1);
373882fac37SDmitry Osipenko
374882fac37SDmitry Osipenko g_assert_cmpuint(timer_counter(), ==, 0);
375882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, !!scaler);
376882fac37SDmitry Osipenko
377882fac37SDmitry Osipenko TIMER_BLOCK_STEP(scaler, 1);
378882fac37SDmitry Osipenko
379882fac37SDmitry Osipenko g_assert_cmpuint(timer_counter(), ==, 0);
380882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, !!scaler);
381882fac37SDmitry Osipenko }
382882fac37SDmitry Osipenko
test_timer_zero_load_oneshot(gconstpointer arg)383882fac37SDmitry Osipenko static void test_timer_zero_load_oneshot(gconstpointer arg)
384882fac37SDmitry Osipenko {
385882fac37SDmitry Osipenko int scaler = *((int *) arg);
386882fac37SDmitry Osipenko
387882fac37SDmitry Osipenko timer_reset();
388882fac37SDmitry Osipenko timer_start(ONESHOT, scaler);
389882fac37SDmitry Osipenko
390882fac37SDmitry Osipenko TIMER_BLOCK_STEP(scaler, 1);
391882fac37SDmitry Osipenko
392882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, !!scaler);
393882fac37SDmitry Osipenko g_assert_cmpuint(timer_counter(), ==, 0);
394882fac37SDmitry Osipenko
395882fac37SDmitry Osipenko timer_load(0);
396882fac37SDmitry Osipenko
397882fac37SDmitry Osipenko TIMER_BLOCK_STEP(scaler, 1);
398882fac37SDmitry Osipenko
399882fac37SDmitry Osipenko g_assert_cmpuint(timer_counter(), ==, 0);
400882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, !!scaler);
401882fac37SDmitry Osipenko
402882fac37SDmitry Osipenko TIMER_BLOCK_STEP(scaler, 1);
403882fac37SDmitry Osipenko
404882fac37SDmitry Osipenko g_assert_cmpuint(timer_counter(), ==, 0);
405882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, 0);
406882fac37SDmitry Osipenko }
407882fac37SDmitry Osipenko
test_timer_zero_load_periodic(gconstpointer arg)408882fac37SDmitry Osipenko static void test_timer_zero_load_periodic(gconstpointer arg)
409882fac37SDmitry Osipenko {
410882fac37SDmitry Osipenko int scaler = *((int *) arg);
411882fac37SDmitry Osipenko
412882fac37SDmitry Osipenko timer_reset();
413882fac37SDmitry Osipenko timer_start(PERIODIC, scaler);
414882fac37SDmitry Osipenko
415882fac37SDmitry Osipenko TIMER_BLOCK_STEP(scaler, 1);
416882fac37SDmitry Osipenko
417882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, !!scaler);
418882fac37SDmitry Osipenko g_assert_cmpuint(timer_counter(), ==, 0);
419882fac37SDmitry Osipenko
420882fac37SDmitry Osipenko timer_load(0);
421882fac37SDmitry Osipenko
422882fac37SDmitry Osipenko TIMER_BLOCK_STEP(scaler, 1);
423882fac37SDmitry Osipenko
424882fac37SDmitry Osipenko g_assert_cmpuint(timer_counter(), ==, 0);
425882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, !!scaler);
426882fac37SDmitry Osipenko
427882fac37SDmitry Osipenko TIMER_BLOCK_STEP(scaler, 1);
428882fac37SDmitry Osipenko
429882fac37SDmitry Osipenko g_assert_cmpuint(timer_counter(), ==, 0);
430882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, !!scaler);
431882fac37SDmitry Osipenko }
432882fac37SDmitry Osipenko
test_timer_zero_load_oneshot_to_nonzero(gconstpointer arg)433882fac37SDmitry Osipenko static void test_timer_zero_load_oneshot_to_nonzero(gconstpointer arg)
434882fac37SDmitry Osipenko {
435882fac37SDmitry Osipenko int scaler = *((int *) arg);
436882fac37SDmitry Osipenko
437882fac37SDmitry Osipenko timer_reset();
438882fac37SDmitry Osipenko timer_start(ONESHOT, scaler);
439882fac37SDmitry Osipenko
440882fac37SDmitry Osipenko TIMER_BLOCK_STEP(scaler, 1);
441882fac37SDmitry Osipenko
442882fac37SDmitry Osipenko g_assert_cmpuint(timer_counter(), ==, 0);
443882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, !!scaler);
444882fac37SDmitry Osipenko
445882fac37SDmitry Osipenko timer_load(0);
446882fac37SDmitry Osipenko
447882fac37SDmitry Osipenko TIMER_BLOCK_STEP(scaler, 1);
448882fac37SDmitry Osipenko
449882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, !!scaler);
450882fac37SDmitry Osipenko g_assert_cmpuint(timer_counter(), ==, 0);
451882fac37SDmitry Osipenko
452882fac37SDmitry Osipenko timer_load(999);
453882fac37SDmitry Osipenko
454882fac37SDmitry Osipenko TIMER_BLOCK_STEP(scaler, 1001);
455882fac37SDmitry Osipenko
456882fac37SDmitry Osipenko g_assert_cmpuint(timer_counter(), ==, 0);
457882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, 1);
458882fac37SDmitry Osipenko }
459882fac37SDmitry Osipenko
test_timer_zero_load_periodic_to_nonzero(gconstpointer arg)460882fac37SDmitry Osipenko static void test_timer_zero_load_periodic_to_nonzero(gconstpointer arg)
461882fac37SDmitry Osipenko {
462882fac37SDmitry Osipenko int scaler = *((int *) arg);
463882fac37SDmitry Osipenko int i;
464882fac37SDmitry Osipenko
465882fac37SDmitry Osipenko timer_reset();
466882fac37SDmitry Osipenko timer_start(PERIODIC, scaler);
467882fac37SDmitry Osipenko
468882fac37SDmitry Osipenko TIMER_BLOCK_STEP(scaler, 1);
469882fac37SDmitry Osipenko
470882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, !!scaler);
471882fac37SDmitry Osipenko g_assert_cmpuint(timer_counter(), ==, 0);
472882fac37SDmitry Osipenko
473882fac37SDmitry Osipenko timer_load(0);
474882fac37SDmitry Osipenko
475882fac37SDmitry Osipenko TIMER_BLOCK_STEP(scaler, 1);
476882fac37SDmitry Osipenko
477882fac37SDmitry Osipenko g_assert_cmpuint(timer_counter(), ==, 0);
478882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, !!scaler);
479882fac37SDmitry Osipenko
480882fac37SDmitry Osipenko timer_load(1999999);
481882fac37SDmitry Osipenko
482882fac37SDmitry Osipenko for (i = 1; i < 10; i++) {
483882fac37SDmitry Osipenko TIMER_BLOCK_STEP(scaler, 2000001);
484882fac37SDmitry Osipenko
485882fac37SDmitry Osipenko g_assert_cmpuint(timer_counter(), ==, 1999999 - i);
486882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, 1);
487882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, 0);
488882fac37SDmitry Osipenko }
489882fac37SDmitry Osipenko }
490882fac37SDmitry Osipenko
test_timer_nonzero_load_oneshot_to_zero(gconstpointer arg)491882fac37SDmitry Osipenko static void test_timer_nonzero_load_oneshot_to_zero(gconstpointer arg)
492882fac37SDmitry Osipenko {
493882fac37SDmitry Osipenko int scaler = *((int *) arg);
494882fac37SDmitry Osipenko
495882fac37SDmitry Osipenko timer_reset();
496882fac37SDmitry Osipenko timer_start(ONESHOT, scaler);
497882fac37SDmitry Osipenko
498882fac37SDmitry Osipenko TIMER_BLOCK_STEP(scaler, 1);
499882fac37SDmitry Osipenko
500882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, !!scaler);
501882fac37SDmitry Osipenko g_assert_cmpuint(timer_counter(), ==, 0);
502882fac37SDmitry Osipenko
503882fac37SDmitry Osipenko timer_load(UINT32_MAX);
504882fac37SDmitry Osipenko timer_load(0);
505882fac37SDmitry Osipenko
506882fac37SDmitry Osipenko TIMER_BLOCK_STEP(scaler, 100);
507882fac37SDmitry Osipenko
508882fac37SDmitry Osipenko g_assert_cmpuint(timer_counter(), ==, 0);
509882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, !!scaler);
510882fac37SDmitry Osipenko }
511882fac37SDmitry Osipenko
test_timer_nonzero_load_periodic_to_zero(gconstpointer arg)512882fac37SDmitry Osipenko static void test_timer_nonzero_load_periodic_to_zero(gconstpointer arg)
513882fac37SDmitry Osipenko {
514882fac37SDmitry Osipenko int scaler = *((int *) arg);
515882fac37SDmitry Osipenko
516882fac37SDmitry Osipenko timer_reset();
517882fac37SDmitry Osipenko timer_start(PERIODIC, scaler);
518882fac37SDmitry Osipenko
519882fac37SDmitry Osipenko TIMER_BLOCK_STEP(scaler, 1);
520882fac37SDmitry Osipenko
521882fac37SDmitry Osipenko g_assert_cmpuint(timer_counter(), ==, 0);
522882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, !!scaler);
523882fac37SDmitry Osipenko
524882fac37SDmitry Osipenko timer_load(UINT32_MAX);
525882fac37SDmitry Osipenko timer_load(0);
526882fac37SDmitry Osipenko
527882fac37SDmitry Osipenko TIMER_BLOCK_STEP(scaler, 100);
528882fac37SDmitry Osipenko
529882fac37SDmitry Osipenko g_assert_cmpuint(timer_counter(), ==, 0);
530882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, !!scaler);
531882fac37SDmitry Osipenko }
532882fac37SDmitry Osipenko
test_timer_set_periodic_counter_on_the_fly(gconstpointer arg)533882fac37SDmitry Osipenko static void test_timer_set_periodic_counter_on_the_fly(gconstpointer arg)
534882fac37SDmitry Osipenko {
535882fac37SDmitry Osipenko int scaler = *((int *) arg);
536882fac37SDmitry Osipenko
537882fac37SDmitry Osipenko timer_reset();
538882fac37SDmitry Osipenko timer_load(UINT32_MAX / 2);
539882fac37SDmitry Osipenko timer_start(PERIODIC, scaler);
540882fac37SDmitry Osipenko
541882fac37SDmitry Osipenko TIMER_BLOCK_STEP(scaler, 100);
542882fac37SDmitry Osipenko
543882fac37SDmitry Osipenko g_assert_cmpuint(timer_counter(), ==, UINT32_MAX / 2 - 100);
544882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, 0);
545882fac37SDmitry Osipenko
546882fac37SDmitry Osipenko timer_set_counter(UINT32_MAX);
547882fac37SDmitry Osipenko
548882fac37SDmitry Osipenko TIMER_BLOCK_STEP(scaler, 100);
549882fac37SDmitry Osipenko
550882fac37SDmitry Osipenko g_assert_cmpuint(timer_counter(), ==, UINT32_MAX - 100);
551882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, 0);
552882fac37SDmitry Osipenko }
553882fac37SDmitry Osipenko
test_timer_enable_and_set_counter(gconstpointer arg)554882fac37SDmitry Osipenko static void test_timer_enable_and_set_counter(gconstpointer arg)
555882fac37SDmitry Osipenko {
556882fac37SDmitry Osipenko int scaler = *((int *) arg);
557882fac37SDmitry Osipenko
558882fac37SDmitry Osipenko timer_reset();
559882fac37SDmitry Osipenko timer_start(ONESHOT, scaler);
560882fac37SDmitry Osipenko
561882fac37SDmitry Osipenko TIMER_BLOCK_STEP(scaler, 1);
562882fac37SDmitry Osipenko
563882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, !!scaler);
564882fac37SDmitry Osipenko
565882fac37SDmitry Osipenko timer_set_counter(UINT32_MAX);
566882fac37SDmitry Osipenko
567882fac37SDmitry Osipenko TIMER_BLOCK_STEP(scaler, 100);
568882fac37SDmitry Osipenko
569882fac37SDmitry Osipenko g_assert_cmpuint(timer_counter(), ==, UINT32_MAX - 100);
570882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, 0);
571882fac37SDmitry Osipenko }
572882fac37SDmitry Osipenko
test_timer_set_counter_and_enable(gconstpointer arg)573882fac37SDmitry Osipenko static void test_timer_set_counter_and_enable(gconstpointer arg)
574882fac37SDmitry Osipenko {
575882fac37SDmitry Osipenko int scaler = *((int *) arg);
576882fac37SDmitry Osipenko
577882fac37SDmitry Osipenko timer_reset();
578882fac37SDmitry Osipenko timer_set_counter(UINT32_MAX);
579882fac37SDmitry Osipenko timer_start(ONESHOT, scaler);
580882fac37SDmitry Osipenko
581882fac37SDmitry Osipenko TIMER_BLOCK_STEP(scaler, 100);
582882fac37SDmitry Osipenko
583882fac37SDmitry Osipenko g_assert_cmpuint(timer_counter(), ==, UINT32_MAX - 100);
584882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, 0);
585882fac37SDmitry Osipenko }
586882fac37SDmitry Osipenko
test_timer_set_counter_disabled(void)587882fac37SDmitry Osipenko static void test_timer_set_counter_disabled(void)
588882fac37SDmitry Osipenko {
589882fac37SDmitry Osipenko timer_reset();
590882fac37SDmitry Osipenko timer_set_counter(999999999);
591882fac37SDmitry Osipenko
592882fac37SDmitry Osipenko TIMER_BLOCK_STEP(NOSCALE, 100);
593882fac37SDmitry Osipenko
594882fac37SDmitry Osipenko g_assert_cmpuint(timer_counter(), ==, 999999999);
595882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, 0);
596882fac37SDmitry Osipenko }
597882fac37SDmitry Osipenko
test_timer_load_disabled(void)598882fac37SDmitry Osipenko static void test_timer_load_disabled(void)
599882fac37SDmitry Osipenko {
600882fac37SDmitry Osipenko timer_reset();
601882fac37SDmitry Osipenko timer_load(999999999);
602882fac37SDmitry Osipenko
603882fac37SDmitry Osipenko TIMER_BLOCK_STEP(NOSCALE, 100);
604882fac37SDmitry Osipenko
605882fac37SDmitry Osipenko g_assert_cmpuint(timer_counter(), ==, 999999999);
606882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, 0);
607882fac37SDmitry Osipenko }
608882fac37SDmitry Osipenko
test_timer_oneshot_with_counter_0_on_start(gconstpointer arg)609882fac37SDmitry Osipenko static void test_timer_oneshot_with_counter_0_on_start(gconstpointer arg)
610882fac37SDmitry Osipenko {
611882fac37SDmitry Osipenko int scaler = *((int *) arg);
612882fac37SDmitry Osipenko
613882fac37SDmitry Osipenko timer_reset();
614882fac37SDmitry Osipenko timer_load(999);
615882fac37SDmitry Osipenko timer_set_counter(0);
616882fac37SDmitry Osipenko timer_start(ONESHOT, scaler);
617882fac37SDmitry Osipenko
618882fac37SDmitry Osipenko TIMER_BLOCK_STEP(scaler, 100);
619882fac37SDmitry Osipenko
620882fac37SDmitry Osipenko g_assert_cmpuint(timer_counter(), ==, 0);
621882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, !!scaler);
622882fac37SDmitry Osipenko
623882fac37SDmitry Osipenko TIMER_BLOCK_STEP(scaler, 100);
624882fac37SDmitry Osipenko
625882fac37SDmitry Osipenko g_assert_cmpuint(timer_counter(), ==, 0);
626882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, 0);
627882fac37SDmitry Osipenko }
628882fac37SDmitry Osipenko
test_timer_periodic_with_counter_0_on_start(gconstpointer arg)629882fac37SDmitry Osipenko static void test_timer_periodic_with_counter_0_on_start(gconstpointer arg)
630882fac37SDmitry Osipenko {
631882fac37SDmitry Osipenko int scaler = *((int *) arg);
632882fac37SDmitry Osipenko int i;
633882fac37SDmitry Osipenko
634882fac37SDmitry Osipenko timer_reset();
635882fac37SDmitry Osipenko timer_load(UINT32_MAX);
636882fac37SDmitry Osipenko timer_set_counter(0);
637882fac37SDmitry Osipenko
638882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, 0);
639882fac37SDmitry Osipenko g_assert_cmpuint(timer_counter(), ==, 0);
640882fac37SDmitry Osipenko
641882fac37SDmitry Osipenko timer_start(PERIODIC, scaler);
642882fac37SDmitry Osipenko
643882fac37SDmitry Osipenko TIMER_BLOCK_STEP(scaler, 100);
644882fac37SDmitry Osipenko
645882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, !!scaler);
646882fac37SDmitry Osipenko g_assert_cmpuint(timer_counter(), ==, UINT32_MAX + (scaler ? 1 : 0) - 100);
647882fac37SDmitry Osipenko
648882fac37SDmitry Osipenko TIMER_BLOCK_STEP(scaler, 100);
649882fac37SDmitry Osipenko
650882fac37SDmitry Osipenko g_assert_cmpuint(timer_counter(), ==, UINT32_MAX + (scaler ? 1 : 0) - 200);
651882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, 0);
652882fac37SDmitry Osipenko
653882fac37SDmitry Osipenko timer_reset();
654882fac37SDmitry Osipenko timer_load(1999999);
655882fac37SDmitry Osipenko timer_set_counter(0);
656882fac37SDmitry Osipenko
657882fac37SDmitry Osipenko g_assert_cmpuint(timer_counter(), ==, 0);
658882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, 0);
659882fac37SDmitry Osipenko
660882fac37SDmitry Osipenko TIMER_BLOCK_STEP(scaler, 1);
661882fac37SDmitry Osipenko
662882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, 0);
663882fac37SDmitry Osipenko
664882fac37SDmitry Osipenko timer_start(PERIODIC, scaler);
665882fac37SDmitry Osipenko
666882fac37SDmitry Osipenko TIMER_BLOCK_STEP(scaler, 1);
667882fac37SDmitry Osipenko
668882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, !!scaler);
669882fac37SDmitry Osipenko
670882fac37SDmitry Osipenko for (i = 2 - (!!scaler ? 1 : 0); i < 10; i++) {
671882fac37SDmitry Osipenko TIMER_BLOCK_STEP(scaler, 2000001);
672882fac37SDmitry Osipenko
673882fac37SDmitry Osipenko g_assert_cmpuint(timer_counter(), ==, 1999999 - i);
674882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, 1);
675882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, 0);
676882fac37SDmitry Osipenko }
677882fac37SDmitry Osipenko }
678882fac37SDmitry Osipenko
test_periodic_counter(gconstpointer arg)679882fac37SDmitry Osipenko static void test_periodic_counter(gconstpointer arg)
680882fac37SDmitry Osipenko {
681882fac37SDmitry Osipenko const int test_load = 10;
682882fac37SDmitry Osipenko int scaler = *((int *) arg);
683882fac37SDmitry Osipenko int test_val;
684882fac37SDmitry Osipenko
685882fac37SDmitry Osipenko timer_reset();
686882fac37SDmitry Osipenko timer_load(test_load);
687882fac37SDmitry Osipenko timer_start(PERIODIC, scaler);
688882fac37SDmitry Osipenko
689882fac37SDmitry Osipenko clock_step(1);
690882fac37SDmitry Osipenko
691882fac37SDmitry Osipenko for (test_val = 0; test_val <= test_load; test_val++) {
692882fac37SDmitry Osipenko clock_step(TIMER_BLOCK_SCALE(scaler) * test_load);
693882fac37SDmitry Osipenko g_assert_cmpint(timer_counter(), ==, test_val);
694882fac37SDmitry Osipenko }
695882fac37SDmitry Osipenko }
696882fac37SDmitry Osipenko
test_timer_set_counter_periodic_with_zero_load(gconstpointer arg)697882fac37SDmitry Osipenko static void test_timer_set_counter_periodic_with_zero_load(gconstpointer arg)
698882fac37SDmitry Osipenko {
699882fac37SDmitry Osipenko int scaler = *((int *) arg);
700882fac37SDmitry Osipenko
701882fac37SDmitry Osipenko timer_reset();
702882fac37SDmitry Osipenko timer_start(PERIODIC, scaler);
703882fac37SDmitry Osipenko timer_load(0);
704882fac37SDmitry Osipenko
705882fac37SDmitry Osipenko TIMER_BLOCK_STEP(scaler, 1);
706882fac37SDmitry Osipenko
707882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, !!scaler);
708882fac37SDmitry Osipenko
709882fac37SDmitry Osipenko TIMER_BLOCK_STEP(scaler, 1);
710882fac37SDmitry Osipenko
711882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, !!scaler);
712882fac37SDmitry Osipenko
713882fac37SDmitry Osipenko timer_set_counter(999);
714882fac37SDmitry Osipenko
715882fac37SDmitry Osipenko TIMER_BLOCK_STEP(scaler, 999);
716882fac37SDmitry Osipenko
717882fac37SDmitry Osipenko g_assert_cmpuint(timer_counter(), ==, 0);
718882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, 1);
719882fac37SDmitry Osipenko
720882fac37SDmitry Osipenko TIMER_BLOCK_STEP(scaler, 1);
721882fac37SDmitry Osipenko
722882fac37SDmitry Osipenko g_assert_cmpuint(timer_counter(), ==, 0);
723882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, !!scaler);
724882fac37SDmitry Osipenko }
725882fac37SDmitry Osipenko
test_timer_set_oneshot_load_to_0(gconstpointer arg)726882fac37SDmitry Osipenko static void test_timer_set_oneshot_load_to_0(gconstpointer arg)
727882fac37SDmitry Osipenko {
728882fac37SDmitry Osipenko int scaler = *((int *) arg);
729882fac37SDmitry Osipenko
730882fac37SDmitry Osipenko timer_reset();
731882fac37SDmitry Osipenko timer_load(UINT32_MAX);
732882fac37SDmitry Osipenko timer_start(ONESHOT, scaler);
733882fac37SDmitry Osipenko
734882fac37SDmitry Osipenko TIMER_BLOCK_STEP(scaler, 100);
735882fac37SDmitry Osipenko
736882fac37SDmitry Osipenko g_assert_cmpuint(timer_counter(), ==, UINT32_MAX - 100);
737882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, 0);
738882fac37SDmitry Osipenko
739882fac37SDmitry Osipenko timer_load(0);
740882fac37SDmitry Osipenko
741882fac37SDmitry Osipenko TIMER_BLOCK_STEP(scaler, 100);
742882fac37SDmitry Osipenko
743882fac37SDmitry Osipenko g_assert_cmpuint(timer_counter(), ==, 0);
744882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, !!scaler);
745882fac37SDmitry Osipenko
746882fac37SDmitry Osipenko TIMER_BLOCK_STEP(scaler, 100);
747882fac37SDmitry Osipenko
748882fac37SDmitry Osipenko g_assert_cmpuint(timer_counter(), ==, 0);
749882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, 0);
750882fac37SDmitry Osipenko }
751882fac37SDmitry Osipenko
test_timer_set_periodic_load_to_0(gconstpointer arg)752882fac37SDmitry Osipenko static void test_timer_set_periodic_load_to_0(gconstpointer arg)
753882fac37SDmitry Osipenko {
754882fac37SDmitry Osipenko int scaler = *((int *) arg);
755882fac37SDmitry Osipenko
756882fac37SDmitry Osipenko timer_reset();
757882fac37SDmitry Osipenko timer_load(UINT32_MAX);
758882fac37SDmitry Osipenko timer_start(PERIODIC, scaler);
759882fac37SDmitry Osipenko
760882fac37SDmitry Osipenko TIMER_BLOCK_STEP(scaler, 100);
761882fac37SDmitry Osipenko
762882fac37SDmitry Osipenko g_assert_cmpuint(timer_counter(), ==, UINT32_MAX - 100);
763882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, 0);
764882fac37SDmitry Osipenko
765882fac37SDmitry Osipenko timer_load(0);
766882fac37SDmitry Osipenko
767882fac37SDmitry Osipenko TIMER_BLOCK_STEP(scaler, 100);
768882fac37SDmitry Osipenko
769882fac37SDmitry Osipenko g_assert_cmpuint(timer_counter(), ==, 0);
770882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, !!scaler);
771882fac37SDmitry Osipenko
772882fac37SDmitry Osipenko TIMER_BLOCK_STEP(scaler, 100);
773882fac37SDmitry Osipenko
774882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, !!scaler);
775882fac37SDmitry Osipenko g_assert_cmpuint(timer_counter(), ==, 0);
776882fac37SDmitry Osipenko }
777882fac37SDmitry Osipenko
test_deferred_trigger(void)778882fac37SDmitry Osipenko static void test_deferred_trigger(void)
779882fac37SDmitry Osipenko {
780882fac37SDmitry Osipenko int mode = ONESHOT;
781882fac37SDmitry Osipenko
782882fac37SDmitry Osipenko again:
783882fac37SDmitry Osipenko timer_reset();
784882fac37SDmitry Osipenko timer_start(mode, 255);
785882fac37SDmitry Osipenko
786882fac37SDmitry Osipenko clock_step(100);
787882fac37SDmitry Osipenko
788882fac37SDmitry Osipenko g_assert_cmpuint(timer_counter(), ==, 0);
789882fac37SDmitry Osipenko
790882fac37SDmitry Osipenko TIMER_BLOCK_STEP(255, 1);
791882fac37SDmitry Osipenko
792882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, 1);
793882fac37SDmitry Osipenko
794882fac37SDmitry Osipenko timer_reset();
795882fac37SDmitry Osipenko timer_load(2);
796882fac37SDmitry Osipenko timer_start(mode, 255);
797882fac37SDmitry Osipenko
798882fac37SDmitry Osipenko clock_step(100);
799882fac37SDmitry Osipenko
800882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, 0);
801882fac37SDmitry Osipenko
802882fac37SDmitry Osipenko TIMER_BLOCK_STEP(255, 1);
803882fac37SDmitry Osipenko
804882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, 0);
805882fac37SDmitry Osipenko
806882fac37SDmitry Osipenko TIMER_BLOCK_STEP(255, 1);
807882fac37SDmitry Osipenko
808882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, 1);
809882fac37SDmitry Osipenko
810882fac37SDmitry Osipenko timer_reset();
811882fac37SDmitry Osipenko timer_load(UINT32_MAX);
812882fac37SDmitry Osipenko timer_start(mode, 255);
813882fac37SDmitry Osipenko
814882fac37SDmitry Osipenko clock_step(100);
815882fac37SDmitry Osipenko
816882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, 0);
817882fac37SDmitry Osipenko
818882fac37SDmitry Osipenko timer_set_counter(0);
819882fac37SDmitry Osipenko
820882fac37SDmitry Osipenko clock_step(100);
821882fac37SDmitry Osipenko
822882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, 0);
823882fac37SDmitry Osipenko
824882fac37SDmitry Osipenko TIMER_BLOCK_STEP(255, 1);
825882fac37SDmitry Osipenko
826882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, 1);
827882fac37SDmitry Osipenko
828882fac37SDmitry Osipenko timer_reset();
829882fac37SDmitry Osipenko timer_load(UINT32_MAX);
830882fac37SDmitry Osipenko timer_start(mode, 255);
831882fac37SDmitry Osipenko
832882fac37SDmitry Osipenko clock_step(100);
833882fac37SDmitry Osipenko
834882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, 0);
835882fac37SDmitry Osipenko
836882fac37SDmitry Osipenko timer_load(0);
837882fac37SDmitry Osipenko
838882fac37SDmitry Osipenko clock_step(100);
839882fac37SDmitry Osipenko
840882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, 0);
841882fac37SDmitry Osipenko
842882fac37SDmitry Osipenko TIMER_BLOCK_STEP(255, 1);
843882fac37SDmitry Osipenko
844882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, 1);
845882fac37SDmitry Osipenko
846882fac37SDmitry Osipenko if (mode == ONESHOT) {
847882fac37SDmitry Osipenko mode = PERIODIC;
848882fac37SDmitry Osipenko goto again;
849882fac37SDmitry Osipenko }
850882fac37SDmitry Osipenko }
851882fac37SDmitry Osipenko
test_timer_zero_load_mode_switch(gconstpointer arg)852882fac37SDmitry Osipenko static void test_timer_zero_load_mode_switch(gconstpointer arg)
853882fac37SDmitry Osipenko {
854882fac37SDmitry Osipenko int scaler = *((int *) arg);
855882fac37SDmitry Osipenko
856882fac37SDmitry Osipenko timer_reset();
857882fac37SDmitry Osipenko timer_load(0);
858882fac37SDmitry Osipenko timer_start(PERIODIC, scaler);
859882fac37SDmitry Osipenko
860882fac37SDmitry Osipenko TIMER_BLOCK_STEP(scaler, 1);
861882fac37SDmitry Osipenko
862882fac37SDmitry Osipenko g_assert_cmpuint(timer_counter(), ==, 0);
863882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, !!scaler);
864882fac37SDmitry Osipenko
865882fac37SDmitry Osipenko TIMER_BLOCK_STEP(scaler, 1);
866882fac37SDmitry Osipenko
867882fac37SDmitry Osipenko timer_start(ONESHOT, scaler);
868882fac37SDmitry Osipenko
869882fac37SDmitry Osipenko TIMER_BLOCK_STEP(scaler, 1);
870882fac37SDmitry Osipenko
871882fac37SDmitry Osipenko g_assert_cmpuint(timer_counter(), ==, 0);
872882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, !!scaler);
873882fac37SDmitry Osipenko
874882fac37SDmitry Osipenko TIMER_BLOCK_STEP(scaler, 1);
875882fac37SDmitry Osipenko
876882fac37SDmitry Osipenko g_assert_cmpuint(timer_counter(), ==, 0);
877882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, 0);
878882fac37SDmitry Osipenko
879882fac37SDmitry Osipenko TIMER_BLOCK_STEP(scaler, 1);
880882fac37SDmitry Osipenko
881882fac37SDmitry Osipenko timer_start(PERIODIC, scaler);
882882fac37SDmitry Osipenko
883882fac37SDmitry Osipenko TIMER_BLOCK_STEP(scaler, 1);
884882fac37SDmitry Osipenko
885882fac37SDmitry Osipenko g_assert_cmpuint(timer_counter(), ==, 0);
886882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, !!scaler);
887882fac37SDmitry Osipenko }
888882fac37SDmitry Osipenko
test_timer_zero_load_prescaled_periodic_to_nonscaled_oneshot(void)889882fac37SDmitry Osipenko static void test_timer_zero_load_prescaled_periodic_to_nonscaled_oneshot(void)
890882fac37SDmitry Osipenko {
891882fac37SDmitry Osipenko timer_reset();
892882fac37SDmitry Osipenko timer_load(0);
893882fac37SDmitry Osipenko timer_start(PERIODIC, 255);
894882fac37SDmitry Osipenko
895882fac37SDmitry Osipenko TIMER_BLOCK_STEP(255, 1);
896882fac37SDmitry Osipenko
897882fac37SDmitry Osipenko g_assert_cmpuint(timer_counter(), ==, 0);
898882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, 1);
899882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, 0);
900882fac37SDmitry Osipenko
901882fac37SDmitry Osipenko TIMER_BLOCK_STEP(255, 1);
902882fac37SDmitry Osipenko
903882fac37SDmitry Osipenko g_assert_cmpuint(timer_counter(), ==, 0);
904882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, 1);
905882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, 0);
906882fac37SDmitry Osipenko
907882fac37SDmitry Osipenko TIMER_BLOCK_STEP(255, 1);
908882fac37SDmitry Osipenko
909882fac37SDmitry Osipenko timer_start(ONESHOT, NOSCALE);
910882fac37SDmitry Osipenko
911882fac37SDmitry Osipenko TIMER_BLOCK_STEP(NOSCALE, 1);
912882fac37SDmitry Osipenko
913882fac37SDmitry Osipenko g_assert_cmpuint(timer_counter(), ==, 0);
914882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, 1);
915882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, 0);
916882fac37SDmitry Osipenko
917882fac37SDmitry Osipenko TIMER_BLOCK_STEP(NOSCALE, 1);
918882fac37SDmitry Osipenko
919882fac37SDmitry Osipenko g_assert_cmpuint(timer_counter(), ==, 0);
920882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, 0);
921882fac37SDmitry Osipenko }
922882fac37SDmitry Osipenko
test_timer_zero_load_prescaled_oneshot_to_nonscaled_periodic(void)923882fac37SDmitry Osipenko static void test_timer_zero_load_prescaled_oneshot_to_nonscaled_periodic(void)
924882fac37SDmitry Osipenko {
925882fac37SDmitry Osipenko timer_reset();
926882fac37SDmitry Osipenko timer_load(0);
927882fac37SDmitry Osipenko timer_start(ONESHOT, 255);
928882fac37SDmitry Osipenko
929882fac37SDmitry Osipenko TIMER_BLOCK_STEP(255, 1);
930882fac37SDmitry Osipenko
931882fac37SDmitry Osipenko g_assert_cmpuint(timer_counter(), ==, 0);
932882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, 1);
933882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, 0);
934882fac37SDmitry Osipenko
935882fac37SDmitry Osipenko timer_start(PERIODIC, NOSCALE);
936882fac37SDmitry Osipenko
937882fac37SDmitry Osipenko TIMER_BLOCK_STEP(NOSCALE, 1);
938882fac37SDmitry Osipenko
939882fac37SDmitry Osipenko g_assert_cmpuint(timer_counter(), ==, 0);
940882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, 0);
941882fac37SDmitry Osipenko }
942882fac37SDmitry Osipenko
test_timer_zero_load_nonscaled_oneshot_to_prescaled_periodic(void)943882fac37SDmitry Osipenko static void test_timer_zero_load_nonscaled_oneshot_to_prescaled_periodic(void)
944882fac37SDmitry Osipenko {
945882fac37SDmitry Osipenko timer_reset();
946882fac37SDmitry Osipenko timer_load(0);
947882fac37SDmitry Osipenko timer_start(ONESHOT, NOSCALE);
948882fac37SDmitry Osipenko
949882fac37SDmitry Osipenko TIMER_BLOCK_STEP(NOSCALE, 1);
950882fac37SDmitry Osipenko
951882fac37SDmitry Osipenko g_assert_cmpuint(timer_counter(), ==, 0);
952882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, 0);
953882fac37SDmitry Osipenko
954882fac37SDmitry Osipenko timer_start(PERIODIC, 255);
955882fac37SDmitry Osipenko
956882fac37SDmitry Osipenko TIMER_BLOCK_STEP(255, 1);
957882fac37SDmitry Osipenko
958882fac37SDmitry Osipenko g_assert_cmpuint(timer_counter(), ==, 0);
959882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, 1);
960882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, 0);
961882fac37SDmitry Osipenko
962882fac37SDmitry Osipenko TIMER_BLOCK_STEP(255, 1);
963882fac37SDmitry Osipenko
964882fac37SDmitry Osipenko g_assert_cmpuint(timer_counter(), ==, 0);
965882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, 1);
966882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, 0);
967882fac37SDmitry Osipenko }
968882fac37SDmitry Osipenko
test_timer_zero_load_nonscaled_periodic_to_prescaled_oneshot(void)969882fac37SDmitry Osipenko static void test_timer_zero_load_nonscaled_periodic_to_prescaled_oneshot(void)
970882fac37SDmitry Osipenko {
971882fac37SDmitry Osipenko timer_reset();
972882fac37SDmitry Osipenko timer_load(0);
973882fac37SDmitry Osipenko timer_start(PERIODIC, NOSCALE);
974882fac37SDmitry Osipenko
975882fac37SDmitry Osipenko TIMER_BLOCK_STEP(NOSCALE, 1);
976882fac37SDmitry Osipenko
977882fac37SDmitry Osipenko g_assert_cmpuint(timer_counter(), ==, 0);
978882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, 0);
979882fac37SDmitry Osipenko
980882fac37SDmitry Osipenko timer_start(ONESHOT, 255);
981882fac37SDmitry Osipenko
982882fac37SDmitry Osipenko TIMER_BLOCK_STEP(255, 1);
983882fac37SDmitry Osipenko
984882fac37SDmitry Osipenko g_assert_cmpuint(timer_counter(), ==, 0);
985882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, 1);
986882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, 0);
987882fac37SDmitry Osipenko
988882fac37SDmitry Osipenko TIMER_BLOCK_STEP(255, 1);
989882fac37SDmitry Osipenko
990882fac37SDmitry Osipenko g_assert_cmpuint(timer_counter(), ==, 0);
991882fac37SDmitry Osipenko g_assert_cmpuint(timer_get_and_clr_int_sts(), ==, 0);
992882fac37SDmitry Osipenko }
993882fac37SDmitry Osipenko
9940012eb98SPeter Maydell /*
9950012eb98SPeter Maydell * Add a qtest test that comes in two versions: one with
9960012eb98SPeter Maydell * a timer scaler setting, and one with the timer nonscaled.
9970012eb98SPeter Maydell */
add_scaler_test(const char * str,bool scale,void (* fn)(const void *))9980012eb98SPeter Maydell static void add_scaler_test(const char *str, bool scale,
9990012eb98SPeter Maydell void (*fn)(const void *))
10000012eb98SPeter Maydell {
10010012eb98SPeter Maydell char *name;
10020012eb98SPeter Maydell int *scaler = scale ? &scaled : &nonscaled;
10030012eb98SPeter Maydell
10040012eb98SPeter Maydell name = g_strdup_printf("%s=%d", str, *scaler);
10050012eb98SPeter Maydell qtest_add_data_func(name, scaler, fn);
10060012eb98SPeter Maydell g_free(name);
10070012eb98SPeter Maydell }
10080012eb98SPeter Maydell
main(int argc,char ** argv)1009882fac37SDmitry Osipenko int main(int argc, char **argv)
1010882fac37SDmitry Osipenko {
1011882fac37SDmitry Osipenko int ret;
10120012eb98SPeter Maydell int scale;
1013882fac37SDmitry Osipenko
1014882fac37SDmitry Osipenko g_test_init(&argc, &argv, NULL);
1015882fac37SDmitry Osipenko
1016882fac37SDmitry Osipenko qtest_add_func("mptimer/deferred_trigger", test_deferred_trigger);
1017882fac37SDmitry Osipenko qtest_add_func("mptimer/load_disabled", test_timer_load_disabled);
1018882fac37SDmitry Osipenko qtest_add_func("mptimer/set_counter_disabled", test_timer_set_counter_disabled);
1019882fac37SDmitry Osipenko qtest_add_func("mptimer/zero_load_prescaled_periodic_to_nonscaled_oneshot",
1020882fac37SDmitry Osipenko test_timer_zero_load_prescaled_periodic_to_nonscaled_oneshot);
1021882fac37SDmitry Osipenko qtest_add_func("mptimer/zero_load_prescaled_oneshot_to_nonscaled_periodic",
1022882fac37SDmitry Osipenko test_timer_zero_load_prescaled_oneshot_to_nonscaled_periodic);
1023882fac37SDmitry Osipenko qtest_add_func("mptimer/zero_load_nonscaled_oneshot_to_prescaled_periodic",
1024882fac37SDmitry Osipenko test_timer_zero_load_nonscaled_oneshot_to_prescaled_periodic);
1025882fac37SDmitry Osipenko qtest_add_func("mptimer/zero_load_nonscaled_periodic_to_prescaled_oneshot",
1026882fac37SDmitry Osipenko test_timer_zero_load_nonscaled_periodic_to_prescaled_oneshot);
1027882fac37SDmitry Osipenko qtest_add_func("mptimer/prescaler", test_timer_prescaler);
1028882fac37SDmitry Osipenko qtest_add_func("mptimer/prescaler_on_the_fly", test_timer_prescaler_on_the_fly);
1029882fac37SDmitry Osipenko
10300012eb98SPeter Maydell for (scale = 0; scale < 2; scale++) {
10310012eb98SPeter Maydell add_scaler_test("mptimer/oneshot scaler",
10320012eb98SPeter Maydell scale, test_timer_oneshot);
10330012eb98SPeter Maydell add_scaler_test("mptimer/pause scaler",
10340012eb98SPeter Maydell scale, test_timer_pause);
10350012eb98SPeter Maydell add_scaler_test("mptimer/reload scaler",
10360012eb98SPeter Maydell scale, test_timer_reload);
10370012eb98SPeter Maydell add_scaler_test("mptimer/periodic scaler",
10380012eb98SPeter Maydell scale, test_timer_periodic);
10390012eb98SPeter Maydell add_scaler_test("mptimer/oneshot_to_periodic scaler",
10400012eb98SPeter Maydell scale, test_timer_oneshot_to_periodic);
10410012eb98SPeter Maydell add_scaler_test("mptimer/periodic_to_oneshot scaler",
10420012eb98SPeter Maydell scale, test_timer_periodic_to_oneshot);
10430012eb98SPeter Maydell add_scaler_test("mptimer/set_oneshot_counter_to_0 scaler",
10440012eb98SPeter Maydell scale, test_timer_set_oneshot_counter_to_0);
10450012eb98SPeter Maydell add_scaler_test("mptimer/set_periodic_counter_to_0 scaler",
10460012eb98SPeter Maydell scale, test_timer_set_periodic_counter_to_0);
10470012eb98SPeter Maydell add_scaler_test("mptimer/noload_oneshot scaler",
10480012eb98SPeter Maydell scale, test_timer_noload_oneshot);
10490012eb98SPeter Maydell add_scaler_test("mptimer/noload_periodic scaler",
10500012eb98SPeter Maydell scale, test_timer_noload_periodic);
10510012eb98SPeter Maydell add_scaler_test("mptimer/zero_load_oneshot scaler",
10520012eb98SPeter Maydell scale, test_timer_zero_load_oneshot);
10530012eb98SPeter Maydell add_scaler_test("mptimer/zero_load_periodic scaler",
10540012eb98SPeter Maydell scale, test_timer_zero_load_periodic);
10550012eb98SPeter Maydell add_scaler_test("mptimer/zero_load_oneshot_to_nonzero scaler",
10560012eb98SPeter Maydell scale, test_timer_zero_load_oneshot_to_nonzero);
10570012eb98SPeter Maydell add_scaler_test("mptimer/zero_load_periodic_to_nonzero scaler",
10580012eb98SPeter Maydell scale, test_timer_zero_load_periodic_to_nonzero);
10590012eb98SPeter Maydell add_scaler_test("mptimer/nonzero_load_oneshot_to_zero scaler",
10600012eb98SPeter Maydell scale, test_timer_nonzero_load_oneshot_to_zero);
10610012eb98SPeter Maydell add_scaler_test("mptimer/nonzero_load_periodic_to_zero scaler",
10620012eb98SPeter Maydell scale, test_timer_nonzero_load_periodic_to_zero);
10630012eb98SPeter Maydell add_scaler_test("mptimer/set_periodic_counter_on_the_fly scaler",
10640012eb98SPeter Maydell scale, test_timer_set_periodic_counter_on_the_fly);
10650012eb98SPeter Maydell add_scaler_test("mptimer/enable_and_set_counter scaler",
10660012eb98SPeter Maydell scale, test_timer_enable_and_set_counter);
10670012eb98SPeter Maydell add_scaler_test("mptimer/set_counter_and_enable scaler",
10680012eb98SPeter Maydell scale, test_timer_set_counter_and_enable);
10690012eb98SPeter Maydell add_scaler_test("mptimer/oneshot_with_counter_0_on_start scaler",
10700012eb98SPeter Maydell scale, test_timer_oneshot_with_counter_0_on_start);
10710012eb98SPeter Maydell add_scaler_test("mptimer/periodic_with_counter_0_on_start scaler",
10720012eb98SPeter Maydell scale, test_timer_periodic_with_counter_0_on_start);
10730012eb98SPeter Maydell add_scaler_test("mptimer/periodic_counter scaler",
10740012eb98SPeter Maydell scale, test_periodic_counter);
10750012eb98SPeter Maydell add_scaler_test("mptimer/set_counter_periodic_with_zero_load scaler",
10760012eb98SPeter Maydell scale, test_timer_set_counter_periodic_with_zero_load);
10770012eb98SPeter Maydell add_scaler_test("mptimer/set_oneshot_load_to_0 scaler",
10780012eb98SPeter Maydell scale, test_timer_set_oneshot_load_to_0);
10790012eb98SPeter Maydell add_scaler_test("mptimer/set_periodic_load_to_0 scaler",
10800012eb98SPeter Maydell scale, test_timer_set_periodic_load_to_0);
10810012eb98SPeter Maydell add_scaler_test("mptimer/zero_load_mode_switch scaler",
10820012eb98SPeter Maydell scale, test_timer_zero_load_mode_switch);
1083882fac37SDmitry Osipenko }
1084882fac37SDmitry Osipenko
1085882fac37SDmitry Osipenko qtest_start("-machine vexpress-a9");
1086882fac37SDmitry Osipenko ret = g_test_run();
1087882fac37SDmitry Osipenko qtest_end();
1088882fac37SDmitry Osipenko
1089882fac37SDmitry Osipenko return ret;
1090882fac37SDmitry Osipenko }
1091