summaryrefslogtreecommitdiff
path: root/include/panic.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/panic.h')
-rw-r--r--include/panic.h53
1 files changed, 47 insertions, 6 deletions
diff --git a/include/panic.h b/include/panic.h
index 1984081dd7..d1099d6cce 100644
--- a/include/panic.h
+++ b/include/panic.h
@@ -17,15 +17,43 @@
extern "C" {
#endif
+enum cortex_panic_frame_registers {
+ CORTEX_PANIC_FRAME_REGISTER_R0 = 0,
+ CORTEX_PANIC_FRAME_REGISTER_R1,
+ CORTEX_PANIC_FRAME_REGISTER_R2,
+ CORTEX_PANIC_FRAME_REGISTER_R3,
+ CORTEX_PANIC_FRAME_REGISTER_R12,
+ CORTEX_PANIC_FRAME_REGISTER_LR,
+ CORTEX_PANIC_FRAME_REGISTER_PC,
+ CORTEX_PANIC_FRAME_REGISTER_PSR,
+ NUM_CORTEX_PANIC_FRAME_REGISTERS
+};
+
+enum cortex_panic_registers {
+ CORTEX_PANIC_REGISTER_PSP = 0,
+ CORTEX_PANIC_REGISTER_IPSR,
+ CORTEX_PANIC_REGISTER_MSP,
+ CORTEX_PANIC_REGISTER_R4,
+ CORTEX_PANIC_REGISTER_R5,
+ CORTEX_PANIC_REGISTER_R6,
+ CORTEX_PANIC_REGISTER_R7,
+ CORTEX_PANIC_REGISTER_R8,
+ CORTEX_PANIC_REGISTER_R9,
+ CORTEX_PANIC_REGISTER_R10,
+ CORTEX_PANIC_REGISTER_R11,
+ CORTEX_PANIC_REGISTER_LR,
+ NUM_CORTEX_PANIC_REGISTERS
+};
+
/* ARM Cortex-Mx registers saved on panic */
struct cortex_panic_data {
- uint32_t regs[12]; /* psp, ipsr, msp, r4-r11, lr(=exc_return).
- * In version 1, that was uint32_t regs[11] =
- * psp, ipsr, lr, r4-r11
- */
- uint32_t frame[8]; /* r0-r3, r12, lr, pc, xPSR */
+ /* See cortex_panic_registers enum for information about registers */
+ uint32_t regs[NUM_CORTEX_PANIC_REGISTERS];
+
+ /* See cortex_panic_frame_registers enum for more information */
+ uint32_t frame[NUM_CORTEX_PANIC_FRAME_REGISTERS];
- uint32_t mmfs;
+ uint32_t cfsr;
uint32_t bfar;
uint32_t mfar;
uint32_t shcsr;
@@ -160,6 +188,19 @@ void panic_set_reason(uint32_t reason, uint32_t info, uint8_t exception);
void panic_get_reason(uint32_t *reason, uint32_t *info, uint8_t *exception);
#endif
+#define HFSR_FLAG_ASSERT 3
+#define HFSR_FLAG_WATCHDOG 4
+
+/**
+ * Save code location in struct panic_data then reboot.
+ *
+ * @param func Function name (i.e. __func__). Stored in regs[3].
+ * @param file File path (i.e. __FILE__). Stored in regs[4].
+ * @param line Line number (i.e. __LINE__). Stored in HFSR[25:10].
+ */
+void panic_assert(const char *func, const char *file, uint16_t line)
+ __attribute__((noreturn));
+
/**
* Enable/disable bus fault handler
*