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

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.comSigned-off-by: default avatarGuenter Roeck <linux@roeck-us.net>
Signed-off-by: default avatarWim Van Sebroeck <wim@linux-watchdog.org>
parent 75f6c56d
...@@ -23,7 +23,8 @@ ...@@ -23,7 +23,8 @@
#define TIM_WDOG_EN 0x8 #define TIM_WDOG_EN 0x8
#define TIM_SAFE 0xc #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_ISR_CLEAR 0x8200ff18
#define WDT_UNLOCK 0xf1d0dead #define WDT_UNLOCK 0xf1d0dead
#define WDT_LOAD_MAX U32_MAX #define WDT_LOAD_MAX U32_MAX
...@@ -142,7 +143,7 @@ static irqreturn_t keembay_wdt_to_isr(int irq, void *dev_id) ...@@ -142,7 +143,7 @@ static irqreturn_t keembay_wdt_to_isr(int irq, void *dev_id)
struct arm_smccc_res res; struct arm_smccc_res res;
keembay_wdt_writel(wdt, TIM_WATCHDOG, 1); 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"); dev_crit(wdt->wdd.parent, "Intel Keem Bay non-sec wdt timeout.\n");
emergency_restart(); emergency_restart();
...@@ -156,7 +157,7 @@ static irqreturn_t keembay_wdt_th_isr(int irq, void *dev_id) ...@@ -156,7 +157,7 @@ static irqreturn_t keembay_wdt_th_isr(int irq, void *dev_id)
keembay_wdt_set_pretimeout(&wdt->wdd, 0x0); 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"); dev_crit(wdt->wdd.parent, "Intel Keem Bay non-sec wdt pre-timeout.\n");
watchdog_notify_pretimeout(&wdt->wdd); watchdog_notify_pretimeout(&wdt->wdd);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment