aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorAtsushi Nemoto <anemo@mba.ocn.ne.jp>2006-06-22 06:42:43 -0400
committerRalf Baechle <ralf@linux-mips.org>2006-06-29 16:10:54 -0400
commita2c2bc4b263828a380813a236fa6fcf8185b460b (patch)
tree839be17964fb7777a6bb0d3d1cb21a0930c8ffa3 /arch
parent86165879a20753e7ed86be4c2e9bba3f32ed0aff (diff)
[MIPS] MIPS32/MIPS64 S-cache fix and cleanup
Use blast_scache_range, blast_inv_scache_range for mips32/mips64 scache routine. Also initialize waybit for MIPS32/MIPS64 S-cache. Signed-off-by: Atsushi Nemoto <anemo@mba.ocn.ne.jp> Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Diffstat (limited to 'arch')
-rw-r--r--arch/mips/mm/sc-mips.c35
1 files changed, 3 insertions, 32 deletions
diff --git a/arch/mips/mm/sc-mips.c b/arch/mips/mm/sc-mips.c
index d3f92a9e8310..42b50964c644 100644
--- a/arch/mips/mm/sc-mips.c
+++ b/arch/mips/mm/sc-mips.c
@@ -24,22 +24,7 @@
24 */ 24 */
25static void mips_sc_wback_inv(unsigned long addr, unsigned long size) 25static void mips_sc_wback_inv(unsigned long addr, unsigned long size)
26{ 26{
27 unsigned long sc_lsize = cpu_scache_line_size(); 27 blast_scache_range(addr, addr + size);
28 unsigned long end, a;
29
30 pr_debug("mips_sc_wback_inv[%08lx,%08lx]", addr, size);
31
32 /* Catch bad driver code */
33 BUG_ON(size == 0);
34
35 a = addr & ~(sc_lsize - 1);
36 end = (addr + size - 1) & ~(sc_lsize - 1);
37 while (1) {
38 flush_scache_line(a); /* Hit_Writeback_Inv_SD */
39 if (a == end)
40 break;
41 a += sc_lsize;
42 }
43} 28}
44 29
45/* 30/*
@@ -47,22 +32,7 @@ static void mips_sc_wback_inv(unsigned long addr, unsigned long size)
47 */ 32 */
48static void mips_sc_inv(unsigned long addr, unsigned long size) 33static void mips_sc_inv(unsigned long addr, unsigned long size)
49{ 34{
50 unsigned long sc_lsize = cpu_scache_line_size(); 35 blast_inv_scache_range(addr, addr + size);
51 unsigned long end, a;
52
53 pr_debug("mips_sc_inv[%08lx,%08lx]", addr, size);
54
55 /* Catch bad driver code */
56 BUG_ON(size == 0);
57
58 a = addr & ~(sc_lsize - 1);
59 end = (addr + size - 1) & ~(sc_lsize - 1);
60 while (1) {
61 invalidate_scache_line(a); /* Hit_Invalidate_SD */
62 if (a == end)
63 break;
64 a += sc_lsize;
65 }
66} 36}
67 37
68static void mips_sc_enable(void) 38static void mips_sc_enable(void)
@@ -123,6 +93,7 @@ static inline int __init mips_sc_probe(void)
123 return 0; 93 return 0;
124 94
125 c->scache.waysize = c->scache.sets * c->scache.linesz; 95 c->scache.waysize = c->scache.sets * c->scache.linesz;
96 c->scache.waybit = __ffs(c->scache.waysize);
126 97
127 c->scache.flags &= ~MIPS_CACHE_NOT_PRESENT; 98 c->scache.flags &= ~MIPS_CACHE_NOT_PRESENT;
128 99