From 76926dacdda79907212ecbe37aeda9cd456d39a8 Mon Sep 17 00:00:00 2001 From: Guennadi Liakhovetski Date: Fri, 8 Sep 2023 15:16:30 +0200 Subject: [PATCH] library-manager: allocate DMA buffer uncached The library manager uses a DMA buffer only to receive data via DMA from the host and to copy it from it once completely to a destination buffer. With that flow using cached access to the DMA buffer doesn't accelerate IO but adds complexity and can slow it down instead. Switch over to using uncached access. Signed-off-by: Guennadi Liakhovetski --- src/library_manager/lib_manager.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/library_manager/lib_manager.c b/src/library_manager/lib_manager.c index 8bbef25e1..90a0435a4 100644 --- a/src/library_manager/lib_manager.c +++ b/src/library_manager/lib_manager.c @@ -424,15 +424,13 @@ static int lib_manager_dma_buffer_alloc(struct lib_manager_dma_ext *dma_ext, * allocate new buffer: this is the actual DMA buffer but we * traditionally allocate a cached address for it */ - dma_ext->dma_addr = (uintptr_t)rballoc_align(0, SOF_MEM_CAPS_DMA, size, + dma_ext->dma_addr = (uintptr_t)rballoc_align(SOF_MEM_FLAG_COHERENT, SOF_MEM_CAPS_DMA, size, dma_ext->addr_align); if (!dma_ext->dma_addr) { tr_err(&lib_manager_tr, "lib_manager_dma_buffer_alloc(): alloc failed"); return -ENOMEM; } - dcache_invalidate_region((void __sparse_cache *)dma_ext->dma_addr, size); - tr_dbg(&lib_manager_tr, "lib_manager_dma_buffer_alloc(): address: %#lx, size: %u", dma_ext->dma_addr, size); @@ -528,7 +526,7 @@ static int lib_manager_store_data(struct lib_manager_dma_ext *dma_ext, ret = lib_manager_load_data_from_host(dma_ext, bytes_to_copy); if (ret < 0) return ret; - dcache_invalidate_region((void __sparse_cache *)dma_ext->dma_addr, bytes_to_copy); + memcpy_s((__sparse_force uint8_t *)dst_addr + copied_bytes, bytes_to_copy, (void *)dma_ext->dma_addr, bytes_to_copy); copied_bytes += bytes_to_copy;