diff options
Diffstat (limited to 'core/cortex-m/watchdog.c')
-rw-r--r-- | core/cortex-m/watchdog.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/core/cortex-m/watchdog.c b/core/cortex-m/watchdog.c index a67903df62..4da32d26d0 100644 --- a/core/cortex-m/watchdog.c +++ b/core/cortex-m/watchdog.c @@ -7,10 +7,14 @@ #include "common.h" #include "panic.h" +#include "system.h" #include "task.h" #include "timer.h" #include "watchdog.h" +/* Panic data goes at the end of RAM. */ +static struct panic_data * const pdata_ptr = PANIC_DATA_PTR; + void __keep watchdog_trace(uint32_t excep_lr, uint32_t excep_sp) { uint32_t psp; @@ -28,6 +32,13 @@ void __keep watchdog_trace(uint32_t excep_lr, uint32_t excep_sp) panic_set_reason(PANIC_SW_WATCHDOG, stack[6], (excep_lr & 0xf) == 1 ? 0xff : task_get_current()); + /* + * Store LR to cm.hfsr. It is for HardFault status register but it is + * probably the least informative register used by + * chip_panic_data_backup of the existing RO. + */ + pdata_ptr->cm.hfsr = stack[5]; + panic_printf("### WATCHDOG PC=%08x / LR=%08x / pSP=%08x ", stack[6], stack[5], psp); if ((excep_lr & 0xf) == 1) |