summaryrefslogtreecommitdiff
path: root/supervisor
diff options
context:
space:
mode:
authorScott Shawcroft <scott@tannewt.org>2019-05-09 10:15:28 -0700
committerScott Shawcroft <scott@tannewt.org>2019-05-09 10:15:28 -0700
commitb87565138ea2027625e69aee4cf1170606e1f40a (patch)
tree6f96ce043bf635593b60bd3cde9f2584515fc6d8 /supervisor
parent837d3f57eefe8189969dda6512f278b4fb76af55 (diff)
Rework safe mode so we can trigger on all resets
Diffstat (limited to 'supervisor')
-rw-r--r--supervisor/shared/safe_mode.c6
-rw-r--r--supervisor/shared/safe_mode.h1
2 files changed, 6 insertions, 1 deletions
diff --git a/supervisor/shared/safe_mode.c b/supervisor/shared/safe_mode.c
index bb4b99f84..d8d3ab379 100644
--- a/supervisor/shared/safe_mode.c
+++ b/supervisor/shared/safe_mode.c
@@ -76,6 +76,10 @@ safe_mode_t wait_for_safe_mode_reset(void) {
return NO_SAFE_MODE;
}
+void safe_mode_on_next_reset(safe_mode_t reason) {
+ port_set_saved_word(SAFE_MODE_DATA_GUARD | (reason << 8));
+}
+
// Don't inline this so it's easy to break on it from GDB.
void __attribute__((noinline,)) reset_into_safe_mode(safe_mode_t reason) {
if (current_safe_mode > BROWNOUT && reason > BROWNOUT) {
@@ -85,7 +89,7 @@ void __attribute__((noinline,)) reset_into_safe_mode(safe_mode_t reason) {
}
}
- port_set_saved_word(SAFE_MODE_DATA_GUARD | (reason << 8));
+ safe_mode_on_next_reset(reason);
reset_cpu();
}
diff --git a/supervisor/shared/safe_mode.h b/supervisor/shared/safe_mode.h
index b4ff1aa33..ee0723cff 100644
--- a/supervisor/shared/safe_mode.h
+++ b/supervisor/shared/safe_mode.h
@@ -42,6 +42,7 @@ typedef enum {
safe_mode_t wait_for_safe_mode_reset(void);
+void safe_mode_on_next_reset(safe_mode_t reason);
void reset_into_safe_mode(safe_mode_t reason);
void print_safe_mode_message(safe_mode_t reason);