[PATCH v4 00/13] Add watchdog support to arm/virt board

Igor Mammedov posted 13 patches 3 weeks, 2 days ago
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/20260702145856.1539572-1-imammedo@redhat.com
Maintainers: Peter Maydell <peter.maydell@linaro.org>, Pierrick Bouvier <pierrick.bouvier@oss.qualcomm.com>, "Michael S. Tsirkin" <mst@redhat.com>, Igor Mammedov <imammedo@redhat.com>, Ani Sinha <anisinha@redhat.com>, Paolo Bonzini <pbonzini@redhat.com>, Leif Lindholm <leif.lindholm@oss.qualcomm.com>
include/hw/acpi/wdat-gwdt.h            |  19 +++++
include/hw/arm/virt.h                  |   3 +
include/hw/watchdog/sbsa_gwdt.h        |   3 +-
docs/system/arm/virt.rst               |  24 ++++++
hw/acpi/meson.build                    |   2 +
hw/acpi/wdat-gwdt-stub.c               |  16 ++++
hw/acpi/wdat-gwdt.c                    |  99 +++++++++++++++++++++++++
hw/arm/Kconfig                         |   1 +
hw/arm/virt-acpi-build.c               |  51 ++++++++++++-
hw/arm/virt.c                          |  48 ++++++++++++
hw/core/sysbus-fdt.c                   |   2 +
hw/watchdog/sbsa_gwdt.c                |  24 +++++-
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/qtest/bios-tables-test.c         |  41 ++++++++++
16 files changed, 334 insertions(+), 8 deletions(-)
create mode 100644 include/hw/acpi/wdat-gwdt.h
create mode 100644 hw/acpi/wdat-gwdt-stub.c
create mode 100644 hw/acpi/wdat-gwdt.c
create mode 100644 tests/data/acpi/aarch64/virt/GTDT.gwdt
create mode 100644 tests/data/acpi/aarch64/virt/WDAT.wdat
[PATCH v4 00/13] Add watchdog support to arm/virt board
Posted by Igor Mammedov 3 weeks, 2 days ago
This series adds SBSA GWDT to the arm/virt machine with a WDAT table
designed for it and necessary tweaks to make it usable with the
WDAT driver.

In addition to WDAT, it also adds a native variant with GWDT
described in FDT and GTDT.

One can test it launching VM with:
    -device sbsa-gwdt,wdat=on

to trace access to GWDT registers add:
    -trace "sbsa_gwdt*"

To verify the guest uses watchdog use following steps to trigger
watchdog reboot:
  * on Linux: enable watchdog service, check with wdctl, then:
      echo c > /proc/sysrq-trigger
  * on Windows: kill svchost in admin mode 'cmd' shell:
      taskkill /f /im svchost.exe

Tested with Fedora 43 & Windows 11 (aarch64, KVM on Jetson)

git tree: https://gitlab.com/imammedo/qemu/-/commits/gwdt_v4

1) http://msdn.microsoft.com/en-us/windows/hardware/gg463320.aspx

Changelog:
  v4:
    * drop independed patches 14-17 for a separate spin-off
      (sbsa-gwdt fixes for WCV register writes)
    * arm: sbsa_gwdt: rename device type to sbsa-gwdt (patch 3):
      - collect Reviewed-by from Eric
    * arm: virt: create sbsa-gwdt watchdog (patch 4):
      (Eric)
        - reorder [VIRT_GWDT_WS0] in irqmap after [VIRT_ACPI_GED]
        - add missing blank line in pre_plug handler
        - extract FDT node creation into create_gwdt_dt_bindings() helper
        - add watchdog documentation to docs/system/arm/virt.rst
        - add comment above dc->user_creatable about requiring
          machine-specific wiring
    * acpi: introduce WDAT table for GWDT (patch 6):
      (Eric)
        - fix comment alignment
        - collect Reviewed-by
    * arm: virt: add support for WDAT based watchdog (patch 7):
      (Eric)
        - remove unused 'wdt' parameter from build_gtdt()
        - add Native/WDAT modes documentation to docs/system/arm/virt.rst
        - collect Reviewed-by
    * tests: acpi: arm/virt: update expected WDAT blob (patch 10):
      - collect Reviewed-by from Eric
    * tests: acpi: arm/virt: add GTDT watchdog table test case (patch 12):
      (Eric) fix whitespace in test command string (moved from patch 17)

  v3:
    * drop x86 patches (already merged)
    * (Eric) rename device type from sbsa_gwdt to sbsa-gwdt (new patch 3)
    * arm: virt: create sbsa-gwdt watchdog (patch 4):
      - (Eric) assign MMIO/IRQ statically, drop dynamic sysbus machinery
      - (Peter) set watchdog freq to system counter clock explicitly
    * arm: sbsa-gwdt: add 'wdat' option (patch 5):
      - split out from v2's monolithic patch 11
    * acpi: introduce WDAT table for GWDT (patch 6):
      - (Eric) split out from v2's patch 11
      - add/improve comments
      - use 'freq' argument passed down by caller
      - simplify magic val on WRR write and add comment
      - group table records by used register
    * arm: virt: add support for WDAT based watchdog (patch 7):
      - (Eric) split out from v2's patch 11
      - skip FDT watchdog node creation in wdat mode
      - skip setting cntfrq clock-frequency in wdat mode
    * sbsa-gwdt: reschedule timer on direct WCV load (patch 16):
      - improved commit message with spec references and
        description of Windows GTDT-mode behavior
    * sbsa-gwdt: limit compare_value to INT64_MAX (patch 17):
      - rewritten commit message: document QEMU timer API
        limitation vs spec, Windows write sequence, and
        vCPU preemption fragility under virtualization

  v2:
    * ditch generic '-machine acpi-watchdog' option in favor of
      board specific: arm/virt: -device sbsa_gwdt,wdat={on|off}
    * arm/virt: add FDT and GTDT ACPI entries for GWDT
    * arm/virt: add test case for GTDT
    * optional GWDT cleanup/fixes for WCV register update

  previous revisions:
    v3: https://patchew.org/QEMU/20260624102830.1355552-1-imammedo@redhat.com/
    v2: https://patchew.org/QEMU/20260303092532.2410177-1-imammedo@redhat.com/
    v1: https://patchew.org/QEMU/20260206131438.1857182-1-imammedo@redhat.com/

Igor Mammedov (13):
  arm: sbsa_gwdt: fixup default "clock-frequency"
  arm: add tracing events to sbsa_gwdt
  arm: sbsa_gwdt: rename device type to sbsa-gwdt
  arm: virt: create sbsa-gwdt watchdog
  arm: sbsa-gwdt: add 'wdat' option
  acpi: introduce WDAT table for  GWDT
  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

 include/hw/acpi/wdat-gwdt.h            |  19 +++++
 include/hw/arm/virt.h                  |   3 +
 include/hw/watchdog/sbsa_gwdt.h        |   3 +-
 docs/system/arm/virt.rst               |  24 ++++++
 hw/acpi/meson.build                    |   2 +
 hw/acpi/wdat-gwdt-stub.c               |  16 ++++
 hw/acpi/wdat-gwdt.c                    |  99 +++++++++++++++++++++++++
 hw/arm/Kconfig                         |   1 +
 hw/arm/virt-acpi-build.c               |  51 ++++++++++++-
 hw/arm/virt.c                          |  48 ++++++++++++
 hw/core/sysbus-fdt.c                   |   2 +
 hw/watchdog/sbsa_gwdt.c                |  24 +++++-
 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/qtest/bios-tables-test.c         |  41 ++++++++++
 16 files changed, 334 insertions(+), 8 deletions(-)
 create mode 100644 include/hw/acpi/wdat-gwdt.h
 create mode 100644 hw/acpi/wdat-gwdt-stub.c
 create mode 100644 hw/acpi/wdat-gwdt.c
 create mode 100644 tests/data/acpi/aarch64/virt/GTDT.gwdt
 create mode 100644 tests/data/acpi/aarch64/virt/WDAT.wdat

-- 
2.47.3