mirror of https://github.com/xemu-project/xemu.git
hw/ptimer: Update .delta on period/freq change
Delta value must be updated on period/freq change, otherwise running timer would be restarted (counter reloaded with old delta). Only m68k/mcf520x and arm/arm_timer devices are currently doing freq change correctly, i.e. stopping the timer. Perform delta update to fix affected devices and eliminate potential further mistakes. Signed-off-by: Dmitry Osipenko <digetx@gmail.com> Reviewed-by: Peter Crosthwaite <crosthwaite.peter@gmail.com> Message-id: 4987ef5fdc128bb9a744fd794d3f609135c6a39c.1464367869.git.digetx@gmail.com Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
parent
5a50307b48
commit
7ef6e3cf8d
|
@ -190,6 +190,7 @@ void ptimer_stop(ptimer_state *s)
|
|||
/* Set counter increment interval in nanoseconds. */
|
||||
void ptimer_set_period(ptimer_state *s, int64_t period)
|
||||
{
|
||||
s->delta = ptimer_get_count(s);
|
||||
s->period = period;
|
||||
s->period_frac = 0;
|
||||
if (s->enabled) {
|
||||
|
@ -201,6 +202,7 @@ void ptimer_set_period(ptimer_state *s, int64_t period)
|
|||
/* Set counter frequency in Hz. */
|
||||
void ptimer_set_freq(ptimer_state *s, uint32_t freq)
|
||||
{
|
||||
s->delta = ptimer_get_count(s);
|
||||
s->period = 1000000000ll / freq;
|
||||
s->period_frac = (1000000000ll << 32) / freq;
|
||||
if (s->enabled) {
|
||||
|
|
Loading…
Reference in New Issue