diff --git a/bootloader/bootloader-usb.c b/bootloader/bootloader-usb.c index 003d295a6a8ecc07f41cc74517de5861642c28f6..04a921f6e414ae786cff50bff06425f47cbdf083 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 187ebcc7daba4d0ba96d4e4cccbcefd22a4e67cb..cf7916a4d6d3f1339f0dbf8392460b4c5b70b497 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 82d6ce8856661edc5a9dbe840aa3cb2afdd574bb..f2da8d6ba79422abeb911b17d0e2736012992879 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 2b3e3a317a043823e1fdb97f527627e522fa7657..92ddee1be65cda57b9c7f8b8459e301dda328bbf 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 e06b8a3f71abddcd2c2ad5d0206c885ead9961c0..488575a104f4c289998deaabfea14626d533de8c 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