LAN966x Watchdog
Kernel configurations
Following kernel config options should be enabled to use LAN966x WDT:
-
CONFIG_DW_WATCHDOG- Synopsys Watchdog driver config option.
Devicetree Configuration
To enable Watchdog timer, following configurations are required in device tree:
-
compatiblestring must be set tosnps,dw-wdt. -
regproperty must be set to<0xe0090000 0x1000>. -
interruptsproperty must be set with interrupt details as<GIC_SPI 38 IRQ_TYPE_LEVEL_HIGH>.
| Peripheral | Shared Peripheral Interrupt | CPU INTR |
|---|---|---|
watchdog |
70 |
38 |
- Note
-
Shared peripheral interrupt lines start at index ID32. So, CPU INTR must be calculated as [Shared peripheral interrupt number - 32].
-
clocksproperty must be set to<&nic_clk>.
-
Example
Following example shows how a Watchdog timer should be defined in DT:
dtsi file:
watchdog: watchdog@e0090000 {
compatible = "snps,dw-wdt";
reg = <0xe0090000 0x1000>;
interrupts = <GIC_SPI 38 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&nic_clk>;
status = "disabled";
};
dts file changes:
&watchdog {
status = "okay";
};
UserSpace
Confirm instances are created
-
Check for
/dev/watchdog. If this file is present, that means the watchdog kernel device driver is loaded.
Example on how to use
Run cat /dev/watchdog0 and you see linux reboots in 30-40secs.
$ cat /dev/watchdog0
[ 7879.765752] watchdog: watchdog0: watchdog did not stop!
$
$
$
U-Boot 2019.04-linux4sam_6.2-icp (Sep 24 2021 - 09:49:43 +0200)
CPU: SAMA7
Crystal frequency: 0 MHz
CPU clock : 0 MHz
Master clock : 0 MHz
DRAM: 1 GiB
MMC: sdhci-host@e0830000: 0, emmc@e0830000: 1
Loading Environment from SPI Flash... SF: Detected sst26vf016b with page size 256 Bytes, erase size 4 KiB, total 2 MiB
OK
In: serial
Out: serial
Err: serial
Net: eth0: switch@0
Hit any key to stop autoboot: 0
m =>
Example using Busybox watchdog utility:
-
Configure buildroot and install Watchdog utility provided by Busybox.
-
The main watchdog configuration file is
/etc/watchdog.conf.
$ busybox | grep watchdog
vconfig, vi, vlock, w, watch, watchdog, wc, wget, which, who, whoami,
$
$ watchdog --help
watchdog: unrecognized option `--help'
watchdog version 5.16, usage:
watchdog [options]
options:
-c | --config-file <file> specify location of config file
-f | --force don't sanity-check config or use PID file
-F | --foreground run in foreground
-X | --loop-exit <number> run a fixed number of loops then exit
-q | --no-action do not reboot or halt
-b | --softboot soft-boot on error
-s | --sync sync filesystem
-v | --verbose verbose messages
$ ls -l /etc/watchdog.conf
-rw-r--r-- 1 root root 6102 May 18 2022 /etc/watchdog.conf
Verify system reboot by running watchdog in background:
-
Add watchdog configurations to
/etc/watchdog.conffile. -
Run command
watchdog -c /etc/watchdog.conf. By default, Busybox watchdog command runs in background. -
Check for Hardware watchdog process ID.
-
Kill the watchdog process.
-
Verify that system is rebooted after
watchdog-timeoutvalue.
$ cat /etc/watchdog.conf
watchdog-device = /dev/watchdog
watchdog-timeout = 20
log-dir = /var/log/watchdog
file = /var/log/messages
change = 1500
realtime = yes
priority = 1
$
$ ps -ef | grep watchdog
22 root [watchdogd]
131 root grep watchdog
$
$
$ watchdog -c /etc/watchdog.conf
$
$
$ ps -ef | grep watchdog
22 root [watchdogd]
135 root watchdog -c /etc/watchdog.conf
140 root grep watchdog
$
$
$ uptime
00:09:09 up 9 min, load average: 0.00, 0.03, 0.03
$
$
$ kill -9 135 ; uptime; tail -f /var/log/messages
[ 580.280482] watchdog: watchdog0: watchdog did not stop!
00:09:40 up 9 min, load average: 0.00, 0.02, 0.03
Jan 1 00:08:36 buildroot daemon.info watchdog[135]: interface: no interface to check
Jan 1 00:08:36 buildroot daemon.info watchdog[135]: temperature: no sensors to check
Jan 1 00:08:36 buildroot daemon.info watchdog[135]: no test binary files
Jan 1 00:08:36 buildroot daemon.info watchdog[135]: no repair binary files
Jan 1 00:08:36 buildroot daemon.info watchdog[135]: error retry time-out = 60 seconds
Jan 1 00:08:36 buildroot daemon.info watchdog[135]: repair attempts = 1
Jan 1 00:08:36 buildroot daemon.info watchdog[135]: alive=/dev/watchdog heartbeat=[none] to=root no_act=no force=no
Jan 1 00:08:36 buildroot daemon.info watchdog[135]: watchdog now set to 20 seconds
Jan 1 00:08:36 buildroot daemon.info watchdog[135]: hardware watchdog identity: Synopsys DesignWare Watchdog
Jan 1 00:09:40 buildroot kern.crit kernel: [ 580.280482] watchdog: watchdog0: watchdog did not stop!
U-Boot 2019.04-linux4sam_6.2-icp (Sep 24 2021 - 09:49:43 +0200)
CPU: SAMA7
Crystal frequency: 0 MHz
CPU clock : 0 MHz
Master clock : 0 MHz
DRAM: 1 GiB
MMC: sdhci-host@e0830000: 0, emmc@e0830000: 1
Loading Environment from SPI Flash... SF: Detected sst26vf016b with page size 256 Bytes, erase size 4 KiB, total 2 MiB
OK
In: serial
Out: serial
Err: serial
Net: eth0: switch@0
Hit any key to stop autoboot: 0
m =>
Verify system reboot by running watchdog in foreground:
-
Add watchdog configurations to
/etc/watchdog.conffile. -
Run watchdog in foregroung using '-F' option in Busybox watchdog command as
watchdog -c /etc/watchdog.conf -F. -
Press
CTRL + zto suspend system. -
In this case, the Watchdog device is enabled but is no longer fed. After
watchdog-timeoutseconds, the system is reset by the Watchdog device.
$ ls -l /dev/watchdog
crw------- 1 root root 10, 130 Jan 1 00:00 /dev/watchdog
$
$ uptime
00:04:29 up 4 min, load average: 0.02, 0.11, 0.06
$
$
$ ps -ef | grep watchdog
22 root [watchdogd]
132 root grep watchdog
$
$ cat /etc/watchdog.conf
watchdog-device = /dev/watchdog
watchdog-timeout = 20
log-dir = /var/log/watchdog
file = /var/log/messages
change = 10
realtime = yes
priority = 1
$
$ watchdog -c /etc/watchdog.conf -F
watchdog: starting daemon (5.16):
watchdog: int=1s realtime=no sync=no load=0,0,0 soft=no
watchdog: memory not checked
watchdog: ping: no machine to check
watchdog: file: /var/log/messages:10
watchdog: pidfile: no server process to check
watchdog: interface: no interface to check
watchdog: temperature: no sensors to check
watchdog: no test binary files
watchdog: no repair binary files
watchdog: error retry time-out = 60 seconds
watchdog: repair attempts = 1
watchdog: alive=/dev/watchdog heartbeat=[none] to=root no_act=no force=no
watchdog: watchdog now set to 20 seconds
watchdog: hardware watchdog identity: Synopsys DesignWare Watchdog
watchdog: file /var/log/messages was not changed in 11 seconds (more than 10)
watchdog: file /var/log/messages was not changed in 11 seconds (more than 10)
watchdog: file /var/log/messages was not changed in 11 seconds (more than 10)
^Z[1]+ Stopped watchdog -c /etc/watchdog.conf -F
$
U-Boot 2019.04-linux4sam_6.2-icp (Sep 24 2021 - 09:49:43 +0200)
CPU: SAMA7
Crystal frequency: 0 MHz
CPU clock : 0 MHz
Master clock : 0 MHz
DRAM: 1 GiB
MMC: sdhci-host@e0830000: 0, emmc@e0830000: 1
Loading Environment from SPI Flash... SF: Detected sst26vf016b with page size 256 Bytes, erase size 4 KiB, total 2 MiB
OK
In: serial
Out: serial
Err: serial
Net: eth0: switch@0
Hit any key to stop autoboot: 0
m =>