Commit 0e36a09f authored by Shruthi Sanil's avatar Shruthi Sanil Committed by Wim Van Sebroeck
Browse files

watchdog: keembay: Clear either the TO or TH interrupt bit



During the interrupt service routine of the TimeOut interrupt and
the ThresHold interrupt, the respective interrupt clear bit
have to be cleared and not both.

Fixes: fa0f8d51 ("watchdog: Add watchdog driver for Intel Keembay Soc")
Reviewed-by: default avatarGuenter Roeck <linux@roeck-us.net>
Reviewed-by: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Tested-by: default avatarKris Pan <kris.pan@intel.com>
Signed-off-by: default avatarShruthi Sanil <shruthi.sanil@intel.com>
Link: https://lore.kernel.org/r/20210517174953.19404-5-shruthi.sanil@intel.com


Signed-off-by: default avatarGuenter Roeck <linux@roeck-us.net>
Signed-off-by: default avatarWim Van Sebroeck <wim@linux-watchdog.org>
parent 75f6c56d
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -23,7 +23,8 @@
#define TIM_WDOG_EN		0x8
#define TIM_SAFE		0xc

#define WDT_ISR_MASK		GENMASK(9, 8)
#define WDT_TH_INT_MASK		BIT(8)
#define WDT_TO_INT_MASK		BIT(9)
#define WDT_ISR_CLEAR		0x8200ff18
#define WDT_UNLOCK		0xf1d0dead
#define WDT_LOAD_MAX		U32_MAX
@@ -142,7 +143,7 @@ static irqreturn_t keembay_wdt_to_isr(int irq, void *dev_id)
	struct arm_smccc_res res;

	keembay_wdt_writel(wdt, TIM_WATCHDOG, 1);
	arm_smccc_smc(WDT_ISR_CLEAR, WDT_ISR_MASK, 0, 0, 0, 0, 0, 0, &res);
	arm_smccc_smc(WDT_ISR_CLEAR, WDT_TO_INT_MASK, 0, 0, 0, 0, 0, 0, &res);
	dev_crit(wdt->wdd.parent, "Intel Keem Bay non-sec wdt timeout.\n");
	emergency_restart();

@@ -156,7 +157,7 @@ static irqreturn_t keembay_wdt_th_isr(int irq, void *dev_id)

	keembay_wdt_set_pretimeout(&wdt->wdd, 0x0);

	arm_smccc_smc(WDT_ISR_CLEAR, WDT_ISR_MASK, 0, 0, 0, 0, 0, 0, &res);
	arm_smccc_smc(WDT_ISR_CLEAR, WDT_TH_INT_MASK, 0, 0, 0, 0, 0, 0, &res);
	dev_crit(wdt->wdd.parent, "Intel Keem Bay non-sec wdt pre-timeout.\n");
	watchdog_notify_pretimeout(&wdt->wdd);