From cdb9f2b098755d80da6a0b7cf432f875d4dc29b9 Mon Sep 17 00:00:00 2001 From: Xiao Xufeng Date: Mon, 27 May 2024 01:45:02 +0800 Subject: [PATCH] ci(spi_flash): add tests for cache2phys with XIP --- .../test_apps/.build-test-rules.yml | 5 +++ .../app_update/test_apps/main/CMakeLists.txt | 2 +- .../app_update/test_apps/main/test_ota_ops.c | 9 ++++ .../test_apps/pytest_app_update_ut.py | 42 +++++++++++++++---- .../test_apps/sdkconfig.ci.defaults | 2 + .../test_apps/sdkconfig.ci.xip_psram} | 2 +- .../sdkconfig.ci.xip_psram_with_rom_impl | 3 ++ .../spi_flash/test_apps/.build-test-rules.yml | 5 +++ .../flash_mmap/main/test_flash_mmap.c | 12 ++++++ .../test_apps/flash_mmap/partitions.csv | 5 ++- .../test_apps/flash_mmap/pytest_flash_mmap.py | 19 ++++----- ..._psram_esp32c61 => sdkconfig.ci.xip_psram} | 2 +- .../flash_mmap/sdkconfig.ci.xip_psram_esp32s2 | 3 -- .../flash_mmap/sdkconfig.ci.xip_psram_esp32s3 | 3 -- .../sdkconfig.ci.xip_psram_with_rom_impl | 5 +-- 15 files changed, 87 insertions(+), 32 deletions(-) create mode 100644 components/app_update/test_apps/sdkconfig.ci.defaults rename components/{spi_flash/test_apps/flash_mmap/sdkconfig.ci.xip_psram_esp32c5 => app_update/test_apps/sdkconfig.ci.xip_psram} (52%) create mode 100644 components/app_update/test_apps/sdkconfig.ci.xip_psram_with_rom_impl rename components/spi_flash/test_apps/flash_mmap/{sdkconfig.ci.xip_psram_esp32c61 => sdkconfig.ci.xip_psram} (51%) delete mode 100644 components/spi_flash/test_apps/flash_mmap/sdkconfig.ci.xip_psram_esp32s2 delete mode 100644 components/spi_flash/test_apps/flash_mmap/sdkconfig.ci.xip_psram_esp32s3 diff --git a/components/app_update/test_apps/.build-test-rules.yml b/components/app_update/test_apps/.build-test-rules.yml index 1ffb11d73a..49b89c9476 100644 --- a/components/app_update/test_apps/.build-test-rules.yml +++ b/components/app_update/test_apps/.build-test-rules.yml @@ -1,6 +1,11 @@ # Documentation: .gitlab/ci/README.md#manifest-file-to-control-the-buildtest-apps components/app_update/test_apps: + enable: + - if: CONFIG_NAME == "defaults" and IDF_TARGET != "linux" + - if: CONFIG_NAME == "xip_psram" and IDF_TARGET in ["esp32s2", "esp32s3", "esp32p4"] + # S2 doesn't have ROM for flash + - if: CONFIG_NAME == "xip_psram_with_rom_impl" and IDF_TARGET in ["esp32s3", "esp32p4"] disable: - if: IDF_TARGET in ["esp32c61"] temporary: true diff --git a/components/app_update/test_apps/main/CMakeLists.txt b/components/app_update/test_apps/main/CMakeLists.txt index 0011e70856..a83ae6af90 100644 --- a/components/app_update/test_apps/main/CMakeLists.txt +++ b/components/app_update/test_apps/main/CMakeLists.txt @@ -1,4 +1,4 @@ idf_component_register(SRC_DIRS "." PRIV_INCLUDE_DIRS "." - PRIV_REQUIRES cmock test_utils app_update bootloader_support nvs_flash driver spi_flash + PRIV_REQUIRES cmock test_utils app_update bootloader_support nvs_flash driver spi_flash esp_psram WHOLE_ARCHIVE) diff --git a/components/app_update/test_apps/main/test_ota_ops.c b/components/app_update/test_apps/main/test_ota_ops.c index b72142d6e1..0dbfabb76c 100644 --- a/components/app_update/test_apps/main/test_ota_ops.c +++ b/components/app_update/test_apps/main/test_ota_ops.c @@ -6,6 +6,7 @@ #include #include #include +#include "esp_log.h" #include #include #include @@ -113,3 +114,11 @@ TEST_CASE("esp_ota_get_partition_description", "[ota]") }; TEST_ESP_ERR(ESP_ERR_NOT_FOUND, bootloader_common_get_partition_description(¬_app_pos, &app_desc1)); } + +TEST_CASE("esp_ota_get_running_partition points to correct address", "[spi_flash]") +{ + const esp_partition_t *factory = esp_partition_find_first(ESP_PARTITION_TYPE_APP, ESP_PARTITION_SUBTYPE_ANY, "factory"); + const esp_partition_t* part = esp_ota_get_running_partition(); + ESP_LOGI("running bin", "0x%p", (void*)part->address); + TEST_ASSERT_EQUAL_HEX32(factory->address, part->address); +} diff --git a/components/app_update/test_apps/pytest_app_update_ut.py b/components/app_update/test_apps/pytest_app_update_ut.py index 9e2ccb5ef4..6fe3bcc0de 100644 --- a/components/app_update/test_apps/pytest_app_update_ut.py +++ b/components/app_update/test_apps/pytest_app_update_ut.py @@ -9,18 +9,44 @@ DEFAULT_TIMEOUT = 20 TEST_SUBMENU_PATTERN_PYTEST = re.compile(rb'\s+\((\d+)\)\s+"([^"]+)"\r?\n') -def run_multiple_stages(dut: Dut, test_case_num: int, stages: int) -> None: - for stage in range(1, stages + 1): - dut.write(str(test_case_num)) - dut.expect(TEST_SUBMENU_PATTERN_PYTEST, timeout=DEFAULT_TIMEOUT) - dut.write(str(stage)) - if stage != stages: - dut.expect_exact('Press ENTER to see the list of tests.') +@pytest.mark.supported_targets +@pytest.mark.temp_skip_ci(targets=['esp32c5'], reason='C5 has not supported deep sleep') # TODO: [ESP32C5] IDF-8640, IDF-10317 +@pytest.mark.generic +@pytest.mark.parametrize( + 'config', + [ + 'defaults', + ], + indirect=True, +) +def test_app_update(dut: Dut) -> None: + dut.run_all_single_board_cases(timeout=90) @pytest.mark.supported_targets # TODO: [ESP32C61] IDF-9245, IDF-9247, IDF-10983 @pytest.mark.temp_skip_ci(targets=['esp32c61'], reason='C61 has not supported deep sleep') @pytest.mark.generic -def test_app_update(dut: Dut) -> None: +@pytest.mark.parametrize( + 'config', + [ + 'xip_psram', + ], + indirect=True, +) +def test_app_update_xip_psram(dut: Dut) -> None: + dut.run_all_single_board_cases(timeout=90) + + +@pytest.mark.supported_targets +@pytest.mark.temp_skip_ci(targets=['esp32c5'], reason='C5 has not supported deep sleep') # TODO: [ESP32C5] IDF-8640, IDF-10317 +@pytest.mark.generic +@pytest.mark.parametrize( + 'config', + [ + 'xip_psram_with_rom_impl', + ], + indirect=True, +) +def test_app_update_xip_psram_rom_impl(dut: Dut) -> None: dut.run_all_single_board_cases(timeout=90) diff --git a/components/app_update/test_apps/sdkconfig.ci.defaults b/components/app_update/test_apps/sdkconfig.ci.defaults new file mode 100644 index 0000000000..250a29bc45 --- /dev/null +++ b/components/app_update/test_apps/sdkconfig.ci.defaults @@ -0,0 +1,2 @@ +# don't delete. +# used for CI to compile a default config when 'sdkconfig.ci.xxxx' is exist diff --git a/components/spi_flash/test_apps/flash_mmap/sdkconfig.ci.xip_psram_esp32c5 b/components/app_update/test_apps/sdkconfig.ci.xip_psram similarity index 52% rename from components/spi_flash/test_apps/flash_mmap/sdkconfig.ci.xip_psram_esp32c5 rename to components/app_update/test_apps/sdkconfig.ci.xip_psram index 9c3610a24b..358f51460b 100644 --- a/components/spi_flash/test_apps/flash_mmap/sdkconfig.ci.xip_psram_esp32c5 +++ b/components/app_update/test_apps/sdkconfig.ci.xip_psram @@ -1,2 +1,2 @@ -CONFIG_IDF_TARGET="esp32c5" +CONFIG_SPIRAM=y CONFIG_SPIRAM_XIP_FROM_PSRAM=y diff --git a/components/app_update/test_apps/sdkconfig.ci.xip_psram_with_rom_impl b/components/app_update/test_apps/sdkconfig.ci.xip_psram_with_rom_impl new file mode 100644 index 0000000000..80c30b1fe6 --- /dev/null +++ b/components/app_update/test_apps/sdkconfig.ci.xip_psram_with_rom_impl @@ -0,0 +1,3 @@ +CONFIG_SPIRAM=y +CONFIG_SPIRAM_XIP_FROM_PSRAM=y +CONFIG_SPI_FLASH_ROM_IMPL=y diff --git a/components/spi_flash/test_apps/.build-test-rules.yml b/components/spi_flash/test_apps/.build-test-rules.yml index c246a69560..e2be1b0ff7 100644 --- a/components/spi_flash/test_apps/.build-test-rules.yml +++ b/components/spi_flash/test_apps/.build-test-rules.yml @@ -30,6 +30,11 @@ components/spi_flash/test_apps/flash_mmap: depends_components: - esp_mm - spi_flash + enable: + - if: CONFIG_NAME in ["release", "rom_impl"] and IDF_TARGET != "linux" + - if: CONFIG_NAME == "xip_psram" and IDF_TARGET in ["esp32s2", "esp32s3", "esp32p4"] + # S2 doesn't have ROM for flash + - if: CONFIG_NAME == "xip_psram_with_rom_impl" and IDF_TARGET in ["esp32s3", "esp32p4"] components/spi_flash/test_apps/flash_suspend: disable: diff --git a/components/spi_flash/test_apps/flash_mmap/main/test_flash_mmap.c b/components/spi_flash/test_apps/flash_mmap/main/test_flash_mmap.c index 3f36d6bf34..42c1b0c550 100644 --- a/components/spi_flash/test_apps/flash_mmap/main/test_flash_mmap.c +++ b/components/spi_flash/test_apps/flash_mmap/main/test_flash_mmap.c @@ -7,6 +7,7 @@ #include #include #include +#include "esp_log.h" #include #include #include @@ -517,3 +518,14 @@ TEST_CASE("no stale data read post mmap and write partition", "[spi_flash][mmap] TEST_ASSERT_EQUAL(0, memcmp(buf, read_data, sizeof(buf))); #endif } + +TEST_CASE("spi_flash_cache2phys points to correct address", "[spi_flash]") +{ + //_rodata_start, which begins with appdesc, is always the first segment of the bin. + extern int _rodata_start; + size_t addr = spi_flash_cache2phys(&_rodata_start); + + const esp_partition_t *factory = esp_partition_find_first(ESP_PARTITION_TYPE_APP, ESP_PARTITION_SUBTYPE_ANY, "factory"); + ESP_LOGI("running bin", "0x%p", (void*)addr); + TEST_ASSERT_HEX32_WITHIN(CONFIG_MMU_PAGE_SIZE/2, factory->address + CONFIG_MMU_PAGE_SIZE/2, addr); +} diff --git a/components/spi_flash/test_apps/flash_mmap/partitions.csv b/components/spi_flash/test_apps/flash_mmap/partitions.csv index c941d8f4f1..0f0d5d8a32 100644 --- a/components/spi_flash/test_apps/flash_mmap/partitions.csv +++ b/components/spi_flash/test_apps/flash_mmap/partitions.csv @@ -1,5 +1,6 @@ # Name, Type, SubType, Offset, Size, Flags # Note: if you have increased the bootloader size, make sure to update the offsets to avoid overlap nvs, data, nvs, 0x9000, 0x6000, -factory, 0, 0, 0x10000, 1M -flash_test, data, fat, , 528K +flash_test, data, fat, 0x10000, 528K +# This partition is placed to this weird address intentionally to test spi_flash_cache2phys +factory, 0, 0, 0xF0000, 1M diff --git a/components/spi_flash/test_apps/flash_mmap/pytest_flash_mmap.py b/components/spi_flash/test_apps/flash_mmap/pytest_flash_mmap.py index 65dc1c57c2..de8fd80f44 100644 --- a/components/spi_flash/test_apps/flash_mmap/pytest_flash_mmap.py +++ b/components/spi_flash/test_apps/flash_mmap/pytest_flash_mmap.py @@ -34,21 +34,20 @@ def test_flash_mmap_rom_impl(dut: Dut) -> None: dut.run_all_single_board_cases(timeout=30) -XIP_CONFIGS = [ - pytest.param('xip_psram_esp32s2', marks=[pytest.mark.esp32s2]), - pytest.param('xip_psram_esp32s3', marks=[pytest.mark.esp32s3]), - pytest.param('xip_psram_esp32c5', marks=[pytest.mark.esp32c5]), - pytest.param('xip_psram_esp32c61', marks=[pytest.mark.esp32c61]), -] - - +@pytest.mark.supported_targets @pytest.mark.generic -@pytest.mark.parametrize('config', XIP_CONFIGS, indirect=True) +@pytest.mark.parametrize( + 'config', + [ + 'xip_psram', + ], + indirect=True, +) def test_flash_mmap_xip_psram(dut: Dut) -> None: dut.run_all_single_board_cases(timeout=30) -@pytest.mark.esp32s3 +@pytest.mark.supported_targets @pytest.mark.generic @pytest.mark.parametrize( 'config', diff --git a/components/spi_flash/test_apps/flash_mmap/sdkconfig.ci.xip_psram_esp32c61 b/components/spi_flash/test_apps/flash_mmap/sdkconfig.ci.xip_psram similarity index 51% rename from components/spi_flash/test_apps/flash_mmap/sdkconfig.ci.xip_psram_esp32c61 rename to components/spi_flash/test_apps/flash_mmap/sdkconfig.ci.xip_psram index 656c4d8f2c..358f51460b 100644 --- a/components/spi_flash/test_apps/flash_mmap/sdkconfig.ci.xip_psram_esp32c61 +++ b/components/spi_flash/test_apps/flash_mmap/sdkconfig.ci.xip_psram @@ -1,2 +1,2 @@ -CONFIG_IDF_TARGET="esp32c61" +CONFIG_SPIRAM=y CONFIG_SPIRAM_XIP_FROM_PSRAM=y diff --git a/components/spi_flash/test_apps/flash_mmap/sdkconfig.ci.xip_psram_esp32s2 b/components/spi_flash/test_apps/flash_mmap/sdkconfig.ci.xip_psram_esp32s2 deleted file mode 100644 index f802481b37..0000000000 --- a/components/spi_flash/test_apps/flash_mmap/sdkconfig.ci.xip_psram_esp32s2 +++ /dev/null @@ -1,3 +0,0 @@ -CONFIG_IDF_TARGET="esp32s2" -CONFIG_SPIRAM_FETCH_INSTRUCTIONS=y -CONFIG_SPIRAM_RODATA=y diff --git a/components/spi_flash/test_apps/flash_mmap/sdkconfig.ci.xip_psram_esp32s3 b/components/spi_flash/test_apps/flash_mmap/sdkconfig.ci.xip_psram_esp32s3 deleted file mode 100644 index cd228b8f50..0000000000 --- a/components/spi_flash/test_apps/flash_mmap/sdkconfig.ci.xip_psram_esp32s3 +++ /dev/null @@ -1,3 +0,0 @@ -CONFIG_IDF_TARGET="esp32s3" -CONFIG_SPIRAM_FETCH_INSTRUCTIONS=y -CONFIG_SPIRAM_RODATA=y diff --git a/components/spi_flash/test_apps/flash_mmap/sdkconfig.ci.xip_psram_with_rom_impl b/components/spi_flash/test_apps/flash_mmap/sdkconfig.ci.xip_psram_with_rom_impl index 2bca42b0de..80c30b1fe6 100644 --- a/components/spi_flash/test_apps/flash_mmap/sdkconfig.ci.xip_psram_with_rom_impl +++ b/components/spi_flash/test_apps/flash_mmap/sdkconfig.ci.xip_psram_with_rom_impl @@ -1,4 +1,3 @@ -CONFIG_IDF_TARGET="esp32s3" -CONFIG_SPIRAM_FETCH_INSTRUCTIONS=y -CONFIG_SPIRAM_RODATA=y +CONFIG_SPIRAM=y +CONFIG_SPIRAM_XIP_FROM_PSRAM=y CONFIG_SPI_FLASH_ROM_IMPL=y