aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Daney <david.daney@cavium.com>2015-01-15 08:11:13 -0500
committerRalf Baechle <ralf@linux-mips.org>2015-02-20 09:31:27 -0500
commite3d0ead59f6c1167c817ea338dd9395d517940e1 (patch)
tree66f0c4d5f1443b0415cfa4a4f3b420d175abbf24
parent664f1ae53d60943093db9bdb14ac3d95cac4b68c (diff)
MIPS: OCTEON: Implement DCache errata workaround for all CN6XXX
Make messages refer to all CN6XXX. Signed-off-by: David Daney <david.daney@cavium.com> Signed-off-by: Aleksey Makarov <aleksey.makarov@auriga.com> Cc: linux-mips@linux-mips.org Cc: linux-kernel@vger.kernel.org Patchwork: https://patchwork.linux-mips.org/patch/8941/ Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
-rw-r--r--arch/mips/cavium-octeon/setup.c7
-rw-r--r--arch/mips/include/asm/mach-cavium-octeon/war.h3
-rw-r--r--arch/mips/mm/uasm.c2
3 files changed, 8 insertions, 4 deletions
diff --git a/arch/mips/cavium-octeon/setup.c b/arch/mips/cavium-octeon/setup.c
index 2d8a53100e41..6c51ef6d57c7 100644
--- a/arch/mips/cavium-octeon/setup.c
+++ b/arch/mips/cavium-octeon/setup.c
@@ -1041,7 +1041,7 @@ EXPORT_SYMBOL(prom_putchar);
1041 1041
1042void prom_free_prom_memory(void) 1042void prom_free_prom_memory(void)
1043{ 1043{
1044 if (OCTEON_IS_MODEL(OCTEON_CN63XX_PASS1_X)) { 1044 if (CAVIUM_OCTEON_DCACHE_PREFETCH_WAR) {
1045 /* Check for presence of Core-14449 fix. */ 1045 /* Check for presence of Core-14449 fix. */
1046 u32 insn; 1046 u32 insn;
1047 u32 *foo; 1047 u32 *foo;
@@ -1063,8 +1063,9 @@ void prom_free_prom_memory(void)
1063 panic("No PREF instruction at Core-14449 probe point."); 1063 panic("No PREF instruction at Core-14449 probe point.");
1064 1064
1065 if (((insn >> 16) & 0x1f) != 28) 1065 if (((insn >> 16) & 0x1f) != 28)
1066 panic("Core-14449 WAR not in place (%04x).\n" 1066 panic("OCTEON II DCache prefetch workaround not in place (%04x).\n"
1067 "Please build kernel with proper options (CONFIG_CAVIUM_CN63XXP1).", insn); 1067 "Please build kernel with proper options (CONFIG_CAVIUM_CN63XXP1).",
1068 insn);
1068 } 1069 }
1069} 1070}
1070 1071
diff --git a/arch/mips/include/asm/mach-cavium-octeon/war.h b/arch/mips/include/asm/mach-cavium-octeon/war.h
index eb72b35cf04b..35c80be92207 100644
--- a/arch/mips/include/asm/mach-cavium-octeon/war.h
+++ b/arch/mips/include/asm/mach-cavium-octeon/war.h
@@ -22,4 +22,7 @@
22#define R10000_LLSC_WAR 0 22#define R10000_LLSC_WAR 0
23#define MIPS34K_MISSED_ITLB_WAR 0 23#define MIPS34K_MISSED_ITLB_WAR 0
24 24
25#define CAVIUM_OCTEON_DCACHE_PREFETCH_WAR \
26 OCTEON_IS_MODEL(OCTEON_CN6XXX)
27
25#endif /* __ASM_MIPS_MACH_CAVIUM_OCTEON_WAR_H */ 28#endif /* __ASM_MIPS_MACH_CAVIUM_OCTEON_WAR_H */
diff --git a/arch/mips/mm/uasm.c b/arch/mips/mm/uasm.c
index f86d293463a6..319051c34343 100644
--- a/arch/mips/mm/uasm.c
+++ b/arch/mips/mm/uasm.c
@@ -341,7 +341,7 @@ I_u3u1u2(_ldx)
341void ISAFUNC(uasm_i_pref)(u32 **buf, unsigned int a, signed int b, 341void ISAFUNC(uasm_i_pref)(u32 **buf, unsigned int a, signed int b,
342 unsigned int c) 342 unsigned int c)
343{ 343{
344 if (OCTEON_IS_MODEL(OCTEON_CN63XX_PASS1_X) && a <= 24 && a != 5) 344 if (CAVIUM_OCTEON_DCACHE_PREFETCH_WAR && a <= 24 && a != 5)
345 /* 345 /*
346 * As per erratum Core-14449, replace prefetches 0-4, 346 * As per erratum Core-14449, replace prefetches 0-4,
347 * 6-24 with 'pref 28'. 347 * 6-24 with 'pref 28'.