diff options
author | hyw <none@none> | 2006-06-30 11:19:57 -0700 |
---|---|---|
committer | hyw <none@none> | 2006-06-30 11:19:57 -0700 |
commit | 17e9c21c2c124e74a7e4a7cd9fcaa3f2d31b7069 (patch) | |
tree | edab189a9e2f3e8ca98946df30de7b29932ae3de /usr/src/uts | |
parent | 1d4b38e0077763e7c9b20768eacb841957e787bc (diff) | |
download | illumos-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.s | 16 | ||||
-rw-r--r-- | usr/src/uts/sun4u/opl/Makefile.opl | 14 |
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: |