Merge branch 'srmao/esp_driver_dma_esp32p4_rev1_tests_v6.1' into 'release/v6.1'

test(esp_driver_dma): add esp32p4 rev1 test apps (v6.1)

See merge request espressif/esp-idf!48941
This commit is contained in:
morris
2026-06-04 11:17:31 +08:00
6 changed files with 60 additions and 20 deletions
@@ -31,14 +31,14 @@ typedef struct {
static void test_async_crc_various_poly(async_crc_handle_t driver) static void test_async_crc_various_poly(async_crc_handle_t driver)
{ {
static const char test_input_string[] __attribute__((aligned(16))) = "GDMACRC Share::Connect::Innovate"; static const char test_input_string[] __attribute__((aligned(16))) = "GDMACRC::TEST::X";
// CRC online: https://www.lddgo.net/en/encrypt/crc // CRC online: https://www.lddgo.net/en/encrypt/crc
static test_crc_case_t crc_test_cases[] = { static test_crc_case_t crc_test_cases[] = {
{ {
.crc_bit_width = 8, .crc_bit_width = 8,
.init_value = 0x00, .init_value = 0x00,
.poly_hex = 0x07, .poly_hex = 0x07,
.expected_result = 0xB8, .expected_result = 0x1C,
}, },
{ {
.crc_bit_width = 8, .crc_bit_width = 8,
@@ -47,13 +47,13 @@ static void test_async_crc_various_poly(async_crc_handle_t driver)
.reverse_data_mask = true, .reverse_data_mask = true,
.reverse_result = true, .reverse_result = true,
.final_xor = 0x1F, .final_xor = 0x1F,
.expected_result = 0xB7, .expected_result = 0xC8,
}, },
{ {
.crc_bit_width = 16, .crc_bit_width = 16,
.init_value = 0xFFFF, .init_value = 0xFFFF,
.poly_hex = 0x1021, .poly_hex = 0x1021,
.expected_result = 0xA9B2, .expected_result = 0x7563,
}, },
{ {
.crc_bit_width = 16, .crc_bit_width = 16,
@@ -62,7 +62,7 @@ static void test_async_crc_various_poly(async_crc_handle_t driver)
.reverse_data_mask = true, .reverse_data_mask = true,
.reverse_result = true, .reverse_result = true,
.final_xor = 0xABCD, .final_xor = 0xABCD,
.expected_result = 0x9C6B, .expected_result = 0xD5B9,
} }
}; };
uint32_t result = 0; uint32_t result = 0;
@@ -128,7 +128,7 @@ static bool test_async_crc_result_cb(async_crc_handle_t crc_hdl, async_crc_event
static void test_async_crc_calc_with_callback(async_crc_handle_t driver) static void test_async_crc_calc_with_callback(async_crc_handle_t driver)
{ {
static const char test_input_string[] __attribute__((aligned(16))) = "GDMACRC Share::Connect::Innovate"; static const char test_input_string[] __attribute__((aligned(16))) = "GDMACRC::TEST::X";
SemaphoreHandle_t sem = xSemaphoreCreateBinary(); SemaphoreHandle_t sem = xSemaphoreCreateBinary();
crc_async_user_context_t user_ctx = { crc_async_user_context_t user_ctx = {
.sem = sem, .sem = sem,
@@ -143,8 +143,8 @@ static void test_async_crc_calc_with_callback(async_crc_handle_t driver)
TEST_ESP_OK(esp_async_crc_calc(driver, test_input_string, strlen(test_input_string), &params, test_async_crc_result_cb, &user_ctx)); TEST_ESP_OK(esp_async_crc_calc(driver, test_input_string, strlen(test_input_string), &params, test_async_crc_result_cb, &user_ctx));
TEST_ASSERT_EQUAL(pdTRUE, xSemaphoreTake(sem, pdMS_TO_TICKS(100))); TEST_ASSERT_EQUAL(pdTRUE, xSemaphoreTake(sem, pdMS_TO_TICKS(100)));
printf("CRC Result: 0x%"PRIx32", Expected: 0x9D1B\r\n", user_ctx.crc_result); printf("CRC Result: 0x%"PRIx32", Expected: 0xE69A\r\n", user_ctx.crc_result);
TEST_ASSERT_EQUAL(0x9D1B, user_ctx.crc_result); TEST_ASSERT_EQUAL(0xE69A, user_ctx.crc_result);
vSemaphoreDelete(sem); vSemaphoreDelete(sem);
} }
@@ -172,7 +172,7 @@ TEST_CASE("async_crc calculation with callback", "[async_crc]")
static void test_async_crc_multiple_requests(async_crc_handle_t driver) static void test_async_crc_multiple_requests(async_crc_handle_t driver)
{ {
static const char test_input_string[] __attribute__((aligned(16))) = "GDMACRC Share::Connect::Innovate"; static const char test_input_string[] __attribute__((aligned(16))) = "GDMACRC::TEST::X";
SemaphoreHandle_t sem = xSemaphoreCreateCounting(TEST_ASYNC_CRC_BENCH_COUNTS, 0); SemaphoreHandle_t sem = xSemaphoreCreateCounting(TEST_ASYNC_CRC_BENCH_COUNTS, 0);
crc_async_user_context_t user_ctx = { crc_async_user_context_t user_ctx = {
.sem = sem, .sem = sem,
@@ -192,7 +192,7 @@ static void test_async_crc_multiple_requests(async_crc_handle_t driver)
TEST_ASSERT_EQUAL(pdTRUE, xSemaphoreTake(sem, pdMS_TO_TICKS(100))); TEST_ASSERT_EQUAL(pdTRUE, xSemaphoreTake(sem, pdMS_TO_TICKS(100)));
} }
printf("CRC Result of request 0x%"PRIx32"\r\n", user_ctx.crc_result); printf("CRC Result of request 0x%"PRIx32"\r\n", user_ctx.crc_result);
TEST_ASSERT_EQUAL(0x692F6C7E, user_ctx.crc_result); TEST_ASSERT_EQUAL(0x069A43E6, user_ctx.crc_result);
vSemaphoreDelete(sem); vSemaphoreDelete(sem);
}; };
@@ -33,28 +33,28 @@ static test_crc_case_t crc_test_cases[] = {
.crc_bit_width = 8, .crc_bit_width = 8,
.init_value = 0x00, .init_value = 0x00,
.poly_hex = 0x07, .poly_hex = 0x07,
.expected_result = 0xB8, .expected_result = 0x1C,
}, },
[1] = { [1] = {
.crc_bit_width = 8, .crc_bit_width = 8,
.init_value = 0x00, .init_value = 0x00,
.poly_hex = 0x07, .poly_hex = 0x07,
.reverse_data_mask = true, // refin = true .reverse_data_mask = true, // refin = true
.expected_result = 0xF0, .expected_result = 0xB9,
}, },
// CRC16, x^16+x^12+x^5+1 // CRC16, x^16+x^12+x^5+1
[2] = { [2] = {
.crc_bit_width = 16, .crc_bit_width = 16,
.init_value = 0xFFFF, .init_value = 0xFFFF,
.poly_hex = 0x1021, .poly_hex = 0x1021,
.expected_result = 0xA9B2, .expected_result = 0x7563,
}, },
// CRC32, x32+x26+x23+x22+x16+x12+x11+x10+x8+x7+x5+x4+x2+x+1 // CRC32, x32+x26+x23+x22+x16+x12+x11+x10+x8+x7+x5+x4+x2+x+1
[3] = { [3] = {
.crc_bit_width = 32, .crc_bit_width = 32,
.init_value = 0xFFFFFFFF, .init_value = 0xFFFFFFFF,
.poly_hex = 0x04C11DB7, .poly_hex = 0x04C11DB7,
.expected_result = 0x692F6C7E, .expected_result = 0x069A43E6,
} }
}; };
@@ -70,7 +70,7 @@ static void test_gdma_crc_calculation(gdma_channel_handle_t tx_chan, int test_nu
uint32_t crc_result = 0; uint32_t crc_result = 0;
static const char test_input_string[] __attribute__((aligned(SOC_MEMSPI_ENCRYPTION_ALIGNMENT))) = "GDMACRC Share::Connect::Innovate"; static const char test_input_string[] __attribute__((aligned(SOC_MEMSPI_ENCRYPTION_ALIGNMENT))) = "GDMACRC::TEST::X";
size_t input_data_size = strlen(test_input_string); size_t input_data_size = strlen(test_input_string);
TEST_ASSERT_EQUAL((uintptr_t)test_input_string % SOC_MEMSPI_ENCRYPTION_ALIGNMENT, 0); TEST_ASSERT_EQUAL((uintptr_t)test_input_string % SOC_MEMSPI_ENCRYPTION_ALIGNMENT, 0);
@@ -20,7 +20,21 @@ from pytest_embedded_idf.utils import soc_filtered_targets
indirect=['target'], indirect=['target'],
) )
def test_dma(dut: Dut) -> None: def test_dma(dut: Dut) -> None:
dut.run_all_single_board_cases(reset=True) dut.run_all_single_board_cases()
@pytest.mark.generic
@pytest.mark.esp32p4_rev1
@pytest.mark.parametrize(
'config',
[
'esp32p4_rev1',
],
indirect=True,
)
@idf_parametrize('target', ['esp32p4'], indirect=['target'])
def test_dma_esp32p4_rev1(dut: Dut) -> None:
dut.run_all_single_board_cases()
@pytest.mark.octal_psram @pytest.mark.octal_psram
@@ -33,7 +47,7 @@ def test_dma(dut: Dut) -> None:
) )
@idf_parametrize('target', ['esp32s3'], indirect=['target']) @idf_parametrize('target', ['esp32s3'], indirect=['target'])
def test_dma_psram(dut: Dut) -> None: def test_dma_psram(dut: Dut) -> None:
dut.run_all_single_board_cases(reset=True) dut.run_all_single_board_cases()
@pytest.mark.generic @pytest.mark.generic
@@ -46,7 +60,7 @@ def test_dma_psram(dut: Dut) -> None:
) )
@idf_parametrize('target', soc_filtered_targets('SOC_GDMA_SUPPORT_WEIGHTED_ARBITRATION == 1'), indirect=['target']) @idf_parametrize('target', soc_filtered_targets('SOC_GDMA_SUPPORT_WEIGHTED_ARBITRATION == 1'), indirect=['target'])
def test_dma_weighted_arbitration(dut: Dut) -> None: def test_dma_weighted_arbitration(dut: Dut) -> None:
dut.run_all_single_board_cases(reset=True) dut.run_all_single_board_cases()
@pytest.mark.flash_encryption @pytest.mark.flash_encryption
@@ -59,7 +73,7 @@ def test_dma_weighted_arbitration(dut: Dut) -> None:
) )
@idf_parametrize('target', ['esp32p4', 'esp32c5'], indirect=['target']) @idf_parametrize('target', ['esp32p4', 'esp32c5'], indirect=['target'])
def test_dma_flash_encryption(dut: Dut) -> None: def test_dma_flash_encryption(dut: Dut) -> None:
dut.run_all_single_board_cases(reset=True) dut.run_all_single_board_cases()
@pytest.mark.flash_encryption_f4r8 @pytest.mark.flash_encryption_f4r8
@@ -72,4 +86,4 @@ def test_dma_flash_encryption(dut: Dut) -> None:
) )
@idf_parametrize('target', ['esp32s3'], indirect=['target']) @idf_parametrize('target', ['esp32s3'], indirect=['target'])
def test_dma_flash_encryption_s3_f4r8(dut: Dut) -> None: def test_dma_flash_encryption_s3_f4r8(dut: Dut) -> None:
dut.run_all_single_board_cases(reset=True) dut.run_all_single_board_cases()
@@ -0,0 +1,6 @@
CONFIG_IDF_TARGET="esp32p4"
CONFIG_ESP32P4_SELECTS_REV_LESS_V3=y
CONFIG_SPIRAM=y
CONFIG_SPIRAM_MODE_HEX=y
CONFIG_SPIRAM_SPEED_200M=y
@@ -19,6 +19,20 @@ def test_dma2d(dut: Dut) -> None:
dut.run_all_single_board_cases() dut.run_all_single_board_cases()
@pytest.mark.generic
@pytest.mark.esp32p4_rev1
@pytest.mark.parametrize(
'config',
[
'esp32p4_rev1',
],
indirect=True,
)
@idf_parametrize('target', ['esp32p4'], indirect=['target'])
def test_dma2d_esp32p4_rev1(dut: Dut) -> None:
dut.run_all_single_board_cases()
@pytest.mark.flash_encryption @pytest.mark.flash_encryption
@pytest.mark.parametrize( @pytest.mark.parametrize(
'config', 'config',
@@ -0,0 +1,6 @@
CONFIG_IDF_TARGET="esp32p4"
CONFIG_ESP32P4_SELECTS_REV_LESS_V3=y
CONFIG_SPIRAM=y
CONFIG_SPIRAM_MODE_HEX=y
CONFIG_SPIRAM_SPEED_200M=y