On Fri, Feb 6, 2026 at 6:44 PM Igor Mammedov <[email protected]> wrote: > > Windows doesn't ship built-in TCO watchdog driver, and users are > forced to install vendor specific driver(s) if such exists. > However 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/vit machine with WDAT table tailored > for it and necessary tweaks to GWDT to make usable > with WDAT driver. > > Guest OS support is present since Windows Vista and Linux since 2016[2].
I am confused. The linux documentation for arm64 says WDAT is not supported https://www.kernel.org/doc/html/latest/arch/arm64/acpi_object_usage.html > > One can test it launching VM with following options: > -machine acpi-watchdog=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 to use and confirm that it's > wadt based one) 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 & Fedore 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 (q35 only): > > https://patchwork.ozlabs.org/project/qemu-devel/cover/[email protected]/ > > Also CCing SBSA folks to see if they are interested in adding it to their > reference machine > > Igor Mammedov (11): > acpi: add API to build WDAT instructions > machine: add "acpi-watchdog" 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: add tracing events to sbsa_gwdt > arm: virt: create GWDT watchdog paired with WDAT ACPI table > 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 > > include/hw/acpi/wdat-gwdt.h | 19 ++++ > include/hw/acpi/wdat-ich9.h | 15 ++++ > include/hw/acpi/wdat.h | 118 +++++++++++++++++++++++++ > include/hw/arm/virt.h | 3 + > include/hw/core/boards.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 | 87 ++++++++++++++++++ > hw/arm/Kconfig | 1 + > hw/arm/virt-acpi-build.c | 16 ++++ > hw/arm/virt.c | 26 ++++++ > hw/core/machine.c | 20 +++++ > hw/i386/acpi-build.c | 12 +++ > hw/watchdog/sbsa_gwdt.c | 8 ++ > hw/watchdog/trace-events | 9 ++ > 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 | 34 +++++++ > 21 files changed, 510 insertions(+), 1 deletion(-) > 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/WDAT.wdat > create mode 100644 tests/data/acpi/x86/q35/WDAT.wdat > > -- > 2.47.3 >
