From a5b08d0af76801094194cfeab3af852c638e8f06 Mon Sep 17 00:00:00 2001 From: Aidan MacDonald Date: Fri, 28 Oct 2022 20:20:38 +0100 Subject: Shanling Q1: Support OF-initiated firmware updates It's now possible to install OF updates on a rockboxed Shanling Q1. Previously these didn't work because the RB bootloader interrupted the update process. Updates will proceed as they normally do on a non-Rockboxed Q1, except at the end of the update you'll reboot to Rockbox instead of the OF. This is only a minor inconvienience and doesn't affect the update process. Change-Id: I0f8fc96f073c50c1512bf60e0927491be8178eb0 --- bootloader/x1000/main.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) 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); -- cgit