Introduction

This page gives an overview of the WDT driver which is available as part of the Zynq and ZynqMP Linux distribution and in the mainline.
Paths, files, links and documentation on this page are given relative to the Linux kernel source tree.

HW IP Features


Known Issues and Limitations


Kernel Configuration

The following config options should be enabled in order to build the wdt driver:
CONFIG_CADENCE_WATCHDOG
CONFIG_XILINX_WATCHDOG




Devicetree
For more details, please refer "Documentation/devicetree/bindings/watchdog/cadence-wdt.txt"

For Zynq7000:
Example: In <plnx-proj-root>/components/plnx_workspace/device-tree/device-tree-generation/zynq-7000.dtsi
watchdog0: watchdog@f8005000 {
        clocks = <&clkc45>;
        compatible = "cdns,wdt-r1p2";
        interrupt-parent = <&&intc>;
        interrupts = <0 9 1>;
        reg = <0xf8005000 0x1000>;
        timeout-sec = <10>;
};
 
Modify the device tree source in <plnx-proj-root>/project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi as below and rebuild your project.
&watchdog0 {
    status = "okay";
};
If you want the watchdog to trigger a software reset/reboot upon time out then add "reset-on-timeout" in device tree node.
&watchdog0 {
    status = "okay";
    reset-on-timeout;
};
For ZynqMP:
Example: In <plnx-proj-root>/components/plnx_workspace/device-tree/device-tree-generation/zynqmp.dtsi
# timeout-sec value is set to 10s in 2018.2 and below release and 60s in 2018.3 and above release.
watchdog0: watchdog@fd4d0000 {
        compatible = "cdns,wdt-r1p2";
        status = disabled;
        interrupt-parent = <&gic>;
        interrupts = <0 113 1>;
        reg = <0x0 0xfd4d0000 0x1000>;
        timeout-sec = <60>;
};
 
Modify the device tree source in <plnx-proj-root>/project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi as below and rebuild your project.
&watchdog0 {
    status = "okay";
};
If user want the watchdog to trigger a software reset/reboot upon time out then add "reset-on-timeout" in device tree node. Software reset is handled in PMU firmware for ZynqMP so you need add PMU firmware in your BOOT.bin
&watchdog0 {
    status = "okay";
    reset-on-timeout;
    timeout-sec = <10>;
};
Note: For 2017.1 or later PetaLinux ENABLE_EM needs to be enabled from PMUFW
Reference Link: https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18842475/PetaLinux+Yocto+Tips  PMU Firmware#PMUFWBuildFlags


$ vim <plnx-proj-root>/project-spec/meta-user/recipes-bsp/pmu/pmu-firmware_%.bbappend
 
#For v2018.1 or later PetaLinux releases only
$ vim <plnx-proj-root>/project-spec/meta-user/recipes-bsp/pmu-firmware/pmu-firmware_%.bbappend


YAML_COMPILER_FLAGS_append = " -DENABLE_EM -DENABLE_SCHEDULER"


Test procedure

Note:
In case of zynqMP WDT 1 must be enabled at the h/w level.

Start the watchdog timer and see if it runs out without enabling reset.
echo s > /dev/watchdog0

Expected Output

//after 10 seconds

If reset-on-timeout property is present in the watchdog node
PetaLinux 2018.2 xilinx-zcu102-2018_2 /dev/ttyPS0

xilinx-zcu102-2018_2 login: root
Password:
root@xilinx-zcu102-2018_2:~#
root@xilinx-zcu102-2018_2:~# dmesg | grep wdt
[    1.669543] cdns-wdt fd4d0000.watchdog: Xilinx Watchdog Timer at ffffff800913d000 with timeout 10s
root@xilinx-zcu102-2018_2:~#
root@xilinx-zcu102-2018_2:~# echo s > /dev/watchdog0
[   66.480417] watchdog: watchdog0: watchdog did not stop!
root@xilinx-zcu102-2018_2:~# Xilinx Zynq MP First Stage Boot Loader
Release 2018.2   Oct 31 2018  -  15:24:39
NOTICE:  ATF running on XCZU9EG/silicon v4/RTL5.1 at 0xfffea000
NOTICE:  BL31: Secure code at 0x0
NOTICE:  BL31: Non secure code at 0x10080000
NOTICE:  BL31: v1.4(release):xilinx-v2018.1-4-g93a69a5a
NOTICE:  BL31: Built : 21:21:00, Oct 31 2018
PMUFW:  v1.0
Without reset-on-timeout property in the watchdog node
cdns-wdt fd4d0000.watchdog: Watchdog timed out.

Mainline Status

Change Log

Related Links