summaryrefslogtreecommitdiffstats
path: root/platforms/chibios/boards/GENERIC_STM32_H723XG/board/extra.c
diff options
context:
space:
mode:
Diffstat (limited to 'platforms/chibios/boards/GENERIC_STM32_H723XG/board/extra.c')
-rwxr-xr-xplatforms/chibios/boards/GENERIC_STM32_H723XG/board/extra.c36
1 files changed, 36 insertions, 0 deletions
diff --git a/platforms/chibios/boards/GENERIC_STM32_H723XG/board/extra.c b/platforms/chibios/boards/GENERIC_STM32_H723XG/board/extra.c
new file mode 100755
index 0000000000..fce0b4abad
--- /dev/null
+++ b/platforms/chibios/boards/GENERIC_STM32_H723XG/board/extra.c
@@ -0,0 +1,36 @@
+// Copyright 2023 Nick Brassel (@tzarc)
+// SPDX-License-Identifier: GPL-2.0-or-later
+#include <hal.h>
+#define BOOTLOADER_MAGIC 0xDEADBEEF
+
+////////////////////////////////////////////////////////////////////////////////
+// Different signalling for bootloader entry
+// - RAM is cleared on reset, so we can't use the usual __ram0_end__ symbol.
+// - Use backup registers in the RTC peripheral to store the magic value instead.
+
+static inline void enable_backup_register_access(void) {
+ PWR->CR1 |= PWR_CR1_DBP;
+}
+
+static inline void disable_backup_register_access(void) {
+ PWR->CR1 &= ~PWR_CR1_DBP;
+}
+
+void bootloader_marker_enable(void) {
+ enable_backup_register_access();
+ RTC->BKP0R = BOOTLOADER_MAGIC;
+ disable_backup_register_access();
+}
+
+bool bootloader_marker_active(void) {
+ enable_backup_register_access();
+ bool ret = RTC->BKP0R == BOOTLOADER_MAGIC;
+ disable_backup_register_access();
+ return ret;
+}
+
+void bootloader_marker_disable(void) {
+ enable_backup_register_access();
+ RTC->BKP0R = 0;
+ disable_backup_register_access();
+}