- Update to 2.6.25-rc3.
[linux-flexiantxendom0-3.2.10.git] / arch / mips / kernel / cpu-bugs64.c
index af78456..417bb3e 100644 (file)
 #include <asm/mipsregs.h>
 #include <asm/system.h>
 
+static char bug64hit[] __initdata =
+       "reliable operation impossible!\n%s";
+static char nowar[] __initdata =
+       "Please report to <linux-mips@linux-mips.org>.";
+static char r4kwar[] __initdata =
+       "Enable CPU_R4000_WORKAROUNDS to rectify.";
+static char daddiwar[] __initdata =
+       "Enable CPU_DADDI_WORKAROUNDS to rectify.";
+
 static inline void align_mod(const int align, const int mod)
 {
        asm volatile(
@@ -155,13 +164,7 @@ static inline void check_mult_sh(void)
        }
 
        printk("no.\n");
-       panic("Reliable operation impossible!\n"
-#ifndef CONFIG_CPU_R4000
-             "Configure for R4000 to enable the workaround."
-#else
-             "Please report to <linux-mips@linux-mips.org>."
-#endif
-             );
+       panic(bug64hit, !R4000_WAR ? r4kwar : nowar);
 }
 
 static volatile int daddi_ov __initdata = 0;
@@ -233,15 +236,11 @@ static inline void check_daddi(void)
        }
 
        printk("no.\n");
-       panic("Reliable operation impossible!\n"
-#if !defined(CONFIG_CPU_R4000) && !defined(CONFIG_CPU_R4400)
-             "Configure for R4000 or R4400 to enable the workaround."
-#else
-             "Please report to <linux-mips@linux-mips.org>."
-#endif
-             );
+       panic(bug64hit, !DADDI_WAR ? daddiwar : nowar);
 }
 
+int daddiu_bug __initdata = -1;
+
 static inline void check_daddiu(void)
 {
        long v, w, tmp;
@@ -281,7 +280,9 @@ static inline void check_daddiu(void)
                : "=&r" (v), "=&r" (w), "=&r" (tmp)
                : "I" (0xffffffffffffdb9aUL), "I" (0x1234));
 
-       if (v == w) {
+       daddiu_bug = v != w;
+
+       if (!daddiu_bug) {
                printk("no.\n");
                return;
        }
@@ -303,18 +304,16 @@ static inline void check_daddiu(void)
        }
 
        printk("no.\n");
-       panic("Reliable operation impossible!\n"
-#if !defined(CONFIG_CPU_R4000) && !defined(CONFIG_CPU_R4400)
-             "Configure for R4000 or R4400 to enable the workaround."
-#else
-             "Please report to <linux-mips@linux-mips.org>."
-#endif
-             );
+       panic(bug64hit, !DADDI_WAR ? daddiwar : nowar);
 }
 
-void __init check_bugs64(void)
+void __init check_bugs64_early(void)
 {
        check_mult_sh();
-       check_daddi();
        check_daddiu();
 }
+
+void __init check_bugs64(void)
+{
+       check_daddi();
+}