diff options
Diffstat (limited to 'core/cortex-m/panic.c')
-rw-r--r-- | core/cortex-m/panic.c | 22 |
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) |