For more details, please refer "Documentation/devicetree/bindings/watchdog/cadence-wdt.txt"
Zynq7000 platform device-tree can be found in https://github.com/Xilinx/device-tree-xlnx/blob/xlnx_rel_v2021.2/device_tree/data/kernel_dtsi/2021.2/zynq/zynq-7000.dtsi#L455-L462
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 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.
&watchdog0 { status = "okay"; reset-on-timeout; }; |
ZynqMP platform device-tree can be found in https://github.com/Xilinx/device-tree-xlnx/blob/xlnx_rel_v2021.2/device_tree/data/kernel_dtsi/2021.2/zynqmp/zynqmp.dtsi#L1043-L1051
# timeout-sec value is set to 10s in 2018.2 and below release and 60s in 2018.3 and later 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 Zynq UltraScale+ MPSoC/RFSoC so you need add PMU firmware elf packaged as part of BOOT.bin
&watchdog0 { status = "okay"; reset-on-timeout; timeout-sec = <10>; }; |
For 2017.1 or later PetaLinux ENABLE_EM needs to be enabled from PMUFW, For more details refer PetaLinux Yocto Tips and PMU Firmware#PMUFWBuildFlags
# For 2017.4 and below PetaLinux/Yocto release only $ vim <plnx-proj-root>/project-spec/meta-user/recipes-bsp/pmu/pmu-firmware_%.bbappend #For v2018.1 to v2020.2 PetaLinux/Yocto releases only $ vim <plnx-proj-root>/project-spec/meta-user/recipes-bsp/pmu-firmware/pmu-firmware_%.bbappend # For v2021.1 PetaLinux/Yocto releases only $ vim <plnx-proj-root>/project-spec/meta-user/recipes-bsp/emebdeddedsw/pmu-firmware_%.bbappend # For v2021.2 and later PetaLinux/Yocto releases only $ vim <plnx-proj-root>/project-spec/meta-user/recipes-bsp/embeddedsw/pmu-firmware_%.bbappend |
# pmu-firmware_%.bbappend content YAML_COMPILER_FLAGS_append = " -DENABLE_EM -DENABLE_SCHEDULER" |
In case of Zynq UltraScale+ MPSoC/RFSoC, WDT 1 must be enabled in vivado design. |
Start the watchdog timer and see if it runs out without enabling reset.
# echo s > /dev/watchdog0 |
If reset-on-timeout and timeout-sec device-tree node property is enabled in watchdog node, then PMUFW will reset the system and expected output as shown below.
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 |
If reset-on-timeout device-tree node property is not enabled in watchdog node, then PMUFW will not reset the system and expected output as shown below.
cdns-wdt fd4d0000.watchdog: Watchdog timed out. |
watchdog: cadence: Use devm_clk_get_enabled() helper