Table of Contents
Introduction
This page describes the Window watchdog driver which is available in mainline and Xilinx Linux distribution asdrivers/watchdog/xilinx_wwdt.c
HW IP Features
The window watchdog timer mode is enabled by the Enable_and_Status [WEN] bit. The two windowed watchdog timer modes are basic and Q&A, and the mode is selected by the Funct_Ctrl [WM] bit.
In both windowed modes, the timer starts with the first window defined by a 32-bit field in the First_Wind register. The first window is considered the closed window. This is followed by a second window defined by another 32-bit field in the Second_Wind register. The second window is considered the open window. The protocol to keep the watchdog timer operating correctly depends on the window mode and the optional features that are enabled. In the simplest mode, the timer is restarted during the open window time.
Normally, if software tries to restart the timer before the open window time period, a bad event occurs, and the timer can generate a system interrupt or reset.
The Q&A token window mode requires the system software to write three one-byte responses during the first window (closed window) and a one-byte write in the second window (open window). The value of the token responses are based on the seed, feedback, and an answer count value. The seed and feedback values are programmed by software. The answer count value increments by one for each token response.
The two window timer modes include:
- Windowed Basic Mode
- Windowed Q&A Mode
For more details refer Versal TRM.
Known Issues and Limitations
- The current driver does not support Windowed Q&A mode.
Kernel Configuration
The following config options should be enabled in order to build the xilinx window watchdog driver:Code Block | ||
---|---|---|
| ||
¦│ Symbol: XILINX_WINDOW_WATCHDOG [=y] ¦│ ¦│ Type : tristate ¦ ¦ │ │ Defined at drivers/watchdog/Kconfig:307 │ │ Prompt: Xilinx window Watchdogwatchdog timer ¦ ¦ │ │ Depends on: WATCHDOG [=y] && HAS_IOMEM [=y] && (ARM64 [=y] || COMPILE_TEST [=n]) │ │ Location: ¦│ ¦│ -> Device Drivers ¦│ ¦ (4)│ -> Watchdog Timer Support (WATCHDOG [=y]) ¦│ ¦ Defined│ at drivers/watchdog/Kconfig:171 ¦ ¦ Depends on: (1) -> Xilinx window watchdog timer (XILINX_WINDOW_WATCHDOG [=y]) &&│ HAS_IOMEM [=y] ¦ ¦ │ Selects: WATCHDOG_CORE [=y] |
Devicetree
For more details, please referDocumentation/devicetree/bindings/watchdog/xlnx,versal-wwdt.yaml
Example:
Code Block | ||
---|---|---|
| ||
watchdog@fd4d0000 {
compatible = "xlnx,versal-wwdt";r
reg = <0xfd4d0000 0x10000>;
clocks = <&clock25>;
timeout-sec = <30>;
};
|
Test procedure
Change the parameters using IOCTLs and see if reported values is correct.Start the watchdog timer, if there is no ping till the timeout seconds, it will generate reset interrupt at timeout seconds
Code Block theme Midnight echo s > /dev/watchdog
Code Block theme Midnight
# /bin/wdt_app /dev/watchdog1
The timeout was is 42 seconds
root@uart:~#
Mainline Status
Change Logtitle vck190 [ 9.322914] Xilinx window watchdog fd4d0000.watchdog: Xilinx window watchdog Timer with timeout 20s xilinx-vck190-20241:/home/petalinux# echo s > /dev/watchdog [ 100.667738] watchdog: watchdog0: nowayout prevents watchdog being stopped! [ 100.674655] watchdog: watchdog0: watchdog did not stop! [172464.626]PMC EAM ERR1: 0x200 [172464.676]PSM EAM Interrupt: ERR1: 0x0 ERR2: 0x2 [172469.164]Received EAM error. ErrorNodeId: 0x2810C000, Register Mask: 0x2. The corresponding Error ID: 0x61
Ping test using watchdog-test app
Code Block theme Midnight xilinx-vck190-20241:/home/petalinux#./watchdog-test
Ping every 1 sec.
Code Block theme Midnight title vck190 [ 9.322914] Xilinx window watchdog fd4d0000.watchdog: Xilinx window watchdog Timer with timeout 20s xilinx-vck190-20241:/home/petalinux# ./watchdog-test Watchdog Ticking Away! ................................................................................
- This driver is currently in sync with the mainline kernel except for the following:
- watchdog: xilinx_wwdt: Add check for timeout limit and set maximum value if exceeded
Change Log
- 2024.1
- Summary
- watchdog: xilinx_wwdt: Add check for timeout limit and set maximum value if exceeded
- watchdog: xilinx_wwdt: Use div_u64() in xilinx_wwdt_start()
- watchdog: Explicitly include correct DT includes
- Commits
- Summary
- 2023.2