mirror of https://github.com/xemu-project/xemu.git
tests/tcg/xtensa: conditionalize timer/CCOUNT tests
Make timer/CCOUNT tests conditional on the presence of timer option and number of configured timers. Don't use hard coded interrupt levels for timers, use configured values. Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
This commit is contained in:
parent
9c98822619
commit
02a5a4a877
|
@ -2,6 +2,8 @@
|
||||||
|
|
||||||
#define CCOUNT_SHIFT 4
|
#define CCOUNT_SHIFT 4
|
||||||
#define WAIT_LOOPS 20
|
#define WAIT_LOOPS 20
|
||||||
|
#define level1 kernel
|
||||||
|
#define INTERRUPT_LEVEL(n) glue3(XCHAL_INT, n, _LEVEL)
|
||||||
|
|
||||||
.macro make_ccount_delta target, delta
|
.macro make_ccount_delta target, delta
|
||||||
rsr \delta, ccount
|
rsr \delta, ccount
|
||||||
|
@ -13,6 +15,8 @@
|
||||||
|
|
||||||
test_suite timer
|
test_suite timer
|
||||||
|
|
||||||
|
#if XCHAL_HAVE_CCOUNT
|
||||||
|
|
||||||
test ccount
|
test ccount
|
||||||
rsr a3, ccount
|
rsr a3, ccount
|
||||||
rsr a4, ccount
|
rsr a4, ccount
|
||||||
|
@ -32,14 +36,20 @@ test ccount_write
|
||||||
assert ltu, a3, a4
|
assert ltu, a3, a4
|
||||||
test_end
|
test_end
|
||||||
|
|
||||||
|
#if XCHAL_NUM_TIMERS
|
||||||
|
|
||||||
test ccount_update_deadline
|
test ccount_update_deadline
|
||||||
movi a2, 0
|
movi a2, 0
|
||||||
wsr a2, intenable
|
wsr a2, intenable
|
||||||
rsr a2, interrupt
|
rsr a2, interrupt
|
||||||
wsr a2, intclear
|
wsr a2, intclear
|
||||||
movi a2, 0
|
movi a2, 0
|
||||||
|
#if XCHAL_NUM_TIMERS > 1
|
||||||
wsr a2, ccompare1
|
wsr a2, ccompare1
|
||||||
|
#endif
|
||||||
|
#if XCHAL_NUM_TIMERS > 2
|
||||||
wsr a2, ccompare2
|
wsr a2, ccompare2
|
||||||
|
#endif
|
||||||
movi a2, 0x12345678
|
movi a2, 0x12345678
|
||||||
wsr a2, ccompare0
|
wsr a2, ccompare0
|
||||||
rsr a3, interrupt
|
rsr a3, interrupt
|
||||||
|
@ -59,8 +69,12 @@ test ccompare
|
||||||
rsr a2, interrupt
|
rsr a2, interrupt
|
||||||
wsr a2, intclear
|
wsr a2, intclear
|
||||||
movi a2, 0
|
movi a2, 0
|
||||||
|
#if XCHAL_NUM_TIMERS > 1
|
||||||
wsr a2, ccompare1
|
wsr a2, ccompare1
|
||||||
|
#endif
|
||||||
|
#if XCHAL_NUM_TIMERS > 2
|
||||||
wsr a2, ccompare2
|
wsr a2, ccompare2
|
||||||
|
#endif
|
||||||
|
|
||||||
make_ccount_delta a2, a15
|
make_ccount_delta a2, a15
|
||||||
wsr a2, ccompare0
|
wsr a2, ccompare0
|
||||||
|
@ -76,6 +90,7 @@ test ccompare
|
||||||
assert nei, a5, 0
|
assert nei, a5, 0
|
||||||
test_end
|
test_end
|
||||||
|
|
||||||
|
#if INTERRUPT_LEVEL(XCHAL_TIMER0_INTERRUPT) == 1
|
||||||
test ccompare0_interrupt
|
test ccompare0_interrupt
|
||||||
set_vector kernel, 2f
|
set_vector kernel, 2f
|
||||||
movi a2, 0
|
movi a2, 0
|
||||||
|
@ -83,8 +98,12 @@ test ccompare0_interrupt
|
||||||
rsr a2, interrupt
|
rsr a2, interrupt
|
||||||
wsr a2, intclear
|
wsr a2, intclear
|
||||||
movi a2, 0
|
movi a2, 0
|
||||||
|
#if XCHAL_NUM_TIMERS > 1
|
||||||
wsr a2, ccompare1
|
wsr a2, ccompare1
|
||||||
|
#endif
|
||||||
|
#if XCHAL_NUM_TIMERS > 2
|
||||||
wsr a2, ccompare2
|
wsr a2, ccompare2
|
||||||
|
#endif
|
||||||
|
|
||||||
movi a3, WAIT_LOOPS
|
movi a3, WAIT_LOOPS
|
||||||
make_ccount_delta a2, a15
|
make_ccount_delta a2, a15
|
||||||
|
@ -104,16 +123,21 @@ test ccompare0_interrupt
|
||||||
rsr a2, exccause
|
rsr a2, exccause
|
||||||
assert eqi, a2, 4 /* LEVEL1_INTERRUPT_CAUSE */
|
assert eqi, a2, 4 /* LEVEL1_INTERRUPT_CAUSE */
|
||||||
test_end
|
test_end
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if XCHAL_NUM_TIMERS > 1
|
||||||
|
|
||||||
test ccompare1_interrupt
|
test ccompare1_interrupt
|
||||||
set_vector level3, 2f
|
set_vector glue(level, INTERRUPT_LEVEL(XCHAL_TIMER1_INTERRUPT)), 2f
|
||||||
movi a2, 0
|
movi a2, 0
|
||||||
wsr a2, intenable
|
wsr a2, intenable
|
||||||
rsr a2, interrupt
|
rsr a2, interrupt
|
||||||
wsr a2, intclear
|
wsr a2, intclear
|
||||||
movi a2, 0
|
movi a2, 0
|
||||||
wsr a2, ccompare0
|
wsr a2, ccompare0
|
||||||
|
#if XCHAL_NUM_TIMERS > 2
|
||||||
wsr a2, ccompare2
|
wsr a2, ccompare2
|
||||||
|
#endif
|
||||||
|
|
||||||
movi a3, WAIT_LOOPS
|
movi a3, WAIT_LOOPS
|
||||||
make_ccount_delta a2, a15
|
make_ccount_delta a2, a15
|
||||||
|
@ -123,7 +147,7 @@ test ccompare1_interrupt
|
||||||
assert eqi, a2, 0
|
assert eqi, a2, 0
|
||||||
movi a2, 1 << XCHAL_TIMER1_INTERRUPT
|
movi a2, 1 << XCHAL_TIMER1_INTERRUPT
|
||||||
wsr a2, intenable
|
wsr a2, intenable
|
||||||
rsil a2, 2
|
rsil a2, INTERRUPT_LEVEL(XCHAL_TIMER1_INTERRUPT) - 1
|
||||||
loop a3, 1f
|
loop a3, 1f
|
||||||
nop
|
nop
|
||||||
1:
|
1:
|
||||||
|
@ -131,8 +155,11 @@ test ccompare1_interrupt
|
||||||
2:
|
2:
|
||||||
test_end
|
test_end
|
||||||
|
|
||||||
|
#endif
|
||||||
|
#if XCHAL_NUM_TIMERS > 2
|
||||||
|
|
||||||
test ccompare2_interrupt
|
test ccompare2_interrupt
|
||||||
set_vector level5, 2f
|
set_vector glue(level, INTERRUPT_LEVEL(XCHAL_TIMER2_INTERRUPT)), 2f
|
||||||
movi a2, 0
|
movi a2, 0
|
||||||
wsr a2, intenable
|
wsr a2, intenable
|
||||||
rsr a2, interrupt
|
rsr a2, interrupt
|
||||||
|
@ -149,7 +176,7 @@ test ccompare2_interrupt
|
||||||
assert eqi, a2, 0
|
assert eqi, a2, 0
|
||||||
movi a2, 1 << XCHAL_TIMER2_INTERRUPT
|
movi a2, 1 << XCHAL_TIMER2_INTERRUPT
|
||||||
wsr a2, intenable
|
wsr a2, intenable
|
||||||
rsil a2, 4
|
rsil a2, INTERRUPT_LEVEL(XCHAL_TIMER2_INTERRUPT) - 1
|
||||||
loop a3, 1f
|
loop a3, 1f
|
||||||
nop
|
nop
|
||||||
1:
|
1:
|
||||||
|
@ -157,6 +184,8 @@ test ccompare2_interrupt
|
||||||
2:
|
2:
|
||||||
test_end
|
test_end
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
test ccompare_interrupt_masked
|
test ccompare_interrupt_masked
|
||||||
set_vector kernel, 2f
|
set_vector kernel, 2f
|
||||||
movi a2, 0
|
movi a2, 0
|
||||||
|
@ -164,11 +193,15 @@ test ccompare_interrupt_masked
|
||||||
rsr a2, interrupt
|
rsr a2, interrupt
|
||||||
wsr a2, intclear
|
wsr a2, intclear
|
||||||
movi a2, 0
|
movi a2, 0
|
||||||
|
#if XCHAL_NUM_TIMERS > 2
|
||||||
wsr a2, ccompare2
|
wsr a2, ccompare2
|
||||||
|
#endif
|
||||||
|
|
||||||
movi a3, 2 * WAIT_LOOPS
|
movi a3, 2 * WAIT_LOOPS
|
||||||
make_ccount_delta a2, a15
|
make_ccount_delta a2, a15
|
||||||
|
#if XCHAL_NUM_TIMERS > 1
|
||||||
wsr a2, ccompare1
|
wsr a2, ccompare1
|
||||||
|
#endif
|
||||||
add a2, a2, a15
|
add a2, a2, a15
|
||||||
wsr a2, ccompare0
|
wsr a2, ccompare0
|
||||||
rsync
|
rsync
|
||||||
|
@ -194,11 +227,15 @@ test ccompare_interrupt_masked_waiti
|
||||||
rsr a2, interrupt
|
rsr a2, interrupt
|
||||||
wsr a2, intclear
|
wsr a2, intclear
|
||||||
movi a2, 0
|
movi a2, 0
|
||||||
|
#if XCHAL_NUM_TIMERS > 2
|
||||||
wsr a2, ccompare2
|
wsr a2, ccompare2
|
||||||
|
#endif
|
||||||
|
|
||||||
movi a3, 2 * WAIT_LOOPS
|
movi a3, 2 * WAIT_LOOPS
|
||||||
make_ccount_delta a2, a15
|
make_ccount_delta a2, a15
|
||||||
|
#if XCHAL_NUM_TIMERS > 1
|
||||||
wsr a2, ccompare1
|
wsr a2, ccompare1
|
||||||
|
#endif
|
||||||
add a2, a2, a15
|
add a2, a2, a15
|
||||||
wsr a2, ccompare0
|
wsr a2, ccompare0
|
||||||
rsync
|
rsync
|
||||||
|
@ -214,4 +251,7 @@ test ccompare_interrupt_masked_waiti
|
||||||
assert eqi, a2, 4 /* LEVEL1_INTERRUPT_CAUSE */
|
assert eqi, a2, 4 /* LEVEL1_INTERRUPT_CAUSE */
|
||||||
test_end
|
test_end
|
||||||
|
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
test_suite_end
|
test_suite_end
|
||||||
|
|
Loading…
Reference in New Issue