summaryrefslogtreecommitdiff
path: root/core/cortex-m/panic.c
diff options
context:
space:
mode:
Diffstat (limited to 'core/cortex-m/panic.c')
-rw-r--r--core/cortex-m/panic.c22
1 files changed, 22 insertions, 0 deletions
diff --git a/core/cortex-m/panic.c b/core/cortex-m/panic.c
index d63a5e3d9a..64fd5b8db1 100644
--- a/core/cortex-m/panic.c
+++ b/core/cortex-m/panic.c
@@ -373,6 +373,28 @@ void exception_panic(void)
);
}
+void software_panic(uint32_t panic_reason, uint32_t panic_info)
+{
+ __asm__("mov " STRINGIFY(SOFTWARE_PANIC_INFO_REG) ", %0\n"
+ "mov " STRINGIFY(SOFTWARE_PANIC_REASON_REG) ", %1\n"
+ "bl exception_panic\n"
+ : : "r"(panic_info), "r"(panic_reason));
+}
+
+void panic_log_watchdog(void)
+{
+ uint32_t *lregs = pdata_ptr->cm.regs;
+
+ /* Watchdog reset, log panic cause */
+ memset(pdata_ptr, 0, sizeof(*pdata_ptr));
+ pdata_ptr->magic = PANIC_DATA_MAGIC;
+ pdata_ptr->struct_size = sizeof(*pdata_ptr);
+ pdata_ptr->struct_version = 2;
+ pdata_ptr->arch = PANIC_ARCH_CORTEX_M;
+
+ lregs[3] = PANIC_SW_WATCHDOG;
+}
+
void bus_fault_handler(void)
{
if (!bus_fault_ignored)