summaryrefslogtreecommitdiff
path: root/drivers/watchdog
diff options
context:
space:
mode:
authorRenn Wu <rewu@nvidia.com>2015-02-03 10:27:18 +0800
committerMatthew Pedro <mapedro@nvidia.com>2015-06-08 12:01:04 -0700
commitb1de4caf2f12e1bc9c3a4e08dd60b5de53b7520a (patch)
tree727935d014482a714ef9808ce4245ca4a6b19efc /drivers/watchdog
parentd89af238e13dbd1f2a01cb5392902313ad367ef2 (diff)
watchdog: use FIQ WDT for soft lockup stack dump
Using Tegra WDT to trigger FIQ when system is in soft lockup. Bug 1581432 Change-Id: I853a88a3f6e9402c978db18c5a63e903c582040a Signed-off-by: Renn Wu <rewu@nvidia.com> Reviewed-on: http://git-master/r/265871 (cherry picked from commit f115f435d471af22ddec5e9d969662f79193f846) Reviewed-on: http://git-master/r/680353 GVS: Gerrit_Virtual_Submit Reviewed-by: Bibek Basu <bbasu@nvidia.com> Reviewed-by: Winnie Hsu <whsu@nvidia.com>
Diffstat (limited to 'drivers/watchdog')
-rw-r--r--drivers/watchdog/tegra_wdt.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/drivers/watchdog/tegra_wdt.c b/drivers/watchdog/tegra_wdt.c
index d83adeff021e..59a410038569 100644
--- a/drivers/watchdog/tegra_wdt.c
+++ b/drivers/watchdog/tegra_wdt.c
@@ -157,6 +157,11 @@ static irqreturn_t tegra_wdt_interrupt(int irq, void *dev_id)
#define PMC_RST_STATUS 0x1b4
struct tegra_wdt *tegra_wdt[MAX_NR_CPU_WDT];
+/*
+ * In order to generate the stack dump for the CPU which has IRQ off, we must
+ * use the FIQ. TEGRA WDT can generate the FIQ if we do not ACK the IRQ.
+ */
+bool wdt_nmi_ack_off;
static inline void tegra_wdt_ping(struct tegra_wdt *wdt)
{
@@ -170,7 +175,8 @@ static inline void tegra_wdt_ping(struct tegra_wdt *wdt)
#if !defined(CONFIG_TRUSTED_FOUNDATIONS) && \
defined(CONFIG_ARCH_TEGRA_12x_SOC) && defined(CONFIG_FIQ_DEBUGGER)
- writel(WDT_CMD_START_COUNTER, wdt->wdt_avp_source + WDT_CMD);
+ if (wdt_nmi_ack_off == false)
+ writel(WDT_CMD_START_COUNTER, wdt->wdt_avp_source + WDT_CMD);
#endif
}