summaryrefslogtreecommitdiff
path: root/usr/src/uts
diff options
context:
space:
mode:
authorhyw <none@none>2006-06-30 11:19:57 -0700
committerhyw <none@none>2006-06-30 11:19:57 -0700
commit17e9c21c2c124e74a7e4a7cd9fcaa3f2d31b7069 (patch)
treeedab189a9e2f3e8ca98946df30de7b29932ae3de /usr/src/uts
parent1d4b38e0077763e7c9b20768eacb841957e787bc (diff)
downloadillumos-gate-17e9c21c2c124e74a7e4a7cd9fcaa3f2d31b7069.tar.gz
6444295 OPL Olympus-C UE detected in intr packet cause spurious intrs
Diffstat (limited to 'usr/src/uts')
-rw-r--r--usr/src/uts/sun4u/ml/mach_interrupt.s16
-rw-r--r--usr/src/uts/sun4u/opl/Makefile.opl14
2 files changed, 26 insertions, 4 deletions
diff --git a/usr/src/uts/sun4u/ml/mach_interrupt.s b/usr/src/uts/sun4u/ml/mach_interrupt.s
index 1bc22752bd..4215658470 100644
--- a/usr/src/uts/sun4u/ml/mach_interrupt.s
+++ b/usr/src/uts/sun4u/ml/mach_interrupt.s
@@ -2,9 +2,8 @@
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
- * Common Development and Distribution License, Version 1.0 only
- * (the "License"). You may not use this file except in compliance
- * with the License.
+ * Common Development and Distribution License (the "License").
+ * You may not use this file except in compliance with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* or http://www.opensolaris.org/os/licensing.
@@ -20,7 +19,7 @@
* CDDL HEADER END
*/
/*
- * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
@@ -317,6 +316,15 @@ vec_intr_spurious(void)
! %g2 - panic message
! %g4 - current pil
!
+#ifdef CLEAR_INTR_BUSYBIT_ON_SPURIOUS
+ /*
+ * Certain processors (OPL) need to explicitly
+ * clear the intr busy bit even though it is
+ * not visibly set (spurious intrs)
+ */
+ stxa %g0, [%g0]ASI_INTR_RECEIVE_STATUS ! clear the BUSY bit
+ membar #Sync
+#endif /* CLEAR_INTR_BUSYBIT_ON_SPURIOUS */
sub %g0, 1, %g4
set _not_ready, %g2
sethi %hi(sys_tl1_panic), %g1
diff --git a/usr/src/uts/sun4u/opl/Makefile.opl b/usr/src/uts/sun4u/opl/Makefile.opl
index 56485773f8..c883f5a9f1 100644
--- a/usr/src/uts/sun4u/opl/Makefile.opl
+++ b/usr/src/uts/sun4u/opl/Makefile.opl
@@ -156,5 +156,19 @@ MACHINE_DEFS += -DITLB_32M_256M_SUPPORT
# in non-busy state before further xcalls can be issued.
MACHINE_DEFS += -DOLYMPUS_C_REV_A_ERRATA_XCALL
MACHINE_DEFS += -DOLYMPUS_C_REV_B_ERRATA_XCALL
+#
+# OLYMPUS C Spurious interrupts
+# - When an UE is detected in a interrupt packet,
+# Olympus-C takes an interrupt_vector_trap (TT=0x60) while
+# ASI_INTR_RECIEVE.BUSY is set to zero to indicate the existence
+# of the error. Software will see this as a spurious interrupt since
+# the interrupt busy bit is set to zero. SW will still need to
+# explicitly clear the interrupt busy bit to reset the HW state.
+# Failure to do so will result in the processor continuously taking
+# an interrupt vector trap when PSTATE.IE is reset to one.
+# Note that UE in interrupt packet is reported to the SP and handled
+# accordingly. For the domain, the system should panic as it is not
+# recoverable.
+MACHINE_DEFS += -DCLEAR_INTR_BUSYBIT_ON_SPURIOUS
.KEEP_STATE: