This driver supports some arm and arm64 boards equipped with "snps,dw-wdt"-compatible watchdog device. Tested on RK3399-based board (RockPro64). There are some nuances still:
# RockPro64 (or RK3399-based boards in general) does not provide clock value. That's why driver right now misses calibration part.
# Once started watchdog device cannot be stopped. Interrupt handler has mode to kick watchdog even when software does not do it properly. This can be controlled via sysctl: `dev.dwwdt.X.prevent_restart`. Also - driver handles system shutdown and prevents from restart when system is asked to reboot.
Bibliography:
- RK3399 TRM Part 1 (it lacks details on clock configuration)
Other implementations:
- OpenBSD driver (it uses watchdog device to reset system): https://github.com/openbsd/src/blob/master/sys/dev/fdt/dwdog.c
- Linux driver (there is no 1:1 compatibility right now, but Linux folks have the same problem with clock configuration): https://github.com/torvalds/linux/blob/master/drivers/watchdog/dw_wdt.c