diff options
author | Solomon Peachy <pizza@shaftnet.org> | 2020-08-28 21:45:58 -0400 |
---|---|---|
committer | Solomon Peachy <pizza@shaftnet.org> | 2020-09-03 15:34:28 -0400 |
commit | 0cb162a76b16d58250a33e817af6a763e89a770a (patch) | |
tree | af5ac50c1ec59f665e0a4845672a16d758b44953 /firmware/target/mips/ingenic_jz47xx/dma_acc-jz4740.c | |
parent | 1ae8213a64c23ac86173b8139e01c7cad350ec6b (diff) | |
download | rockbox-0cb162a76b16d58250a33e817af6a763e89a770a.tar.gz rockbox-0cb162a76b16d58250a33e817af6a763e89a770a.zip |
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
Diffstat (limited to 'firmware/target/mips/ingenic_jz47xx/dma_acc-jz4740.c')
-rw-r--r-- | firmware/target/mips/ingenic_jz47xx/dma_acc-jz4740.c | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/firmware/target/mips/ingenic_jz47xx/dma_acc-jz4740.c b/firmware/target/mips/ingenic_jz47xx/dma_acc-jz4740.c index 6f317f7b3f..f4f363b25b 100644 --- a/firmware/target/mips/ingenic_jz47xx/dma_acc-jz4740.c +++ b/firmware/target/mips/ingenic_jz47xx/dma_acc-jz4740.c | |||
@@ -32,7 +32,7 @@ void memset(void *target, unsigned char c, size_t len) | |||
32 | else | 32 | else |
33 | { | 33 | { |
34 | if(((unsigned int)target < 0xa0000000) && len) | 34 | if(((unsigned int)target < 0xa0000000) && len) |
35 | dma_cache_wback_inv((unsigned long)target, len); | 35 | discard_dcache_range(target, len); |
36 | 36 | ||
37 | dp = (unsigned char *)((unsigned int)(&d) | 0xa0000000); | 37 | dp = (unsigned char *)((unsigned int)(&d) | 0xa0000000); |
38 | *(dp + 0) = c; | 38 | *(dp + 0) = c; |
@@ -52,7 +52,6 @@ void memset(void *target, unsigned char c, size_t len) | |||
52 | dp = (unsigned char *)((unsigned int)target + (len & (32 - 1))); | 52 | dp = (unsigned char *)((unsigned int)target + (len & (32 - 1))); |
53 | for(d = 0;d < (len % 32); d++) | 53 | for(d = 0;d < (len % 32); d++) |
54 | *dp++ = c; | 54 | *dp++ = c; |
55 | |||
56 | } | 55 | } |
57 | } | 56 | } |
58 | } | 57 | } |
@@ -68,7 +67,7 @@ void memset16(void *target, unsigned short c, size_t len) | |||
68 | else | 67 | else |
69 | { | 68 | { |
70 | if(((unsigned int)target < 0xa0000000) && len) | 69 | if(((unsigned int)target < 0xa0000000) && len) |
71 | dma_cache_wback_inv((unsigned long)target, len); | 70 | discard_dcache_range(target, len); |
72 | 71 | ||
73 | d = c; | 72 | d = c; |
74 | REG_DMAC_DSAR(ch) = PHYSADDR((unsigned long)&d); | 73 | REG_DMAC_DSAR(ch) = PHYSADDR((unsigned long)&d); |
@@ -97,10 +96,10 @@ void memcpy(void *target, const void *source, size_t len) | |||
97 | _memcpy(target, source, len); | 96 | _memcpy(target, source, len); |
98 | 97 | ||
99 | if(((unsigned int)source < 0xa0000000) && len) | 98 | if(((unsigned int)source < 0xa0000000) && len) |
100 | dma_cache_wback_inv((unsigned long)source, len); | 99 | commit_dcache_range(source, len); |
101 | 100 | ||
102 | if(((unsigned int)target < 0xa0000000) && len) | 101 | if(((unsigned int)target < 0xa0000000) && len) |
103 | dma_cache_wback_inv((unsigned long)target, len); | 102 | discard_dcache_range(target, len); |
104 | 103 | ||
105 | REG_DMAC_DSAR(ch) = PHYSADDR((unsigned long)source); | 104 | REG_DMAC_DSAR(ch) = PHYSADDR((unsigned long)source); |
106 | REG_DMAC_DTAR(ch) = PHYSADDR((unsigned long)target); | 105 | REG_DMAC_DTAR(ch) = PHYSADDR((unsigned long)target); |