Check CPU ID if we're running on boot CPU. If so,
don't use SMP table information since it may contain
uninitialized or garbage values.
Signed-off-by: Blue Swirl <blauwirbel(a)gmail.com>
---
arch/sparc32/entry.S | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/arch/sparc32/entry.S b/arch/sparc32/entry.S
index 9f5356c..24c4cbf 100644
--- a/arch/sparc32/entry.S
+++ b/arch/sparc32/entry.S
@@ -126,12 +126,23 @@ entry:
set 0x2000, %g3
sub %g1, %g3, %g6
+ ! Check if this is the boot CPU and skip SMP table check if yes
+ ! XXX: not all CPUs should have MXCC
+ set 0x1c00f00, %g2
+ ldda [%g2] ASI_CONTROL, %g2
+ srl %g3, 24, %g7
+ sub %g7, 8, %g7
+ tst %g7
+ bz skip_table
+ nop
+
! Calculate SMP table location
set 0x1f0c, %g2
add %g6, %g2, %g2 ! valid?
lda [%g2] ASI_M_BYPASS, %g7
sta %g0, [%g2] ASI_M_BYPASS
+skip_table:
! Get machine ID from configuration device
mov FW_CFG_MACHINE_ID, %g2
sub %g5, 2, %g5
--
1.7.10