mirror of
https://github.com/xemu-project/xemu.git
synced 2024-11-23 11:39:53 +00:00
hw/timer/armv7m_systick: Update clock source before enabling timer
Starting the SysTick timer and changing the clock source a the same time will result in an error, if the previous clock period was zero. For exmaple, on the mps2-tz platforms, no refclk is present. Right after reset, the configured ptimer period is zero, and trying to enabling it will turn it off right away. E.g., code running on the platform setting SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_ENABLE_Msk; should change the clock source and enable the timer on real hardware, but resulted in an error in qemu. Signed-off-by: Richard Petri <git@rpls.de> Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Message-id: 20220201192650.289584-1-git@rpls.de Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
parent
c737d86804
commit
77cd997161
@ -149,6 +149,10 @@ static MemTxResult systick_write(void *opaque, hwaddr addr,
|
||||
s->control &= 0xfffffff8;
|
||||
s->control |= value & 7;
|
||||
|
||||
if ((oldval ^ value) & SYSTICK_CLKSOURCE) {
|
||||
systick_set_period_from_clock(s);
|
||||
}
|
||||
|
||||
if ((oldval ^ value) & SYSTICK_ENABLE) {
|
||||
if (value & SYSTICK_ENABLE) {
|
||||
ptimer_run(s->ptimer, 0);
|
||||
@ -156,10 +160,6 @@ static MemTxResult systick_write(void *opaque, hwaddr addr,
|
||||
ptimer_stop(s->ptimer);
|
||||
}
|
||||
}
|
||||
|
||||
if ((oldval ^ value) & SYSTICK_CLKSOURCE) {
|
||||
systick_set_period_from_clock(s);
|
||||
}
|
||||
ptimer_transaction_commit(s->ptimer);
|
||||
break;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user