summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcin Bukat <marcin.bukat@gmail.com>2011-09-06 12:39:06 +0000
committerMarcin Bukat <marcin.bukat@gmail.com>2011-09-06 12:39:06 +0000
commit6d959a06253affe5cc1797f72f3c69d489aee8f9 (patch)
tree2515561d999b1f3e9db26e2fd4042a1031f914ca
parent4e6daf085692e4729aa1f70f27b1b04e704a864f (diff)
downloadrockbox-6d959a06253affe5cc1797f72f3c69d489aee8f9.zip
rockbox-6d959a06253affe5cc1797f72f3c69d489aee8f9.tar.gz
rockbox-6d959a06253affe5cc1797f72f3c69d489aee8f9.tar.bz2
rockbox-6d959a06253affe5cc1797f72f3c69d489aee8f9.tar.xz
rk27xx - implement cache handling functions
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@30451 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--firmware/target/arm/rk27xx/system-rk27xx.c22
1 files changed, 20 insertions, 2 deletions
diff --git a/firmware/target/arm/rk27xx/system-rk27xx.c b/firmware/target/arm/rk27xx/system-rk27xx.c
index 1459770..e73edf1 100644
--- a/firmware/target/arm/rk27xx/system-rk27xx.c
+++ b/firmware/target/arm/rk27xx/system-rk27xx.c
@@ -169,13 +169,31 @@ void cpucache_commit_discard(void)
CACHEOP = 0x02;
/* wait for invalidate process to complete */
- while (CACHEOP & 0x01);
+ while (CACHEOP & 0x03);
/* invalidate cache way 1 */
CACHEOP = 0x80000002;
/* wait for invalidate process to complete */
- while (CACHEOP & 0x01);
+ while (CACHEOP & 0x03);
}
void cpucache_invalidate(void) __attribute__((alias("cpucache_commit_discard")));
+
+void commit_discard_dcache_range (const void *base, unsigned int size)
+{
+ int cnt = size + ((unsigned long)base & 0x1f);
+ unsigned long opcode = ((unsigned long)base & 0xffffffe0) | 0x01;
+
+ while (cnt > 0)
+ {
+ CACHEOP = opcode;
+
+ while (CACHEOP & 0x03);
+
+ cnt -= 32;
+ opcode += 32;
+ }
+}
+
+void clean_dcache_range(const void *base, unsigned int size) __attribute__((alias("commit_discard_dcache_range")));