mirror of
https://github.com/torvalds/linux.git
synced 2024-12-28 05:41:55 +00:00
watchdog: imx7ulp_wdt: Fix RCS timeout issue
According to measure on i.MX7ULP and i.MX8ULP, the RCS done needs about 3400us and 6700us respectively. So current 20us timeout is not enough. When reconfiguring is on-going, unlock and configure CS will lead to unknown result. Increase the wait timeout value to 10ms and check the return value of RCS wait to fix the issue Signed-off-by: Ye Li <ye.li@nxp.com> Signed-off-by: Alice Guo <alice.guo@nxp.com> Reviewed-by: Jacky Bai <ping.bai@nxp.com> Acked-by: Jason Liu <jason.hui.liu@nxp.com> Reviewed-by: Guenter Roeck <linux@roeck-us.net> Link: https://lore.kernel.org/r/20220825083256.14565-5-alice.guo@oss.nxp.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
e809daec17
commit
52c4d05113
@ -39,7 +39,7 @@
|
||||
#define DEFAULT_TIMEOUT 60
|
||||
#define MAX_TIMEOUT 128
|
||||
#define WDOG_CLOCK_RATE 1000
|
||||
#define WDOG_WAIT_TIMEOUT 20
|
||||
#define WDOG_WAIT_TIMEOUT 10000
|
||||
|
||||
static bool nowayout = WATCHDOG_NOWAYOUT;
|
||||
module_param(nowayout, bool, 0000);
|
||||
@ -80,7 +80,7 @@ static int imx7ulp_wdt_enable(struct watchdog_device *wdog, bool enable)
|
||||
writel(val | WDOG_CS_EN, wdt->base + WDOG_CS);
|
||||
else
|
||||
writel(val & ~WDOG_CS_EN, wdt->base + WDOG_CS);
|
||||
imx7ulp_wdt_wait(wdt->base, WDOG_CS_RCS);
|
||||
ret = imx7ulp_wdt_wait(wdt->base, WDOG_CS_RCS);
|
||||
|
||||
enable_out:
|
||||
local_irq_enable();
|
||||
@ -127,7 +127,9 @@ static int imx7ulp_wdt_set_timeout(struct watchdog_device *wdog,
|
||||
if (ret)
|
||||
goto timeout_out;
|
||||
writel(val, wdt->base + WDOG_TOVAL);
|
||||
imx7ulp_wdt_wait(wdt->base, WDOG_CS_RCS);
|
||||
ret = imx7ulp_wdt_wait(wdt->base, WDOG_CS_RCS);
|
||||
if (ret)
|
||||
goto timeout_out;
|
||||
|
||||
wdog->timeout = timeout;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user