summaryrefslogtreecommitdiff
path: root/drivers/watchdog
diff options
context:
space:
mode:
authorGregory Oakes <gregory.oakes@amd.com>2023-03-16 15:13:12 -0500
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2023-05-30 14:03:16 +0100
commitae9e65319f99b9c8211814341121a7189b6c10cc (patch)
treee2e3f471ce1b5e31c496455dfd8a9b5785cb130e /drivers/watchdog
parent7cd46930b8bf37b84777410ac21bfdf1179021d5 (diff)
downloadlinux-ae9e65319f99b9c8211814341121a7189b6c10cc.tar.gz
linux-ae9e65319f99b9c8211814341121a7189b6c10cc.tar.bz2
linux-ae9e65319f99b9c8211814341121a7189b6c10cc.zip
watchdog: sp5100_tco: Immediately trigger upon starting.
commit 4eda19cc8a29cde3580ed73bf11dc73b4e757697 upstream. The watchdog countdown is supposed to begin when the device file is opened. Instead, it would begin countdown upon the first write to or close of the device file. Now, the ping operation is called within the start operation which ensures the countdown begins. From experimenation, it does not appear possible to do this with a single write including both the start bit and the trigger bit. So, it is done as two distinct writes. Signed-off-by: Gregory Oakes <gregory.oakes@amd.com> Reviewed-by: Guenter Roeck <linux@roeck-us.net> Link: https://lore.kernel.org/r/20230316201312.17538-1-gregory.oakes@amd.com Signed-off-by: Guenter Roeck <linux@roeck-us.net> Signed-off-by: Wim Van Sebroeck <wim@linux-watchdog.org> Cc: Mario Limonciello <mario.limonciello@amd.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/watchdog')
-rw-r--r--drivers/watchdog/sp5100_tco.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/watchdog/sp5100_tco.c b/drivers/watchdog/sp5100_tco.c
index fb426b7d81da..14f8d8d90920 100644
--- a/drivers/watchdog/sp5100_tco.c
+++ b/drivers/watchdog/sp5100_tco.c
@@ -115,6 +115,10 @@ static int tco_timer_start(struct watchdog_device *wdd)
val |= SP5100_WDT_START_STOP_BIT;
writel(val, SP5100_WDT_CONTROL(tco->tcobase));
+ /* This must be a distinct write. */
+ val |= SP5100_WDT_TRIGGER_BIT;
+ writel(val, SP5100_WDT_CONTROL(tco->tcobase));
+
return 0;
}