From 606955382ed0d12e0fe615598e7a422ae04a6529 Mon Sep 17 00:00:00 2001 From: "Michael (XIAO Xufeng)" Date: Thu, 19 Aug 2021 22:10:16 +0800 Subject: [PATCH] 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 --- components/bootloader_support/src/flash_qio_mode.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/components/bootloader_support/src/flash_qio_mode.c b/components/bootloader_support/src/flash_qio_mode.c index 8af7b55d29..e6c4bb16c8 100644 --- a/components/bootloader_support/src/flash_qio_mode.c +++ b/components/bootloader_support/src/flash_qio_mode.c @@ -287,6 +287,9 @@ 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; + SPIFLASH.ctrl.val = SPI_WP_REG_M; // keep WP high while idle, otherwise leave DIO mode //command phase SPIFLASH.user.usr_command = 1; @@ -317,6 +320,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) {