On 19:06 Thu 21 Jan , Peter Maydell wrote: > As the first step in converting the CMSDK_APB_TIMER device to the > Clock framework, add a Clock input. For the moment we do nothing > with this clock; we will change the behaviour from using the pclk-frq > property to using the Clock once all the users of this device have > been converted to wire up the Clock. > > Since the device doesn't already have a doc comment for its "QEMU > interface", we add one including the new Clock. > > This is a migration compatibility break for machines mps2-an505, > mps2-an521, musca-a, musca-b1. > > Signed-off-by: Peter Maydell <peter.mayd...@linaro.org>
Reviewed-by: Luc Michel <l...@lmichel.fr> > --- > include/hw/timer/cmsdk-apb-timer.h | 9 +++++++++ > hw/timer/cmsdk-apb-timer.c | 7 +++++-- > 2 files changed, 14 insertions(+), 2 deletions(-) > > diff --git a/include/hw/timer/cmsdk-apb-timer.h > b/include/hw/timer/cmsdk-apb-timer.h > index baa009bb2da..fc2aa97acac 100644 > --- a/include/hw/timer/cmsdk-apb-timer.h > +++ b/include/hw/timer/cmsdk-apb-timer.h > @@ -15,11 +15,19 @@ > #include "hw/qdev-properties.h" > #include "hw/sysbus.h" > #include "hw/ptimer.h" > +#include "hw/clock.h" > #include "qom/object.h" > > #define TYPE_CMSDK_APB_TIMER "cmsdk-apb-timer" > OBJECT_DECLARE_SIMPLE_TYPE(CMSDKAPBTimer, CMSDK_APB_TIMER) > > +/* > + * QEMU interface: > + * + QOM property "pclk-frq": frequency at which the timer is clocked > + * + Clock input "pclk": clock for the timer > + * + sysbus MMIO region 0: the register bank > + * + sysbus IRQ 0: timer interrupt TIMERINT > + */ > struct CMSDKAPBTimer { > /*< private >*/ > SysBusDevice parent_obj; > @@ -29,6 +37,7 @@ struct CMSDKAPBTimer { > qemu_irq timerint; > uint32_t pclk_frq; > struct ptimer_state *timer; > + Clock *pclk; > > uint32_t ctrl; > uint32_t value; > diff --git a/hw/timer/cmsdk-apb-timer.c b/hw/timer/cmsdk-apb-timer.c > index ae9c5422540..c63145ff553 100644 > --- a/hw/timer/cmsdk-apb-timer.c > +++ b/hw/timer/cmsdk-apb-timer.c > @@ -35,6 +35,7 @@ > #include "hw/sysbus.h" > #include "hw/irq.h" > #include "hw/registerfields.h" > +#include "hw/qdev-clock.h" > #include "hw/timer/cmsdk-apb-timer.h" > #include "migration/vmstate.h" > > @@ -212,6 +213,7 @@ static void cmsdk_apb_timer_init(Object *obj) > s, "cmsdk-apb-timer", 0x1000); > sysbus_init_mmio(sbd, &s->iomem); > sysbus_init_irq(sbd, &s->timerint); > + s->pclk = qdev_init_clock_in(DEVICE(s), "pclk", NULL, NULL); > } > > static void cmsdk_apb_timer_realize(DeviceState *dev, Error **errp) > @@ -236,10 +238,11 @@ static void cmsdk_apb_timer_realize(DeviceState *dev, > Error **errp) > > static const VMStateDescription cmsdk_apb_timer_vmstate = { > .name = "cmsdk-apb-timer", > - .version_id = 1, > - .minimum_version_id = 1, > + .version_id = 2, > + .minimum_version_id = 2, > .fields = (VMStateField[]) { > VMSTATE_PTIMER(timer, CMSDKAPBTimer), > + VMSTATE_CLOCK(pclk, CMSDKAPBTimer), > VMSTATE_UINT32(ctrl, CMSDKAPBTimer), > VMSTATE_UINT32(value, CMSDKAPBTimer), > VMSTATE_UINT32(reload, CMSDKAPBTimer), > -- > 2.20.1 > --