summaryrefslogtreecommitdiff
path: root/include/asm-sh/cache.h
diff options
context:
space:
mode:
authorWolfgang Denk <wd@denx.de>2008-04-08 00:04:39 +0200
committerWolfgang Denk <wd@denx.de>2008-04-08 00:04:39 +0200
commit5c395393cc9b85b14c5481dbcab6b67b54f31622 (patch)
tree888e8cd55173a99f636b19e2813e3dfe6afe3d44 /include/asm-sh/cache.h
parente59af4b611408adcdfb5e19bc5194a7d1f8b4dc3 (diff)
parent280df59a8d62c6e74c281b1cb7e2052df4d6cb00 (diff)
Merge branch 'master' of git://www.denx.de/git/u-boot-sh
Diffstat (limited to 'include/asm-sh/cache.h')
-rw-r--r--include/asm-sh/cache.h35
1 files changed, 35 insertions, 0 deletions
diff --git a/include/asm-sh/cache.h b/include/asm-sh/cache.h
new file mode 100644
index 0000000000..67474c7b44
--- /dev/null
+++ b/include/asm-sh/cache.h
@@ -0,0 +1,35 @@
+#ifndef __ASM_SH_CACHE_H
+#define __ASM_SH_CACHE_H
+
+#if defined(CONFIG_SH4) || defined(CONFIG_SH4A)
+
+#define L1_CACHE_BYTES 32
+struct __large_struct { unsigned long buf[100]; };
+#define __m(x) (*(struct __large_struct *)(x))
+
+void dcache_wback_range(u32 start, u32 end)
+{
+ u32 v;
+
+ start &= ~(L1_CACHE_BYTES-1);
+ for (v = start; v < end; v+=L1_CACHE_BYTES) {
+ asm volatile("ocbwb %0"
+ : /* no output */
+ : "m" (__m(v)));
+ }
+}
+
+void dcache_invalid_range(u32 start, u32 end)
+{
+ u32 v;
+
+ start &= ~(L1_CACHE_BYTES-1);
+ for (v = start; v < end; v+=L1_CACHE_BYTES) {
+ asm volatile("ocbi %0"
+ : /* no output */
+ : "m" (__m(v)));
+ }
+}
+#endif /* CONFIG_SH4 || CONFIG_SH4A */
+
+#endif /* __ASM_SH_CACHE_H */