diff options
author | Stepan Moskovchenko <stepanm@codeaurora.org> | 2015-06-22 20:00:34 -0700 |
---|---|---|
committer | Rohit Vaswani <rvaswani@codeaurora.org> | 2016-03-01 12:22:23 -0800 |
commit | 5acff0a6d486e4ad5e67a1c512e86b22014f3401 (patch) | |
tree | aa9caf74d83b5bf7e5ee97a5e6ef1e37e76df5dc /drivers | |
parent | 67dbe9f83b51b916954d2b40df532899aac80f84 (diff) |
soc: qcom: watchdog_v2: Increase timeout for forced bites
Though we configure the watchdog timeout to be only one
tick when deliberately trying to force a watchdog bite,
the watchdog bite interrupt may be processed asynchronously
by the secure environment on a different CPU. Therefore, we
need to increase the amount of time we spend waiting for
the watchdog bite to happen before falling back on other
reset methods, to avoid a race condition between the
fallback reset code and the secure environment itself.
Change-Id: I73de0abbf8cdd77f22374886f4a89b25743b86eb
Signed-off-by: Stepan Moskovchenko <stepanm@codeaurora.org>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/soc/qcom/watchdog_v2.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/drivers/soc/qcom/watchdog_v2.c b/drivers/soc/qcom/watchdog_v2.c index 82e8219fb827..761259842393 100644 --- a/drivers/soc/qcom/watchdog_v2.c +++ b/drivers/soc/qcom/watchdog_v2.c @@ -386,6 +386,24 @@ static int msm_watchdog_remove(struct platform_device *pdev) return 0; } +void msm_trigger_wdog_bite(void) +{ + if (!wdog_data) + return; + pr_info("Causing a watchdog bite!"); + __raw_writel(1, wdog_data->base + WDT0_BITE_TIME); + mb(); + __raw_writel(1, wdog_data->base + WDT0_RST); + mb(); + /* Delay to make sure bite occurs */ + mdelay(2000); + pr_err("Wdog - STS: 0x%x, CTL: 0x%x, BARK TIME: 0x%x, BITE TIME: 0x%x", + __raw_readl(wdog_data->base + WDT0_STS), + __raw_readl(wdog_data->base + WDT0_EN), + __raw_readl(wdog_data->base + WDT0_BARK_TIME), + __raw_readl(wdog_data->base + WDT0_BITE_TIME)); +} + static irqreturn_t wdog_bark_handler(int irq, void *dev_id) { struct msm_watchdog_data *wdog_dd = (struct msm_watchdog_data *)dev_id; |