summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLey Foon Tan <leyfoon.tan@starfivetech.com>2023-06-19 10:44:39 +0300
committerLey Foon Tan <leyfoon.tan@starfivetech.com>2023-12-04 06:00:15 +0300
commita78bb7d1b60c9693559587385c11ac0a0c0a0d9b (patch)
treee114fbe09e4581ecc7e71cebc30209a98adccf8f
parent80a25b6bcf045b1c2b6e337efd727114286993ac (diff)
downloadlinux-a78bb7d1b60c9693559587385c11ac0a0c0a0d9b.tar.xz
riscv: Update arch_sync_dma_for_device() function
Handle different DMA directions. Signed-off-by: Ley Foon Tan <leyfoon.tan@starfivetech.com>
-rw-r--r--arch/riscv/mm/dma-noncoherent.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/arch/riscv/mm/dma-noncoherent.c b/arch/riscv/mm/dma-noncoherent.c
index 8a1f6e7377a9..4220f6d7d377 100644
--- a/arch/riscv/mm/dma-noncoherent.c
+++ b/arch/riscv/mm/dma-noncoherent.c
@@ -22,7 +22,17 @@ static bool noncoherent_supported = true;
void arch_sync_dma_for_device(phys_addr_t paddr, size_t size, enum dma_data_direction dir)
{
- sbi_cache_flush(paddr, size);
+ switch (dir) {
+ case DMA_BIDIRECTIONAL:
+ case DMA_TO_DEVICE:
+ sbi_cache_flush(paddr, size);
+ break;
+ case DMA_FROM_DEVICE:
+ sbi_cache_invalidate(paddr, size);
+ break;
+ default:
+ BUG();
+ }
}
void arch_sync_dma_for_cpu(phys_addr_t paddr, size_t size, enum dma_data_direction dir)