mirror of
https://github.com/espressif/esp-idf.git
synced 2026-10-02 03:00:34 +03:00
fix(mmap): fixed some API read wrong data via mmap when flash being erased/written while XIP on PSRAM
Before: The cache won't be disabled when XIP on psram. But during flash erasing/programming, read data will be courrupt. When XIP in psram is enabled, the image is not mapped to the cache so usually there will be no flash access. The only way to read from flash is via the driver or use mmap. The driver has protection during erasing, while th mmap region not. Now: Mmap APIs provide a flag to make mmap->unmap region mutually exclusive to flash erase/programming when XIP from psram. SPI Flash write APIs will benefit from this. When the flag is used, no concurrent access to mapped region will happen while writing; otherwise the cache will be disable to avoid data corruption. Most ESP-IDF APIs calls mmap with this flag. As for users calling mmap-like APIs directly, they can choose whether to enable this by a flag. Closes https://github.com/espressif/esp-idf/issues/14897
This commit is contained in:
committed by
Michael (XIAO Xufeng)
parent
fd0b33dfda
commit
3d76ced5bb
@@ -131,9 +131,9 @@ PROVIDE( spi_flash_guard_get = 0x40000184 );
|
||||
PROVIDE( spi_flash_read_encrypted = 0x40000188 );
|
||||
PROVIDE( spi_flash_mmap_os_func_set = 0x4000018c );
|
||||
PROVIDE( spi_flash_mmap_page_num_init = 0x40000190 );
|
||||
PROVIDE( spi_flash_mmap = 0x40000194 );
|
||||
PROVIDE( spi_flash_mmap_pages = 0x40000198 );
|
||||
PROVIDE( spi_flash_munmap = 0x4000019c );
|
||||
rom_spi_flash_mmap = 0x40000194;
|
||||
rom_spi_flash_mmap_pages = 0x40000198;
|
||||
rom_spi_flash_munmap = 0x4000019c;
|
||||
PROVIDE( spi_flash_mmap_dump = 0x400001a0 );
|
||||
PROVIDE( spi_flash_check_and_flush_cache = 0x400001a4 );
|
||||
PROVIDE( spi_flash_mmap_get_free_pages = 0x400001a8 );
|
||||
|
||||
@@ -136,9 +136,9 @@ PROVIDE( spi_flash_write_encrypted = 0x40000194 );
|
||||
PROVIDE( spi_flash_read_encrypted = 0x40000198 );
|
||||
PROVIDE( spi_flash_mmap_os_func_set = 0x4000019c );
|
||||
PROVIDE( spi_flash_mmap_page_num_init = 0x400001a0 );
|
||||
PROVIDE( spi_flash_mmap = 0x400001a4 );
|
||||
PROVIDE( spi_flash_mmap_pages = 0x400001a8 );
|
||||
PROVIDE( spi_flash_munmap = 0x400001ac );
|
||||
rom_spi_flash_mmap = 0x400001a4;
|
||||
rom_spi_flash_mmap_pages = 0x400001a8;
|
||||
rom_spi_flash_munmap = 0x400001ac;
|
||||
PROVIDE( spi_flash_mmap_dump = 0x400001b0 );
|
||||
PROVIDE( spi_flash_check_and_flush_cache = 0x400001b4 );
|
||||
PROVIDE( spi_flash_mmap_get_free_pages = 0x400001b8 );
|
||||
@@ -202,7 +202,6 @@ PROVIDE( spi_flash_hal_host_idle = 0x40000254 );
|
||||
PROVIDE( spi_flash_chip_generic_probe = 0x40000258 );
|
||||
PROVIDE( spi_flash_chip_generic_detect_size = 0x4000025c );
|
||||
PROVIDE( spi_flash_chip_generic_write = 0x40000260 );
|
||||
PROVIDE( spi_flash_chip_generic_write_encrypted = 0x40000264 );
|
||||
PROVIDE( spi_flash_chip_generic_set_write_protect = 0x40000268 );
|
||||
PROVIDE( spi_flash_common_write_status_16b_wrsr = 0x4000026c );
|
||||
PROVIDE( spi_flash_chip_generic_reset = 0x40000270 );
|
||||
|
||||
@@ -32,9 +32,9 @@ esp_enable_cache_flash_wrap = 0x40000214;
|
||||
/* Functions */
|
||||
spi_flash_mmap_os_func_set = 0x40000218;
|
||||
spi_flash_mmap_page_num_init = 0x4000021c;
|
||||
spi_flash_mmap = 0x40000220;
|
||||
spi_flash_mmap_pages = 0x40000224;
|
||||
spi_flash_munmap = 0x40000228;
|
||||
rom_spi_flash_mmap = 0x40000220;
|
||||
rom_spi_flash_mmap_pages = 0x40000224;
|
||||
rom_spi_flash_munmap = 0x40000228;
|
||||
spi_flash_mmap_dump = 0x4000022c;
|
||||
spi_flash_check_and_flush_cache = 0x40000230;
|
||||
spi_flash_mmap_get_free_pages = 0x40000234;
|
||||
@@ -57,11 +57,11 @@ esp_flash_set_chip_write_protect = 0x40000258;
|
||||
esp_flash_get_protectable_regions = 0x4000025c;
|
||||
esp_flash_get_protected_region = 0x40000260;
|
||||
esp_flash_set_protected_region = 0x40000264;
|
||||
esp_flash_read = 0x40000268;
|
||||
PROVIDE( esp_flash_read = 0x40000268 );
|
||||
rom_esp_flash_write = 0x4000026c;
|
||||
rom_esp_flash_write_encrypted = 0x40000270;
|
||||
esp_flash_read_encrypted = 0x40000274;
|
||||
esp_flash_get_io_mode = 0x40000278;
|
||||
PROVIDE( esp_flash_get_io_mode = 0x40000278 );
|
||||
esp_flash_set_io_mode = 0x4000027c;
|
||||
spi_flash_boot_attach = 0x40000280;
|
||||
esp_flash_read_chip_id = 0x40000284;
|
||||
|
||||
@@ -31,9 +31,9 @@ esp_enable_cache_flash_wrap = 0x40000200;
|
||||
/* Functions */
|
||||
spi_flash_mmap_os_func_set = 0x40000204;
|
||||
spi_flash_mmap_page_num_init = 0x40000208;
|
||||
spi_flash_mmap = 0x4000020c;
|
||||
spi_flash_mmap_pages = 0x40000210;
|
||||
spi_flash_munmap = 0x40000214;
|
||||
rom_spi_flash_mmap = 0x4000020c;
|
||||
rom_spi_flash_mmap_pages = 0x40000210;
|
||||
rom_spi_flash_munmap = 0x40000214;
|
||||
spi_flash_mmap_dump = 0x40000218;
|
||||
spi_flash_check_and_flush_cache = 0x4000021c;
|
||||
spi_flash_mmap_get_free_pages = 0x40000220;
|
||||
@@ -56,11 +56,11 @@ esp_flash_set_chip_write_protect = 0x40000244;
|
||||
esp_flash_get_protectable_regions = 0x40000248;
|
||||
esp_flash_get_protected_region = 0x4000024c;
|
||||
esp_flash_set_protected_region = 0x40000250;
|
||||
esp_flash_read = 0x40000254;
|
||||
PROVIDE( esp_flash_read = 0x40000254 );
|
||||
rom_esp_flash_write = 0x40000258;
|
||||
rom_esp_flash_write_encrypted = 0x4000025c;
|
||||
esp_flash_read_encrypted = 0x40000260;
|
||||
esp_flash_get_io_mode = 0x40000264;
|
||||
PROVIDE( esp_flash_get_io_mode = 0x40000264 );
|
||||
esp_flash_set_io_mode = 0x40000268;
|
||||
spi_flash_boot_attach = 0x4000026c;
|
||||
esp_flash_read_chip_id = 0x40000270;
|
||||
|
||||
@@ -32,9 +32,9 @@ esp_enable_cache_flash_wrap = 0x40000214;
|
||||
/* Functions */
|
||||
spi_flash_mmap_os_func_set = 0x40000218;
|
||||
spi_flash_mmap_page_num_init = 0x4000021c;
|
||||
spi_flash_mmap = 0x40000220;
|
||||
spi_flash_mmap_pages = 0x40000224;
|
||||
spi_flash_munmap = 0x40000228;
|
||||
rom_spi_flash_mmap = 0x40000220;
|
||||
rom_spi_flash_mmap_pages = 0x40000224;
|
||||
rom_spi_flash_munmap = 0x40000228;
|
||||
spi_flash_mmap_dump = 0x4000022c;
|
||||
spi_flash_check_and_flush_cache = 0x40000230;
|
||||
spi_flash_mmap_get_free_pages = 0x40000234;
|
||||
@@ -57,11 +57,11 @@ esp_flash_set_chip_write_protect = 0x40000258;
|
||||
esp_flash_get_protectable_regions = 0x4000025c;
|
||||
esp_flash_get_protected_region = 0x40000260;
|
||||
esp_flash_set_protected_region = 0x40000264;
|
||||
esp_flash_read = 0x40000268;
|
||||
PROVIDE( esp_flash_read = 0x40000268 );
|
||||
rom_esp_flash_write = 0x4000026c;
|
||||
rom_esp_flash_write_encrypted = 0x40000270;
|
||||
esp_flash_read_encrypted = 0x40000274;
|
||||
esp_flash_get_io_mode = 0x40000278;
|
||||
PROVIDE( esp_flash_get_io_mode = 0x40000278 );
|
||||
esp_flash_set_io_mode = 0x4000027c;
|
||||
spi_flash_boot_attach = 0x40000280;
|
||||
esp_flash_read_chip_id = 0x40000284;
|
||||
|
||||
@@ -31,9 +31,9 @@ esp_enable_cache_flash_wrap = 0x400001f8;
|
||||
/* Functions */
|
||||
spi_flash_mmap_os_func_set = 0x400001fc;
|
||||
spi_flash_mmap_page_num_init = 0x40000200;
|
||||
spi_flash_mmap = 0x40000204;
|
||||
spi_flash_mmap_pages = 0x40000208;
|
||||
spi_flash_munmap = 0x4000020c;
|
||||
rom_spi_flash_mmap = 0x40000204;
|
||||
rom_spi_flash_mmap_pages = 0x40000208;
|
||||
rom_spi_flash_munmap = 0x4000020c;
|
||||
spi_flash_mmap_dump = 0x40000210;
|
||||
spi_flash_check_and_flush_cache = 0x40000214;
|
||||
spi_flash_mmap_get_free_pages = 0x40000218;
|
||||
@@ -56,11 +56,11 @@ esp_flash_set_chip_write_protect = 0x4000023c;
|
||||
esp_flash_get_protectable_regions = 0x40000240;
|
||||
esp_flash_get_protected_region = 0x40000244;
|
||||
esp_flash_set_protected_region = 0x40000248;
|
||||
esp_flash_read = 0x4000024c;
|
||||
PROVIDE( esp_flash_read = 0x4000024c );
|
||||
rom_esp_flash_write = 0x40000250;
|
||||
rom_esp_flash_write_encrypted = 0x40000254;
|
||||
esp_flash_read_encrypted = 0x40000258;
|
||||
esp_flash_get_io_mode = 0x4000025c;
|
||||
PROVIDE( esp_flash_get_io_mode = 0x4000025c );
|
||||
esp_flash_set_io_mode = 0x40000260;
|
||||
spi_flash_boot_attach = 0x40000264;
|
||||
esp_flash_read_chip_id = 0x40000268;
|
||||
|
||||
@@ -32,9 +32,9 @@ esp_enable_cache_flash_wrap = 0x400001f8;
|
||||
/* Functions */
|
||||
spi_flash_mmap_os_func_set = 0x400001fc;
|
||||
spi_flash_mmap_page_num_init = 0x40000200;
|
||||
spi_flash_mmap = 0x40000204;
|
||||
spi_flash_mmap_pages = 0x40000208;
|
||||
spi_flash_munmap = 0x4000020c;
|
||||
rom_spi_flash_mmap = 0x40000204;
|
||||
rom_spi_flash_mmap_pages = 0x40000208;
|
||||
rom_spi_flash_munmap = 0x4000020c;
|
||||
spi_flash_mmap_dump = 0x40000210;
|
||||
spi_flash_check_and_flush_cache = 0x40000214;
|
||||
spi_flash_mmap_get_free_pages = 0x40000218;
|
||||
@@ -57,11 +57,11 @@ esp_flash_set_chip_write_protect = 0x4000023c;
|
||||
esp_flash_get_protectable_regions = 0x40000240;
|
||||
esp_flash_get_protected_region = 0x40000244;
|
||||
esp_flash_set_protected_region = 0x40000248;
|
||||
esp_flash_read = 0x4000024c;
|
||||
PROVIDE( esp_flash_read = 0x4000024c );
|
||||
rom_esp_flash_write = 0x40000250;
|
||||
rom_esp_flash_write_encrypted = 0x40000254;
|
||||
esp_flash_read_encrypted = 0x40000258;
|
||||
esp_flash_get_io_mode = 0x4000025c;
|
||||
PROVIDE( esp_flash_get_io_mode = 0x4000025c );
|
||||
esp_flash_set_io_mode = 0x40000260;
|
||||
spi_flash_boot_attach = 0x40000264;
|
||||
esp_flash_read_chip_id = 0x40000268;
|
||||
|
||||
@@ -40,11 +40,11 @@ esp_flash_set_chip_write_protect = 0x40000224;
|
||||
esp_flash_get_protectable_regions = 0x40000228;
|
||||
esp_flash_get_protected_region = 0x4000022c;
|
||||
esp_flash_set_protected_region = 0x40000230;
|
||||
esp_flash_read = 0x40000234;
|
||||
PROVIDE( esp_flash_read = 0x40000234 );
|
||||
rom_esp_flash_write = 0x40000238;
|
||||
rom_esp_flash_write_encrypted = 0x4000023c;
|
||||
esp_flash_read_encrypted = 0x40000240;
|
||||
esp_flash_get_io_mode = 0x40000244;
|
||||
PROVIDE( esp_flash_get_io_mode = 0x40000244 );
|
||||
esp_flash_set_io_mode = 0x40000248;
|
||||
spi_flash_boot_attach = 0x4000024c;
|
||||
esp_flash_read_chip_id = 0x40000250;
|
||||
|
||||
@@ -188,9 +188,9 @@ PROVIDE( spi_flash_write_encrypted = 0x40000b7c );
|
||||
PROVIDE( spi_flash_read_encrypted = 0x40000b88 );
|
||||
PROVIDE( spi_flash_mmap_os_func_set = 0x40000b94 );
|
||||
PROVIDE( spi_flash_mmap_page_num_init = 0x40000ba0 );
|
||||
PROVIDE( spi_flash_mmap = 0x40000bac );
|
||||
PROVIDE( spi_flash_mmap_pages = 0x40000bb8 );
|
||||
PROVIDE( spi_flash_munmap = 0x40000bc4 );
|
||||
rom_spi_flash_mmap = 0x40000bac;
|
||||
rom_spi_flash_mmap_pages = 0x40000bb8;
|
||||
rom_spi_flash_munmap = 0x40000bc4;
|
||||
PROVIDE( spi_flash_mmap_dump = 0x40000bd0 );
|
||||
PROVIDE( spi_flash_check_and_flush_cache = 0x40000bdc );
|
||||
PROVIDE( spi_flash_mmap_get_free_pages = 0x40000be8 );
|
||||
@@ -253,7 +253,6 @@ PROVIDE( spi_flash_hal_host_idle = 0x40000db0 );
|
||||
PROVIDE( spi_flash_chip_generic_probe = 0x40000ed0 );
|
||||
PROVIDE( spi_flash_chip_generic_detect_size = 0x40000edc );
|
||||
PROVIDE( spi_flash_chip_generic_write = 0x40000ee8 );
|
||||
PROVIDE( spi_flash_chip_generic_write_encrypted = 0x40000ef4 );
|
||||
PROVIDE( spi_flash_chip_generic_set_write_protect = 0x40000f00 );
|
||||
PROVIDE( spi_flash_common_write_status_16b_wrsr = 0x40000f0c );
|
||||
PROVIDE( spi_flash_chip_generic_reset = 0x40000f18 );
|
||||
|
||||
Reference in New Issue
Block a user