summaryrefslogtreecommitdiff
path: root/arch/m68k/kernel/setup.c
diff options
context:
space:
mode:
authorGeert Uytterhoeven <geert@linux-m68k.org>2004-07-28 09:03:56 -0700
committerLinus Torvalds <torvalds@ppc970.osdl.org>2004-07-28 09:03:56 -0700
commit93c4f6c1f93bd83b50a8a82e0fc3ab416527770e (patch)
treee07ae0f4d1fae8a6e3d03594ef832b9129279479 /arch/m68k/kernel/setup.c
parent1896903f5537dae60f6a58a90a89650760104c59 (diff)
[PATCH] M68k 68060 errata I14
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> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'arch/m68k/kernel/setup.c')
-rw-r--r--arch/m68k/kernel/setup.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/arch/m68k/kernel/setup.c b/arch/m68k/kernel/setup.c
index 7680eabc3337..1d2563e115e4 100644
--- a/arch/m68k/kernel/setup.c
+++ b/arch/m68k/kernel/setup.c
@@ -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;