summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--board/lwmon5/lwmon5.c18
-rw-r--r--include/asm-ppc/global_data.h3
-rw-r--r--include/configs/lwmon5.h1
3 files changed, 22 insertions, 0 deletions
diff --git a/board/lwmon5/lwmon5.c b/board/lwmon5/lwmon5.c
index e5fa25937b..b63fbdc0cd 100644
--- a/board/lwmon5/lwmon5.c
+++ b/board/lwmon5/lwmon5.c
@@ -476,6 +476,24 @@ int is_pci_host(struct pci_controller *hose)
void hw_watchdog_reset(void)
{
int val;
+#if defined(CONFIG_WD_MAX_RATE)
+ unsigned long long ct = get_ticks();
+
+ /*
+ * Don't allow watch-dog triggering more frequently than
+ * the predefined value CONFIG_WD_MAX_RATE [ticks].
+ */
+ if (ct >= gd->wdt_last) {
+ if ((ct - gd->wdt_last) < CONFIG_WD_MAX_RATE)
+ return;
+ } else {
+ /* Time base counter had been reset */
+ if (((unsigned long long)(-1) - gd->wdt_last + ct) <
+ CONFIG_WD_MAX_RATE)
+ return;
+ }
+ gd->wdt_last = get_ticks();
+#endif
/*
* Toggle watchdog output
diff --git a/include/asm-ppc/global_data.h b/include/asm-ppc/global_data.h
index e07092baa4..46576046a4 100644
--- a/include/asm-ppc/global_data.h
+++ b/include/asm-ppc/global_data.h
@@ -155,6 +155,9 @@ typedef struct global_data {
#if defined(CONFIG_LWMON) || defined(CONFIG_LWMON5)
unsigned long kbd_status;
#endif
+#if defined(CONFIG_WD_MAX_RATE)
+ unsigned long long wdt_last; /* trace watch-dog triggering rate */
+#endif
void **jt; /* jump table */
} gd_t;
diff --git a/include/configs/lwmon5.h b/include/configs/lwmon5.h
index ced7ba6f05..58f078b6d8 100644
--- a/include/configs/lwmon5.h
+++ b/include/configs/lwmon5.h
@@ -455,6 +455,7 @@
#define CONFIG_HW_WATCHDOG 1 /* Use external HW-Watchdog */
#define CONFIG_WD_PERIOD 40000 /* in usec */
+#define CONFIG_WD_MAX_RATE 66600 /* in ticks */
/*
* For booting Linux, the board info and command line data
OpenPOWER on IntegriCloud