2006-02-27 21:36:39 +00:00
|
|
|
## DP: Initialize scache flushing functions when CPU has no scache
|
2006-02-28 22:55:30 +00:00
|
|
|
## DP: Patch author: Ralf Baechle <ralf@linux-mips.org>
|
|
|
|
## DP: Upstream status: in Linus git (went in after rc5)
|
2006-02-27 21:36:39 +00:00
|
|
|
|
2006-02-28 22:55:30 +00:00
|
|
|
From: Ralf Baechle <ralf@linux-mips.org>
|
|
|
|
Date: Mon, 27 Feb 2006 19:05:55 +0000 (+0000)
|
|
|
|
Subject: [MIPS] Initialize S-cache function pointers even on S-cache-less CPUs.
|
|
|
|
X-Git-Url: http://www.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commitdiff;h=4debe4f963f9135771a8c5bc66e84396201dcfd8
|
2006-02-27 21:36:39 +00:00
|
|
|
|
2006-02-28 22:55:30 +00:00
|
|
|
[MIPS] Initialize S-cache function pointers even on S-cache-less CPUs.
|
|
|
|
|
|
|
|
When a CPU has no scache, the scache flushing functions currently
|
|
|
|
aren't getting initialized and the NULL pointer is eventually called
|
|
|
|
as a function. Initialize the scache flushing functions as a noop
|
|
|
|
when there's no scache.
|
|
|
|
|
|
|
|
Initial patch by me and most of the debugging done by Martin Michlmayr.
|
|
|
|
|
|
|
|
Signed-off-by: Martin Michlmayr <tbm@cyrius.com>
|
|
|
|
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
|
|
|
|
---
|
2006-02-27 21:36:39 +00:00
|
|
|
|
|
|
|
--- a/arch/mips/mm/c-r4k.c
|
|
|
|
+++ b/arch/mips/mm/c-r4k.c
|
|
|
|
@@ -235,7 +235,9 @@ static inline void r4k_blast_scache_page
|
|
|
|
{
|
|
|
|
unsigned long sc_lsize = cpu_scache_line_size();
|
|
|
|
|
|
|
|
- if (sc_lsize == 16)
|
|
|
|
+ if (scache_size == 0)
|
|
|
|
+ r4k_blast_scache_page = (void *)no_sc_noop;
|
|
|
|
+ else if (sc_lsize == 16)
|
|
|
|
r4k_blast_scache_page = blast_scache16_page;
|
|
|
|
else if (sc_lsize == 32)
|
|
|
|
r4k_blast_scache_page = blast_scache32_page;
|
|
|
|
@@ -251,7 +253,9 @@ static inline void r4k_blast_scache_page
|
|
|
|
{
|
|
|
|
unsigned long sc_lsize = cpu_scache_line_size();
|
|
|
|
|
|
|
|
- if (sc_lsize == 16)
|
|
|
|
+ if (scache_size == 0)
|
|
|
|
+ r4k_blast_scache_page_indexed = (void *)no_sc_noop;
|
|
|
|
+ else if (sc_lsize == 16)
|
|
|
|
r4k_blast_scache_page_indexed = blast_scache16_page_indexed;
|
|
|
|
else if (sc_lsize == 32)
|
|
|
|
r4k_blast_scache_page_indexed = blast_scache32_page_indexed;
|
|
|
|
@@ -267,7 +271,9 @@ static inline void r4k_blast_scache_setu
|
|
|
|
{
|
|
|
|
unsigned long sc_lsize = cpu_scache_line_size();
|
|
|
|
|
|
|
|
- if (sc_lsize == 16)
|
|
|
|
+ if (scache_size == 0)
|
|
|
|
+ r4k_blast_scache = (void *)no_sc_noop;
|
|
|
|
+ else if (sc_lsize == 16)
|
|
|
|
r4k_blast_scache = blast_scache16;
|
|
|
|
else if (sc_lsize == 32)
|
|
|
|
r4k_blast_scache = blast_scache32;
|
|
|
|
@@ -482,7 +488,7 @@ static inline void local_r4k_flush_icach
|
|
|
|
protected_blast_dcache_range(start, end);
|
|
|
|
}
|
|
|
|
|
|
|
|
- if (!cpu_icache_snoops_remote_store) {
|
|
|
|
+ if (!cpu_icache_snoops_remote_store && scache_size) {
|
|
|
|
if (end - start > scache_size)
|
|
|
|
r4k_blast_scache();
|
|
|
|
else
|
|
|
|
@@ -651,7 +657,7 @@ static void local_r4k_flush_cache_sigtra
|
|
|
|
|
|
|
|
R4600_HIT_CACHEOP_WAR_IMPL;
|
|
|
|
protected_writeback_dcache_line(addr & ~(dc_lsize - 1));
|
|
|
|
- if (!cpu_icache_snoops_remote_store)
|
|
|
|
+ if (!cpu_icache_snoops_remote_store && scache_size)
|
|
|
|
protected_writeback_scache_line(addr & ~(sc_lsize - 1));
|
|
|
|
protected_flush_icache_line(addr & ~(ic_lsize - 1));
|
|
|
|
if (MIPS4K_ICACHE_REFILL_WAR) {
|
|
|
|
|