From 0cb162a76b16d58250a33e817af6a763e89a770a Mon Sep 17 00:00:00 2001 From: Solomon Peachy Date: Fri, 28 Aug 2020 21:45:58 -0400 Subject: mips: Heavily rework DMA & caching code Based on code originally written by Amaury Pouly (g#1789, g#1791, g#1527) but rebased and heavily updated. Change-Id: Ic794abb5e8d89feb4b88fc3abe854270fb28db70 --- firmware/target/mips/ingenic_jz47xx/dma_acc-jz4760.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'firmware/target/mips/ingenic_jz47xx/dma_acc-jz4760.c') diff --git a/firmware/target/mips/ingenic_jz47xx/dma_acc-jz4760.c b/firmware/target/mips/ingenic_jz47xx/dma_acc-jz4760.c index 4cdea2ad08..87d2b4e210 100644 --- a/firmware/target/mips/ingenic_jz47xx/dma_acc-jz4760.c +++ b/firmware/target/mips/ingenic_jz47xx/dma_acc-jz4760.c @@ -29,7 +29,7 @@ void memset_dma(void *target, int c, size_t len, unsigned int bits) unsigned char *dp; if(((unsigned int)target < 0xa0000000) && len) - dma_cache_wback_inv((unsigned long)target, len); + discard_dcache_range(target, len); dp = (unsigned char *)((unsigned int)(&d) | 0xa0000000); *(dp + 0) = c; @@ -68,14 +68,14 @@ void memset_dma(void *target, int c, size_t len, unsigned int bits) void memcpy_dma(void *target, const void *source, size_t len, unsigned int bits) { if(((unsigned int)source < 0xa0000000) && len) - dma_cache_wback_inv((unsigned long)source, len); - + commit_dcache_range(source, len); + if(((unsigned int)target < 0xa0000000) && len) - dma_cache_wback_inv((unsigned long)target, len); - + discard_dcache_range(target, len); + REG_MDMAC_DCCSR(MDMA_CHANNEL) = 0; REG_MDMAC_DSAR(MDMA_CHANNEL) = PHYSADDR((unsigned long)source); - REG_MDMAC_DTAR(MDMA_CHANNEL) = PHYSADDR((unsigned long)target); + REG_MDMAC_DTAR(MDMA_CHANNEL) = PHYSADDR((unsigned long)target); REG_MDMAC_DRSR(MDMA_CHANNEL) = DMAC_DRSR_RS_AUTO; switch (bits) { -- cgit v1.2.3