aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc/platforms/powermac/smp.c
diff options
context:
space:
mode:
authorBenjamin Herrenschmidt <benh@kernel.crashing.org>2009-01-11 19:03:45 +0000
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>2009-01-13 14:48:03 +1100
commitc478b58135e6c9b49c8b80bff8ef910f2ba9b313 (patch)
treefb5e53355a8b9973d6ae2a1b9ab0d6b86f2efeb9 /arch/powerpc/platforms/powermac/smp.c
parentfc7a9feb9c9df50ed6d115514b48c49e8511a4de (diff)
downloadkernel_goldelico_gta04-c478b58135e6c9b49c8b80bff8ef910f2ba9b313.zip
kernel_goldelico_gta04-c478b58135e6c9b49c8b80bff8ef910f2ba9b313.tar.gz
kernel_goldelico_gta04-c478b58135e6c9b49c8b80bff8ef910f2ba9b313.tar.bz2
powerpc/powermac: Fix occasional SMP boot failure
The PowerMac kernel occasionally fails to bring up the secondary CPUs on SMP, the trigger factor seem to be fairly random and related to location of code and data. This appears to be due to the initial loading of the TOC value by the secondary processor which now happens before we clear HID4:RM_CI (Real Mode Cache Invalidate). This bit should really be cleared before we do any load or store other than fetching code. This fix works based on the assumption that all SMP 64-bit PowerMacs use variants of the 970, which fortunately is true, by explicitely clearing that bit, adding an slbia for good measure as RM_CI mode is known to create bogus ERAT entries. I also removed some spurrious debug output that was left enabled by mistake while at it. Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Diffstat (limited to 'arch/powerpc/platforms/powermac/smp.c')
-rw-r--r--arch/powerpc/platforms/powermac/smp.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/arch/powerpc/platforms/powermac/smp.c b/arch/powerpc/platforms/powermac/smp.c
index 6b0711c..bd8817b 100644
--- a/arch/powerpc/platforms/powermac/smp.c
+++ b/arch/powerpc/platforms/powermac/smp.c
@@ -53,7 +53,7 @@
#include <asm/pmac_low_i2c.h>
#include <asm/pmac_pfunc.h>
-#define DEBUG
+#undef DEBUG
#ifdef DEBUG
#define DBG(fmt...) udbg_printf(fmt)