summaryrefslogtreecommitdiffstats
path: root/bootloader/x1000/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'bootloader/x1000/main.c')
-rw-r--r--bootloader/x1000/main.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/bootloader/x1000/main.c b/bootloader/x1000/main.c
index b948b030f1..5fd3d7f7d4 100644
--- a/bootloader/x1000/main.c
+++ b/bootloader/x1000/main.c
@@ -43,8 +43,10 @@ static int read_btn(void)
#endif
}
-void main(void)
+void main(uint32_t saved_cpm_scratch)
{
+ (void)saved_cpm_scratch;
+
system_init();
core_allocator_init();
kernel_init();
@@ -71,6 +73,16 @@ void main(void)
* present, blocking with an "insert SD card" prompt if appropriate. */
disk_mount_all();
+#ifdef SHANLING_Q1
+ /* This is needed for OF updates. The OF extracts the update package
+ * to the SD card and reboots to the recovery kernel to complete the
+ * update. */
+ if ((saved_cpm_scratch & 0xffff) == 0x1a1a) {
+ cpm_scratch_set(saved_cpm_scratch & 0xffff0000);
+ boot_of_recovery();
+ }
+#endif
+
/* If USB booting, the user probably needs to enter recovery mode;
* let's not force them to hold down the recovery key. */
bool recovery_mode = get_boot_flag(BOOT_FLAG_USB_BOOT);