@@ -395,25 +395,18 @@ TEST_CASE("GDMA M2M Mode", "[GDMA][M2M]")
395395typedef struct {
396396 SemaphoreHandle_t done_sem ;
397397 dma_buffer_split_array_t * align_array ;
398- size_t split_alignment ;
399- bool need_invalidate ;
400398} test_gdma_context_t ;
401399
402- static bool test_gdma_m2m_unalgined_rx_eof_callback (gdma_channel_handle_t dma_chan , gdma_event_data_t * event_data , void * user_data )
400+ static bool test_gdma_m2m_unaligned_rx_eof_callback (gdma_channel_handle_t dma_chan , gdma_event_data_t * event_data , void * user_data )
403401{
404402 BaseType_t task_woken = pdFALSE ;
405403 test_gdma_context_t * user_ctx = (test_gdma_context_t * )user_data ;
406- for (int i = 0 ; i < 3 ; i ++ ) {
407- if (user_ctx -> align_array -> aligned_buffer [i ].aligned_buffer && user_ctx -> need_invalidate ) {
408- TEST_ESP_OK (esp_cache_msync (user_ctx -> align_array -> aligned_buffer [i ].aligned_buffer , ALIGN_UP (user_ctx -> align_array -> aligned_buffer [i ].length , user_ctx -> split_alignment ), ESP_CACHE_MSYNC_FLAG_DIR_M2C ));
409- }
410- }
411- TEST_ESP_OK (esp_dma_merge_aligned_buffers (user_ctx -> align_array ));
404+ TEST_ESP_OK (esp_dma_merge_aligned_rx_buffers (user_ctx -> align_array ));
412405 xSemaphoreGiveFromISR (user_ctx -> done_sem , & task_woken );
413406 return task_woken == pdTRUE ;
414407}
415408
416- static void test_gdma_m2m_unalgined_buffer_test (uint8_t * dst_data , uint8_t * src_data , size_t data_length , size_t offset_len , size_t split_alignment )
409+ static void test_gdma_m2m_unaligned_buffer_test (uint8_t * dst_data , uint8_t * src_data , size_t data_length , size_t offset_len )
417410{
418411 TEST_ASSERT_NOT_NULL (src_data );
419412 TEST_ASSERT_NOT_NULL (dst_data );
@@ -458,29 +451,24 @@ static void test_gdma_m2m_unalgined_buffer_test(uint8_t *dst_data, uint8_t *src_
458451 };
459452 TEST_ESP_OK (gdma_link_mount_buffers (tx_link_list , 0 , tx_buf_mount_config , sizeof (tx_buf_mount_config ) / sizeof (gdma_buffer_mount_config_t ), NULL ));
460453
461- // allocate stash_buffer, should be freed by the user
462- void * stash_buffer = heap_caps_aligned_calloc (split_alignment , 2 , split_alignment , MALLOC_CAP_DMA | MALLOC_CAP_INTERNAL | MALLOC_CAP_8BIT );
463- size_t stash_buffer_len = 2 * split_alignment ;
464454 dma_buffer_split_array_t align_array = {0 };
465455 gdma_buffer_mount_config_t rx_aligned_buf_mount_config [3 ] = {0 };
466-
467- TEST_ESP_OK (esp_dma_split_buffer_to_aligned (dst_data + offset_len , data_length , stash_buffer , stash_buffer_len , split_alignment , & align_array ));
456+ uint8_t * stash_buffer = NULL ;
457+ TEST_ESP_OK (esp_dma_split_rx_buffer_to_cache_aligned (dst_data + offset_len , data_length , & align_array , & stash_buffer ));
468458 for (int i = 0 ; i < 3 ; i ++ ) {
469459 rx_aligned_buf_mount_config [i ].buffer = align_array .aligned_buffer [i ].aligned_buffer ;
470460 rx_aligned_buf_mount_config [i ].length = align_array .aligned_buffer [i ].length ;
471461 }
472462 TEST_ESP_OK (gdma_link_mount_buffers (rx_link_list , 0 , rx_aligned_buf_mount_config , 3 , NULL ));
473463
474464 gdma_rx_event_callbacks_t rx_cbs = {
475- .on_recv_eof = test_gdma_m2m_unalgined_rx_eof_callback ,
465+ .on_recv_eof = test_gdma_m2m_unaligned_rx_eof_callback ,
476466 };
477467 SemaphoreHandle_t done_sem = xSemaphoreCreateBinary ();
478468 TEST_ASSERT_NOT_NULL (done_sem );
479469 test_gdma_context_t user_ctx = {
480470 .done_sem = done_sem ,
481471 .align_array = & align_array ,
482- .split_alignment = split_alignment ,
483- .need_invalidate = sram_alignment ? true : false,
484472 };
485473 TEST_ESP_OK (gdma_register_rx_event_callbacks (rx_chan , & rx_cbs , & user_ctx ));
486474
@@ -494,42 +482,41 @@ static void test_gdma_m2m_unalgined_buffer_test(uint8_t *dst_data, uint8_t *src_
494482 TEST_ASSERT_EQUAL (i % 256 , dst_data [i + offset_len ]);
495483 }
496484
497- free (stash_buffer );
498485 TEST_ESP_OK (gdma_del_link_list (tx_link_list ));
499486 TEST_ESP_OK (gdma_del_link_list (rx_link_list ));
500487 TEST_ESP_OK (gdma_del_channel (tx_chan ));
501488 TEST_ESP_OK (gdma_del_channel (rx_chan ));
502489 vSemaphoreDelete (done_sem );
490+ free (stash_buffer );
503491}
504492
505493TEST_CASE ("GDMA M2M Unaligned RX Buffer Test" , "[GDMA][M2M]" )
506494{
507495 uint8_t * sbuf = heap_caps_aligned_calloc (64 , 1 , 10240 , MALLOC_CAP_DMA | MALLOC_CAP_INTERNAL | MALLOC_CAP_8BIT );
508496 uint8_t * dbuf = heap_caps_aligned_calloc (64 , 1 , 10240 , MALLOC_CAP_DMA | MALLOC_CAP_INTERNAL | MALLOC_CAP_8BIT );
509497
510- size_t split_alignment = 64 ;
511498 // case buffer len less than buffer alignment
512- test_gdma_m2m_unalgined_buffer_test (dbuf , sbuf , 60 , 0 , split_alignment );
513- test_gdma_m2m_unalgined_buffer_test (dbuf , sbuf , 60 , 4 , split_alignment );
514- test_gdma_m2m_unalgined_buffer_test (dbuf , sbuf , 60 , 2 , split_alignment );
499+ test_gdma_m2m_unaligned_buffer_test (dbuf , sbuf , 60 , 0 );
500+ test_gdma_m2m_unaligned_buffer_test (dbuf , sbuf , 60 , 4 );
501+ test_gdma_m2m_unaligned_buffer_test (dbuf , sbuf , 60 , 2 );
515502
516503 // case buffer head aligned
517- test_gdma_m2m_unalgined_buffer_test (dbuf , sbuf , 246 , 0 , split_alignment );
518- test_gdma_m2m_unalgined_buffer_test (dbuf , sbuf , 8182 , 0 , split_alignment );
504+ test_gdma_m2m_unaligned_buffer_test (dbuf , sbuf , 246 , 0 );
505+ test_gdma_m2m_unaligned_buffer_test (dbuf , sbuf , 8182 , 0 );
519506
520507 // case buffer tail aligned
521- test_gdma_m2m_unalgined_buffer_test (dbuf , sbuf , 246 , 10 , split_alignment );
522- test_gdma_m2m_unalgined_buffer_test (dbuf , sbuf , 8182 , 10 , split_alignment );
508+ test_gdma_m2m_unaligned_buffer_test (dbuf , sbuf , 246 , 10 );
509+ test_gdma_m2m_unaligned_buffer_test (dbuf , sbuf , 8182 , 10 );
523510
524511 // case buffer unaligned
525- test_gdma_m2m_unalgined_buffer_test (dbuf , sbuf , 100 , 10 , split_alignment );
526- test_gdma_m2m_unalgined_buffer_test (dbuf , sbuf , 10 , 60 , split_alignment );
527- test_gdma_m2m_unalgined_buffer_test (dbuf , sbuf , 256 , 10 , split_alignment );
528- test_gdma_m2m_unalgined_buffer_test (dbuf , sbuf , 8192 , 10 , split_alignment );
512+ test_gdma_m2m_unaligned_buffer_test (dbuf , sbuf , 100 , 10 );
513+ test_gdma_m2m_unaligned_buffer_test (dbuf , sbuf , 10 , 60 );
514+ test_gdma_m2m_unaligned_buffer_test (dbuf , sbuf , 256 , 10 );
515+ test_gdma_m2m_unaligned_buffer_test (dbuf , sbuf , 8192 , 10 );
529516
530517 // case buffer full aligned
531- test_gdma_m2m_unalgined_buffer_test (dbuf , sbuf , 256 , 0 , split_alignment );
532- test_gdma_m2m_unalgined_buffer_test (dbuf , sbuf , 8192 , 0 , split_alignment );
518+ test_gdma_m2m_unaligned_buffer_test (dbuf , sbuf , 256 , 0 );
519+ test_gdma_m2m_unaligned_buffer_test (dbuf , sbuf , 8192 , 0 );
533520
534521 free (sbuf );
535522 free (dbuf );
0 commit comments