On Tue, 12 May 2026 15:30:57 +0200
Igor Mammedov <[email protected]> wrote:


Peter,

could you take a look at ARM related patches,
I hope that I have addressed you concerns from v1.

> On Tue, 28 Apr 2026 16:12:15 +0200
> Igor Mammedov <[email protected]> wrote:
> 
> > On Tue,  3 Mar 2026 10:25:11 +0100
> > Igor Mammedov <[email protected]> wrote:
> >   
> > > Changelog:
> > >   v2:
> > >      * ditch generic '-machine acpi-watchdog' option in favor of
> > >        board specific variants:
> > >            x86/q35:  -machine wdat={on|off}
> > >            arm/virt: -device sbsa_gwdt,wdat={on|off}
> > >      * arm/virt: add FDT and GTDT ACPI entries for GWDT when it's present
> > >        and hide GDTD one when WDAT is enabled.
> > >      * arm/virt: add test case for GTDT 
> > >      * [18-21] optional GWDT cleanup/fixes in handling WCV register 
> > > update,
> > >        make QEMU behave according to spec (at least the way I read it and
> > >        it appears MS also read it that way). It fixes Windows 11 reboots 
> > > when
> > >        GWDT is present (without WDAT). With that fixed it's up to MS to 
> > > fix
> > >        their driver to set sane timeout as with the current one wdatchdog
> > >        will never trigger.    
> > 
> > given merge window should be open by now,
> > gentle ping  
> 
> 2 weeks later,
> yet another ping
> 
> >   
> > > Windows doesn't ship built-in TCO watchdog driver, and users are
> > > forced to install vendor specific driver(s) if such exists.
> > > However the OS provides a generic watchdog driver that uses
> > > ACPI WDAT table [1] to abstract actual hardware behind it.
> > > The same applies to ARM version of Windows.
> > > 
> > > This series adds
> > >  *  WDAT table tailored for TCO watchdog that Q35 already
> > >     has as part of ICH9 chipset and a knob to enable it.
> > >  *  SBSA GWDT to arm/virt machine with WDAT table tailored
> > >     for it and necessary tweaks to GWDT to make usable
> > >     with WDAT driver.
> > >     * in addition to WDAT, it also adds native variant
> > >       with GWDT described in FDT and DTDT
> > >       (broken on Windows/works on linux).
> > > 
> > > Guest OS WDAT support is present since Windows Vista and Linux since 
> > > 2016[2].
> > > 
> > > One can test it launching VM with following options:
> > >   * x86:
> > >        -machine q35,wdat=on
> > >   * arm/virt:
> > >        -device sbsa_gwdt,wdat=on
> > > 
> > > to trace access to TCO registers one can add to CLI:
> > >     -trace "tco_*"
> > > to trace access to GWDT registers one can add to CLI:
> > >     -trace "sbsa_gwdt*"
> > > 
> > > To verify that guest uses WDAT (both Windows and Linux would use it if 
> > > present),
> > >   * on linux make sure that watchdog service is configured/enabled
> > >     (use wdctl to check what watchdog device is in use) and then
> > >     trigger kernel panic with command:
> > >       echo c > /proc/sysrq-trigger
> > >   * on Windows kill svchost process, running cmd in admin mode:
> > >       taskkill /f /im svchost.exe
> > > 
> > > Tested with WS2025 & RHEL9.6 & Fedora 43 (aarch64)
> > > 
> > > git tree at: https://gitlab.com/imammedo/qemu/-/commits/gwdt_v2
> > > 
> > > 1) http://msdn.microsoft.com/en-us/windows/hardware/gg463320.aspx
> > > 2) https://lwn.net/Articles/700524/
> > > 
> > > PS:
> > >  previous revision:
> > >   https://patchew.org/QEMU/[email protected]/
> > > 
> > > Igor Mammedov (21):
> > >   acpi: add API to build WDAT instructions
> > >   x86: q35: add 'wdat' property
> > >   x86: q35: generate WDAT ACPI table
> > >   tests: acpi: x86/q35: whitelist new WDAT table
> > >   tests: acpi: x86/q35: add WDAT table test case
> > >   tests: acpi: x86/q35: update expected WDAT blob
> > >   arm: sbsa_gwdt: fixup default "clock-frequency"
> > >   arm: add tracing events to sbsa_gwdt
> > >   arm: virt: create sbsa_gwdt watchdog
> > >   arm: sbsa_gwdt: add 'wdat' option
> > >   arm: virt: add support for WDAT based watchdog
> > >   tests: acpi: arm/virt: whitelist new WDAT table
> > >   tests: acpi: arm/virt: add WDAT table test case
> > >   tests: acpi: arm/virt: update expected WDAT blob
> > >   tests: acpi: arm/virt: whitelist GTDT table
> > >   tests: acpi: arm/virt: add GTDT watchdog table test case
> > >   tests: acpi: arm/virt: update expected GTDT blob
> > >   sbsa_gwdt: reduce code ident
> > >   sbsa_gwdt: move all foo_REFRESH logic under REFRESH condition
> > >   sbsa_gwdt: reschedule timer on direct WCV load
> > >   sbsa_gwdt: limit compare_value to INT64_MAX
> > > 
> > >  include/hw/acpi/wdat-gwdt.h            |  19 ++++
> > >  include/hw/acpi/wdat-ich9.h            |  15 ++++
> > >  include/hw/acpi/wdat.h                 | 118 +++++++++++++++++++++++++
> > >  include/hw/i386/pc.h                   |   1 +
> > >  include/hw/watchdog/sbsa_gwdt.h        |   1 +
> > >  hw/acpi/aml-build.c                    |  14 +++
> > >  hw/acpi/meson.build                    |   5 +-
> > >  hw/acpi/wdat-gwdt-stub.c               |  16 ++++
> > >  hw/acpi/wdat-gwdt.c                    |  92 +++++++++++++++++++
> > >  hw/acpi/wdat-ich9-stub.c               |  15 ++++
> > >  hw/acpi/wdat-ich9.c                    |  90 +++++++++++++++++++
> > >  hw/arm/Kconfig                         |   1 +
> > >  hw/arm/virt-acpi-build.c               |  65 +++++++++++++-
> > >  hw/arm/virt.c                          |   2 +
> > >  hw/core/sysbus-fdt.c                   |  32 +++++++
> > >  hw/i386/acpi-build.c                   |  12 +++
> > >  hw/i386/pc_q35.c                       |  18 ++++
> > >  hw/watchdog/sbsa_gwdt.c                |  65 +++++++++-----
> > >  hw/watchdog/trace-events               |   9 ++
> > >  tests/data/acpi/aarch64/virt/GTDT.gwdt | Bin 0 -> 132 bytes
> > >  tests/data/acpi/aarch64/virt/WDAT.wdat | Bin 0 -> 260 bytes
> > >  tests/data/acpi/x86/q35/WDAT.wdat      | Bin 0 -> 308 bytes
> > >  tests/qtest/bios-tables-test.c         |  54 +++++++++++
> > >  23 files changed, 618 insertions(+), 26 deletions(-)
> > >  create mode 100644 include/hw/acpi/wdat-gwdt.h
> > >  create mode 100644 include/hw/acpi/wdat-ich9.h
> > >  create mode 100644 include/hw/acpi/wdat.h
> > >  create mode 100644 hw/acpi/wdat-gwdt-stub.c
> > >  create mode 100644 hw/acpi/wdat-gwdt.c
> > >  create mode 100644 hw/acpi/wdat-ich9-stub.c
> > >  create mode 100644 hw/acpi/wdat-ich9.c
> > >  create mode 100644 tests/data/acpi/aarch64/virt/GTDT.gwdt
> > >  create mode 100644 tests/data/acpi/aarch64/virt/WDAT.wdat
> > >  create mode 100644 tests/data/acpi/x86/q35/WDAT.wdat
> > >     
> >   
> 


Reply via email to