summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sys/arch/sparc64/sparc64/locore.s9
1 files changed, 8 insertions, 1 deletions
diff --git a/sys/arch/sparc64/sparc64/locore.s b/sys/arch/sparc64/sparc64/locore.s
index 4eafbf2f531..7d457609bcc 100644
--- a/sys/arch/sparc64/sparc64/locore.s
+++ b/sys/arch/sparc64/sparc64/locore.s
@@ -1,4 +1,4 @@
-/* $OpenBSD: locore.s,v 1.157 2009/01/23 19:16:39 kettenis Exp $ */
+/* $OpenBSD: locore.s,v 1.158 2009/04/30 11:36:57 kettenis Exp $ */
/* $NetBSD: locore.s,v 1.137 2001/08/13 06:10:10 jdolecek Exp $ */
/*
@@ -108,7 +108,14 @@ _C_LABEL(sun4v_mp_patch):
.previous
#endif
+/*
+ * The UltraSPARC T1 has a "feature" where a LDXA/STXA to ASI_SCRATCHPAD
+ * registers may corrupt an unrelated integer register file register.
+ * To prevent this, it is required to have a non-store or NOP instruction
+ * before any LDXA/STXA to this register.
+ */
#define GET_CPUINFO_VA(ci) \
+ nop ;\
999: set CPUINFO_VA, ci ;\
.section .sun4v_mp_patch, "ax" ;\
.word 999b ;\