hw/m68k/mcf5206.c: Switch to transaction-based ptimer API

Switch the mcf5206 code away from bottom-half based ptimers to
the new transaction-based ptimer API.  This just requires adding
begin/commit calls around the various places that modify the ptimer
state, and using the new ptimer_init() function to create the timer.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Message-id: 20191021140600.10725-1-peter.maydell@linaro.org
This commit is contained in:
Peter Maydell 2019-10-21 15:06:00 +01:00
parent 663e475fbe
commit efe62d6fa0

View File

@ -8,7 +8,6 @@
#include "qemu/osdep.h" #include "qemu/osdep.h"
#include "qemu/error-report.h" #include "qemu/error-report.h"
#include "qemu/main-loop.h"
#include "cpu.h" #include "cpu.h"
#include "hw/hw.h" #include "hw/hw.h"
#include "hw/irq.h" #include "hw/irq.h"
@ -57,10 +56,12 @@ static void m5206_timer_recalibrate(m5206_timer_state *s)
int prescale; int prescale;
int mode; int mode;
ptimer_transaction_begin(s->timer);
ptimer_stop(s->timer); ptimer_stop(s->timer);
if ((s->tmr & TMR_RST) == 0) if ((s->tmr & TMR_RST) == 0) {
return; goto exit;
}
prescale = (s->tmr >> 8) + 1; prescale = (s->tmr >> 8) + 1;
mode = (s->tmr >> 1) & 3; mode = (s->tmr >> 1) & 3;
@ -78,6 +79,8 @@ static void m5206_timer_recalibrate(m5206_timer_state *s)
ptimer_set_limit(s->timer, s->trr, 0); ptimer_set_limit(s->timer, s->trr, 0);
ptimer_run(s->timer, 0); ptimer_run(s->timer, 0);
exit:
ptimer_transaction_commit(s->timer);
} }
static void m5206_timer_trigger(void *opaque) static void m5206_timer_trigger(void *opaque)
@ -123,7 +126,9 @@ static void m5206_timer_write(m5206_timer_state *s, uint32_t addr, uint32_t val)
s->tcr = val; s->tcr = val;
break; break;
case 0xc: case 0xc:
ptimer_transaction_begin(s->timer);
ptimer_set_count(s->timer, val); ptimer_set_count(s->timer, val);
ptimer_transaction_commit(s->timer);
break; break;
case 0x11: case 0x11:
s->ter &= ~val; s->ter &= ~val;
@ -137,11 +142,9 @@ static void m5206_timer_write(m5206_timer_state *s, uint32_t addr, uint32_t val)
static m5206_timer_state *m5206_timer_init(qemu_irq irq) static m5206_timer_state *m5206_timer_init(qemu_irq irq)
{ {
m5206_timer_state *s; m5206_timer_state *s;
QEMUBH *bh;
s = g_new0(m5206_timer_state, 1); s = g_new0(m5206_timer_state, 1);
bh = qemu_bh_new(m5206_timer_trigger, s); s->timer = ptimer_init(m5206_timer_trigger, s, PTIMER_POLICY_DEFAULT);
s->timer = ptimer_init_with_bh(bh, PTIMER_POLICY_DEFAULT);
s->irq = irq; s->irq = irq;
m5206_timer_reset(s); m5206_timer_reset(s);
return s; return s;