summaryrefslogtreecommitdiff
path: root/core/cortex-m0/watchdog.c
diff options
context:
space:
mode:
authorVincent Palatin <vpalatin@chromium.org>2014-03-01 10:20:47 -0800
committerchrome-internal-fetch <chrome-internal-fetch@google.com>2014-03-11 05:52:41 +0000
commit0f73a129b42acfcad843203b602fbbcc8894c614 (patch)
tree9531fae7a8d9c3290973fe5b5ee47e57cd485546 /core/cortex-m0/watchdog.c
parent7aab81edce830e15134b52256ad3186e08951b10 (diff)
downloadchrome-ec-0f73a129b42acfcad843203b602fbbcc8894c614.tar.gz
Add Cortex-M0 core support
The Cortex-M0 core is based on ARMv6-M instruction set rather than ARMv7-M as Cortex-M3 and M4. Signed-off-by: Vincent Palatin <vpalatin@chromium.org> BRANCH=none BUG=none TEST=run console on STM32F072, and pass all available unit-tests on target. Change-Id: I9bdf6637132ba4a3e739d388580a72b4c84e930e Reviewed-on: https://chromium-review.googlesource.com/188982 Reviewed-by: Vincent Palatin <vpalatin@chromium.org> Commit-Queue: Vincent Palatin <vpalatin@chromium.org> Tested-by: Vincent Palatin <vpalatin@chromium.org>
Diffstat (limited to 'core/cortex-m0/watchdog.c')
-rw-r--r--core/cortex-m0/watchdog.c40
1 files changed, 40 insertions, 0 deletions
diff --git a/core/cortex-m0/watchdog.c b/core/cortex-m0/watchdog.c
new file mode 100644
index 0000000000..53172dd2a6
--- /dev/null
+++ b/core/cortex-m0/watchdog.c
@@ -0,0 +1,40 @@
+/* Copyright (c) 2014 The Chromium OS Authors. All rights reserved.
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+/* Watchdog common code */
+
+#include "common.h"
+#include "panic.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;
+ }
+
+ panic_printf("### WATCHDOG PC=%08x / LR=%08x / pSP=%08x ",
+ stack[6], stack[5], psp);
+ if ((excep_lr & 0xf) == 1)
+ panic_puts("(exc) ###\n");
+ else
+ panic_printf("(task %d) ###\n", task_get_current());
+
+ /* 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();
+ task_print_list();
+}