diff options
| author | Marcin Bukat <marcin.bukat@gmail.com> | 2011-09-06 12:39:06 +0000 |
|---|---|---|
| committer | Marcin Bukat <marcin.bukat@gmail.com> | 2011-09-06 12:39:06 +0000 |
| commit | 6d959a06253affe5cc1797f72f3c69d489aee8f9 (patch) | |
| tree | 2515561d999b1f3e9db26e2fd4042a1031f914ca | |
| parent | 4e6daf085692e4729aa1f70f27b1b04e704a864f (diff) | |
| download | rockbox-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.c | 22 |
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"))); |