summaryrefslogtreecommitdiff
path: root/core/cortex-m/watchdog.c
diff options
context:
space:
mode:
authorSimon Glass <sjg@chromium.org>2012-06-03 07:33:17 -0700
committerGerrit <chrome-bot@google.com>2012-06-15 13:39:22 -0700
commit9f2e621d8032199b727918f04430d5cd0951c0c3 (patch)
tree2adfa391c2fedad7ab015a0d59cddeec0a0c4dcd /core/cortex-m/watchdog.c
parent9c08e8994e8e09709b096a7e6f1cb17faa0ce52c (diff)
downloadchrome-ec-9f2e621d8032199b727918f04430d5cd0951c0c3.tar.gz
Move watchdog_trace() into the generic watchdog file
We want this function to be available for all chips, so move it into a generic place. The task_disable_irq() from the LM4 version can be left in watchdog_check(), to keep the watchdog_trace() function generic. BUG=chrome-os-partner:10145 TEST=build for all boards Change-Id: I98c60ce5958f1498b84a233ef04290a68a7838c5 Signed-off-by: Simon Glass <sjg@chromium.org> Reviewed-on: https://gerrit.chromium.org/gerrit/24397 Reviewed-by: Randall Spangler <rspangler@chromium.org> Reviewed-by: Vincent Palatin <vpalatin@chromium.org>
Diffstat (limited to 'core/cortex-m/watchdog.c')
-rw-r--r--core/cortex-m/watchdog.c38
1 files changed, 38 insertions, 0 deletions
diff --git a/core/cortex-m/watchdog.c b/core/cortex-m/watchdog.c
index e0a58953fb..3ad89e94ab 100644
--- a/core/cortex-m/watchdog.c
+++ b/core/cortex-m/watchdog.c
@@ -5,10 +5,48 @@
/* Watchdog common code */
+#include "board.h"
+#include "common.h"
+#include "config.h"
+#include "registers.h"
+#include "task.h"
#include "timer.h"
+#include "uart.h"
#include "watchdog.h"
+void watchdog_trace(uint32_t excep_lr, uint32_t excep_sp)
+{
+ uint32_t psp;
+ uint32_t *stack;
+
+ asm("mrs %0, psp" : "=r"(psp));
+ if ((excep_lr & 0xf) == 1) {
+ /* we were already in exception context */
+ stack = (uint32_t *)excep_sp;
+ } else {
+ /* we were in task context */
+ stack = (uint32_t *)psp;
+ }
+
+ uart_printf("### WATCHDOG PC=%08x / LR=%08x / pSP=%08x ",
+ stack[6], stack[5], psp);
+ if ((excep_lr & 0xf) == 1)
+ uart_puts("(exc) ###\n");
+ else
+ uart_printf("(task %d) ###\n", task_from_addr(psp));
+ /* Ensure this debug message is always flushed to the UART */
+ uart_emergency_flush();
+
+ /* If we are blocked in a high priority IT handler, the following debug
+ * messages might not appear but they are useless in that situation. */
+ timer_print_info();
+ uart_emergency_flush();
+ task_print_list();
+ uart_emergency_flush();
+}
+
+
/* Low priority task to reload the watchdog */
void watchdog_task(void)
{