diff options
| author | Geert Uytterhoeven <geert@linux-m68k.org> | 2004-07-28 09:03:56 -0700 |
|---|---|---|
| committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2004-07-28 09:03:56 -0700 |
| commit | 93c4f6c1f93bd83b50a8a82e0fc3ab416527770e (patch) | |
| tree | e07ae0f4d1fae8a6e3d03594ef832b9129279479 /arch/m68k/kernel/setup.c | |
| parent | 1896903f5537dae60f6a58a90a89650760104c59 (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.c | 12 |
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; |
