From 82b5b21f007f112ea96599ed031de63692aa6120 Mon Sep 17 00:00:00 2001 From: schneider <schneider@blinkenlichts.net> Date: Sat, 27 Jul 2019 00:53:52 +0200 Subject: [PATCH] feat(bootloader): Reset when system says done --- bootloader/bootloader-usb.c | 6 ++++++ bootloader/main.c | 10 +--------- bootloader/mscmem.c | 5 ++++- lib/card10/card10.c | 13 +++++++++++++ lib/card10/card10.h | 1 + 5 files changed, 25 insertions(+), 10 deletions(-) diff --git a/bootloader/bootloader-usb.c b/bootloader/bootloader-usb.c index 003d295a..04a921f6 100644 --- a/bootloader/bootloader-usb.c +++ b/bootloader/bootloader-usb.c @@ -114,11 +114,17 @@ void delay_us(unsigned int usec) mxc_delay(usec); } +void bootloader_stop(void) +{ + card10_reset(); +} + void bootloader_dirty(void) { Paint_DrawString_EN(0, 16 * 3, "Writing.", &Font16, 0x0000, 0xf000); LCD_Update(); } + void bootloader_clean(void) { Paint_DrawString_EN(0, 16 * 3, "Ready. ", &Font16, 0x0000, 0xffff); diff --git a/bootloader/main.c b/bootloader/main.c index 187ebcc7..cf7916a4 100644 --- a/bootloader/main.c +++ b/bootloader/main.c @@ -210,15 +210,7 @@ static inline void boot(const void *vtable) static void pmic_button(bool falling) { if (falling) { - printf("Resetting ...\n"); - /* - * Give the UART fifo time to clear. - * TODO: Do this properly - */ - for (int i = 0; i < 0x1000000; i++) { - __asm volatile("nop"); - } - MXC_GCR->rstr0 = MXC_F_GCR_RSTR0_SYSTEM; + card10_reset(); } } diff --git a/bootloader/mscmem.c b/bootloader/mscmem.c index 82d6ce88..f2da8d6b 100644 --- a/bootloader/mscmem.c +++ b/bootloader/mscmem.c @@ -3,6 +3,7 @@ #include <stdio.h> #include "mx25lba.h" +void bootloader_stop(void); void bootloader_dirty(void); void bootloader_clean(void); @@ -50,7 +51,9 @@ int mscmem_start() int mscmem_stop() { printf("%s\n", __func__); - return mx25_stop(); + int ret = mx25_stop(); + bootloader_stop(); + return ret; } /******************************************************************************/ diff --git a/lib/card10/card10.c b/lib/card10/card10.c index 2b3e3a31..92ddee1b 100644 --- a/lib/card10/card10.c +++ b/lib/card10/card10.c @@ -216,6 +216,19 @@ void card10_poll(void) pmic_poll(); } +void card10_reset(void) +{ + printf("Resetting ...\n"); + /* + * Give the UART fifo time to clear. + * TODO: Do this properly + */ + for (int i = 0; i < 0x1000000; i++) { + __asm volatile("nop"); + } + MXC_GCR->rstr0 = MXC_F_GCR_RSTR0_SYSTEM; +} + void GPIO0_IRQHandler(void) { GPIO_Handler(PORT_0); diff --git a/lib/card10/card10.h b/lib/card10/card10.h index e06b8a3f..488575a1 100644 --- a/lib/card10/card10.h +++ b/lib/card10/card10.h @@ -13,4 +13,5 @@ void core1_start(void); void core1_stop(void); void card10_poll(void); +void card10_reset(void); #endif -- GitLab