target/xtensa: tests: fix timer tests

Don't expect that CCOUNT increments are equal to the number of executed
instructions. Verify that timer interrupt does not fire before the
programmed CCOMPARE value and does fire after.

Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
This commit is contained in:
Max Filippov 2016-09-05 20:55:13 -07:00
parent 122d302053
commit 72b3b8f24a

View File

@ -1,12 +1,22 @@
#include "macros.inc" #include "macros.inc"
#define CCOUNT_SHIFT 4
#define WAIT_LOOPS 20
.macro make_ccount_delta target, delta
rsr \delta, ccount
rsr \target, ccount
sub \delta, \target, \delta
slli \delta, \delta, CCOUNT_SHIFT
add \target, \target, \delta
.endm
test_suite timer test_suite timer
test ccount test ccount
rsr a3, ccount rsr a3, ccount
rsr a4, ccount rsr a4, ccount
sub a3, a4, a3 assert ne, a3, a4
assert eqi, a3, 1
test_end test_end
test ccompare test ccompare
@ -18,18 +28,18 @@ test ccompare
wsr a2, ccompare1 wsr a2, ccompare1
wsr a2, ccompare2 wsr a2, ccompare2
movi a3, 20 make_ccount_delta a2, a15
rsr a2, ccount
addi a2, a2, 20
wsr a2, ccompare0 wsr a2, ccompare0
rsr a2, interrupt
assert eqi, a2, 0
loop a3, 1f
rsr a3, interrupt
bnez a3, 2f
1: 1:
test_fail rsr a3, interrupt
rsr a4, ccount
rsr a5, interrupt
sub a4, a4, a2
bgez a4, 2f
assert eqi, a3, 0
j 1b
2: 2:
assert nei, a5, 0
test_end test_end
test ccompare0_interrupt test ccompare0_interrupt
@ -42,9 +52,8 @@ test ccompare0_interrupt
wsr a2, ccompare1 wsr a2, ccompare1
wsr a2, ccompare2 wsr a2, ccompare2
movi a3, 20 movi a3, WAIT_LOOPS
rsr a2, ccount make_ccount_delta a2, a15
addi a2, a2, 20
wsr a2, ccompare0 wsr a2, ccompare0
rsync rsync
rsr a2, interrupt rsr a2, interrupt
@ -72,9 +81,8 @@ test ccompare1_interrupt
wsr a2, ccompare0 wsr a2, ccompare0
wsr a2, ccompare2 wsr a2, ccompare2
movi a3, 20 movi a3, WAIT_LOOPS
rsr a2, ccount make_ccount_delta a2, a15
addi a2, a2, 20
wsr a2, ccompare1 wsr a2, ccompare1
rsync rsync
rsr a2, interrupt rsr a2, interrupt
@ -99,9 +107,8 @@ test ccompare2_interrupt
wsr a2, ccompare0 wsr a2, ccompare0
wsr a2, ccompare1 wsr a2, ccompare1
movi a3, 20 movi a3, WAIT_LOOPS
rsr a2, ccount make_ccount_delta a2, a15
addi a2, a2, 20
wsr a2, ccompare2 wsr a2, ccompare2
rsync rsync
rsr a2, interrupt rsr a2, interrupt
@ -125,11 +132,10 @@ test ccompare_interrupt_masked
movi a2, 0 movi a2, 0
wsr a2, ccompare2 wsr a2, ccompare2
movi a3, 40 movi a3, 2 * WAIT_LOOPS
rsr a2, ccount make_ccount_delta a2, a15
addi a2, a2, 20
wsr a2, ccompare1 wsr a2, ccompare1
addi a2, a2, 20 add a2, a2, a15
wsr a2, ccompare0 wsr a2, ccompare0
rsync rsync
rsr a2, interrupt rsr a2, interrupt
@ -156,11 +162,10 @@ test ccompare_interrupt_masked_waiti
movi a2, 0 movi a2, 0
wsr a2, ccompare2 wsr a2, ccompare2
movi a3, 40 movi a3, 2 * WAIT_LOOPS
rsr a2, ccount make_ccount_delta a2, a15
addi a2, a2, 20
wsr a2, ccompare1 wsr a2, ccompare1
addi a2, a2, 20 add a2, a2, a15
wsr a2, ccompare0 wsr a2, ccompare0
rsync rsync
rsr a2, interrupt rsr a2, interrupt