]> git.gir.st - tmk_keyboard.git/blob - tool/chibios/ch-bootloader-jump.patch
Squashed 'tmk_core/' changes from d5c5ac6..8da1898
[tmk_keyboard.git] / tool / chibios / ch-bootloader-jump.patch
1 diff --git a/os/common/ports/ARMCMx/compilers/GCC/crt0_v6m.s b/os/common/ports/ARMCMx/compilers/GCC/crt0_v6m.s
2 index 51a79bb..42d07bd 100644
3 --- a/os/common/ports/ARMCMx/compilers/GCC/crt0_v6m.s
4 +++ b/os/common/ports/ARMCMx/compilers/GCC/crt0_v6m.s
5 @@ -105,6 +105,13 @@
6 #define CRT0_CALL_DESTRUCTORS TRUE
7 #endif
8
9 +/**
10 + * @brief Magic number for jumping to bootloader.
11 + */
12 +#if !defined(MAGIC_BOOTLOADER_NUMBER) || defined(__DOXYGEN__)
13 +#define MAGIC_BOOTLOADER_NUMBER 0xDEADBEEF
14 +#endif
15 +
16 /*===========================================================================*/
17 /* Code section. */
18 /*===========================================================================*/
19 @@ -124,6 +131,17 @@
20 .thumb_func
21 .global Reset_Handler
22 Reset_Handler:
23 +
24 +#ifdef STM32_BOOTLOADER_ADDRESS
25 + /* jump to bootloader code */
26 + ldr r0, =__ram0_end__-4
27 + ldr r1, =MAGIC_BOOTLOADER_NUMBER
28 + ldr r2, [r0, #0]
29 + str r0, [r0, #0] /* erase stored magic */
30 + cmp r2, r1
31 + beq Bootloader_Jump
32 +#endif /* STM32_BOOTLOADER_ADDRESS */
33 +
34 /* Interrupts are globally masked initially.*/
35 cpsid i
36
37 @@ -242,6 +260,21 @@ endfiniloop:
38 ldr r1, =__default_exit
39 bx r1
40
41 +#ifdef STM32_BOOTLOADER_ADDRESS
42 +/*
43 + * Jump-to-bootloader function.
44 + */
45 +
46 + .align 2
47 + .thumb_func
48 +Bootloader_Jump:
49 + ldr r0, =STM32_BOOTLOADER_ADDRESS
50 + ldr r1, [r0, #0]
51 + mov sp, r1
52 + ldr r0, [r0, #4]
53 + bx r0
54 +#endif /* STM32_BOOTLOADER_ADDRESS */
55 +
56 #endif
57
58 /** @} */
59 diff --git a/os/common/ports/ARMCMx/compilers/GCC/crt0_v7m.s b/os/common/ports/ARMCMx/compilers/GCC/crt0_v7m.s
60 index 4812a29..dca9f88 100644
61 --- a/os/common/ports/ARMCMx/compilers/GCC/crt0_v7m.s
62 +++ b/os/common/ports/ARMCMx/compilers/GCC/crt0_v7m.s
63 @@ -140,6 +140,13 @@
64 #define CRT0_CPACR_INIT 0x00F00000
65 #endif
66
67 +/**
68 + * @brief Magic number for jumping to bootloader.
69 + */
70 +#if !defined(MAGIC_BOOTLOADER_NUMBER) || defined(__DOXYGEN__)
71 +#define MAGIC_BOOTLOADER_NUMBER 0xDEADBEEF
72 +#endif
73 +
74 /*===========================================================================*/
75 /* Code section. */
76 /*===========================================================================*/
77 @@ -164,6 +171,17 @@
78 .thumb_func
79 .global Reset_Handler
80 Reset_Handler:
81 +
82 +#ifdef STM32_BOOTLOADER_ADDRESS
83 + /* jump to bootloader code */
84 + ldr r0, =__ram0_end__-4
85 + ldr r1, =MAGIC_BOOTLOADER_NUMBER
86 + ldr r2, [r0, #0]
87 + str r0, [r0, #0] /* erase stored magic */
88 + cmp r2, r1
89 + beq Bootloader_Jump
90 +#endif /* STM32_BOOTLOADER_ADDRESS */
91 +
92 /* Interrupts are globally masked initially.*/
93 cpsid i
94
95 @@ -305,6 +323,21 @@ endfiniloop:
96 /* Branching to the defined exit handler.*/
97 b __default_exit
98
99 +#ifdef STM32_BOOTLOADER_ADDRESS
100 +/*
101 + * Jump-to-bootloader function.
102 + */
103 +
104 + .align 2
105 + .thumb_func
106 +Bootloader_Jump:
107 + ldr r0, =STM32_BOOTLOADER_ADDRESS
108 + ldr r1, [r0, #0]
109 + mov sp, r1
110 + ldr r0, [r0, #4]
111 + bx r0
112 +#endif /* STM32_BOOTLOADER_ADDRESS */
113 +
114 #endif /* !defined(__DOXYGEN__) */
115
116 /** @} */
Imprint / Impressum