From 8f6ea2a1baa2c741f4ae1337dba1e86cd0fc98f3 Mon Sep 17 00:00:00 2001 From: Marius Vikhammer Date: Wed, 13 May 2026 08:42:13 +0800 Subject: [PATCH] test(ci): re-enable ESP32-H4 in core system test apps Co-authored-by: Cursor --- .../test_apps/.build-test-rules.yml | 4 -- .../test_apps/cpu/pytest_cpu.py | 3 -- .../test_apps/.build-test-rules.yml | 4 -- .../main/test_task_wdt.c | 2 +- .../pytest_esp_system_unity_tests.py | 4 -- .../esp_timer/test_apps/.build-test-rules.yml | 4 -- .../test_apps/include/esp_timer_performance.h | 4 ++ .../test_apps/pytest_esp_timer_ut.py | 1 - .../freertos/test_apps/.build-test-rules.yml | 4 -- .../freertos/include/freertos_performance.h | 6 +-- .../test_apps/freertos/pytest_freertos.py | 1 - components/riscv/include/riscv/csr.h | 2 +- examples/system/.build-test-rules.yml | 4 -- examples/system/esp_timer/pytest_esp_timer.py | 1 - tools/test_apps/system/.build-test-rules.yml | 6 +-- tools/test_apps/system/panic/pytest_panic.py | 52 +------------------ 16 files changed, 12 insertions(+), 90 deletions(-) diff --git a/components/esp_hw_support/test_apps/.build-test-rules.yml b/components/esp_hw_support/test_apps/.build-test-rules.yml index 909fe05eb65..d5055d19b78 100644 --- a/components/esp_hw_support/test_apps/.build-test-rules.yml +++ b/components/esp_hw_support/test_apps/.build-test-rules.yml @@ -6,10 +6,6 @@ components/esp_hw_support/test_apps/cpu: - riscv - xtensa - soc - disable_test: - - if: IDF_TARGET in ["esp32h4"] - temporary: true - reason: cannot pass # TODO: IDF-15602 components/esp_hw_support/test_apps/esp_hw_support_unity_tests: depends_components: diff --git a/components/esp_hw_support/test_apps/cpu/pytest_cpu.py b/components/esp_hw_support/test_apps/cpu/pytest_cpu.py index 79062a4cc67..e804f9a4025 100644 --- a/components/esp_hw_support/test_apps/cpu/pytest_cpu.py +++ b/components/esp_hw_support/test_apps/cpu/pytest_cpu.py @@ -28,7 +28,6 @@ def _run_non_recoverable_case(dut: IdfDut, test_name: str, expected_reason: str) ], indirect=['config', 'target'], ) -@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15602 def test_cpu(dut: IdfDut) -> None: dut.run_all_single_board_cases(group='!cpu_reset&!cpu_non_recoverable', timeout=120) @@ -41,7 +40,6 @@ def test_cpu(dut: IdfDut) -> None: ], indirect=['config', 'target'], ) -@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15602 def test_cpu_reset(dut: IdfDut) -> None: dut.run_all_single_board_cases(group='cpu_reset', timeout=120) @@ -54,7 +52,6 @@ def test_cpu_reset(dut: IdfDut) -> None: ], indirect=['config', 'target'], ) -@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15602 def test_cpu_non_recoverable(dut: IdfDut) -> None: expected_reason = 'Unhandled debug exception' if dut.target in {'esp32', 'esp32s2', 'esp32s3'} else 'Breakpoint' present_cases = {case.name for case in dut.test_menu} diff --git a/components/esp_system/test_apps/.build-test-rules.yml b/components/esp_system/test_apps/.build-test-rules.yml index 44abeef257c..269ab7f173a 100644 --- a/components/esp_system/test_apps/.build-test-rules.yml +++ b/components/esp_system/test_apps/.build-test-rules.yml @@ -10,10 +10,6 @@ components/esp_system/test_apps/esp_system_unity_tests: - if: (CONFIG_NAME == "psram" and SOC_SPIRAM_SUPPORTED != 1) - if: (CONFIG_NAME == "psram_with_pd_top" and (SOC_SPIRAM_SUPPORTED != 1 or SOC_PM_SUPPORT_TOP_PD != 1)) - if: (CONFIG_NAME == "pd_vddsdio" and (SOC_LIGHT_SLEEP_SUPPORTED != 1)) - disable_test: - - if: IDF_TARGET in ["esp32h4"] - temporary: true - reason: cannot pass # TODO: IDF-15604 components/esp_system/test_apps/linux_apis: enable: diff --git a/components/esp_system/test_apps/esp_system_unity_tests/main/test_task_wdt.c b/components/esp_system/test_apps/esp_system_unity_tests/main/test_task_wdt.c index c8dbbc15a17..b12ac2180b4 100644 --- a/components/esp_system/test_apps/esp_system_unity_tests/main/test_task_wdt.c +++ b/components/esp_system/test_apps/esp_system_unity_tests/main/test_task_wdt.c @@ -83,7 +83,7 @@ TEST_CASE("Task WDT task timeout after peripheral powerdown lightsleep", "[task_ #if SOC_MWDT_SUPPORT_XTAL -#if CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32H21 +#if CONFIG_IDF_TARGET_ESP32H2 || CONFIG_IDF_TARGET_ESP32H21 || CONFIG_IDF_TARGET_ESP32H4 #define TEST_CPU_FREQUENCY_MHZ 48 #else #define TEST_CPU_FREQUENCY_MHZ 40 diff --git a/components/esp_system/test_apps/esp_system_unity_tests/pytest_esp_system_unity_tests.py b/components/esp_system/test_apps/esp_system_unity_tests/pytest_esp_system_unity_tests.py index 0ac9b0c892f..6d73284b552 100644 --- a/components/esp_system/test_apps/esp_system_unity_tests/pytest_esp_system_unity_tests.py +++ b/components/esp_system/test_apps/esp_system_unity_tests/pytest_esp_system_unity_tests.py @@ -28,7 +28,6 @@ from pytest_embedded_idf.utils import soc_filtered_targets ], indirect=['config', 'target'], ) -@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15604 def test_esp_system(dut: Dut) -> None: # esp32p4 32MB PSRAM initialize in startup takes more than 30 sec dut.run_all_single_board_cases(timeout=60) @@ -88,7 +87,6 @@ def esp_reset_and_wait_ready_esp32c5_rev1(dut: Dut) -> None: [target for target in soc_filtered_targets('SOC_LIGHT_SLEEP_SUPPORTED == 1')], indirect=['target'], ) -@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15604 def test_sleep_uart_handling(dut: Dut) -> None: """Test UART handling modes during light sleep.""" # Test FLUSH mode output @@ -132,7 +130,6 @@ def test_sleep_uart_handling(dut: Dut) -> None: [target for target in soc_filtered_targets('SOC_CPU_LOCKUP_DEBUG_SUPPORTED == 1')], indirect=['target'], ) -@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15604 def test_cpu_lockup_trap_chain(dut: Dut) -> None: """Trigger a PRO CPU lockup and verify the lockup output.""" esp_reset_and_wait_ready(dut) @@ -163,7 +160,6 @@ def test_cpu_lockup_trap_chain(dut: Dut) -> None: @pytest.mark.generic @idf_parametrize('config', ['default'], indirect=['config']) @idf_parametrize('target', ['supported_targets'], indirect=['target']) -@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15604 def test_stack_smash_protection(dut: Dut) -> None: dut.expect_exact('Press ENTER to see the list of tests') dut.write('"stack smashing protection"') diff --git a/components/esp_timer/test_apps/.build-test-rules.yml b/components/esp_timer/test_apps/.build-test-rules.yml index deac28d08f2..131939a2258 100644 --- a/components/esp_timer/test_apps/.build-test-rules.yml +++ b/components/esp_timer/test_apps/.build-test-rules.yml @@ -1,10 +1,6 @@ # Documentation: .gitlab/ci/README.md#manifest-file-to-control-the-buildtest-apps components/esp_timer/test_apps: - disable_test: - - if: IDF_TARGET == "esp32h4" - temporary: true - reason: cannot pass # TODO: IDF-15605 depends_components: - esp_timer - esp_hal_timg diff --git a/components/esp_timer/test_apps/include/esp_timer_performance.h b/components/esp_timer/test_apps/include/esp_timer_performance.h index 59bb9b4b0b3..81b61433acb 100644 --- a/components/esp_timer/test_apps/include/esp_timer_performance.h +++ b/components/esp_timer/test_apps/include/esp_timer_performance.h @@ -39,6 +39,10 @@ #undef IDF_PERFORMANCE_MAX_ESP_TIMER_GET_TIME_PER_CALL #define IDF_PERFORMANCE_MAX_ESP_TIMER_GET_TIME_PER_CALL 1900 +#elif CONFIG_IDF_TARGET_ESP32H4 +#undef IDF_PERFORMANCE_MAX_ESP_TIMER_GET_TIME_PER_CALL +#define IDF_PERFORMANCE_MAX_ESP_TIMER_GET_TIME_PER_CALL 1900 + #elif CONFIG_IDF_TARGET_ESP32S31 #undef IDF_PERFORMANCE_MAX_ESP_TIMER_GET_TIME_PER_CALL #define IDF_PERFORMANCE_MAX_ESP_TIMER_GET_TIME_PER_CALL 1200 diff --git a/components/esp_timer/test_apps/pytest_esp_timer_ut.py b/components/esp_timer/test_apps/pytest_esp_timer_ut.py index 7137fad4799..1c3c991fbe0 100644 --- a/components/esp_timer/test_apps/pytest_esp_timer_ut.py +++ b/components/esp_timer/test_apps/pytest_esp_timer_ut.py @@ -6,7 +6,6 @@ from pytest_embedded_idf.utils import idf_parametrize @pytest.mark.generic -@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15605 @idf_parametrize( 'config,target', [ diff --git a/components/freertos/test_apps/.build-test-rules.yml b/components/freertos/test_apps/.build-test-rules.yml index c15dabd1a1b..e4beec33e34 100644 --- a/components/freertos/test_apps/.build-test-rules.yml +++ b/components/freertos/test_apps/.build-test-rules.yml @@ -22,10 +22,6 @@ components/freertos/test_apps/freertos: temporary: true reason: target(s) not supported yet - if: CONFIG_NAME == "psram" and SOC_SPIRAM_SUPPORTED != 1 - disable_test: - - if: IDF_TARGET in ["esp32h4"] - temporary: true - reason: cannot pass # TODO: IDF-15606 depends_components: - freertos - esp_system # trigger on changes to idle / tick hooks, wdt, entry point to freertos code diff --git a/components/freertos/test_apps/freertos/include/freertos_performance.h b/components/freertos/test_apps/freertos/include/freertos_performance.h index 561cf920dc6..e133460f382 100644 --- a/components/freertos/test_apps/freertos/include/freertos_performance.h +++ b/components/freertos/test_apps/freertos/include/freertos_performance.h @@ -26,14 +26,14 @@ #endif // Chip-Specific Data -#if CONFIG_IDF_TARGET_ESP32P4 || CONFIG_IDF_TARGET_ESP32S31 -/* Spinlock performance on esp32p4/esp32s31 is slower. */ +#if CONFIG_IDF_TARGET_ESP32P4 || CONFIG_IDF_TARGET_ESP32S31 || CONFIG_IDF_TARGET_ESP32H4 +/* Spinlock performance on esp32p4/esp32s31/esp32h4 is slower. */ #undef IDF_PERFORMANCE_MAX_FREERTOS_SPINLOCK_CYCLES_PER_OP #define IDF_PERFORMANCE_MAX_FREERTOS_SPINLOCK_CYCLES_PER_OP 400 #undef IDF_PERFORMANCE_MAX_FREERTOS_SPINLOCK_CYCLES_PER_OP_UNICORE #define IDF_PERFORMANCE_MAX_FREERTOS_SPINLOCK_CYCLES_PER_OP_UNICORE 150 -/* Solicited yields (portYIELD() or taskYIELD()) take longer on esp32p4/esp32s31. TODO: IDF-2809 */ +/* Solicited yields (portYIELD() or taskYIELD()) take longer on esp32p4/esp32s31/esp32h4. TODO: IDF-2809 */ #undef IDF_PERFORMANCE_MAX_SCHEDULING_TIME #define IDF_PERFORMANCE_MAX_SCHEDULING_TIME 3200 #endif diff --git a/components/freertos/test_apps/freertos/pytest_freertos.py b/components/freertos/test_apps/freertos/pytest_freertos.py index a1548b819ff..fd57c30a8c9 100644 --- a/components/freertos/test_apps/freertos/pytest_freertos.py +++ b/components/freertos/test_apps/freertos/pytest_freertos.py @@ -44,7 +44,6 @@ from pytest_embedded_idf.utils import idf_parametrize ], indirect=['config', 'target'], ) -@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15606 def test_freertos(dut: Dut) -> None: dut.run_all_single_board_cases() diff --git a/components/riscv/include/riscv/csr.h b/components/riscv/include/riscv/csr.h index 91d77229339..715e5cf0409 100644 --- a/components/riscv/include/riscv/csr.h +++ b/components/riscv/include/riscv/csr.h @@ -205,7 +205,7 @@ extern "C" { /* Espressif's custom CSR for the current privilege mode */ #if CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32H2 #define CSR_PRV_MODE 0xC10 -#elif CONFIG_IDF_TARGET_ESP32C5 || CONFIG_IDF_TARGET_ESP32C61 || CONFIG_IDF_TARGET_ESP32P4 || CONFIG_IDF_TARGET_ESP32S31 +#else #define CSR_PRV_MODE 0x810 #endif diff --git a/examples/system/.build-test-rules.yml b/examples/system/.build-test-rules.yml index 0414489e83b..25c15f0e2cf 100644 --- a/examples/system/.build-test-rules.yml +++ b/examples/system/.build-test-rules.yml @@ -66,10 +66,6 @@ examples/system/esp_event/user_event_loops: examples/system/esp_timer: depends_components: - esp_timer - disable_test: - - if: IDF_TARGET in ["esp32h4"] - temporary: true - reason: cannot pass # TODO: IDF-15605 examples/system/eventfd: disable: diff --git a/examples/system/esp_timer/pytest_esp_timer.py b/examples/system/esp_timer/pytest_esp_timer.py index 3362ec6399b..a20b8f120d0 100644 --- a/examples/system/esp_timer/pytest_esp_timer.py +++ b/examples/system/esp_timer/pytest_esp_timer.py @@ -43,7 +43,6 @@ TIMED_RESTART_TIME = 7000000 indirect=True, ) @idf_parametrize('target', ['supported_targets'], indirect=['target']) -@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15605 def test_esp_timer(dut: Dut) -> None: match = dut.expect(STARTING_TIMERS_REGEX) start_time = int(match.group(1)) diff --git a/tools/test_apps/system/.build-test-rules.yml b/tools/test_apps/system/.build-test-rules.yml index 08ff1ce045e..4e7c8a685f1 100644 --- a/tools/test_apps/system/.build-test-rules.yml +++ b/tools/test_apps/system/.build-test-rules.yml @@ -143,11 +143,7 @@ tools/test_apps/system/no_embedded_paths: tools/test_apps/system/panic: enable: - - if: INCLUDE_DEFAULT == 1 or IDF_TARGET in ["esp32s31"] - disable_test: - - if: IDF_TARGET == "esp32h4" - temporary: true - reason: cannot pass # TODO: IDF-15612 + - if: INCLUDE_DEFAULT == 1 or IDF_TARGET in ["esp32s31", "esp32h4"] tools/test_apps/system/ram_loadable_app: disable: diff --git a/tools/test_apps/system/panic/pytest_panic.py b/tools/test_apps/system/panic/pytest_panic.py index 6a07ab1edf6..fbd151725d5 100644 --- a/tools/test_apps/system/panic/pytest_panic.py +++ b/tools/test_apps/system/panic/pytest_panic.py @@ -16,7 +16,7 @@ TARGETS_XTENSA_DUAL_CORE = ['esp32', 'esp32s3'] TARGETS_XTENSA = TARGETS_XTENSA_SINGLE_CORE + TARGETS_XTENSA_DUAL_CORE TARGETS_RISCV_SINGLE_CORE = ['esp32c2', 'esp32c3', 'esp32c5', 'esp32c6', 'esp32h2', 'esp32c61'] -TARGETS_RISCV_DUAL_CORE = ['esp32p4', 'esp32s31'] +TARGETS_RISCV_DUAL_CORE = ['esp32p4', 'esp32s31', 'esp32h4'] TARGETS_RISCV_TARGETS = TARGETS_RISCV_SINGLE_CORE + TARGETS_RISCV_DUAL_CORE TARGETS_RISCV = TARGETS_RISCV_SINGLE_CORE + TARGETS_RISCV_DUAL_CORE @@ -66,6 +66,7 @@ CONFIG_PANIC = list( 'esp32s2', 'esp32s3', 'esp32p4', + 'esp32h4', 'esp32c5', 'esp32c6', 'esp32c61', @@ -199,7 +200,6 @@ def common_test( @pytest.mark.generic @idf_parametrize('config, target', CONFIGS, indirect=['config', 'target']) -@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_task_wdt_cpu0(dut: PanicTestDut, config: str, test_func_name: str) -> None: dut.run_test_func(test_func_name) dut.expect_exact('Task watchdog got triggered. The following tasks/users did not reset the watchdog in time:') @@ -232,7 +232,6 @@ def test_task_wdt_cpu0(dut: PanicTestDut, config: str, test_func_name: str) -> N @pytest.mark.generic @idf_parametrize('config, target', CONFIGS_DUAL_CORE, indirect=['config', 'target']) -@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_task_wdt_cpu1(dut: PanicTestDut, config: str, test_func_name: str) -> None: dut.run_test_func(test_func_name) dut.expect_exact('Task watchdog got triggered. The following tasks/users did not reset the watchdog in time:') @@ -270,7 +269,6 @@ def test_task_wdt_cpu1(dut: PanicTestDut, config: str, test_func_name: str) -> N ], indirect=['config', 'target'], ) -@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_panic_extram_stack(dut: PanicTestDut, config: str) -> None: if 'heap' in config: dut.run_test_func('test_panic_extram_stack_heap') @@ -298,7 +296,6 @@ def test_panic_extram_stack(dut: PanicTestDut, config: str) -> None: @pytest.mark.generic @idf_parametrize('config, target', CONFIGS, indirect=['config', 'target']) -@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_int_wdt(dut: PanicTestDut, target: str, config: str, test_func_name: str) -> None: dut.run_test_func(test_func_name) dut.expect_gme('Interrupt wdt timeout on CPU0') @@ -321,7 +318,6 @@ def test_int_wdt(dut: PanicTestDut, target: str, config: str, test_func_name: st @pytest.mark.generic @idf_parametrize('config, target', CONFIGS, indirect=['config', 'target']) -@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_int_wdt_cache_disabled(dut: PanicTestDut, target: str, config: str, test_func_name: str) -> None: dut.run_test_func(test_func_name) dut.expect_gme('Interrupt wdt timeout on CPU0') @@ -344,7 +340,6 @@ def test_int_wdt_cache_disabled(dut: PanicTestDut, target: str, config: str, tes @pytest.mark.generic @idf_parametrize('config, target', CONFIGS, indirect=['config', 'target']) -@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_cache_error(dut: PanicTestDut, config: str, test_func_name: str) -> None: dut.run_test_func(test_func_name) if dut.target in ['esp32c3', 'esp32c2']: @@ -376,7 +371,6 @@ def test_cache_error(dut: PanicTestDut, config: str, test_func_name: str) -> Non @pytest.mark.generic @idf_parametrize('config, target', CONFIGS, indirect=['config', 'target']) -@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_stack_overflow(dut: PanicTestDut, config: str, test_func_name: str) -> None: dut.run_test_func(test_func_name) if dut.is_xtensa: @@ -398,7 +392,6 @@ def test_stack_overflow(dut: PanicTestDut, config: str, test_func_name: str) -> @pytest.mark.generic @idf_parametrize('config, target', CONFIGS, indirect=['config', 'target']) -@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_instr_fetch_prohibited(dut: PanicTestDut, config: str, test_func_name: str) -> None: dut.run_test_func(test_func_name) if dut.is_xtensa: @@ -426,7 +419,6 @@ def test_instr_fetch_prohibited(dut: PanicTestDut, config: str, test_func_name: @pytest.mark.generic @idf_parametrize('config, target', CONFIGS, indirect=['config', 'target']) -@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_illegal_instruction(dut: PanicTestDut, config: str, test_func_name: str) -> None: dut.run_test_func(test_func_name) if dut.is_xtensa: @@ -463,7 +455,6 @@ def check_x_prohibited(dut: PanicTestDut, config: str, test_func_name: str, oper @pytest.mark.generic @idf_parametrize('config, target', CONFIGS, indirect=['config', 'target']) -@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_storeprohibited(dut: PanicTestDut, config: str, test_func_name: str) -> None: check_x_prohibited(dut, config, test_func_name, 'Store') @@ -476,7 +467,6 @@ def test_loadprohibited(dut: PanicTestDut, config: str, test_func_name: str) -> @pytest.mark.generic @idf_parametrize('config, target', CONFIGS, indirect=['config', 'target']) -@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_abort(dut: PanicTestDut, config: str, test_func_name: str) -> None: dut.run_test_func(test_func_name) regex_pattern = rb'abort\(\) was called at PC [0-9xa-f]+ on core 0' @@ -499,7 +489,6 @@ def test_abort(dut: PanicTestDut, config: str, test_func_name: str) -> None: @pytest.mark.generic @idf_parametrize('config, target', CONFIGS_UBSAN, indirect=['config', 'target']) -@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_ub(dut: PanicTestDut, config: str, test_func_name: str) -> None: dut.run_test_func(test_func_name) regex_pattern = rb'Undefined behavior of type out_of_bounds' @@ -526,7 +515,6 @@ def test_ub(dut: PanicTestDut, config: str, test_func_name: str) -> None: @pytest.mark.generic @idf_parametrize('config, target', CONFIGS, indirect=['config', 'target']) -@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_abort_cache_disabled(dut: PanicTestDut, config: str, test_func_name: str) -> None: if dut.target == 'esp32s2': pytest.xfail(reason='Crashes in itoa which is not in ROM, IDF-3572') @@ -551,7 +539,6 @@ def test_abort_cache_disabled(dut: PanicTestDut, config: str, test_func_name: st @pytest.mark.generic @idf_parametrize('config, target', CONFIGS, indirect=['config', 'target']) -@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_assert(dut: PanicTestDut, config: str, test_func_name: str) -> None: dut.run_test_func(test_func_name) regex_pattern = rb'assert failed:[\s\w()]*?\s[.\w/]*\.(?:c|cpp|h|hpp):\d.*$' @@ -574,7 +561,6 @@ def test_assert(dut: PanicTestDut, config: str, test_func_name: str) -> None: @pytest.mark.generic @idf_parametrize('config, target', CONFIGS, indirect=['config', 'target']) -@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_assert_cache_disabled(dut: PanicTestDut, config: str, test_func_name: str) -> None: if dut.target == 'esp32s2': pytest.xfail(reason='Crashes in itoa which is not in ROM, IDF-3572') @@ -612,7 +598,6 @@ def cache_error_log_check(dut: PanicTestDut) -> None: @pytest.mark.generic @idf_parametrize('config, target', CONFIG_PANIC, indirect=['config', 'target']) -@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_assert_cache_write_back_error_can_print_backtrace(dut: PanicTestDut, config: str, test_func_name: str) -> None: dut.run_test_func(test_func_name) cache_error_log_check(dut) @@ -638,7 +623,6 @@ def test_panic_delay(dut: PanicTestDut) -> None: @pytest.mark.generic @idf_parametrize('config, target', CONFIG_PANIC, indirect=['config', 'target']) -@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_panic_handler_stuck0(dut: PanicTestDut, config: str, test_func_name: str) -> None: dut.run_test_func(test_func_name) @@ -651,7 +635,6 @@ def test_panic_handler_stuck0(dut: PanicTestDut, config: str, test_func_name: st @pytest.mark.generic @idf_parametrize('config, target', CONFIG_PANIC_DUAL_CORE, indirect=['config', 'target']) -@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_panic_handler_stuck1(dut: PanicTestDut, config: str, test_func_name: str) -> None: dut.run_test_func(test_func_name) @@ -664,7 +647,6 @@ def test_panic_handler_stuck1(dut: PanicTestDut, config: str, test_func_name: st @pytest.mark.generic @idf_parametrize('config, target', CONFIG_PANIC, indirect=['config', 'target']) -@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_panic_handler_crash0(dut: PanicTestDut, config: str, test_func_name: str) -> None: dut.run_test_func(test_func_name) @@ -683,7 +665,6 @@ def test_panic_handler_crash0(dut: PanicTestDut, config: str, test_func_name: st @pytest.mark.generic @idf_parametrize('config, target', CONFIG_PANIC_DUAL_CORE, indirect=['config', 'target']) -@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_panic_handler_crash1(dut: PanicTestDut, config: str, test_func_name: str) -> None: dut.run_test_func(test_func_name) @@ -810,7 +791,6 @@ CONFIGS_MEMPROT_INVALID_REGION_PROTECTION_USING_PMA = list( @pytest.mark.generic @idf_parametrize('config, target', CONFIGS_MEMPROT_DCACHE, indirect=['config', 'target']) -@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_dcache_read_violation(dut: PanicTestDut, test_func_name: str) -> None: dut.run_test_func(test_func_name) dut.expect_exact(r'Test error: Test function has returned') @@ -821,7 +801,6 @@ def test_dcache_read_violation(dut: PanicTestDut, test_func_name: str) -> None: @pytest.mark.generic @pytest.mark.xfail(targets=['esp32s2'], reason='Incorrect panic reason may be observed', run=False) @idf_parametrize('config, target', CONFIGS_MEMPROT_DCACHE, indirect=['config', 'target']) -@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_dcache_write_violation(dut: PanicTestDut, test_func_name: str) -> None: dut.run_test_func(test_func_name) dut.expect_gme('Memory protection fault') @@ -852,7 +831,6 @@ def iram_reg1_write_violation(dut: PanicTestDut, test_func_name: str) -> None: @pytest.mark.generic @pytest.mark.temp_skip_ci(targets=['esp32h21'], reason='lack of runners') @idf_parametrize('config, target', CONFIGS_MEMPROT_IDRAM, indirect=['config', 'target']) -@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_iram_reg1_write_violation(dut: PanicTestDut, test_func_name: str) -> None: iram_reg1_write_violation(dut, test_func_name) @@ -890,7 +868,6 @@ def iram_reg_write_violation(dut: PanicTestDut, test_func_name: str) -> None: @pytest.mark.generic @pytest.mark.temp_skip_ci(targets=['esp32h21'], reason='lack of runners') @idf_parametrize('config, target', CONFIGS_MEMPROT_IDRAM, indirect=['config', 'target']) -@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_iram_reg2_write_violation(dut: PanicTestDut, test_func_name: str) -> None: iram_reg_write_violation(dut, test_func_name) @@ -928,7 +905,6 @@ def iram_reg3_write_violation(dut: PanicTestDut, test_func_name: str) -> None: @pytest.mark.generic @pytest.mark.temp_skip_ci(targets=['esp32h21'], reason='lack of runners') @idf_parametrize('config, target', CONFIGS_MEMPROT_IDRAM, indirect=['config', 'target']) -@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_iram_reg3_write_violation(dut: PanicTestDut, test_func_name: str) -> None: iram_reg_write_violation(dut, test_func_name) @@ -968,7 +944,6 @@ def iram_reg4_write_violation(dut: PanicTestDut, test_func_name: str) -> None: @pytest.mark.xfail(targets=['esp32s2'], reason='Incorrect panic reason may be observed', run=False) @pytest.mark.temp_skip_ci(targets=['esp32h21'], reason='lack of runners') @idf_parametrize('config, target', CONFIGS_MEMPROT_IDRAM, indirect=['config', 'target']) -@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_iram_reg4_write_violation(dut: PanicTestDut, test_func_name: str) -> None: iram_reg_write_violation(dut, test_func_name) @@ -1001,7 +976,6 @@ def dram_reg1_execute_violation(dut: PanicTestDut, test_func_name: str) -> None: @pytest.mark.xfail(targets=['esp32s2'], reason='Multiple panic reasons for the same test may surface', run=False) @pytest.mark.temp_skip_ci(targets=['esp32h21'], reason='lack of runners') @idf_parametrize('config, target', CONFIGS_MEMPROT_IDRAM, indirect=['config', 'target']) -@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_dram_reg1_execute_violation(dut: PanicTestDut, test_func_name: str) -> None: dram_reg1_execute_violation(dut, test_func_name) @@ -1033,7 +1007,6 @@ def dram_reg2_execute_violation(dut: PanicTestDut, test_func_name: str) -> None: @pytest.mark.xfail(targets=['esp32s2'], reason='Multiple panic reasons for the same test may surface', run=False) @pytest.mark.temp_skip_ci(targets=['esp32h21'], reason='lack of runners') @idf_parametrize('config, target', CONFIGS_MEMPROT_IDRAM, indirect=['config', 'target']) -@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_dram_reg2_execute_violation(dut: PanicTestDut, test_func_name: str) -> None: dram_reg2_execute_violation(dut, test_func_name) @@ -1048,7 +1021,6 @@ def test_non_cache_dram_reg2_execute_violation(dut: PanicTestDut, test_func_name @pytest.mark.generic @pytest.mark.temp_skip_ci(targets=['esp32h21'], reason='lack of runners') @idf_parametrize('config, target', CONFIGS_MEMPROT_RTC_FAST_MEM, indirect=['config', 'target']) -@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_rtc_fast_reg1_execute_violation(dut: PanicTestDut, test_func_name: str) -> None: dut.run_test_func(test_func_name) dut.expect_exact(r'Test error: Test function has returned') @@ -1061,7 +1033,6 @@ def test_rtc_fast_reg1_execute_violation(dut: PanicTestDut, test_func_name: str) reason='Not a violation condition, no PMS peripheral cases', ) @idf_parametrize('config, target', CONFIGS_MEMPROT_RTC_FAST_MEM, indirect=['config', 'target']) -@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_rtc_fast_reg2_execute_violation(dut: PanicTestDut, test_func_name: str) -> None: dut.run_test_func(test_func_name) dut.expect_gme('Memory protection fault') @@ -1085,7 +1056,6 @@ def test_rtc_fast_reg2_execute_violation(dut: PanicTestDut, test_func_name: str) @pytest.mark.xfail(targets=['esp32s2'], reason='Multiple panic reasons for the same test may surface', run=False) @pytest.mark.temp_skip_ci(targets=['esp32h21'], reason='lack of runners') @idf_parametrize('config, target', CONFIGS_MEMPROT_RTC_FAST_MEM, indirect=['config', 'target']) -@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_rtc_fast_reg3_execute_violation(dut: PanicTestDut, test_func_name: str) -> None: dut.run_test_func(test_func_name) @@ -1111,7 +1081,6 @@ def test_rtc_fast_reg3_execute_violation(dut: PanicTestDut, test_func_name: str) @pytest.mark.generic @idf_parametrize('config, target', CONFIGS_MEMPROT_RTC_SLOW_MEM, indirect=['config', 'target']) -@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_rtc_slow_reg1_execute_violation(dut: PanicTestDut, test_func_name: str) -> None: dut.run_test_func(test_func_name) dut.expect_gme('Memory protection fault') @@ -1123,7 +1092,6 @@ def test_rtc_slow_reg1_execute_violation(dut: PanicTestDut, test_func_name: str) @pytest.mark.generic @idf_parametrize('config, target', CONFIGS_MEMPROT_RTC_SLOW_MEM, indirect=['config', 'target']) -@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_rtc_slow_reg2_execute_violation(dut: PanicTestDut, test_func_name: str) -> None: dut.run_test_func(test_func_name) dut.expect_gme('Memory protection fault') @@ -1143,7 +1111,6 @@ def irom_reg_write_violation(dut: PanicTestDut, test_func_name: str) -> None: @pytest.mark.generic @pytest.mark.temp_skip_ci(targets=['esp32h21'], reason='lack of runners') @idf_parametrize('config, target', CONFIGS_MEMPROT_FLASH_IDROM, indirect=['config', 'target']) -@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_irom_reg_write_violation(dut: PanicTestDut, test_func_name: str) -> None: irom_reg_write_violation(dut, test_func_name) @@ -1165,7 +1132,6 @@ def irom_mask_reg_write_violation(dut: PanicTestDut, test_func_name: str) -> Non @pytest.mark.generic @pytest.mark.temp_skip_ci(targets=['esp32h21'], reason='lack of runners') @idf_parametrize('config, target', CONFIGS_MEMPROT_FLASH_IDROM, indirect=['config', 'target']) -@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_irom_mask_reg_write_violation(dut: PanicTestDut, test_func_name: str) -> None: irom_mask_reg_write_violation(dut, test_func_name) @@ -1180,7 +1146,6 @@ def drom_mask_reg_write_violation(dut: PanicTestDut, test_func_name: str) -> Non @pytest.mark.generic @pytest.mark.temp_skip_ci(targets=['esp32h21'], reason='lack of runners') @idf_parametrize('config, target', CONFIGS_MEMPROT_FLASH_IDROM, indirect=['config', 'target']) -@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_drom_mask_reg_write_violation(dut: PanicTestDut, test_func_name: str) -> None: drom_mask_reg_write_violation(dut, test_func_name) @@ -1195,7 +1160,6 @@ def drom_reg_write_violation(dut: PanicTestDut, test_func_name: str) -> None: @pytest.mark.generic @pytest.mark.temp_skip_ci(targets=['esp32h21'], reason='lack of runners') @idf_parametrize('config, target', CONFIGS_MEMPROT_FLASH_IDROM, indirect=['config', 'target']) -@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_drom_reg_write_violation(dut: PanicTestDut, test_func_name: str) -> None: drom_reg_write_violation(dut, test_func_name) @@ -1217,7 +1181,6 @@ def drom_reg_execute_violation(dut: PanicTestDut, test_func_name: str) -> None: @pytest.mark.generic @pytest.mark.temp_skip_ci(targets=['esp32h21'], reason='lack of runners') @idf_parametrize('config, target', CONFIGS_MEMPROT_FLASH_IDROM, indirect=['config', 'target']) -@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_drom_reg_execute_violation(dut: PanicTestDut, test_func_name: str) -> None: drom_reg_execute_violation(dut, test_func_name) @@ -1242,7 +1205,6 @@ def spiram_xip_irom_alignment_reg_execute_violation(dut: PanicTestDut, test_func @pytest.mark.generic @pytest.mark.temp_skip_ci(targets=['esp32c5'], reason='TODO IDF-14835') @idf_parametrize('config, target', CONFIGS_MEMPROT_SPIRAM_XIP_IROM_ALIGNMENT_HEAP, indirect=['config', 'target']) -@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_spiram_xip_irom_alignment_reg_execute_violation(dut: PanicTestDut, test_func_name: str) -> None: spiram_xip_irom_alignment_reg_execute_violation(dut, test_func_name) @@ -1272,7 +1234,6 @@ def spiram_xip_drom_alignment_reg_execute_violation(dut: PanicTestDut, test_func @pytest.mark.generic @pytest.mark.temp_skip_ci(targets=['esp32c5'], reason='TODO IDF-14835') @idf_parametrize('config, target', CONFIGS_MEMPROT_SPIRAM_XIP_DROM_ALIGNMENT_HEAP, indirect=['config', 'target']) -@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_spiram_xip_drom_alignment_reg_execute_violation(dut: PanicTestDut, test_func_name: str) -> None: spiram_xip_drom_alignment_reg_execute_violation(dut, test_func_name) @@ -1289,7 +1250,6 @@ def test_non_cache_spiram_xip_drom_alignment_reg_execute_violation(dut: PanicTes @pytest.mark.generic @pytest.mark.temp_skip_ci(targets=['esp32h21'], reason='lack of runners') @idf_parametrize('config, target', CONFIGS_MEMPROT_INVALID_REGION_PROTECTION_USING_PMA, indirect=['config', 'target']) -@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_invalid_memory_region_write_violation(dut: PanicTestDut, test_func_name: str) -> None: dut.run_test_func(test_func_name) dut.expect_gme('Store access fault') @@ -1300,7 +1260,6 @@ def test_invalid_memory_region_write_violation(dut: PanicTestDut, test_func_name @pytest.mark.generic @pytest.mark.temp_skip_ci(targets=['esp32h21'], reason='lack of runners') @idf_parametrize('config, target', CONFIGS_MEMPROT_INVALID_REGION_PROTECTION_USING_PMA, indirect=['config', 'target']) -@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_invalid_memory_region_execute_violation(dut: PanicTestDut, test_func_name: str) -> None: dut.run_test_func(test_func_name) dut.expect_gme('Instruction access fault') @@ -1311,7 +1270,6 @@ def test_invalid_memory_region_execute_violation(dut: PanicTestDut, test_func_na @pytest.mark.generic @pytest.mark.parametrize('config', ['gdbstub_coredump'], indirect=True) @idf_parametrize('target', ['esp32'], indirect=['target']) -@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_gdbstub_coredump(dut: PanicTestDut) -> None: test_func_name = 'test_storeprohibited' dut.run_test_func(test_func_name) @@ -1337,7 +1295,6 @@ def test_hw_stack_guard_cpu(dut: PanicTestDut, cpu: int) -> None: @pytest.mark.generic @idf_parametrize('config, target', CONFIGS_HW_STACK_GUARD, indirect=['config', 'target']) -@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_hw_stack_guard_cpu0(dut: PanicTestDut, config: str, test_func_name: str) -> None: dut.run_test_func(test_func_name) test_hw_stack_guard_cpu(dut, 0) @@ -1355,7 +1312,6 @@ def test_hw_stack_guard_cpu1(dut: PanicTestDut, config: str, test_func_name: str @pytest.mark.parametrize('config', ['panic'], indirect=True) @pytest.mark.generic @idf_parametrize('target', ['esp32'], indirect=['target']) -@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_illegal_access(dut: PanicTestDut, config: str, test_func_name: str) -> None: dut.run_test_func(test_func_name) if dut.is_xtensa: @@ -1369,7 +1325,6 @@ def test_illegal_access(dut: PanicTestDut, config: str, test_func_name: str) -> @pytest.mark.generic @idf_parametrize('config, target', CONFIG_CAPTURE_DRAM, indirect=['config', 'target']) -@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_capture_dram(dut: PanicTestDut, config: str, test_func_name: str) -> None: dut.run_test_func(test_func_name) regex_pattern = rb'assert failed:[\s\w()]*?\s[.\w/]*\.(?:c|cpp|h|hpp):\d.*$' @@ -1426,7 +1381,6 @@ def _test_coredump_summary(dut: PanicTestDut, flash_encrypted: bool, coredump_en @pytest.mark.generic @idf_parametrize('config, target', CONFIG_COREDUMP_SUMMARY, indirect=['config', 'target']) -@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_coredump_summary(dut: PanicTestDut) -> None: _test_coredump_summary(dut, False, False) @@ -1440,7 +1394,6 @@ def test_coredump_summary_flash_encrypted(dut: PanicTestDut, config: str) -> Non @pytest.mark.generic @idf_parametrize('config', ['coredump_flash_default'], indirect=['config']) @idf_parametrize('target', TARGETS_ALL, indirect=['target']) -@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_tcb_corrupted(dut: PanicTestDut, target: str, config: str, test_func_name: str) -> None: dut.run_test_func(test_func_name) if dut.is_xtensa: @@ -1474,7 +1427,6 @@ def test_tcb_corrupted(dut: PanicTestDut, target: str, config: str, test_func_na @pytest.mark.generic @idf_parametrize('config, target', CONFIG_PANIC_HALT, indirect=['config', 'target']) -@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_panic_halt(dut: PanicTestDut) -> None: dut.run_test_func('test_panic_halt') dut.expect_exact('CPU halted.', timeout=30)