mirror of
https://github.com/espressif/esp-idf.git
synced 2025-11-03 00:21:44 +01:00
flash_mmap: migrate to use esp_mmap driver
This commit is contained in:
@@ -9,7 +9,7 @@
|
||||
#include "esp_heap_caps.h"
|
||||
|
||||
// Some resources are lazy allocated in flash encryption, the threadhold is left for that case
|
||||
#define TEST_MEMORY_LEAK_THRESHOLD (-300)
|
||||
#define TEST_MEMORY_LEAK_THRESHOLD (400)
|
||||
|
||||
static size_t before_free_8bit;
|
||||
static size_t before_free_32bit;
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
#include "esp_heap_caps.h"
|
||||
|
||||
// Some resources are lazy allocated in flash encryption, the threadhold is left for that case
|
||||
#define TEST_MEMORY_LEAK_THRESHOLD (-300)
|
||||
#define TEST_MEMORY_LEAK_THRESHOLD (-400)
|
||||
|
||||
static size_t before_free_8bit;
|
||||
static size_t before_free_32bit;
|
||||
@@ -37,21 +37,18 @@ void tearDown(void)
|
||||
|
||||
void app_main(void)
|
||||
{
|
||||
// ####### #######
|
||||
// # # ## #### # # # #### # # ##### # # ##### ##### # #### # #
|
||||
// # # # # # # # # # # ## # # # # # # # # # # # ## #
|
||||
// ##### # # # #### ###### ##### # # # # # # # # # # # # # # # #
|
||||
// # # ###### # # # # # # # # ##### # ##### # # # # # # #
|
||||
// # # # # # # # # # # # # ## # # # # # # # # # ##
|
||||
// # ###### # # #### # # ####### #### # # # # # # # # #### # #
|
||||
|
||||
printf(" ####### ####### \n");
|
||||
printf("# # ## #### # # # #### # # ##### # # ##### ##### # #### # #\n");
|
||||
printf("# # # # # # # # # # ## # # # # # # # # # # # ## #\n");
|
||||
printf("##### # # # #### ###### ##### # # # # # # # # # # # # # # # #\n");
|
||||
printf("# # ###### # # # # # # # # ##### # ##### # # # # # # #\n");
|
||||
printf("# # # # # # # # # # # # ## # # # # # # # # # ##\n");
|
||||
printf("# ###### # # #### # # ####### #### # # # # # # # # #### # #\n");
|
||||
// ________ ___ _____ __ __ _______ ______________ ______ ______________ _ __
|
||||
// / ____/ / / | / ___// / / / / ____/ | / / ____/ __ \ \/ / __ \/_ __/ _/ __ \/ | / /
|
||||
// / /_ / / / /| | \__ \/ /_/ / / __/ / |/ / / / /_/ /\ / /_/ / / / / // / / / |/ /
|
||||
// / __/ / /___/ ___ |___/ / __ / / /___/ /| / /___/ _, _/ / / ____/ / / _/ // /_/ / /| /
|
||||
// /_/ /_____/_/ |_/____/_/ /_/ /_____/_/ |_/\____/_/ |_| /_/_/ /_/ /___/\____/_/ |_/
|
||||
|
||||
printf(" ________ ___ _____ __ __ _______ ______________ ______ ______________ _ __ \n");
|
||||
printf(" / ____/ / / | / ___// / / / / ____/ | / / ____/ __ \\ \\/ / __ \\/_ __/ _/ __ \\/ | / / \n");
|
||||
printf(" / /_ / / / /| | \\__ \\/ /_/ / / __/ / |/ / / / /_/ /\\ / /_/ / / / / // / / / |/ / \n");
|
||||
printf(" / __/ / /___/ ___ |___/ / __ / / /___/ /| / /___/ _, _/ / / ____/ / / _/ // /_/ / /| / \n");
|
||||
printf("/_/ /_____/_/ |_/____/_/ /_/ /_____/_/ |_/\\____/_/ |_| /_/_/ /_/ /___/\\____/_/ |_/ \n");
|
||||
|
||||
unity_run_menu();
|
||||
}
|
||||
|
||||
@@ -4,4 +4,4 @@ cmake_minimum_required(VERSION 3.16)
|
||||
set(EXTRA_COMPONENT_DIRS "$ENV{IDF_PATH}/tools/unit-test-app/components")
|
||||
|
||||
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
|
||||
project(test_mmap)
|
||||
project(test_flash_mmap)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
set(srcs "test_app_main.c"
|
||||
"test_mmap.c")
|
||||
"test_flash_mmap.c")
|
||||
|
||||
# In order for the cases defined by `TEST_CASE` to be linked into the final elf,
|
||||
# the component can be registered as WHOLE_ARCHIVE
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
#include "esp_heap_caps.h"
|
||||
|
||||
// Some resources are lazy allocated, the threadhold is left for that case
|
||||
#define TEST_MEMORY_LEAK_THRESHOLD (-600)
|
||||
#define TEST_MEMORY_LEAK_THRESHOLD (600)
|
||||
|
||||
static size_t before_free_8bit;
|
||||
static size_t before_free_32bit;
|
||||
|
||||
@@ -101,6 +101,7 @@ static void setup_mmap_tests(void)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
TEST_CASE("Can mmap into data address space", "[spi_flash][mmap]")
|
||||
{
|
||||
esp_err_t ret = ESP_FAIL;
|
||||
@@ -111,8 +112,6 @@ TEST_CASE("Can mmap into data address space", "[spi_flash][mmap]")
|
||||
TEST_ESP_OK( spi_flash_mmap(start, end - start, SPI_FLASH_MMAP_DATA, &ptr1, &handle1) );
|
||||
printf("mmap_res: handle=%"PRIx32" ptr=%p\n", (uint32_t)handle1, ptr1);
|
||||
|
||||
spi_flash_mmap_dump();
|
||||
|
||||
srand(0);
|
||||
const uint32_t *data = (const uint32_t *) ptr1;
|
||||
for (int block = 0; block < (end - start) / 0x10000; ++block) {
|
||||
@@ -130,9 +129,8 @@ TEST_CASE("Can mmap into data address space", "[spi_flash][mmap]")
|
||||
printf("mmap_res: handle=%"PRIx32" ptr=%p\n", (uint32_t)handle2, ptr2);
|
||||
|
||||
TEST_ASSERT_EQUAL_HEX32(start - 0x10000, spi_flash_cache2phys(ptr2));
|
||||
TEST_ASSERT_EQUAL_PTR(ptr2, spi_flash_phys2cache(start - 0x10000, SPI_FLASH_MMAP_DATA));
|
||||
|
||||
spi_flash_mmap_dump();
|
||||
TEST_ASSERT_EQUAL_PTR(ptr2, spi_flash_phys2cache(start - 0x10000, SPI_FLASH_MMAP_DATA));
|
||||
|
||||
printf("Mapping %"PRIx32" (+%x)\n", start, 0x10000);
|
||||
const void *ptr3;
|
||||
@@ -145,17 +143,13 @@ TEST_CASE("Can mmap into data address space", "[spi_flash][mmap]")
|
||||
TEST_ASSERT_EQUAL_PTR(ptr3, spi_flash_phys2cache(start, SPI_FLASH_MMAP_DATA));
|
||||
TEST_ASSERT_EQUAL_PTR((intptr_t)ptr3 + 0x4444, spi_flash_phys2cache(start + 0x4444, SPI_FLASH_MMAP_DATA));
|
||||
|
||||
spi_flash_mmap_dump();
|
||||
|
||||
printf("Unmapping handle1\n");
|
||||
spi_flash_munmap(handle1);
|
||||
handle1 = 0;
|
||||
spi_flash_mmap_dump();
|
||||
|
||||
printf("Unmapping handle2\n");
|
||||
spi_flash_munmap(handle2);
|
||||
handle2 = 0;
|
||||
spi_flash_mmap_dump();
|
||||
|
||||
printf("Unmapping handle3\n");
|
||||
spi_flash_munmap(handle3);
|
||||
@@ -165,11 +159,6 @@ TEST_CASE("Can mmap into data address space", "[spi_flash][mmap]")
|
||||
TEST_ASSERT_EQUAL_PTR(NULL, spi_flash_phys2cache(start, SPI_FLASH_MMAP_DATA));
|
||||
}
|
||||
|
||||
#if !(CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C6)
|
||||
/* On S3/C3/C2 the cache is programmatically split between Icache and dcache and with the default setup we dont leave a lot pages
|
||||
available for additional mmaps into instruction space. Disabling this test for now since any hypothetical use case for this
|
||||
is no longer supported "out of the box"
|
||||
*/
|
||||
TEST_CASE("Can mmap into instruction address space", "[spi_flash][mmap]")
|
||||
{
|
||||
setup_mmap_tests();
|
||||
@@ -180,8 +169,6 @@ TEST_CASE("Can mmap into instruction address space", "[spi_flash][mmap]")
|
||||
TEST_ESP_OK( spi_flash_mmap(start, end - start, SPI_FLASH_MMAP_INST, &ptr1, &handle1) );
|
||||
printf("mmap_res: handle=%"PRIx32" ptr=%p\n", (uint32_t)handle1, ptr1);
|
||||
|
||||
spi_flash_mmap_dump();
|
||||
|
||||
srand(0);
|
||||
const uint32_t *data = (const uint32_t *) ptr1;
|
||||
for (int block = 0; block < (end - start) / 0x10000; ++block) {
|
||||
@@ -200,8 +187,6 @@ TEST_CASE("Can mmap into instruction address space", "[spi_flash][mmap]")
|
||||
TEST_ASSERT_EQUAL_HEX32(start - 0x10000, spi_flash_cache2phys(ptr2));
|
||||
TEST_ASSERT_EQUAL_PTR(ptr2, spi_flash_phys2cache(start - 0x10000, SPI_FLASH_MMAP_INST));
|
||||
|
||||
spi_flash_mmap_dump();
|
||||
|
||||
printf("Mapping %"PRIx32" (+%x)\n", start, 0x10000);
|
||||
spi_flash_mmap_handle_t handle3;
|
||||
const void *ptr3;
|
||||
@@ -211,20 +196,15 @@ TEST_CASE("Can mmap into instruction address space", "[spi_flash][mmap]")
|
||||
TEST_ASSERT_EQUAL_HEX32(start, spi_flash_cache2phys(ptr3));
|
||||
TEST_ASSERT_EQUAL_PTR(ptr3, spi_flash_phys2cache(start, SPI_FLASH_MMAP_INST));
|
||||
|
||||
spi_flash_mmap_dump();
|
||||
|
||||
printf("Unmapping handle1\n");
|
||||
spi_flash_munmap(handle1);
|
||||
spi_flash_mmap_dump();
|
||||
|
||||
printf("Unmapping handle2\n");
|
||||
spi_flash_munmap(handle2);
|
||||
spi_flash_mmap_dump();
|
||||
|
||||
printf("Unmapping handle3\n");
|
||||
spi_flash_munmap(handle3);
|
||||
}
|
||||
#endif // #if !CONFIG_IDF_TARGET_ESP32C2
|
||||
|
||||
TEST_CASE("Can mmap unordered pages into contiguous memory", "[spi_flash][mmap]")
|
||||
{
|
||||
@@ -251,7 +231,6 @@ TEST_CASE("Can mmap unordered pages into contiguous memory", "[spi_flash][mmap]"
|
||||
TEST_ESP_OK( spi_flash_mmap_pages(pages, nopages, SPI_FLASH_MMAP_DATA, &ptr1, &handle1) );
|
||||
printf("mmap_res: handle=%"PRIx32" ptr=%p\n", (uint32_t)handle1, ptr1);
|
||||
|
||||
spi_flash_mmap_dump();
|
||||
#if (CONFIG_MMU_PAGE_SIZE == 0x10000)
|
||||
uint32_t words_per_sector = 1024;
|
||||
#elif (CONFIG_MMU_PAGE_SIZE == 0x8000)
|
||||
@@ -335,8 +314,6 @@ TEST_CASE("flash_mmap can mmap after get enough free MMU pages", "[spi_flash][mm
|
||||
TEST_ESP_OK( spi_flash_mmap(start, end - start, SPI_FLASH_MMAP_DATA, &ptr1, &handle1) );
|
||||
printf("mmap_res: handle=%"PRIx32" ptr=%p\n", (uint32_t)handle1, ptr1);
|
||||
|
||||
spi_flash_mmap_dump();
|
||||
|
||||
srand(0);
|
||||
const uint32_t *data = (const uint32_t *) ptr1;
|
||||
for (int block = 0; block < (end - start) / 0x10000; ++block) {
|
||||
@@ -359,18 +336,13 @@ TEST_CASE("flash_mmap can mmap after get enough free MMU pages", "[spi_flash][mm
|
||||
TEST_ESP_OK( spi_flash_mmap(0, free_pages * SPI_FLASH_MMU_PAGE_SIZE, SPI_FLASH_MMAP_DATA, &ptr2, &handle2) );
|
||||
printf("mmap_res: handle=%"PRIx32" ptr=%p\n", (uint32_t)handle2, ptr2);
|
||||
|
||||
spi_flash_mmap_dump();
|
||||
|
||||
|
||||
printf("Unmapping handle1\n");
|
||||
spi_flash_munmap(handle1);
|
||||
handle1 = 0;
|
||||
spi_flash_mmap_dump();
|
||||
|
||||
printf("Unmapping handle2\n");
|
||||
spi_flash_munmap(handle2);
|
||||
handle2 = 0;
|
||||
spi_flash_mmap_dump();
|
||||
|
||||
TEST_ASSERT_EQUAL_PTR(NULL, spi_flash_phys2cache(start, SPI_FLASH_MMAP_DATA));
|
||||
}
|
||||
@@ -394,11 +366,6 @@ TEST_CASE("phys2cache/cache2phys basic checks", "[spi_flash][mmap]")
|
||||
spi_flash_read_maybe_encrypted(phys, buf, sizeof(buf));
|
||||
TEST_ASSERT_EQUAL_HEX32_ARRAY((void *)esp_partition_find, buf, sizeof(buf) / sizeof(uint32_t));
|
||||
|
||||
/* spi_flash_mmap is in IRAM */
|
||||
printf("%p\n", spi_flash_mmap);
|
||||
TEST_ASSERT_EQUAL_HEX32(SPI_FLASH_CACHE2PHYS_FAIL,
|
||||
spi_flash_cache2phys(spi_flash_mmap));
|
||||
|
||||
/* 'constant_data' should be in DROM */
|
||||
phys = spi_flash_cache2phys(&constant_data);
|
||||
TEST_ASSERT_NOT_EQUAL(SPI_FLASH_CACHE2PHYS_FAIL, phys);
|
||||
Reference in New Issue
Block a user