Merge branch 'srmao/esp_driver_dma_esp32p4_rev1_tests' into 'master'

test(esp_driver_dma): add esp32p4 rev1 test apps

Closes IDF-15450 and IDF-15443

See merge request espressif/esp-idf!48888
This commit is contained in:
morris
2026-05-27 12:06:12 +08:00
6 changed files with 60 additions and 20 deletions

View File

@@ -31,14 +31,14 @@ typedef struct {
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
static test_crc_case_t crc_test_cases[] = {
{
.crc_bit_width = 8,
.init_value = 0x00,
.poly_hex = 0x07,
.expected_result = 0xB8,
.expected_result = 0x1C,
},
{
.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_result = true,
.final_xor = 0x1F,
.expected_result = 0xB7,
.expected_result = 0xC8,
},
{
.crc_bit_width = 16,
.init_value = 0xFFFF,
.poly_hex = 0x1021,
.expected_result = 0xA9B2,
.expected_result = 0x7563,
},
{
.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_result = true,
.final_xor = 0xABCD,
.expected_result = 0x9C6B,
.expected_result = 0xD5B9,
}
};
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 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();
crc_async_user_context_t user_ctx = {
.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_ASSERT_EQUAL(pdTRUE, xSemaphoreTake(sem, pdMS_TO_TICKS(100)));
printf("CRC Result: 0x%"PRIx32", Expected: 0x9D1B\r\n", user_ctx.crc_result);
TEST_ASSERT_EQUAL(0x9D1B, user_ctx.crc_result);
printf("CRC Result: 0x%"PRIx32", Expected: 0xE69A\r\n", user_ctx.crc_result);
TEST_ASSERT_EQUAL(0xE69A, user_ctx.crc_result);
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 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);
crc_async_user_context_t user_ctx = {
.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)));
}
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);
};

View File

@@ -33,28 +33,28 @@ static test_crc_case_t crc_test_cases[] = {
.crc_bit_width = 8,
.init_value = 0x00,
.poly_hex = 0x07,
.expected_result = 0xB8,
.expected_result = 0x1C,
},
[1] = {
.crc_bit_width = 8,
.init_value = 0x00,
.poly_hex = 0x07,
.reverse_data_mask = true, // refin = true
.expected_result = 0xF0,
.expected_result = 0xB9,
},
// CRC16, x^16+x^12+x^5+1
[2] = {
.crc_bit_width = 16,
.init_value = 0xFFFF,
.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
[3] = {
.crc_bit_width = 32,
.init_value = 0xFFFFFFFF,
.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;
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);
TEST_ASSERT_EQUAL((uintptr_t)test_input_string % SOC_MEMSPI_ENCRYPTION_ALIGNMENT, 0);

View File

@@ -20,7 +20,21 @@ from pytest_embedded_idf.utils import soc_filtered_targets
indirect=['target'],
)
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
@@ -33,7 +47,7 @@ def test_dma(dut: Dut) -> None:
)
@idf_parametrize('target', ['esp32s3'], indirect=['target'])
def test_dma_psram(dut: Dut) -> None:
dut.run_all_single_board_cases(reset=True)
dut.run_all_single_board_cases()
@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'])
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
@@ -59,7 +73,7 @@ def test_dma_weighted_arbitration(dut: Dut) -> None:
)
@idf_parametrize('target', ['esp32p4', 'esp32c5'], indirect=['target'])
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
@@ -72,4 +86,4 @@ def test_dma_flash_encryption(dut: Dut) -> None:
)
@idf_parametrize('target', ['esp32s3'], indirect=['target'])
def test_dma_flash_encryption_s3_f4r8(dut: Dut) -> None:
dut.run_all_single_board_cases(reset=True)
dut.run_all_single_board_cases()

View File

@@ -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

View File

@@ -19,6 +19,20 @@ def test_dma2d(dut: Dut) -> None:
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.parametrize(
'config',

View File

@@ -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