From add27dfbd3bdf7419019ceb758f01cf12b3152cf Mon Sep 17 00:00:00 2001 From: "C.S.M" Date: Thu, 27 Feb 2025 15:20:20 +0800 Subject: [PATCH] fix(spi_flash): Fix flash encryption write verify, Closes https://github.com/espressif/esp-idf/issues/15380 --- components/spi_flash/Kconfig | 2 ++ components/spi_flash/esp_flash_api.c | 20 +++++++++++++++++++ .../pytest_flash_encrypted.py | 2 ++ 3 files changed, 24 insertions(+) diff --git a/components/spi_flash/Kconfig b/components/spi_flash/Kconfig index 4285b7a7c7..edf2076826 100644 --- a/components/spi_flash/Kconfig +++ b/components/spi_flash/Kconfig @@ -180,6 +180,8 @@ menu "SPI Flash driver" back and verified. This can catch hardware problems with SPI flash, or flash which was not erased before verification. + This will slightly influence the write performance. + config SPI_FLASH_LOG_FAILED_WRITE bool "Log errors if verification fails" depends on SPI_FLASH_VERIFY_WRITE diff --git a/components/spi_flash/esp_flash_api.c b/components/spi_flash/esp_flash_api.c index 0deb6ece92..79188e971c 100644 --- a/components/spi_flash/esp_flash_api.c +++ b/components/spi_flash/esp_flash_api.c @@ -1378,11 +1378,31 @@ esp_err_t esp_flash_write_encrypted(esp_flash_t *chip, uint32_t address, const v COUNTER_ADD_BYTES(write, encrypt_byte); #if CONFIG_SPI_FLASH_VERIFY_WRITE + + if (lock_once == true) { + err = s_encryption_write_unlock(chip); + if (err != ESP_OK) { + bus_acquired = false; + //Error happens, we end flash operation. Re-enable cache and flush it + goto restore_cache; + } + bus_acquired = false; + } err = s_verify_write(chip, row_addr, encrypt_byte, (uint32_t *)encrypt_buf, is_encrypted); if (err != ESP_OK) { //Error happens, we end flash operation. Re-enable cache and flush it goto restore_cache; } + + if (lock_once == true) { + err = s_encryption_write_lock(chip); + if (err != ESP_OK) { + bus_acquired = false; + //Error happens, we end flash operation. Re-enable cache and flush it + goto restore_cache; + } + bus_acquired = true; + } #endif //CONFIG_SPI_FLASH_VERIFY_WRITE } diff --git a/components/spi_flash/test_apps/flash_encryption/pytest_flash_encrypted.py b/components/spi_flash/test_apps/flash_encryption/pytest_flash_encrypted.py index 572231288d..58112e1432 100644 --- a/components/spi_flash/test_apps/flash_encryption/pytest_flash_encrypted.py +++ b/components/spi_flash/test_apps/flash_encryption/pytest_flash_encrypted.py @@ -11,6 +11,7 @@ from pytest_embedded import Dut 'config', [ 'release', + 'verify', ], indirect=True, ) @@ -38,6 +39,7 @@ def test_flash_encryption_rom_impl(dut: Dut) -> None: [ 'release_f4r8', 'rom_impl', + 'verify', ], indirect=True, )