mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-05 01:54:09 +08:00
watchdog: rti_wdt: Fix calculation and evaluation of preset heartbeat
This ensures that the same value is read back as was eventually programmed when using seconds as accuracy. Even then, comparing the more precise heartbeat_ms against heartbeat in seconds will almost never provide a match and will needlessly raise a warning. Fix by comparing apples to apples. Tested in combination with U-Boot as watchdog starter. Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com> Reviewed-by: Guenter Roeck <linux@roeck-us.net> Link: https://lore.kernel.org/r/6a4b54ac-9588-e172-c4c7-b91d524a851e@siemens.com Signed-off-by: Guenter Roeck <linux@roeck-us.net> Signed-off-by: Wim Van Sebroeck <wim@linux-watchdog.org>
This commit is contained in:
parent
95d0eee971
commit
c83f643878
@ -253,6 +253,7 @@ static int rti_wdt_probe(struct platform_device *pdev)
|
||||
}
|
||||
|
||||
if (readl(wdt->base + RTIDWDCTRL) == WDENABLE_KEY) {
|
||||
int preset_heartbeat;
|
||||
u32 time_left_ms;
|
||||
u64 heartbeat_ms;
|
||||
u32 wsize;
|
||||
@ -263,11 +264,12 @@ static int rti_wdt_probe(struct platform_device *pdev)
|
||||
heartbeat_ms <<= WDT_PRELOAD_SHIFT;
|
||||
heartbeat_ms *= 1000;
|
||||
do_div(heartbeat_ms, wdt->freq);
|
||||
if (heartbeat_ms != heartbeat * 1000)
|
||||
preset_heartbeat = heartbeat_ms + 500;
|
||||
preset_heartbeat /= 1000;
|
||||
if (preset_heartbeat != heartbeat)
|
||||
dev_warn(dev, "watchdog already running, ignoring heartbeat config!\n");
|
||||
|
||||
heartbeat = heartbeat_ms;
|
||||
heartbeat /= 1000;
|
||||
heartbeat = preset_heartbeat;
|
||||
|
||||
wsize = readl(wdt->base + RTIWWDSIZECTRL);
|
||||
ret = rti_wdt_setup_hw_hb(wdd, wsize);
|
||||
|
Loading…
Reference in New Issue
Block a user