linux-mips
[Top] [All Lists]

Re: Fix a CPU definition for Cobalt

To: Martin Michlmayr <tbm@cyrius.com>
Subject: Re: Fix a CPU definition for Cobalt
From: Ralf Baechle <ralf@linux-mips.org>
Date: Thu, 19 Jan 2006 21:04:40 +0000
Cc: linux-mips@linux-mips.org
In-reply-to: <20060119192414.GA26798@deprecation.cyrius.com>
Original-recipient: rfc822;linux-mips@linux-mips.org
References: <20060119192414.GA26798@deprecation.cyrius.com>
Sender: linux-mips-bounce@linux-mips.org
User-agent: Mutt/1.4.2.1i
On Thu, Jan 19, 2006 at 07:24:14PM +0000, Martin Michlmayr wrote:

> If cpu_icache_snoops_remote_store is not set, Cobalt will crash
> immediately when starting the kernel.

That's papering over the actual bug.  The CPU has no scache, so the
scache flushing functions aren't getting initialized and the NULL
pointer is eventually called as a function.  So I suggest this below.
Can you test it?

  Ralf

diff --git a/arch/mips/mm/c-r4k.c b/arch/mips/mm/c-r4k.c
index 422b55f..24a59a9 100644
--- 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 = 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 = 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;

<Prev in Thread] Current Thread [Next in Thread>