]> git.karo-electronics.de Git - mv-sheeva.git/blob - arch/sh/mm/flush-sh4.c
sh: Split out SH-4 __flush_xxx_region() ops.
[mv-sheeva.git] / arch / sh / mm / flush-sh4.c
1 #include <linux/mm.h>
2 #include <asm/mmu_context.h>
3 #include <asm/cacheflush.h>
4
5 /*
6  * Write back the dirty D-caches, but not invalidate them.
7  *
8  * START: Virtual Address (U0, P1, or P3)
9  * SIZE: Size of the region.
10  */
11 void __weak __flush_wback_region(void *start, int size)
12 {
13         unsigned long v;
14         unsigned long begin, end;
15
16         begin = (unsigned long)start & ~(L1_CACHE_BYTES-1);
17         end = ((unsigned long)start + size + L1_CACHE_BYTES-1)
18                 & ~(L1_CACHE_BYTES-1);
19         for (v = begin; v < end; v+=L1_CACHE_BYTES) {
20                 asm volatile("ocbwb     %0"
21                              : /* no output */
22                              : "m" (__m(v)));
23         }
24 }
25
26 /*
27  * Write back the dirty D-caches and invalidate them.
28  *
29  * START: Virtual Address (U0, P1, or P3)
30  * SIZE: Size of the region.
31  */
32 void __weak __flush_purge_region(void *start, int size)
33 {
34         unsigned long v;
35         unsigned long begin, end;
36
37         begin = (unsigned long)start & ~(L1_CACHE_BYTES-1);
38         end = ((unsigned long)start + size + L1_CACHE_BYTES-1)
39                 & ~(L1_CACHE_BYTES-1);
40         for (v = begin; v < end; v+=L1_CACHE_BYTES) {
41                 asm volatile("ocbp      %0"
42                              : /* no output */
43                              : "m" (__m(v)));
44         }
45 }
46
47 /*
48  * No write back please
49  */
50 void __weak __flush_invalidate_region(void *start, int size)
51 {
52         unsigned long v;
53         unsigned long begin, end;
54
55         begin = (unsigned long)start & ~(L1_CACHE_BYTES-1);
56         end = ((unsigned long)start + size + L1_CACHE_BYTES-1)
57                 & ~(L1_CACHE_BYTES-1);
58         for (v = begin; v < end; v+=L1_CACHE_BYTES) {
59                 asm volatile("ocbi      %0"
60                              : /* no output */
61                              : "m" (__m(v)));
62         }
63 }