diff options
author | Alec Berg <alecaberg@chromium.org> | 2013-11-20 11:38:11 -0800 |
---|---|---|
committer | chrome-internal-fetch <chrome-internal-fetch@google.com> | 2014-01-15 04:52:40 +0000 |
commit | 5edde63ac253c98ddb8a5c8584b766f09336d49c (patch) | |
tree | 5c4af6a0f63fecc638faec3d9123dce2fad75023 /chip/it83xx/hwtimer.c | |
parent | 727053a3761b52a60c94c9cfc75d2f842595cc55 (diff) | |
download | chrome-ec-5edde63ac253c98ddb8a5c8584b766f09336d49c.tar.gz |
ite: Watchdog module added
Watchdog module added. Off by default because of following limitations:
- When programming, the WD fires, and programming fails. For now, you
have to program twice.
BRANCH=none
BUG=chrome-os-partner:23575
TEST=Manually wrote in a while(1); and made sure watchdog warning
triggers first, prints IPC register, and then soon after the watchdog
timer resets the chip.
Signed-off-by: Alec Berg <alecaberg@chromium.org>
Change-Id: Ia83f58f3ae108f755d2f139ada22a22e2fbdc2fa
Reviewed-on: https://chromium-review.googlesource.com/177397
Reviewed-by: Vincent Palatin <vpalatin@chromium.org>
Diffstat (limited to 'chip/it83xx/hwtimer.c')
-rw-r--r-- | chip/it83xx/hwtimer.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/chip/it83xx/hwtimer.c b/chip/it83xx/hwtimer.c index cf4de26be8..3493843adc 100644 --- a/chip/it83xx/hwtimer.c +++ b/chip/it83xx/hwtimer.c @@ -13,6 +13,7 @@ #include "task.h" #include "timer.h" #include "util.h" +#include "watchdog.h" /* 128us (2^7 us) between 2 ticks */ #define TICK_INTERVAL_LOG2 7 @@ -64,6 +65,11 @@ void __hw_clock_source_set(uint32_t ts) static void __hw_clock_source_irq(void) { +#ifdef CONFIG_WATCHDOG + /* Determine interrupt number. */ + int irq = IT83XX_INTC_IVCT3 - 16; +#endif + /* * If this is a SW interrupt, then process the timers, but don't * increment the time_us. @@ -73,6 +79,18 @@ static void __hw_clock_source_irq(void) return; } +#ifdef CONFIG_WATCHDOG + /* + * Both the external timer for the watchdog warning and the HW timer + * go through this irq. So, if this interrupt was caused by watchdog + * warning timer, then call that function. + */ + if (irq == IT83XX_IRQ_EXT_TIMER3) { + watchdog_warning_irq(); + return; + } +#endif + /* clear interrupt status */ task_clear_pending_irq(IT83XX_IRQ_TMR_B0); |