[MIPS] 20K: Handle WAIT related bugs according to errata information
authorRalf Baechle <ralf@linux-mips.org>
Tue, 12 Jun 2007 12:04:09 +0000 (13:04 +0100)
committerRalf Baechle <ralf@linux-mips.org>
Tue, 26 Jun 2007 17:57:33 +0000 (19:57 +0200)
We used to avoid the WAIT entirely on the 20K but really only need to do
this on early revs of the 20K.  Without this a 20K was a bit of a
power hog.  Well, in the lower power power hog category ;-)

Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
arch/mips/kernel/cpu-probe.c

index ab755ea26c6a252587b936fe04b5f472b0354402..0fc90ba16ae1594d5ad7b9ba2dba771b954f1e05 100644 (file)
@@ -137,7 +137,6 @@ static inline void check_wait(void)
        case CPU_4KEC:
        case CPU_4KSC:
        case CPU_5KC:
-/*     case CPU_20KC:*/
        case CPU_24K:
        case CPU_25KF:
        case CPU_34K:
@@ -156,6 +155,17 @@ static inline void check_wait(void)
                if (allow_au1k_wait)
                        cpu_wait = au1k_wait;
                break;
+       case CPU_20KC:
+               /*
+                * WAIT on Rev1.0 has E1, E2, E3 and E16.
+                * WAIT on Rev2.0 and Rev3.0 has E16.
+                * Rev3.1 WAIT is nop, why bother
+                */
+               if ((c->processor_id & 0xff) <= 0x64)
+                       break;
+
+               cpu_wait = r4k_wait;
+               break;
        case CPU_RM9000:
                if ((c->processor_id & 0x00ff) >= 0x40)
                        cpu_wait = r4k_wait;