From 70acf169e02a9198c99fcc315e67672c07aa7b2b Mon Sep 17 00:00:00 2001 From: armando Date: Fri, 19 Sep 2025 15:58:04 +0800 Subject: [PATCH] fix(sd): use heap_caps_alloc to maintain desc alignment --- .../include/esp_private/sd_host_private.h | 4 ++-- components/esp_driver_sdmmc/src/sd_host_sdmmc.c | 13 +------------ 2 files changed, 3 insertions(+), 14 deletions(-) diff --git a/components/esp_driver_sdmmc/include/esp_private/sd_host_private.h b/components/esp_driver_sdmmc/include/esp_private/sd_host_private.h index 99d21ce230..6f0d8fcf2d 100644 --- a/components/esp_driver_sdmmc/include/esp_private/sd_host_private.h +++ b/components/esp_driver_sdmmc/include/esp_private/sd_host_private.h @@ -38,9 +38,9 @@ extern "C" { #endif #if SOC_SDMMC_PSRAM_DMA_CAPABLE -#define SD_HOST_SDMMC_DMA_ALLOC_CAPS MALLOC_CAP_DEFAULT +#define SD_HOST_SDMMC_DMA_ALLOC_CAPS MALLOC_CAP_DEFAULT | MALLOC_CAP_DMA #else -#define SD_HOST_SDMMC_DMA_ALLOC_CAPS (MALLOC_CAP_INTERNAL | MALLOC_CAP_8BIT) +#define SD_HOST_SDMMC_DMA_ALLOC_CAPS (MALLOC_CAP_INTERNAL | MALLOC_CAP_8BIT | MALLOC_CAP_DMA) #endif #if !SOC_RCC_IS_INDEPENDENT diff --git a/components/esp_driver_sdmmc/src/sd_host_sdmmc.c b/components/esp_driver_sdmmc/src/sd_host_sdmmc.c index 56aed5ef9f..66c1764b81 100644 --- a/components/esp_driver_sdmmc/src/sd_host_sdmmc.c +++ b/components/esp_driver_sdmmc/src/sd_host_sdmmc.c @@ -82,19 +82,8 @@ esp_err_t sd_host_create_sdmmc_controller(const sd_host_sdmmc_cfg_t *config, sd_ ESP_RETURN_ON_ERROR(ret, TAG, "no available sd host controller"); } - size_t alignment = 0; - size_t cache_alignment_bytes = 0; - ret = esp_cache_get_alignment(0, &cache_alignment_bytes); - assert(ret == ESP_OK); - if (cache_alignment_bytes != 0) { - alignment = cache_alignment_bytes; - } else { - alignment = 4; - } - - ESP_LOGD(TAG, "size: %d, alignment: %d", sizeof(sdmmc_desc_t), alignment); ctlr->dma_desc_num = config->dma_desc_num ? config->dma_desc_num : SD_HOST_SDMMC_DMA_DESC_CNT; - ctlr->dma_desc = heap_caps_aligned_calloc(alignment, 1, sizeof(sdmmc_desc_t) * ctlr->dma_desc_num, SD_HOST_SDMMC_DMA_ALLOC_CAPS); + ctlr->dma_desc = heap_caps_calloc(1, sizeof(sdmmc_desc_t) * ctlr->dma_desc_num, SD_HOST_SDMMC_DMA_ALLOC_CAPS); ESP_LOGD(TAG, "ctlr->dma_desc addr: %p", ctlr->dma_desc); ESP_RETURN_ON_FALSE(ctlr->dma_desc, ESP_ERR_NO_MEM, TAG, "no mem for dma descriptors");