MIPS: Alchemy: MIPS hazard workarounds are not required.
authorManuel Lauss <mano@roarinelk.homelinux.net>
Wed, 25 Mar 2009 16:49:30 +0000 (17:49 +0100)
committerRalf Baechle <ralf@linux-mips.org>
Mon, 30 Mar 2009 12:49:46 +0000 (14:49 +0200)
The Alchemy manuals state:

"All pipeline hazards and dependencies are enforced by hardware interlocks
 so that any sequence of instructions is guaranteed to execute correctly.
 Therefore, it is not necessary to pad legacy MIPS hazards (such as
 load delay slots and coprocessor accesses) with NOPs."

Run-tested on Au12x0, without any ill effects.

Signed-off-by: Manuel Lauss <mano@roarinelk.homelinux.net>
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
arch/mips/include/asm/hazards.h
arch/mips/mm/tlbex.c

index 134e1fc8f4d6d7a5eb5ae3b2d361284b23ab5e95..a12d971db4f9c8662dcd456969f38d4a1bc48402 100644 (file)
@@ -87,7 +87,7 @@ do {                                                                  \
        : "=r" (tmp));                                                  \
 } while (0)
 
-#elif defined(CONFIG_CPU_MIPSR1)
+#elif defined(CONFIG_CPU_MIPSR1) && !defined(CONFIG_MACH_ALCHEMY)
 
 /*
  * These are slightly complicated by the fact that we guarantee R1 kernels to
@@ -139,7 +139,7 @@ do {                                                                        \
 } while (0)
 
 #elif defined(CONFIG_CPU_R10000) || defined(CONFIG_CPU_CAVIUM_OCTEON) || \
-      defined(CONFIG_CPU_R5500)
+      defined(CONFIG_CPU_R5500) || defined(CONFIG_MACH_ALCHEMY)
 
 /*
  * R10000 rocks - all hazards handled in hardware, so this becomes a nobrainer.
index 122c9c12e75ab8134020b00562b06f6c7d09e8b5..0615b62efd6d187533bea477c968d86e5074f0b8 100644 (file)
@@ -292,7 +292,6 @@ static void __cpuinit build_tlb_write_entry(u32 **p, struct uasm_label **l,
        case CPU_R4300:
        case CPU_5KC:
        case CPU_TX49XX:
-       case CPU_ALCHEMY:
        case CPU_PR4450:
                uasm_i_nop(p);
                tlbw(p);
@@ -315,6 +314,7 @@ static void __cpuinit build_tlb_write_entry(u32 **p, struct uasm_label **l,
        case CPU_R5500:
                if (m4kc_tlbp_war())
                        uasm_i_nop(p);
+       case CPU_ALCHEMY:
                tlbw(p);
                break;