summaryrefslogtreecommitdiff
path: root/chip/lm4/system.c
diff options
context:
space:
mode:
Diffstat (limited to 'chip/lm4/system.c')
-rw-r--r--chip/lm4/system.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/chip/lm4/system.c b/chip/lm4/system.c
index 75e7d556ec..bdb15d3861 100644
--- a/chip/lm4/system.c
+++ b/chip/lm4/system.c
@@ -25,7 +25,8 @@ enum hibdata_index {
#ifdef CONFIG_SOFTWARE_PANIC
HIBDATA_INDEX_SAVED_PANIC_REASON, /* Saved panic reason */
HIBDATA_INDEX_SAVED_PANIC_INFO, /* Saved panic data */
- HIBDATA_INDEX_SAVED_PANIC_EXCEPTION /* Saved panic exception code */
+ HIBDATA_INDEX_SAVED_PANIC_EXCEPTION,/* Saved panic exception code */
+ HIBDATA_INDEX_SAVED_PANIC_FLAGS, /* Saved panic flags */
#endif
};
@@ -439,7 +440,7 @@ void system_pre_init(void)
uint32_t hibctl;
#ifdef CONFIG_SOFTWARE_PANIC
uint32_t reason, info;
- uint8_t exception;
+ uint8_t exception, panic_flags;
#endif
/*
@@ -502,11 +503,15 @@ void system_pre_init(void)
reason = hibdata_read(HIBDATA_INDEX_SAVED_PANIC_REASON);
info = hibdata_read(HIBDATA_INDEX_SAVED_PANIC_INFO);
exception = hibdata_read(HIBDATA_INDEX_SAVED_PANIC_EXCEPTION);
+ panic_flags = hibdata_read(HIBDATA_INDEX_SAVED_PANIC_FLAGS);
+
if (reason || info || exception) {
panic_set_reason(reason, info, exception);
+ panic_get_data()->flags = panic_flags;
hibdata_write(HIBDATA_INDEX_SAVED_PANIC_REASON, 0);
hibdata_write(HIBDATA_INDEX_SAVED_PANIC_INFO, 0);
hibdata_write(HIBDATA_INDEX_SAVED_PANIC_EXCEPTION, 0);
+ hibdata_write(HIBDATA_INDEX_SAVED_PANIC_FLAGS, 0);
}
#endif
@@ -544,13 +549,16 @@ void system_reset(int flags)
if (flags & SYSTEM_RESET_HARD) {
#ifdef CONFIG_SOFTWARE_PANIC
uint32_t reason, info;
- uint8_t exception;
+ uint8_t exception, panic_flags;
+
+ panic_flags = panic_get_data()->flags;
/* Panic data will be wiped by hard reset, so save it */
panic_get_reason(&reason, &info, &exception);
hibdata_write(HIBDATA_INDEX_SAVED_PANIC_REASON, reason);
hibdata_write(HIBDATA_INDEX_SAVED_PANIC_INFO, info);
hibdata_write(HIBDATA_INDEX_SAVED_PANIC_EXCEPTION, exception);
+ hibdata_write(HIBDATA_INDEX_SAVED_PANIC_FLAGS, panic_flags);
#endif
/*