Skip to content

Commit f6e881e

Browse files
authored
Merge pull request #4123 from jepler/raspberrypi-reset-bootloader
raspberrypi: implement reset, reset_to_bootloader
2 parents adaf43d + 6e153d9 commit f6e881e

File tree

2 files changed

+22
-3
lines changed

2 files changed

+22
-3
lines changed

ports/raspberrypi/common-hal/microcontroller/__init__.c

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,12 +35,16 @@
3535
#include "shared-bindings/microcontroller/__init__.h"
3636
#include "shared-bindings/microcontroller/Pin.h"
3737
#include "shared-bindings/microcontroller/Processor.h"
38+
#include "supervisor/filesystem.h"
39+
#include "supervisor/port.h"
3840
#include "supervisor/shared/safe_mode.h"
3941
#include "supervisor/shared/translate.h"
4042

4143
#include "src/rp2040/hardware_structs/include/hardware/structs/sio.h"
4244
#include "src/rp2_common/hardware_sync/include/hardware/sync.h"
4345

46+
#include "hardware/watchdog.h"
47+
4448
void common_hal_mcu_delay_us(uint32_t delay) {
4549
mp_hal_delay_us(delay);
4650
}
@@ -66,8 +70,11 @@ void common_hal_mcu_enable_interrupts(void) {
6670
asm volatile ("cpsie i" : : : "memory");
6771
}
6872

73+
static bool next_reset_to_bootloader = false;
74+
6975
void common_hal_mcu_on_next_reset(mcu_runmode_t runmode) {
7076
if (runmode == RUNMODE_BOOTLOADER) {
77+
next_reset_to_bootloader = true;
7178
} else {
7279
}
7380
if (runmode == RUNMODE_SAFE_MODE) {
@@ -76,6 +83,12 @@ void common_hal_mcu_on_next_reset(mcu_runmode_t runmode) {
7683
}
7784

7885
void common_hal_mcu_reset(void) {
86+
filesystem_flush();
87+
if (next_reset_to_bootloader) {
88+
reset_to_bootloader();
89+
} else {
90+
reset_cpu();
91+
}
7992
}
8093

8194
// The singleton microcontroller.Processor object, bound to microcontroller.cpu

ports/raspberrypi/supervisor/port.c

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,8 @@
5252

5353
#include "tusb.h"
5454

55+
#include "pico/bootrom.h"
56+
#include "hardware/watchdog.h"
5557

5658
extern volatile bool mp_msc_enabled;
5759

@@ -110,13 +112,17 @@ void reset_port(void) {
110112
}
111113

112114
void reset_to_bootloader(void) {
113-
// reset();
115+
reset_usb_boot(0, 0);
114116
while (true) {}
115117
}
116118

117119
void reset_cpu(void) {
118-
// reset();
119-
while (true) {}
120+
watchdog_reboot(0, SRAM_END, 0);
121+
watchdog_start_tick(12);
122+
123+
while (true) {
124+
__wfi();
125+
}
120126
}
121127

122128
bool port_has_fixed_stack(void) {

0 commit comments

Comments
 (0)