Explorar o código

spi_flash: fix the corruption of ROM after calling bootloader_execute_flash_command

The user register, especially dummy related ones, needs to be restored, otherwise the ROM function will not work.

Introduced in dd40123129bc5670ae081c31d519907f0125e4db.
Michael (XIAO Xufeng) %!s(int64=4) %!d(string=hai) anos
pai
achega
d4fd54f8ce
Modificáronse 1 ficheiros con 4 adicións e 0 borrados
  1. 4 0
      components/bootloader_support/src/bootloader_flash.c

+ 4 - 0
components/bootloader_support/src/bootloader_flash.c

@@ -549,6 +549,8 @@ IRAM_ATTR static uint32_t bootloader_flash_execute_command_common(
     assert(mosi_len <= 32);
     assert(miso_len <= 32);
     uint32_t old_ctrl_reg = SPIFLASH.ctrl.val;
+    uint32_t old_user_reg = SPIFLASH.user.val;
+    uint32_t old_user1_reg = SPIFLASH.user1.val;
 #if CONFIG_IDF_TARGET_ESP32
     SPIFLASH.ctrl.val = SPI_WP_REG_M; // keep WP high while idle, otherwise leave DIO mode
 #else
@@ -595,6 +597,8 @@ IRAM_ATTR static uint32_t bootloader_flash_execute_command_common(
     while (SPIFLASH.cmd.usr != 0) {
     }
     SPIFLASH.ctrl.val = old_ctrl_reg;
+    SPIFLASH.user.val = old_user_reg;
+    SPIFLASH.user1.val = old_user1_reg;
 
     uint32_t ret = SPIFLASH.data_buf[0];
     if (miso_len < 32) {