diff options
author | Atsushi Nemoto <anemo@mba.ocn.ne.jp> | 2006-06-22 06:42:43 -0400 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 2006-06-29 16:10:54 -0400 |
commit | a2c2bc4b263828a380813a236fa6fcf8185b460b (patch) | |
tree | 839be17964fb7777a6bb0d3d1cb21a0930c8ffa3 /arch | |
parent | 86165879a20753e7ed86be4c2e9bba3f32ed0aff (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.c | 35 |
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 | */ |
25 | static void mips_sc_wback_inv(unsigned long addr, unsigned long size) | 25 | static 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 | */ |
48 | static void mips_sc_inv(unsigned long addr, unsigned long size) | 33 | static 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 | ||
68 | static void mips_sc_enable(void) | 38 | static 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 | ||