mirror of
https://github.com/espressif/esp-idf.git
synced 2025-08-08 04:02:27 +00:00
spi_flash: Remove legacy spi_flash drivers
This commit is contained in:
@@ -16,6 +16,7 @@
|
||||
#include "sdkconfig.h"
|
||||
#include "esp_flash_internal.h"
|
||||
#include "spi_flash_defs.h"
|
||||
#include "spi_flash_mmap.h"
|
||||
#include "esp_rom_caps.h"
|
||||
#include "esp_rom_spiflash.h"
|
||||
#if CONFIG_IDF_TARGET_ESP32S2
|
||||
@@ -1051,19 +1052,32 @@ inline static IRAM_ATTR bool regions_overlap(uint32_t a_start, uint32_t a_len,ui
|
||||
return (a_end > b_start && b_end > a_start);
|
||||
}
|
||||
|
||||
//currently the legacy implementation is used, from flash_ops.c
|
||||
esp_err_t spi_flash_read_encrypted(size_t src, void *dstv, size_t size);
|
||||
|
||||
esp_err_t IRAM_ATTR esp_flash_read_encrypted(esp_flash_t *chip, uint32_t address, void *out_buffer, uint32_t length)
|
||||
{
|
||||
/*
|
||||
* Since currently this feature is supported only by the hardware, there
|
||||
* is no way to support non-standard chips. We use the legacy
|
||||
* implementation and skip the chip and driver layers.
|
||||
*/
|
||||
esp_err_t err = rom_spiflash_api_funcs->chip_check(&chip);
|
||||
if (err != ESP_OK) return err;
|
||||
return spi_flash_read_encrypted(address, out_buffer, length);
|
||||
if (address + length > g_rom_flashchip.chip_size) {
|
||||
return ESP_ERR_INVALID_SIZE;
|
||||
}
|
||||
if (length == 0) {
|
||||
return ESP_OK;
|
||||
}
|
||||
if (out_buffer == NULL) {
|
||||
return ESP_ERR_INVALID_ARG;
|
||||
}
|
||||
|
||||
const uint8_t *map;
|
||||
spi_flash_mmap_handle_t map_handle;
|
||||
size_t map_src = address & ~(SPI_FLASH_MMU_PAGE_SIZE - 1);
|
||||
size_t map_size = length + (address - map_src);
|
||||
|
||||
err = spi_flash_mmap(map_src, map_size, SPI_FLASH_MMAP_DATA, (const void **)&map, &map_handle);
|
||||
if (err != ESP_OK) {
|
||||
return err;
|
||||
}
|
||||
memcpy(out_buffer, map + (address - map_src), length);
|
||||
spi_flash_munmap(map_handle);
|
||||
return err;
|
||||
}
|
||||
|
||||
// test only, non-public
|
||||
@@ -1115,7 +1129,6 @@ esp_err_t esp_flash_suspend_cmd_init(esp_flash_t* chip)
|
||||
return chip->chip_drv->sus_setup(chip);
|
||||
}
|
||||
|
||||
#ifndef CONFIG_SPI_FLASH_USE_LEGACY_IMPL
|
||||
esp_err_t esp_flash_app_disable_protect(bool disable)
|
||||
{
|
||||
if (disable) {
|
||||
@@ -1124,65 +1137,3 @@ esp_err_t esp_flash_app_disable_protect(bool disable)
|
||||
return esp_flash_app_enable_os_functions(esp_flash_default_chip);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
Adapter layer to original api before IDF v4.0
|
||||
------------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef CONFIG_SPI_FLASH_USE_LEGACY_IMPL
|
||||
|
||||
/* Translate any ESP_ERR_FLASH_xxx error code (new API) to a generic ESP_ERR_xyz error code
|
||||
*/
|
||||
static IRAM_ATTR esp_err_t spi_flash_translate_rc(esp_err_t err)
|
||||
{
|
||||
switch (err) {
|
||||
case ESP_OK:
|
||||
case ESP_ERR_INVALID_ARG:
|
||||
case ESP_ERR_INVALID_SIZE:
|
||||
case ESP_ERR_NO_MEM:
|
||||
return err;
|
||||
|
||||
case ESP_ERR_FLASH_NOT_INITIALISED:
|
||||
case ESP_ERR_FLASH_PROTECTED:
|
||||
return ESP_ERR_INVALID_STATE;
|
||||
|
||||
case ESP_ERR_NOT_FOUND:
|
||||
case ESP_ERR_FLASH_UNSUPPORTED_HOST:
|
||||
case ESP_ERR_FLASH_UNSUPPORTED_CHIP:
|
||||
return ESP_ERR_NOT_SUPPORTED;
|
||||
|
||||
case ESP_ERR_FLASH_NO_RESPONSE:
|
||||
return ESP_ERR_INVALID_RESPONSE;
|
||||
|
||||
default:
|
||||
ESP_EARLY_LOGE(TAG, "unexpected spi flash error code: 0x%x", err);
|
||||
abort();
|
||||
}
|
||||
}
|
||||
|
||||
esp_err_t IRAM_ATTR spi_flash_erase_range(uint32_t start_addr, uint32_t size)
|
||||
{
|
||||
esp_err_t err = esp_flash_erase_region(NULL, start_addr, size);
|
||||
return spi_flash_translate_rc(err);
|
||||
}
|
||||
|
||||
esp_err_t IRAM_ATTR spi_flash_write(size_t dst, const void *srcv, size_t size)
|
||||
{
|
||||
esp_err_t err = esp_flash_write(NULL, srcv, dst, size);
|
||||
return spi_flash_translate_rc(err);
|
||||
}
|
||||
|
||||
esp_err_t IRAM_ATTR spi_flash_read(size_t src, void *dstv, size_t size)
|
||||
{
|
||||
esp_err_t err = esp_flash_read(NULL, dstv, src, size);
|
||||
return spi_flash_translate_rc(err);
|
||||
}
|
||||
|
||||
esp_err_t IRAM_ATTR spi_flash_write_encrypted(size_t dest_addr, const void *src, size_t size)
|
||||
{
|
||||
esp_err_t err = esp_flash_write_encrypted(NULL, dest_addr, src, size);
|
||||
return spi_flash_translate_rc(err);
|
||||
}
|
||||
|
||||
#endif // CONFIG_SPI_FLASH_USE_LEGACY_IMPL
|
||||
|
Reference in New Issue
Block a user