Przeglądaj źródła

[FL-3773] VGM Tool: Fix crashes (#149)

Georgii Surkov 1 rok temu
rodzic
commit
a8b5160dea
5 zmienionych plików z 15 dodań i 36 usunięć
  1. 3 0
      .catalog/CHANGELOG.md
  2. 1 1
      application.fam
  3. 8 29
      flasher/flasher.c
  4. 3 3
      flasher/rp2040.c
  5. 0 3
      flasher/swd.c

+ 3 - 0
.catalog/CHANGELOG.md

@@ -1,3 +1,6 @@
+## 1.2
+ - Fix crash due to log output in critical section
+ - Fix crash when built with DEBUG=1
 ## 1.1
 ## 1.1
  - Description update
  - Description update
 ## 1.0
 ## 1.0

+ 1 - 1
application.fam

@@ -9,7 +9,7 @@ App(
     ],
     ],
     stack_size=2048,
     stack_size=2048,
     fap_description="This app is a standalone firmware updater/installer for the Video Game Module",
     fap_description="This app is a standalone firmware updater/installer for the Video Game Module",
-    fap_version="1.1",
+    fap_version="1.2",
     fap_icon="vgm_tool.png",
     fap_icon="vgm_tool.png",
     fap_category="Tools",
     fap_category="Tools",
     fap_icon_assets="icons",
     fap_icon_assets="icons",

+ 8 - 29
flasher/flasher.c

@@ -32,34 +32,22 @@ bool flasher_init(void) {
     FURI_LOG_D(TAG, "Attaching the target");
     FURI_LOG_D(TAG, "Attaching the target");
 
 
     board_init();
     board_init();
+    swd_init();
 
 
-    bool success = false;
-    FURI_CRITICAL_ENTER();
-    do {
-        swd_init();
-        if(!target_attach(RP2040_CORE0_ADDR)) {
-            FURI_LOG_E(TAG, "Failed to attach target");
-            break;
-        }
-        success = true;
-    } while(false);
-    FURI_CRITICAL_EXIT();
-
-    if(!success) {
+    if(!target_attach(RP2040_CORE0_ADDR)) {
+        FURI_LOG_E(TAG, "Failed to attach target");
         flasher_deinit();
         flasher_deinit();
+        return false;
     }
     }
 
 
-    return success;
+    return true;
 }
 }
 
 
 void flasher_deinit(void) {
 void flasher_deinit(void) {
     FURI_LOG_D(TAG, "Detaching target and restoring pins");
     FURI_LOG_D(TAG, "Detaching target and restoring pins");
 
 
-    FURI_CRITICAL_ENTER();
     target_detach();
     target_detach();
     swd_deinit();
     swd_deinit();
-    FURI_CRITICAL_EXIT();
-
     board_reset();
     board_reset();
     board_deinit();
     board_deinit();
 }
 }
@@ -70,24 +58,15 @@ void flasher_set_callback(FlasherCallback callback, void* context) {
 }
 }
 
 
 static inline bool flasher_init_chip(void) {
 static inline bool flasher_init_chip(void) {
-    FURI_CRITICAL_ENTER();
-    const bool success = rp2040_init();
-    FURI_CRITICAL_EXIT();
-    return success;
+    return rp2040_init();
 }
 }
 
 
 static inline bool flasher_erase_sector(uint32_t address) {
 static inline bool flasher_erase_sector(uint32_t address) {
-    FURI_CRITICAL_ENTER();
-    const bool success = rp2040_flash_erase_sector(address);
-    FURI_CRITICAL_EXIT();
-    return success;
+    return rp2040_flash_erase_sector(address);
 }
 }
 
 
 static inline bool flasher_program_page(uint32_t address, const void* data, size_t data_size) {
 static inline bool flasher_program_page(uint32_t address, const void* data, size_t data_size) {
-    FURI_CRITICAL_ENTER();
-    const bool success = rp2040_flash_program_page(address, data, data_size);
-    FURI_CRITICAL_EXIT();
-    return success;
+    return rp2040_flash_program_page(address, data, data_size);
 }
 }
 
 
 static void flasher_emit_progress(uint8_t start, uint8_t weight, uint8_t progress) {
 static void flasher_emit_progress(uint8_t start, uint8_t weight, uint8_t progress) {

+ 3 - 3
flasher/rp2040.c

@@ -64,9 +64,9 @@
 #define RP_SSI_XIP_SPI_CTRL0_FORMAT_STD_SPI (0U << 0U)
 #define RP_SSI_XIP_SPI_CTRL0_FORMAT_STD_SPI (0U << 0U)
 #define RP_SSI_XIP_SPI_CTRL0_FORMAT_SPLIT (1U << 0U)
 #define RP_SSI_XIP_SPI_CTRL0_FORMAT_SPLIT (1U << 0U)
 #define RP_SSI_XIP_SPI_CTRL0_FORMAT_FRF (2U << 0U)
 #define RP_SSI_XIP_SPI_CTRL0_FORMAT_FRF (2U << 0U)
-#define RP_SSI_XIP_SPI_CTRL0_ADDRESS_LENGTH(x) (((x)*2U) << 2U)
+#define RP_SSI_XIP_SPI_CTRL0_ADDRESS_LENGTH(x) (((x) * 2U) << 2U)
 #define RP_SSI_XIP_SPI_CTRL0_INSTR_LENGTH_8b (2U << 8U)
 #define RP_SSI_XIP_SPI_CTRL0_INSTR_LENGTH_8b (2U << 8U)
-#define RP_SSI_XIP_SPI_CTRL0_WAIT_CYCLES(x) (((x)*8U) << 11U)
+#define RP_SSI_XIP_SPI_CTRL0_WAIT_CYCLES(x) (((x) * 8U) << 11U)
 #define RP_SSI_XIP_SPI_CTRL0_XIP_CMD_SHIFT 24U
 #define RP_SSI_XIP_SPI_CTRL0_XIP_CMD_SHIFT 24U
 #define RP_SSI_XIP_SPI_CTRL0_XIP_CMD(x) ((x) << RP_SSI_XIP_SPI_CTRL0_XIP_CMD_SHIFT)
 #define RP_SSI_XIP_SPI_CTRL0_XIP_CMD(x) ((x) << RP_SSI_XIP_SPI_CTRL0_XIP_CMD_SHIFT)
 #define RP_SSI_XIP_SPI_CTRL0_TRANS_1C1A (0U << 0U)
 #define RP_SSI_XIP_SPI_CTRL0_TRANS_1C1A (0U << 0U)
@@ -94,7 +94,7 @@
 
 
 // SPI Flash defines
 // SPI Flash defines
 #define SPI_FLASH_OPCODE_MASK 0x00ffU
 #define SPI_FLASH_OPCODE_MASK 0x00ffU
-#define SPI_FLASH_OPCODE(x) ((x)&SPI_FLASH_OPCODE_MASK)
+#define SPI_FLASH_OPCODE(x) ((x) & SPI_FLASH_OPCODE_MASK)
 #define SPI_FLASH_DUMMY_MASK 0x0700U
 #define SPI_FLASH_DUMMY_MASK 0x0700U
 #define SPI_FLASH_DUMMY_SHIFT 8U
 #define SPI_FLASH_DUMMY_SHIFT 8U
 #define SPI_FLASH_DUMMY_LEN(x) (((x) << SPI_FLASH_DUMMY_SHIFT) & SPI_FLASH_DUMMY_MASK)
 #define SPI_FLASH_DUMMY_LEN(x) (((x) << SPI_FLASH_DUMMY_SHIFT) & SPI_FLASH_DUMMY_MASK)

+ 0 - 3
flasher/swd.c

@@ -146,8 +146,6 @@ static uint32_t __attribute__((optimize("-O3"))) swd_rx(uint32_t n_cycles) {
 }
 }
 
 
 static bool __attribute__((optimize("-O3"))) swd_rx_parity(uint32_t* data, uint32_t n_cycles) {
 static bool __attribute__((optimize("-O3"))) swd_rx_parity(uint32_t* data, uint32_t n_cycles) {
-    furi_assert(data);
-
     const uint32_t rx_value = swd_rx(n_cycles);
     const uint32_t rx_value = swd_rx(n_cycles);
     swd_delay_half_cycle();
     swd_delay_half_cycle();
 
 
@@ -196,7 +194,6 @@ void swd_init(void) {
 
 
 void swd_deinit(void) {
 void swd_deinit(void) {
     swd_enter_dormant_state();
     swd_enter_dormant_state();
-
     furi_hal_gpio_init_simple(&gpio_swclk, GpioModeAnalog);
     furi_hal_gpio_init_simple(&gpio_swclk, GpioModeAnalog);
     furi_hal_gpio_init_simple(&gpio_swdio, GpioModeAnalog);
     furi_hal_gpio_init_simple(&gpio_swdio, GpioModeAnalog);
 }
 }