On 19:06 Thu 21 Jan , Peter Maydell wrote: > Switch the CMSDK APB watchdog device over to using its Clock input; > the wdogclk_frq property is now ignored. > > Signed-off-by: Peter Maydell <peter.mayd...@linaro.org>
Reviewed-by: Luc Michel <l...@lmichel.fr> > --- > hw/watchdog/cmsdk-apb-watchdog.c | 18 ++++++++++++++---- > 1 file changed, 14 insertions(+), 4 deletions(-) > > diff --git a/hw/watchdog/cmsdk-apb-watchdog.c > b/hw/watchdog/cmsdk-apb-watchdog.c > index b03bcb73628..9cad0c67da4 100644 > --- a/hw/watchdog/cmsdk-apb-watchdog.c > +++ b/hw/watchdog/cmsdk-apb-watchdog.c > @@ -310,6 +310,15 @@ static void cmsdk_apb_watchdog_reset(DeviceState *dev) > ptimer_transaction_commit(s->timer); > } > > +static void cmsdk_apb_watchdog_clk_update(void *opaque) > +{ > + CMSDKAPBWatchdog *s = CMSDK_APB_WATCHDOG(opaque); > + > + ptimer_transaction_begin(s->timer); > + ptimer_set_period_from_clock(s->timer, s->wdogclk, 1); > + ptimer_transaction_commit(s->timer); > +} > + > static void cmsdk_apb_watchdog_init(Object *obj) > { > SysBusDevice *sbd = SYS_BUS_DEVICE(obj); > @@ -319,7 +328,8 @@ static void cmsdk_apb_watchdog_init(Object *obj) > s, "cmsdk-apb-watchdog", 0x1000); > sysbus_init_mmio(sbd, &s->iomem); > sysbus_init_irq(sbd, &s->wdogint); > - s->wdogclk = qdev_init_clock_in(DEVICE(s), "WDOGCLK", NULL, NULL); > + s->wdogclk = qdev_init_clock_in(DEVICE(s), "WDOGCLK", > + cmsdk_apb_watchdog_clk_update, s); > > s->is_luminary = false; > s->id = cmsdk_apb_watchdog_id; > @@ -329,9 +339,9 @@ static void cmsdk_apb_watchdog_realize(DeviceState *dev, > Error **errp) > { > CMSDKAPBWatchdog *s = CMSDK_APB_WATCHDOG(dev); > > - if (s->wdogclk_frq == 0) { > + if (!clock_has_source(s->wdogclk)) { > error_setg(errp, > - "CMSDK APB watchdog: wdogclk-frq property must be set"); > + "CMSDK APB watchdog: WDOGCLK clock must be connected"); > return; > } > > @@ -342,7 +352,7 @@ static void cmsdk_apb_watchdog_realize(DeviceState *dev, > Error **errp) > PTIMER_POLICY_NO_COUNTER_ROUND_DOWN); > > ptimer_transaction_begin(s->timer); > - ptimer_set_freq(s->timer, s->wdogclk_frq); > + ptimer_set_period_from_clock(s->timer, s->wdogclk, 1); > ptimer_transaction_commit(s->timer); > } > > -- > 2.20.1 > --