
From: Geert Uytterhoeven <geert@linux-m68k.org>

M68k: gcc lately manages to generate the code sequence described in the 060
errata I14, so use the described workaround (from Roman Zippel)

Signed-off-by: Roman Zippel <zippel@linux-m68k.org>
Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
Signed-off-by: Andrew Morton <akpm@osdl.org>
---

 25-akpm/arch/m68k/kernel/setup.c |   12 ++++++++++++
 1 files changed, 12 insertions(+)

diff -puN arch/m68k/kernel/setup.c~m68k-68060-errata-i14 arch/m68k/kernel/setup.c
--- 25/arch/m68k/kernel/setup.c~m68k-68060-errata-i14	2004-07-26 17:25:07.809789064 -0700
+++ 25-akpm/arch/m68k/kernel/setup.c	2004-07-26 17:25:07.813788456 -0700
@@ -237,6 +237,18 @@ void __init setup_arch(char **cmdline_p)
 	}
 #endif
 
+	if (CPU_IS_060) {
+		u32 pcr;
+
+		asm (".chip 68060; movec %%pcr,%0; .chip 68k"
+		     : "=d" (pcr));
+		if (((pcr >> 8) & 0xff) <= 5) {
+			printk("Enabling workaround for errata I14\n");
+			asm (".chip 68060; movec %0,%%pcr; .chip 68k"
+			     : : "d" (pcr | 0x20));
+		}
+	}
+
 	init_mm.start_code = PAGE_OFFSET;
 	init_mm.end_code = (unsigned long) &_etext;
 	init_mm.end_data = (unsigned long) &_edata;
_
