On Tue, 26 May 2026 16:24:59 +0200 Eric Auger <[email protected]> wrote:
> On 3/3/26 10:25 AM, Igor Mammedov wrote: > > it will be used by arm/virt board, to pick WDAT compatible watchdog impl. > > and act as switch over to WDAT ACPI table vesus default GTDT ACPI table. > > > > Signed-off-by: Igor Mammedov <[email protected]> > > --- > > include/hw/watchdog/sbsa_gwdt.h | 1 + > > hw/watchdog/sbsa_gwdt.c | 8 ++++++++ > > 2 files changed, 9 insertions(+) > > > > diff --git a/include/hw/watchdog/sbsa_gwdt.h > > b/include/hw/watchdog/sbsa_gwdt.h > > index 307a4f291a..dc77e6be60 100644 > > --- a/include/hw/watchdog/sbsa_gwdt.h > > +++ b/include/hw/watchdog/sbsa_gwdt.h > > @@ -73,6 +73,7 @@ typedef struct SBSA_GWDTState { > > uint32_t woru; > > uint32_t wcvl; > > uint32_t wcvu; > > + bool wdat; > > } SBSA_GWDTState; > > > > #endif /* WDT_SBSA_GWDT_H */ > > diff --git a/hw/watchdog/sbsa_gwdt.c b/hw/watchdog/sbsa_gwdt.c > > index c4dd8005b7..40d80f7f2b 100644 > > --- a/hw/watchdog/sbsa_gwdt.c > > +++ b/hw/watchdog/sbsa_gwdt.c > > @@ -265,6 +265,13 @@ static void wdt_sbsa_gwdt_realize(DeviceState *dev, > > Error **errp) > > > > sysbus_init_irq(sbd, &s->irq); > > > > + /* > > + * WDAT supports only upto 1KHz resolution, > > + */ > > + if (s->wdat) { > > + s->freq = 1000; > where is it specified in the spec? next patch has link to WDAT spec and comment around relevant field: + /* + * WDAT spec suports only 1KHz or more coarse watchdog timer, + * Set resolution to minimum supported 1ms. + * Before starting watchdog Windows set countdown value to 5min. + */ + g_assert(freq <= 1000); + build_append_int_noprefix(table_data, 1, 4);/* Timer Period, ms */ it's the hack to make gwdt usable for wdat and is applied only when wdat is enabled, if not the gwdt is instantiated with native 1G and provides corresponding fdt. > > Thanks > > Eric > > > + } > > + > > s->timer = timer_new_ns(QEMU_CLOCK_VIRTUAL, > > sbsa_gwdt_timer_sysinterrupt, > > dev); > > } > > @@ -276,6 +283,7 @@ static const Property wdt_sbsa_gwdt_props[] = { > > */ > > DEFINE_PROP_UINT64("clock-frequency", struct SBSA_GWDTState, freq, > > 1000000000), > > + DEFINE_PROP_BOOL("wdat", struct SBSA_GWDTState, wdat, false), > > }; > > > > static void wdt_sbsa_gwdt_class_init(ObjectClass *klass, const void *data) > > >
