summary refs log tree commit diff
path: root/platforms/arm_atsam
diff options
context:
space:
mode:
authorRyan <fauxpark@gmail.com>2021-12-27 21:10:07 +1100
committerGitHub <noreply@github.com>2021-12-27 21:10:07 +1100
commit6bc870d899c474bce82457699ec4b753d1538123 (patch)
tree600b8dda41f4b90f98199d4afd3037374a679a74 /platforms/arm_atsam
parentcffe143ca20d938c910b59410dcd3d96dd7d433b (diff)
Refactor `bootloader_jump()` implementations (#15450)
* Refactor `bootloader_jump()` implementations

* Fix tests?

* Rename `atmel-samba` to `md-boot`
Diffstat (limited to 'platforms/arm_atsam')
-rw-r--r--platforms/arm_atsam/bootloaders/md_boot.c (renamed from platforms/arm_atsam/bootloader.c)43
1 files changed, 26 insertions, 17 deletions
diff --git a/platforms/arm_atsam/bootloader.c b/platforms/arm_atsam/bootloaders/md_boot.c
index 9015b00aab..fe07389487 100644
--- a/platforms/arm_atsam/bootloader.c
+++ b/platforms/arm_atsam/bootloaders/md_boot.c
@@ -15,13 +15,18 @@
  */
 
 #include "bootloader.h"
+
 #include "samd51j18a.h"
-#include "md_bootloader.h"
 
-// Set watchdog timer to reset. Directs the bootloader to stay in programming mode.
-void bootloader_jump(void) {
 #ifdef KEYBOARD_massdrop_ctrl
-    // CTRL keyboards released with bootloader version below must use RAM method. Otherwise use WDT method.
+// WARNING: These are only for CTRL bootloader release "v2.18Jun 22 2018 17:28:08" for bootloader_jump support
+extern uint32_t _eram;
+
+#define BOOTLOADER_MAGIC 0x3B9ACA00
+#define MAGIC_ADDR (uint32_t *)((intptr_t)(&_eram) - 4)
+
+// CTRL keyboards released with bootloader version below must use RAM method. Otherwise use WDT method.
+void bootloader_jump(void) {
     uint8_t  ver_ram_method[] = "v2.18Jun 22 2018 17:28:08";  // The version to match (NULL terminated by compiler)
     uint8_t *ver_check        = ver_ram_method;               // Pointer to version match string for traversal
     uint8_t *ver_rom          = (uint8_t *)0x21A0;            // Pointer to address in ROM where this specific bootloader version would exist
@@ -34,24 +39,28 @@ void bootloader_jump(void) {
     if (!*ver_check) {                   // If check version pointer is NULL, all characters have matched
         *MAGIC_ADDR = BOOTLOADER_MAGIC;  // Set magic number into RAM
         NVIC_SystemReset();              // Perform system reset
-        while (1) {
-        }  // Won't get here
+
+        while (1);  // Won't get here
     }
-#endif
+}
 
+#else
+
+// Set watchdog timer to reset. Directs the bootloader to stay in programming mode.
+void bootloader_jump(void) {
     WDT->CTRLA.bit.ENABLE = 0;
-    while (WDT->SYNCBUSY.bit.ENABLE) {
-    }
-    while (WDT->CTRLA.bit.ENABLE) {
-    }
+
+    while (WDT->SYNCBUSY.bit.ENABLE);
+    while (WDT->CTRLA.bit.ENABLE);
+
     WDT->CONFIG.bit.WINDOW   = 0;
     WDT->CONFIG.bit.PER      = 0;
     WDT->EWCTRL.bit.EWOFFSET = 0;
     WDT->CTRLA.bit.ENABLE    = 1;
-    while (WDT->SYNCBUSY.bit.ENABLE) {
-    }
-    while (!WDT->CTRLA.bit.ENABLE) {
-    }
-    while (1) {
-    }  // Wait on timeout
+
+    while (WDT->SYNCBUSY.bit.ENABLE);
+    while (!WDT->CTRLA.bit.ENABLE);
+
+    while (1);  // Wait on timeout
 }
+#endif