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 WAIT_LOOPS 20
|
||||
#define level1 kernel
|
||||
#define INTERRUPT_LEVEL(n) glue3(XCHAL_INT, n, _LEVEL)
|
||||
|
||||
.macro make_ccount_delta target, delta
|
||||
rsr \delta, ccount
|
||||
|
@ -13,6 +15,8 @@
|
|||
|
||||
test_suite timer
|
||||
|
||||
#if XCHAL_HAVE_CCOUNT
|
||||
|
||||
test ccount
|
||||
rsr a3, ccount
|
||||
rsr a4, ccount
|
||||
|
@ -32,14 +36,20 @@ test ccount_write
|
|||
assert ltu, a3, a4
|
||||
test_end
|
||||
|
||||
#if XCHAL_NUM_TIMERS
|
||||
|
||||
test ccount_update_deadline
|
||||
movi a2, 0
|
||||
wsr a2, intenable
|
||||
rsr a2, interrupt
|
||||
wsr a2, intclear
|
||||
movi a2, 0
|
||||
#if XCHAL_NUM_TIMERS > 1
|
||||
wsr a2, ccompare1
|
||||
#endif
|
||||
#if XCHAL_NUM_TIMERS > 2
|
||||
wsr a2, ccompare2
|
||||
#endif
|
||||
movi a2, 0x12345678
|
||||
wsr a2, ccompare0
|
||||
rsr a3, interrupt
|
||||
|
@ -59,8 +69,12 @@ test ccompare
|
|||
rsr a2, interrupt
|
||||
wsr a2, intclear
|
||||
movi a2, 0
|
||||
#if XCHAL_NUM_TIMERS > 1
|
||||
wsr a2, ccompare1
|
||||
#endif
|
||||
#if XCHAL_NUM_TIMERS > 2
|
||||
wsr a2, ccompare2
|
||||
#endif
|
||||
|
||||
make_ccount_delta a2, a15
|
||||
wsr a2, ccompare0
|
||||
|
@ -76,6 +90,7 @@ test ccompare
|
|||
assert nei, a5, 0
|
||||
test_end
|
||||
|
||||
#if INTERRUPT_LEVEL(XCHAL_TIMER0_INTERRUPT) == 1
|
||||
test ccompare0_interrupt
|
||||
set_vector kernel, 2f
|
||||
movi a2, 0
|
||||
|
@ -83,8 +98,12 @@ test ccompare0_interrupt
|
|||
rsr a2, interrupt
|
||||
wsr a2, intclear
|
||||
movi a2, 0
|
||||
#if XCHAL_NUM_TIMERS > 1
|
||||
wsr a2, ccompare1
|
||||
#endif
|
||||
#if XCHAL_NUM_TIMERS > 2
|
||||
wsr a2, ccompare2
|
||||
#endif
|
||||
|
||||
movi a3, WAIT_LOOPS
|
||||
make_ccount_delta a2, a15
|
||||
|
@ -104,16 +123,21 @@ test ccompare0_interrupt
|
|||
rsr a2, exccause
|
||||
assert eqi, a2, 4 /* LEVEL1_INTERRUPT_CAUSE */
|
||||
test_end
|
||||
#endif
|
||||
|
||||
#if XCHAL_NUM_TIMERS > 1
|
||||
|
||||
test ccompare1_interrupt
|
||||
set_vector level3, 2f
|
||||
set_vector glue(level, INTERRUPT_LEVEL(XCHAL_TIMER1_INTERRUPT)), 2f
|
||||
movi a2, 0
|
||||
wsr a2, intenable
|
||||
rsr a2, interrupt
|
||||
wsr a2, intclear
|
||||
movi a2, 0
|
||||
wsr a2, ccompare0
|
||||
#if XCHAL_NUM_TIMERS > 2
|
||||
wsr a2, ccompare2
|
||||
#endif
|
||||
|
||||
movi a3, WAIT_LOOPS
|
||||
make_ccount_delta a2, a15
|
||||
|
@ -123,7 +147,7 @@ test ccompare1_interrupt
|
|||
assert eqi, a2, 0
|
||||
movi a2, 1 << XCHAL_TIMER1_INTERRUPT
|
||||
wsr a2, intenable
|
||||
rsil a2, 2
|
||||
rsil a2, INTERRUPT_LEVEL(XCHAL_TIMER1_INTERRUPT) - 1
|
||||
loop a3, 1f
|
||||
nop
|
||||
1:
|
||||
|
@ -131,8 +155,11 @@ test ccompare1_interrupt
|
|||
2:
|
||||
test_end
|
||||
|
||||
#endif
|
||||
#if XCHAL_NUM_TIMERS > 2
|
||||
|
||||
test ccompare2_interrupt
|
||||
set_vector level5, 2f
|
||||
set_vector glue(level, INTERRUPT_LEVEL(XCHAL_TIMER2_INTERRUPT)), 2f
|
||||
movi a2, 0
|
||||
wsr a2, intenable
|
||||
rsr a2, interrupt
|
||||
|
@ -149,7 +176,7 @@ test ccompare2_interrupt
|
|||
assert eqi, a2, 0
|
||||
movi a2, 1 << XCHAL_TIMER2_INTERRUPT
|
||||
wsr a2, intenable
|
||||
rsil a2, 4
|
||||
rsil a2, INTERRUPT_LEVEL(XCHAL_TIMER2_INTERRUPT) - 1
|
||||
loop a3, 1f
|
||||
nop
|
||||
1:
|
||||
|
@ -157,6 +184,8 @@ test ccompare2_interrupt
|
|||
2:
|
||||
test_end
|
||||
|
||||
#endif
|
||||
|
||||
test ccompare_interrupt_masked
|
||||
set_vector kernel, 2f
|
||||
movi a2, 0
|
||||
|
@ -164,11 +193,15 @@ test ccompare_interrupt_masked
|
|||
rsr a2, interrupt
|
||||
wsr a2, intclear
|
||||
movi a2, 0
|
||||
#if XCHAL_NUM_TIMERS > 2
|
||||
wsr a2, ccompare2
|
||||
#endif
|
||||
|
||||
movi a3, 2 * WAIT_LOOPS
|
||||
make_ccount_delta a2, a15
|
||||
#if XCHAL_NUM_TIMERS > 1
|
||||
wsr a2, ccompare1
|
||||
#endif
|
||||
add a2, a2, a15
|
||||
wsr a2, ccompare0
|
||||
rsync
|
||||
|
@ -194,11 +227,15 @@ test ccompare_interrupt_masked_waiti
|
|||
rsr a2, interrupt
|
||||
wsr a2, intclear
|
||||
movi a2, 0
|
||||
#if XCHAL_NUM_TIMERS > 2
|
||||
wsr a2, ccompare2
|
||||
#endif
|
||||
|
||||
movi a3, 2 * WAIT_LOOPS
|
||||
make_ccount_delta a2, a15
|
||||
#if XCHAL_NUM_TIMERS > 1
|
||||
wsr a2, ccompare1
|
||||
#endif
|
||||
add a2, a2, a15
|
||||
wsr a2, ccompare0
|
||||
rsync
|
||||
|
@ -214,4 +251,7 @@ test ccompare_interrupt_masked_waiti
|
|||
assert eqi, a2, 4 /* LEVEL1_INTERRUPT_CAUSE */
|
||||
test_end
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
||||
test_suite_end
|
||||
|
|
Loading…
Reference in New Issue