2 #include <asm/mmu_context.h>
3 #include <asm/cacheflush.h>
6 * Write back the dirty D-caches, but not invalidate them.
8 * START: Virtual Address (U0, P1, or P3)
9 * SIZE: Size of the region.
11 void __weak __flush_wback_region(void *start, int size)
13 reg_size_t aligned_start, v, cnt, end;
15 aligned_start = register_align(start);
16 v = aligned_start & ~(L1_CACHE_BYTES-1);
17 end = (aligned_start + size + L1_CACHE_BYTES-1)
18 & ~(L1_CACHE_BYTES-1);
19 cnt = (end - v) / L1_CACHE_BYTES;
22 asm volatile("ocbwb @%0" : : "r" (v));
24 asm volatile("ocbwb @%0" : : "r" (v));
26 asm volatile("ocbwb @%0" : : "r" (v));
28 asm volatile("ocbwb @%0" : : "r" (v));
30 asm volatile("ocbwb @%0" : : "r" (v));
32 asm volatile("ocbwb @%0" : : "r" (v));
34 asm volatile("ocbwb @%0" : : "r" (v));
36 asm volatile("ocbwb @%0" : : "r" (v));
42 asm volatile("ocbwb @%0" : : "r" (v));
49 * Write back the dirty D-caches and invalidate them.
51 * START: Virtual Address (U0, P1, or P3)
52 * SIZE: Size of the region.
54 void __weak __flush_purge_region(void *start, int size)
56 reg_size_t aligned_start, v, cnt, end;
58 aligned_start = register_align(start);
59 v = aligned_start & ~(L1_CACHE_BYTES-1);
60 end = (aligned_start + size + L1_CACHE_BYTES-1)
61 & ~(L1_CACHE_BYTES-1);
62 cnt = (end - v) / L1_CACHE_BYTES;
65 asm volatile("ocbp @%0" : : "r" (v));
67 asm volatile("ocbp @%0" : : "r" (v));
69 asm volatile("ocbp @%0" : : "r" (v));
71 asm volatile("ocbp @%0" : : "r" (v));
73 asm volatile("ocbp @%0" : : "r" (v));
75 asm volatile("ocbp @%0" : : "r" (v));
77 asm volatile("ocbp @%0" : : "r" (v));
79 asm volatile("ocbp @%0" : : "r" (v));
84 asm volatile("ocbp @%0" : : "r" (v));
91 * No write back please
93 void __weak __flush_invalidate_region(void *start, int size)
95 reg_size_t aligned_start, v, cnt, end;
97 aligned_start = register_align(start);
98 v = aligned_start & ~(L1_CACHE_BYTES-1);
99 end = (aligned_start + size + L1_CACHE_BYTES-1)
100 & ~(L1_CACHE_BYTES-1);
101 cnt = (end - v) / L1_CACHE_BYTES;
104 asm volatile("ocbi @%0" : : "r" (v));
106 asm volatile("ocbi @%0" : : "r" (v));
108 asm volatile("ocbi @%0" : : "r" (v));
110 asm volatile("ocbi @%0" : : "r" (v));
112 asm volatile("ocbi @%0" : : "r" (v));
114 asm volatile("ocbi @%0" : : "r" (v));
116 asm volatile("ocbi @%0" : : "r" (v));
118 asm volatile("ocbi @%0" : : "r" (v));
124 asm volatile("ocbi @%0" : : "r" (v));