xref: /titanic_51/usr/src/uts/sun4u/sys/us3_module.h (revision b9e93c10c0a2a4bb069d38bb311021a9478c4711)
17c478bd9Sstevel@tonic-gate /*
27c478bd9Sstevel@tonic-gate  * CDDL HEADER START
37c478bd9Sstevel@tonic-gate  *
47c478bd9Sstevel@tonic-gate  * The contents of this file are subject to the terms of the
538e9bdffSmikechr  * Common Development and Distribution License (the "License").
638e9bdffSmikechr  * You may not use this file except in compliance with the License.
77c478bd9Sstevel@tonic-gate  *
87c478bd9Sstevel@tonic-gate  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
97c478bd9Sstevel@tonic-gate  * or http://www.opensolaris.org/os/licensing.
107c478bd9Sstevel@tonic-gate  * See the License for the specific language governing permissions
117c478bd9Sstevel@tonic-gate  * and limitations under the License.
127c478bd9Sstevel@tonic-gate  *
137c478bd9Sstevel@tonic-gate  * When distributing Covered Code, include this CDDL HEADER in each
147c478bd9Sstevel@tonic-gate  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
157c478bd9Sstevel@tonic-gate  * If applicable, add the following below this CDDL HEADER, with the
167c478bd9Sstevel@tonic-gate  * fields enclosed by brackets "[]" replaced with your own identifying
177c478bd9Sstevel@tonic-gate  * information: Portions Copyright [yyyy] [name of copyright owner]
187c478bd9Sstevel@tonic-gate  *
197c478bd9Sstevel@tonic-gate  * CDDL HEADER END
207c478bd9Sstevel@tonic-gate  */
217c478bd9Sstevel@tonic-gate /*
22*b9e93c10SJonathan Haslam  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
237c478bd9Sstevel@tonic-gate  * Use is subject to license terms.
247c478bd9Sstevel@tonic-gate  */
257c478bd9Sstevel@tonic-gate 
267c478bd9Sstevel@tonic-gate #ifndef _SYS_US3_MODULE_H
277c478bd9Sstevel@tonic-gate #define	_SYS_US3_MODULE_H
287c478bd9Sstevel@tonic-gate 
297c478bd9Sstevel@tonic-gate #include <sys/async.h>
307c478bd9Sstevel@tonic-gate 
317c478bd9Sstevel@tonic-gate #ifdef	__cplusplus
327c478bd9Sstevel@tonic-gate extern "C" {
337c478bd9Sstevel@tonic-gate #endif
347c478bd9Sstevel@tonic-gate 
357c478bd9Sstevel@tonic-gate #ifdef _KERNEL
367c478bd9Sstevel@tonic-gate 
377c478bd9Sstevel@tonic-gate /*
387c478bd9Sstevel@tonic-gate  * Macros to access the "cheetah cpu private" data structure.
397c478bd9Sstevel@tonic-gate  */
407c478bd9Sstevel@tonic-gate #define	CPU_PRIVATE_PTR(cp, x)	(&(((cheetah_private_t *)CPU_PRIVATE(cp))->x))
417c478bd9Sstevel@tonic-gate #define	CPU_PRIVATE_VAL(cp, x)	(((cheetah_private_t *)CPU_PRIVATE(cp))->x)
427c478bd9Sstevel@tonic-gate 
437c478bd9Sstevel@tonic-gate #define	CHP_WORD_TO_OFF(word, off)	(((word) * 8) == off)
447c478bd9Sstevel@tonic-gate 
457c478bd9Sstevel@tonic-gate #if defined(JALAPENO) || defined(SERRANO)
467c478bd9Sstevel@tonic-gate /* JP J_REQ errors */
477c478bd9Sstevel@tonic-gate #define	C_AFSR_JREQ_ERRS	(C_AFSR_RUE | C_AFSR_BP | C_AFSR_WBP | \
487c478bd9Sstevel@tonic-gate 			C_AFSR_RCE | C_AFSR_TO | C_AFSR_BERR | C_AFSR_UMS)
497c478bd9Sstevel@tonic-gate /* JP AID errors */
507c478bd9Sstevel@tonic-gate #define	C_AFSR_AID_ERRS		(C_AFSR_CPU | C_AFSR_FRU | C_AFSR_CPC | \
517c478bd9Sstevel@tonic-gate 			C_AFSR_FRC)
527c478bd9Sstevel@tonic-gate 
537c478bd9Sstevel@tonic-gate #if defined(SERRANO)
547c478bd9Sstevel@tonic-gate /* SERRANO AFSR bits from Disrupting (Corrected) ECC error Trap (Trap 0x63) */
557c478bd9Sstevel@tonic-gate #define	C_AFSR_CECC_ERRS	(C_AFSR_UMS | C_AFSR_IVPE | C_AFSR_CPC | \
567c478bd9Sstevel@tonic-gate 			C_AFSR_CPU | C_AFSR_WDC | C_AFSR_WDU | C_AFSR_EDC | \
577c478bd9Sstevel@tonic-gate 			C_AFSR_CE | C_AFSR_RCE | C_AFSR_WBP | C_AFSR_FRC | \
587c478bd9Sstevel@tonic-gate 			C_AFSR_FRU | C_AFSR_EDU | C_AFSR_ETI | C_AFSR_ETC)
597c478bd9Sstevel@tonic-gate 
607c478bd9Sstevel@tonic-gate #else /* SERRANO */
617c478bd9Sstevel@tonic-gate /* JP AFSR bits from Disrupting (Corrected) ECC error Trap (Trap 0x63) */
627c478bd9Sstevel@tonic-gate #define	C_AFSR_CECC_ERRS	(C_AFSR_UMS | C_AFSR_IVPE | C_AFSR_CPC | \
637c478bd9Sstevel@tonic-gate 			C_AFSR_CPU | C_AFSR_WDC | C_AFSR_WDU | C_AFSR_EDC | \
647c478bd9Sstevel@tonic-gate 			C_AFSR_CE | C_AFSR_RCE | C_AFSR_WBP | C_AFSR_FRC | \
657c478bd9Sstevel@tonic-gate 			C_AFSR_FRU | C_AFSR_EDU)
667c478bd9Sstevel@tonic-gate #endif /* SERRANO */
677c478bd9Sstevel@tonic-gate 
687c478bd9Sstevel@tonic-gate #if defined(SERRANO)
697c478bd9Sstevel@tonic-gate /*
707c478bd9Sstevel@tonic-gate  * SERRANO AFSR bits from {Instruction,Data}_access_error traps
717c478bd9Sstevel@tonic-gate  * (Traps 0xa, 0x32)
727c478bd9Sstevel@tonic-gate  */
737c478bd9Sstevel@tonic-gate #define	C_AFSR_ASYNC_ERRS	(C_AFSR_OM | C_AFSR_TO | C_AFSR_BERR | \
747c478bd9Sstevel@tonic-gate 			C_AFSR_UE | C_AFSR_RUE | C_AFSR_EDU | C_AFSR_BP | \
757c478bd9Sstevel@tonic-gate 			C_AFSR_ETU | C_AFSR_ETS)
767c478bd9Sstevel@tonic-gate #else /* SERRANO */
777c478bd9Sstevel@tonic-gate /* JP AFSR bits from {Instruction,Data}_access_error traps (Traps 0xa, 0x32) */
787c478bd9Sstevel@tonic-gate #define	C_AFSR_ASYNC_ERRS	(C_AFSR_OM | C_AFSR_TO | C_AFSR_BERR | \
797c478bd9Sstevel@tonic-gate 			C_AFSR_UE | C_AFSR_RUE | C_AFSR_EDU | C_AFSR_BP)
807c478bd9Sstevel@tonic-gate #endif /* SERRANO */
817c478bd9Sstevel@tonic-gate 
827c478bd9Sstevel@tonic-gate #if defined(SERRANO)
837c478bd9Sstevel@tonic-gate /* SERRANO AFSR bits from Fast_ECC_error trap (Trap 0x70) */
847c478bd9Sstevel@tonic-gate #define	C_AFSR_FECC_ERRS	(C_AFSR_UCU | C_AFSR_UCC | C_AFSR_ETI | \
857c478bd9Sstevel@tonic-gate 				C_AFSR_ETC)
867c478bd9Sstevel@tonic-gate 
877c478bd9Sstevel@tonic-gate #else /* SERRANO */
887c478bd9Sstevel@tonic-gate /* JP AFSR bits from Fast_ECC_error trap (Trap 0x70) */
897c478bd9Sstevel@tonic-gate #define	C_AFSR_FECC_ERRS	(C_AFSR_UCU | C_AFSR_UCC)
907c478bd9Sstevel@tonic-gate #endif /* SERRANO */
917c478bd9Sstevel@tonic-gate 
927c478bd9Sstevel@tonic-gate #if defined(SERRANO)
937c478bd9Sstevel@tonic-gate /* SERRANO AFSR bits from Fatal errors (processor asserts ERROR pin) */
947c478bd9Sstevel@tonic-gate #define	C_AFSR_FATAL_ERRS	(C_AFSR_JETO | C_AFSR_SCE | C_AFSR_JEIC | \
957c478bd9Sstevel@tonic-gate 			C_AFSR_JEIT | C_AFSR_JEIS | C_AFSR_IERR | \
967c478bd9Sstevel@tonic-gate 			C_AFSR_ISAP | C_AFSR_EFES | C_AFSR_ETS | C_AFSR_ETU)
977c478bd9Sstevel@tonic-gate 
987c478bd9Sstevel@tonic-gate #else /* SERRANO */
997c478bd9Sstevel@tonic-gate /* JP AFSR bits from Fatal errors (processor asserts ERROR pin) */
1007c478bd9Sstevel@tonic-gate #define	C_AFSR_FATAL_ERRS	(C_AFSR_JETO | C_AFSR_SCE | C_AFSR_JEIC | \
1017c478bd9Sstevel@tonic-gate 			C_AFSR_JEIT | C_AFSR_JEIS | C_AFSR_IERR | \
1027c478bd9Sstevel@tonic-gate 			C_AFSR_ISAP | C_AFSR_ETP)
1037c478bd9Sstevel@tonic-gate #endif /* SERRANO */
1047c478bd9Sstevel@tonic-gate 
1057c478bd9Sstevel@tonic-gate /* JP AFSR all valid error status bits */
1067c478bd9Sstevel@tonic-gate #define	C_AFSR_ALL_ERRS	(C_AFSR_FATAL_ERRS | C_AFSR_FECC_ERRS | \
1077c478bd9Sstevel@tonic-gate 			C_AFSR_CECC_ERRS | C_AFSR_ASYNC_ERRS | C_AFSR_ME)
1087c478bd9Sstevel@tonic-gate 
1097c478bd9Sstevel@tonic-gate #if defined(SERRANO)
1107c478bd9Sstevel@tonic-gate /* SERRANO AFSR all ME status bits */
1117c478bd9Sstevel@tonic-gate #define	C_AFSR_ALL_ME_ERRS	(C_AFSR_ISAP | C_AFSR_UE | C_AFSR_UCU | \
1127c478bd9Sstevel@tonic-gate 			C_AFSR_EDU | C_AFSR_WDU | C_AFSR_CPU | C_AFSR_UCC | \
1137c478bd9Sstevel@tonic-gate 			C_AFSR_BERR | C_AFSR_TO | C_AFSR_ETU | C_AFSR_OM | \
1147c478bd9Sstevel@tonic-gate 			C_AFSR_UMS | C_AFSR_IVPE | C_AFSR_RUE | C_AFSR_BP | \
1157c478bd9Sstevel@tonic-gate 			C_AFSR_WBP | C_AFSR_FRU | C_AFSR_JETO | C_AFSR_SCE | \
1167c478bd9Sstevel@tonic-gate 			C_AFSR_JEIC | C_AFSR_JEIT | C_AFSR_JEIS | \
1177c478bd9Sstevel@tonic-gate 			C_AFSR_ETC | C_AFSR_ETI)
1187c478bd9Sstevel@tonic-gate 
1197c478bd9Sstevel@tonic-gate #else /* SERRANO */
1207c478bd9Sstevel@tonic-gate /* JP AFSR all ME status bits */
1217c478bd9Sstevel@tonic-gate #define	C_AFSR_ALL_ME_ERRS	(C_AFSR_ISAP | C_AFSR_UE | C_AFSR_UCU | \
1227c478bd9Sstevel@tonic-gate 			C_AFSR_EDU | C_AFSR_WDU | C_AFSR_CPU | C_AFSR_UCC | \
1237c478bd9Sstevel@tonic-gate 			C_AFSR_BERR | C_AFSR_TO | C_AFSR_ETP | C_AFSR_OM | \
1247c478bd9Sstevel@tonic-gate 			C_AFSR_UMS | C_AFSR_IVPE | C_AFSR_RUE | C_AFSR_BP | \
1257c478bd9Sstevel@tonic-gate 			C_AFSR_WBP | C_AFSR_FRU | C_AFSR_JETO | C_AFSR_SCE | \
1267c478bd9Sstevel@tonic-gate 			C_AFSR_JEIC | C_AFSR_JEIT | C_AFSR_JEIS)
1277c478bd9Sstevel@tonic-gate #endif /* SERRANO */
1287c478bd9Sstevel@tonic-gate 
1297c478bd9Sstevel@tonic-gate /* JP AFSR bits due to a Memory error */
1307c478bd9Sstevel@tonic-gate #define	C_AFSR_MEMORY	(C_AFSR_UE | C_AFSR_CE | C_AFSR_FRC | C_AFSR_FRU |\
1317c478bd9Sstevel@tonic-gate 			C_AFSR_RCE | C_AFSR_RUE)
1327c478bd9Sstevel@tonic-gate 
1337c478bd9Sstevel@tonic-gate /* JP AFSR bits due to parity errors and have a valid BSYND */
1347c478bd9Sstevel@tonic-gate #define	C_AFSR_MSYND_ERRS	(C_AFSR_IVPE | C_AFSR_BP | C_AFSR_WBP)
1357c478bd9Sstevel@tonic-gate 
1367c478bd9Sstevel@tonic-gate /* JP AFSR bits with a valid ESYND field */
1377c478bd9Sstevel@tonic-gate #define	C_AFSR_ESYND_ERRS	(C_AFSR_UE | C_AFSR_CE | \
1387c478bd9Sstevel@tonic-gate 			C_AFSR_UCU | C_AFSR_UCC | C_AFSR_EDU | C_AFSR_EDC | \
1397c478bd9Sstevel@tonic-gate 			C_AFSR_WDU | C_AFSR_WDC | C_AFSR_CPU | C_AFSR_CPC | \
1407c478bd9Sstevel@tonic-gate 			C_AFSR_FRC | C_AFSR_FRU)
1417c478bd9Sstevel@tonic-gate 
1427c478bd9Sstevel@tonic-gate /* JP AFSR error bits for AFT Level 1 messages (uncorrected + TO + BERR) */
1437c478bd9Sstevel@tonic-gate #define	C_AFSR_LEVEL1	(C_AFSR_UE | C_AFSR_RUE | C_AFSR_UCU | C_AFSR_EDU | \
1447c478bd9Sstevel@tonic-gate 			C_AFSR_WDU | C_AFSR_CPU | C_AFSR_IVPE | C_AFSR_TO | \
1457c478bd9Sstevel@tonic-gate 			C_AFSR_BERR | C_AFSR_UMS | C_AFSR_OM | C_AFSR_WBP | \
1467c478bd9Sstevel@tonic-gate 			C_AFSR_FRU | C_AFSR_BP)
1477c478bd9Sstevel@tonic-gate 
1487c478bd9Sstevel@tonic-gate #elif defined(CHEETAH_PLUS)
1497c478bd9Sstevel@tonic-gate 
1507c478bd9Sstevel@tonic-gate /* Ch+ AFSR bits from Disrupting (Corrected) ECC error Trap (Trap 0x63) */
1517c478bd9Sstevel@tonic-gate #define	C_AFSR_CECC_ERRS	(C_AFSR_CE | C_AFSR_EMC | C_AFSR_EDU | \
1527c478bd9Sstevel@tonic-gate 			C_AFSR_EDC | C_AFSR_WDU | C_AFSR_WDC | C_AFSR_CPU | \
1537c478bd9Sstevel@tonic-gate 			C_AFSR_CPC | C_AFSR_IVU | C_AFSR_IVC | C_AFSR_DUE | \
1547c478bd9Sstevel@tonic-gate 			C_AFSR_THCE | C_AFSR_DBERR | C_AFSR_DTO | C_AFSR_IMU | \
1557c478bd9Sstevel@tonic-gate 			C_AFSR_IMC)
1567c478bd9Sstevel@tonic-gate 
1577c478bd9Sstevel@tonic-gate /* Ch+ AFSR bits from {Instruction,Data}_access_error traps (Traps 0xa, 0x32) */
1587c478bd9Sstevel@tonic-gate #define	C_AFSR_ASYNC_ERRS	(C_AFSR_UE | C_AFSR_EMU | C_AFSR_EDU | \
1597c478bd9Sstevel@tonic-gate 			C_AFSR_TO | C_AFSR_BERR)
1607c478bd9Sstevel@tonic-gate 
1617c478bd9Sstevel@tonic-gate /* Ch+ AFSR bits from Fast_ECC_error trap (Trap 0x70) */
1627c478bd9Sstevel@tonic-gate #define	C_AFSR_FECC_ERRS	(C_AFSR_UCU | C_AFSR_UCC | C_AFSR_TSCE)
1637c478bd9Sstevel@tonic-gate 
1647c478bd9Sstevel@tonic-gate /* Ch+ AFSR bits from Fatal errors (processor asserts ERROR pin) */
1657c478bd9Sstevel@tonic-gate #define	C_AFSR_FATAL_ERRS	(C_AFSR_PERR | C_AFSR_IERR | C_AFSR_ISAP | \
1667c478bd9Sstevel@tonic-gate 			C_AFSR_TUE | C_AFSR_TUE_SH | C_AFSR_IMU | C_AFSR_EMU)
1677c478bd9Sstevel@tonic-gate 
1687c478bd9Sstevel@tonic-gate /* Ch+ AFSR all valid error status bits */
1697c478bd9Sstevel@tonic-gate #define	C_AFSR_ALL_ERRS	(C_AFSR_FATAL_ERRS | C_AFSR_FECC_ERRS | \
1707c478bd9Sstevel@tonic-gate 			C_AFSR_CECC_ERRS | C_AFSR_ASYNC_ERRS | C_AFSR_ME)
1717c478bd9Sstevel@tonic-gate 
1727c478bd9Sstevel@tonic-gate /* Ch+ AFSR all errors that set ME bit, in both AFSR and AFSR_EXT */
1737c478bd9Sstevel@tonic-gate #define	C_AFSR_ALL_ME_ERRS	(C_AFSR_TUE_SH | C_AFSR_IMU | C_AFSR_DTO | \
1747c478bd9Sstevel@tonic-gate 			C_AFSR_DBERR | C_AFSR_TSCE | C_AFSR_TUE | C_AFSR_DUE | \
1757c478bd9Sstevel@tonic-gate 			C_AFSR_ISAP | C_AFSR_EMU | C_AFSR_IVU | C_AFSR_TO | \
1767c478bd9Sstevel@tonic-gate 			C_AFSR_BERR | C_AFSR_UCC | C_AFSR_UCU | C_AFSR_CPU | \
1777c478bd9Sstevel@tonic-gate 			C_AFSR_WDU | C_AFSR_EDU | C_AFSR_UE | \
1787c478bd9Sstevel@tonic-gate 			C_AFSR_L3_TUE_SH | C_AFSR_L3_TUE | C_AFSR_L3_EDU | \
1797c478bd9Sstevel@tonic-gate 			C_AFSR_L3_UCC | C_AFSR_L3_UCU | C_AFSR_L3_CPU | \
1807c478bd9Sstevel@tonic-gate 			C_AFSR_L3_WDU)
1817c478bd9Sstevel@tonic-gate 
18238e9bdffSmikechr /* Ch+ AFSR bits due to an Ecache data error */
18338e9bdffSmikechr #define	C_AFSR_EC_DATA_ERRS	(C_AFSR_UCU | C_AFSR_UCC | C_AFSR_EDU | \
18438e9bdffSmikechr 			C_AFSR_EDC | C_AFSR_WDU | C_AFSR_WDC | C_AFSR_CPU | \
18538e9bdffSmikechr 			C_AFSR_CPC)
1867c478bd9Sstevel@tonic-gate 
1877c478bd9Sstevel@tonic-gate /* Ch+ AFSR bits due to a Memory error */
1887c478bd9Sstevel@tonic-gate #define	C_AFSR_MEMORY	(C_AFSR_UE | C_AFSR_CE | C_AFSR_EMU | C_AFSR_EMC | \
1897c478bd9Sstevel@tonic-gate 			C_AFSR_DUE)
1907c478bd9Sstevel@tonic-gate 
1917c478bd9Sstevel@tonic-gate /* Ch+ AFSR bits due to an Mtag error and have a valid MSYND */
1927c478bd9Sstevel@tonic-gate #define	C_AFSR_MSYND_ERRS	(C_AFSR_EMU | C_AFSR_EMC | C_AFSR_IMU | \
1937c478bd9Sstevel@tonic-gate 			C_AFSR_IMC)
1947c478bd9Sstevel@tonic-gate 
1957c478bd9Sstevel@tonic-gate /* Ch+ AFSR bits with a valid ESYND field */
1967c478bd9Sstevel@tonic-gate #define	C_AFSR_ESYND_ERRS	(C_AFSR_UE | C_AFSR_CE | \
1977c478bd9Sstevel@tonic-gate 			C_AFSR_UCU | C_AFSR_UCC | C_AFSR_EDU | C_AFSR_EDC | \
1987c478bd9Sstevel@tonic-gate 			C_AFSR_WDU | C_AFSR_WDC | C_AFSR_CPU | C_AFSR_CPC | \
1997c478bd9Sstevel@tonic-gate 			C_AFSR_IVU | C_AFSR_IVC | C_AFSR_DUE)
2007c478bd9Sstevel@tonic-gate 
2017c478bd9Sstevel@tonic-gate /* Ch+ AFSR error bits for AFT Level 1 messages (uncorrected + TO + BERR) */
2027c478bd9Sstevel@tonic-gate #define	C_AFSR_LEVEL1	(C_AFSR_UE | C_AFSR_UCU | C_AFSR_EMU | C_AFSR_EDU | \
2037c478bd9Sstevel@tonic-gate 			C_AFSR_WDU | C_AFSR_CPU | C_AFSR_IVU | C_AFSR_TO | \
2047c478bd9Sstevel@tonic-gate 			C_AFSR_BERR | C_AFSR_DUE | C_AFSR_TUE | C_AFSR_DTO | \
2057c478bd9Sstevel@tonic-gate 			C_AFSR_DBERR | C_AFSR_TUE_SH | C_AFSR_IMU)
2067c478bd9Sstevel@tonic-gate 
2077c478bd9Sstevel@tonic-gate #else	/* CHEETAH_PLUS */
2087c478bd9Sstevel@tonic-gate 
2097c478bd9Sstevel@tonic-gate /* AFSR bits from Disrupting (Corrected) ECC error Trap (Trap 0x63) */
2107c478bd9Sstevel@tonic-gate #define	C_AFSR_CECC_ERRS	(C_AFSR_CE | C_AFSR_EMC | C_AFSR_EDU | \
2117c478bd9Sstevel@tonic-gate 			C_AFSR_EDC | C_AFSR_WDU | C_AFSR_WDC | C_AFSR_CPU | \
2127c478bd9Sstevel@tonic-gate 			C_AFSR_CPC | C_AFSR_IVU | C_AFSR_IVC)
2137c478bd9Sstevel@tonic-gate 
2147c478bd9Sstevel@tonic-gate /* AFSR bits from {Instruction,Data}_access_error traps (Traps 0xa, 0x32) */
2157c478bd9Sstevel@tonic-gate #define	C_AFSR_ASYNC_ERRS	(C_AFSR_UE | C_AFSR_EMU | C_AFSR_EDU | \
2167c478bd9Sstevel@tonic-gate 			C_AFSR_TO | C_AFSR_BERR)
2177c478bd9Sstevel@tonic-gate 
2187c478bd9Sstevel@tonic-gate /* AFSR bits from Fast_ECC_error trap (Trap 0x70) */
2197c478bd9Sstevel@tonic-gate #define	C_AFSR_FECC_ERRS	(C_AFSR_UCU | C_AFSR_UCC)
2207c478bd9Sstevel@tonic-gate 
2217c478bd9Sstevel@tonic-gate /* AFSR bits from Fatal errors (processor asserts ERROR pin) */
2227c478bd9Sstevel@tonic-gate #define	C_AFSR_FATAL_ERRS	(C_AFSR_PERR | C_AFSR_IERR | C_AFSR_ISAP | \
2237c478bd9Sstevel@tonic-gate 			C_AFSR_EMU)
2247c478bd9Sstevel@tonic-gate 
2257c478bd9Sstevel@tonic-gate /* AFSR all valid error status bits */
2267c478bd9Sstevel@tonic-gate #define	C_AFSR_ALL_ERRS	(C_AFSR_FATAL_ERRS | C_AFSR_FECC_ERRS | \
2277c478bd9Sstevel@tonic-gate 			C_AFSR_CECC_ERRS | C_AFSR_ASYNC_ERRS | C_AFSR_ME)
2287c478bd9Sstevel@tonic-gate 
2297c478bd9Sstevel@tonic-gate /* AFSR all ME status bits */
2307c478bd9Sstevel@tonic-gate #define	C_AFSR_ALL_ME_ERRS	(C_AFSR_ISAP | C_AFSR_UE | C_AFSR_IVU | \
2317c478bd9Sstevel@tonic-gate 			C_AFSR_EMU | C_AFSR_UCU | C_AFSR_EDU | C_AFSR_WDU | \
2327c478bd9Sstevel@tonic-gate 			C_AFSR_CPU | C_AFSR_UCC | C_AFSR_BERR | C_AFSR_TO)
2337c478bd9Sstevel@tonic-gate 
2347c478bd9Sstevel@tonic-gate /* AFSR bits due to an Ecache error */
23538e9bdffSmikechr #define	C_AFSR_EC_DATA_ERRS	(C_AFSR_UCU | C_AFSR_UCC | C_AFSR_EDU | \
23638e9bdffSmikechr 			C_AFSR_EDC | C_AFSR_WDU | C_AFSR_WDC | C_AFSR_CPU | \
23738e9bdffSmikechr 			C_AFSR_CPC)
2387c478bd9Sstevel@tonic-gate 
2397c478bd9Sstevel@tonic-gate /* AFSR bits due to a Memory error */
2407c478bd9Sstevel@tonic-gate #define	C_AFSR_MEMORY	(C_AFSR_UE | C_AFSR_CE | C_AFSR_EMU | C_AFSR_EMC)
2417c478bd9Sstevel@tonic-gate 
2427c478bd9Sstevel@tonic-gate /* AFSR bits due to an Mtag error and have a valid MSYND */
2437c478bd9Sstevel@tonic-gate #define	C_AFSR_MSYND_ERRS	(C_AFSR_EMU | C_AFSR_EMC)
2447c478bd9Sstevel@tonic-gate 
2457c478bd9Sstevel@tonic-gate /* AFSR bits with a valid ESYND field */
2467c478bd9Sstevel@tonic-gate #define	C_AFSR_ESYND_ERRS	(C_AFSR_UE | C_AFSR_CE | \
2477c478bd9Sstevel@tonic-gate 			C_AFSR_UCU | C_AFSR_UCC | C_AFSR_EDU | C_AFSR_EDC | \
2487c478bd9Sstevel@tonic-gate 			C_AFSR_WDU | C_AFSR_WDC | C_AFSR_CPU | C_AFSR_CPC | \
2497c478bd9Sstevel@tonic-gate 			C_AFSR_IVU | C_AFSR_IVC)
2507c478bd9Sstevel@tonic-gate 
2517c478bd9Sstevel@tonic-gate /* AFSR error bits for AFT Level 1 messages (uncorrected + TO + BERR) */
2527c478bd9Sstevel@tonic-gate #define	C_AFSR_LEVEL1	(C_AFSR_UE | C_AFSR_UCU | C_AFSR_EMU | C_AFSR_EDU | \
2537c478bd9Sstevel@tonic-gate 			C_AFSR_WDU | C_AFSR_CPU | C_AFSR_IVU | C_AFSR_TO | \
2547c478bd9Sstevel@tonic-gate 			C_AFSR_BERR)
2557c478bd9Sstevel@tonic-gate 
2567c478bd9Sstevel@tonic-gate #endif	/* CHEETAH_PLUS */
2577c478bd9Sstevel@tonic-gate 
2587c478bd9Sstevel@tonic-gate #if defined(JALAPENO) || defined(SERRANO)
2597c478bd9Sstevel@tonic-gate /* AFSR all valid bits (except for ETW) */
2607c478bd9Sstevel@tonic-gate #define	C_AFSR_MASK	(C_AFSR_ALL_ERRS | C_AFSR_PRIV | C_AFSR_B_SYND | \
2617c478bd9Sstevel@tonic-gate 			C_AFSR_E_SYND | C_AFSR_AID | C_AFSR_JREQ)
2627c478bd9Sstevel@tonic-gate #else /* JALAPENO || SERRANO */
2637c478bd9Sstevel@tonic-gate /* AFSR all valid bits */
2647c478bd9Sstevel@tonic-gate #define	C_AFSR_MASK	(C_AFSR_ALL_ERRS | C_AFSR_PRIV | C_AFSR_M_SYND | \
2657c478bd9Sstevel@tonic-gate 			C_AFSR_E_SYND)
2667c478bd9Sstevel@tonic-gate #endif /* JALAPENO || SERRANO */
2677c478bd9Sstevel@tonic-gate 
2687c478bd9Sstevel@tonic-gate /*
2697c478bd9Sstevel@tonic-gate  * Panther AFSR_EXT bits from Disrupting (Corrected) ECC error Trap
2707c478bd9Sstevel@tonic-gate  * (Trap 0x63)
2717c478bd9Sstevel@tonic-gate  */
2727c478bd9Sstevel@tonic-gate #define	C_AFSR_EXT_CECC_ERRS	(C_AFSR_L3_EDU | C_AFSR_L3_EDC | \
2737c478bd9Sstevel@tonic-gate 			C_AFSR_L3_WDU | C_AFSR_L3_WDC | C_AFSR_L3_CPU | \
2747c478bd9Sstevel@tonic-gate 			C_AFSR_L3_CPC | C_AFSR_L3_THCE)
2757c478bd9Sstevel@tonic-gate 
2767c478bd9Sstevel@tonic-gate /*
2777c478bd9Sstevel@tonic-gate  * Panther AFSR_EXT bits from {Instruction,Data}_access_error traps
2787c478bd9Sstevel@tonic-gate  * (Traps 0xa, 0x32)
2797c478bd9Sstevel@tonic-gate  */
2807c478bd9Sstevel@tonic-gate #define	C_AFSR_EXT_ASYNC_ERRS	(C_AFSR_L3_EDU)
2817c478bd9Sstevel@tonic-gate 
2827c478bd9Sstevel@tonic-gate /* Panther AFSR_EXT bits from Fast_ECC_error trap (Trap 0x70) */
2837c478bd9Sstevel@tonic-gate #define	C_AFSR_EXT_FECC_ERRS	(C_AFSR_L3_UCU | C_AFSR_L3_UCC)
2847c478bd9Sstevel@tonic-gate 
2857c478bd9Sstevel@tonic-gate /* Panther AFSR_EXT bits from Fatal errors (processor asserts ERROR pin) */
2867c478bd9Sstevel@tonic-gate #define	C_AFSR_EXT_FATAL_ERRS	(C_AFSR_L3_TUE | C_AFSR_L3_TUE_SH | \
2877c478bd9Sstevel@tonic-gate 			C_AFSR_RED_ERR | C_AFSR_EFA_PAR_ERR)
2887c478bd9Sstevel@tonic-gate 
2897c478bd9Sstevel@tonic-gate /* Panther AFSR_EXT all valid error status bits */
2907c478bd9Sstevel@tonic-gate #define	C_AFSR_EXT_ALL_ERRS	(C_AFSR_EXT_FATAL_ERRS | \
2917c478bd9Sstevel@tonic-gate 			C_AFSR_EXT_FECC_ERRS | C_AFSR_EXT_CECC_ERRS | \
2927c478bd9Sstevel@tonic-gate 			C_AFSR_EXT_ASYNC_ERRS | C_AFSR_L3_MECC)
2937c478bd9Sstevel@tonic-gate 
294b9048f8aSmb91622 /* Panther AFSR_EXT bits for errors to report a L3 cache data resource */
29538e9bdffSmikechr #define	C_AFSR_EXT_L3_DATA_ERRS	(C_AFSR_L3_WDU | C_AFSR_L3_WDC | \
2967c478bd9Sstevel@tonic-gate 			C_AFSR_L3_CPU | C_AFSR_L3_CPC | C_AFSR_L3_UCU | \
297b9048f8aSmb91622 			C_AFSR_L3_UCC | C_AFSR_L3_EDU | C_AFSR_L3_EDC | \
298b9048f8aSmb91622 			C_AFSR_L3_MECC)
2997c478bd9Sstevel@tonic-gate 
3007c478bd9Sstevel@tonic-gate /* Panther AFSR_EXT bits with a valid ESYND field */
3017c478bd9Sstevel@tonic-gate #define	C_AFSR_EXT_ESYND_ERRS	(C_AFSR_L3_UCU | C_AFSR_L3_UCC | \
3027c478bd9Sstevel@tonic-gate 			C_AFSR_L3_EDU | C_AFSR_L3_EDC | C_AFSR_L3_WDU | \
3037c478bd9Sstevel@tonic-gate 			C_AFSR_L3_WDC | C_AFSR_L3_CPU | C_AFSR_L3_CPC)
3047c478bd9Sstevel@tonic-gate 
3057c478bd9Sstevel@tonic-gate /* PANTHER AFSR_EXT error bits for AFT Level 1 messages (uncorrected) */
3067c478bd9Sstevel@tonic-gate #define	C_AFSR_EXT_LEVEL1	(C_AFSR_L3_UCU | C_AFSR_L3_EDU | \
3077c478bd9Sstevel@tonic-gate 			C_AFSR_L3_WDU | C_AFSR_L3_CPU | C_AFSR_L3_TUE | \
3087c478bd9Sstevel@tonic-gate 			C_AFSR_L3_TUE_SH)
3097c478bd9Sstevel@tonic-gate 
3107c478bd9Sstevel@tonic-gate /*
3117c478bd9Sstevel@tonic-gate  * AFSR / AFSR_EXT bits for which we need to panic the system.
3127c478bd9Sstevel@tonic-gate  */
3137c478bd9Sstevel@tonic-gate #define	C_AFSR_PANIC(errs)	(((errs) & (C_AFSR_FATAL_ERRS | \
3147c478bd9Sstevel@tonic-gate 			C_AFSR_EXT_FATAL_ERRS)) != 0)
3157c478bd9Sstevel@tonic-gate 
3167c478bd9Sstevel@tonic-gate /*
3177c478bd9Sstevel@tonic-gate  * For the Fast ECC TL1 handler, we are limited in how many registers
3187c478bd9Sstevel@tonic-gate  * we can use, so we need to store the AFSR_EXT bits within the AFSR
3197c478bd9Sstevel@tonic-gate  * register using some of the AFSR reserved bits.
3207c478bd9Sstevel@tonic-gate  */
3217c478bd9Sstevel@tonic-gate #define	AFSR_EXT_IN_AFSR_MASK	C_AFSR_EXT_ALL_ERRS
3227c478bd9Sstevel@tonic-gate #define	AFSR_EXT_IN_AFSR_SHIFT	20
3237c478bd9Sstevel@tonic-gate 
3247c478bd9Sstevel@tonic-gate /*
3257c478bd9Sstevel@tonic-gate  * Defines for the flag field in the CPU logout structure.  See the
3267c478bd9Sstevel@tonic-gate  * definition of ch_cpu_logout_t for further description.
3277c478bd9Sstevel@tonic-gate  */
3287c478bd9Sstevel@tonic-gate #define	CLO_FLAGS_TT_MASK	0xff000
3297c478bd9Sstevel@tonic-gate #define	CLO_FLAGS_TT_SHIFT	12
3307c478bd9Sstevel@tonic-gate #define	CLO_FLAGS_TL_MASK	0xf00
3317c478bd9Sstevel@tonic-gate #define	CLO_FLAGS_TL_SHIFT	8
3327c478bd9Sstevel@tonic-gate #define	CLO_NESTING_MAX		20	/* Arbitrary maximum value */
3337c478bd9Sstevel@tonic-gate 
3347c478bd9Sstevel@tonic-gate #define	C_M_SYND_SHIFT	16
3357c478bd9Sstevel@tonic-gate #define	GET_M_SYND(afsr)	(((afsr) & C_AFSR_M_SYND) >> C_M_SYND_SHIFT)
3367c478bd9Sstevel@tonic-gate #define	GET_E_SYND(afsr)	((afsr) & C_AFSR_E_SYND)
3377c478bd9Sstevel@tonic-gate 
3387c478bd9Sstevel@tonic-gate /*
3397c478bd9Sstevel@tonic-gate  * Bits of Cheetah Asynchronous Fault Address Register
3407c478bd9Sstevel@tonic-gate  */
3417c478bd9Sstevel@tonic-gate #define	C_AFAR_PA INT64_C(0x000007fffffffff0) /* PA<42:4> physical address */
3427c478bd9Sstevel@tonic-gate 
3437c478bd9Sstevel@tonic-gate /*
3447c478bd9Sstevel@tonic-gate  * Defines for the different types of dcache_flush
3457c478bd9Sstevel@tonic-gate  * it is stored in dflush_type
3467c478bd9Sstevel@tonic-gate  */
3477c478bd9Sstevel@tonic-gate #define	FLUSHALL_TYPE	0x0		/* blasts all cache lines */
3487c478bd9Sstevel@tonic-gate #define	FLUSHMATCH_TYPE	0x1		/* flush entire cache but check each */
3497c478bd9Sstevel@tonic-gate 					/* each line for a match */
3507c478bd9Sstevel@tonic-gate #define	FLUSHPAGE_TYPE	0x2		/* flush only one page and check */
3517c478bd9Sstevel@tonic-gate 					/* each line for a match */
3527c478bd9Sstevel@tonic-gate 
3537c478bd9Sstevel@tonic-gate /*
3547c478bd9Sstevel@tonic-gate  * D-Cache Tag Data Register
3557c478bd9Sstevel@tonic-gate  *
3567c478bd9Sstevel@tonic-gate  * +----------+--------+----------+
3577c478bd9Sstevel@tonic-gate  * | Reserved | DC_Tag | DC_Valid |
3587c478bd9Sstevel@tonic-gate  * +----------+--------+----------+
3597c478bd9Sstevel@tonic-gate  *  63	    31 30     1		 0
3607c478bd9Sstevel@tonic-gate  *
3617c478bd9Sstevel@tonic-gate  */
3627c478bd9Sstevel@tonic-gate #define	ICACHE_FLUSHSZ	0x20	/* one line in i$ */
3637c478bd9Sstevel@tonic-gate #define	CHEETAH_DC_VBIT_SHIFT	1
3647c478bd9Sstevel@tonic-gate #define	CHEETAH_DC_VBIT_MASK	0x1
3657c478bd9Sstevel@tonic-gate 
3667c478bd9Sstevel@tonic-gate /*
3677c478bd9Sstevel@tonic-gate  * Define for max size of "reason" string in panic flows.  Since this is on
3687c478bd9Sstevel@tonic-gate  * the stack, we want to keep it as small as is reasonable.
3697c478bd9Sstevel@tonic-gate  */
3707c478bd9Sstevel@tonic-gate #define	MAX_REASON_STRING	40
3717c478bd9Sstevel@tonic-gate 
3727c478bd9Sstevel@tonic-gate /*
3737c478bd9Sstevel@tonic-gate  * These error types are specific to Cheetah and are used internally for the
3747c478bd9Sstevel@tonic-gate  * Cheetah fault structure flt_type field.
3757c478bd9Sstevel@tonic-gate  */
3767c478bd9Sstevel@tonic-gate #define	CPU_TO			1	/* Timeout */
3777c478bd9Sstevel@tonic-gate #define	CPU_BERR		2	/* Bus Error */
3787c478bd9Sstevel@tonic-gate #define	CPU_CE			3	/* Correctable Memory Error */
3797c478bd9Sstevel@tonic-gate #define	CPU_UE			4	/* Uncorrectable Memory Error */
3807c478bd9Sstevel@tonic-gate #define	CPU_CE_ECACHE		5	/* Correctable Ecache Error */
3817c478bd9Sstevel@tonic-gate #define	CPU_UE_ECACHE		6	/* Uncorrectable Ecache Error */
3827c478bd9Sstevel@tonic-gate #define	CPU_EMC			7	/* Correctable Mtag Error */
3837c478bd9Sstevel@tonic-gate #define	CPU_FATAL		8	/* Fatal Error */
3847c478bd9Sstevel@tonic-gate #define	CPU_ORPH		9	/* Orphaned UCC/UCU error */
3857c478bd9Sstevel@tonic-gate #define	CPU_IV			10	/* IVU or IVC */
3867c478bd9Sstevel@tonic-gate #define	CPU_INV_AFSR		11	/* Invalid AFSR */
3877c478bd9Sstevel@tonic-gate #define	CPU_UE_ECACHE_RETIRE	12	/* Uncorrectable Ecache, retire page */
3887c478bd9Sstevel@tonic-gate #define	CPU_IC_PARITY		13	/* Icache parity error trap */
3897c478bd9Sstevel@tonic-gate #define	CPU_DC_PARITY		14	/* Dcache parity error trap */
3907c478bd9Sstevel@tonic-gate #define	CPU_DUE			15	/* Disrupting UE */
3917c478bd9Sstevel@tonic-gate #define	CPU_FPUERR		16	/* FPU Error */
3927c478bd9Sstevel@tonic-gate /*
3937c478bd9Sstevel@tonic-gate  * These next six error types (17-22) are only used in Jalapeno code
3947c478bd9Sstevel@tonic-gate  */
3957c478bd9Sstevel@tonic-gate #define	CPU_RCE			17	/* Correctable remote memory error */
3967c478bd9Sstevel@tonic-gate #define	CPU_RUE			18	/* Uncorrectable remote memory error */
3977c478bd9Sstevel@tonic-gate #define	CPU_FRC			19	/* Correctable foreign memory error */
3987c478bd9Sstevel@tonic-gate #define	CPU_FRU			20	/* Uncorrectable foreign memory error */
3997c478bd9Sstevel@tonic-gate #define	CPU_BPAR		21	/* Bus parity (BP or WBP) errorrs */
4007c478bd9Sstevel@tonic-gate #define	CPU_UMS			22	/* Unsupported memory store */
4017c478bd9Sstevel@tonic-gate /*
4027c478bd9Sstevel@tonic-gate  * These next four error types (23-26) are only used in Panther code
4037c478bd9Sstevel@tonic-gate  */
4047c478bd9Sstevel@tonic-gate #define	CPU_PC_PARITY		23	/* Pcache parity error */
4057c478bd9Sstevel@tonic-gate #define	CPU_ITLB_PARITY		24	/* Panther ITLB parity error */
4067c478bd9Sstevel@tonic-gate #define	CPU_DTLB_PARITY		25	/* Panther DTLB parity error */
4077c478bd9Sstevel@tonic-gate #define	CPU_L3_ADDR_PE		26	/* Panther L3$ address parity error */
4087c478bd9Sstevel@tonic-gate 
4097c478bd9Sstevel@tonic-gate /*
4107c478bd9Sstevel@tonic-gate  * Sets trap table entry ttentry by overwriting eight instructions from ttlabel
4117c478bd9Sstevel@tonic-gate  */
4127c478bd9Sstevel@tonic-gate #define	CH_SET_TRAP(ttentry, ttlabel)			\
4137c478bd9Sstevel@tonic-gate 		bcopy((const void *)&ttlabel, &ttentry, 32);		\
4147c478bd9Sstevel@tonic-gate 		flush_instr_mem((caddr_t)&ttentry, 32);
4157c478bd9Sstevel@tonic-gate 
4167c478bd9Sstevel@tonic-gate /*
4177c478bd9Sstevel@tonic-gate  * Return values for implementation specific error logging in the routine
4187c478bd9Sstevel@tonic-gate  * cpu_impl_async_log_err()
4197c478bd9Sstevel@tonic-gate  */
4207c478bd9Sstevel@tonic-gate #define	CH_ASYNC_LOG_DONE	0	/* finished logging the error */
4217c478bd9Sstevel@tonic-gate #define	CH_ASYNC_LOG_CONTINUE	1	/* continue onto handle panicker */
4227c478bd9Sstevel@tonic-gate #define	CH_ASYNC_LOG_UNKNOWN	2	/* unknown error type */
4237c478bd9Sstevel@tonic-gate #define	CH_ASYNC_LOG_RECIRC	3	/* suppress logging of error */
4247c478bd9Sstevel@tonic-gate 
4257c478bd9Sstevel@tonic-gate #ifndef	_ASM
4267c478bd9Sstevel@tonic-gate 
4277c478bd9Sstevel@tonic-gate /*
4287c478bd9Sstevel@tonic-gate  * Define Cheetah family (UltraSPARC-III) specific asynchronous error structure
4297c478bd9Sstevel@tonic-gate  */
4307c478bd9Sstevel@tonic-gate typedef struct cheetah_async_flt {
4317c478bd9Sstevel@tonic-gate 	struct async_flt cmn_asyncflt;	/* common - see sun4u/sys/async.h */
4327c478bd9Sstevel@tonic-gate 	ushort_t flt_type;		/* types of faults - cpu specific */
4337c478bd9Sstevel@tonic-gate 	uint64_t flt_bit;		/* fault bit for this log msg */
4347c478bd9Sstevel@tonic-gate 	uint64_t afsr_ext;		/* Panther has an AFSR_EXT register */
4357c478bd9Sstevel@tonic-gate 	uint64_t afsr_errs;		/* Store all AFSR error bits together */
4367c478bd9Sstevel@tonic-gate 	uint64_t afar2;			/* Serrano has an AFAR2 for FRC/FRU */
4377c478bd9Sstevel@tonic-gate 	ch_diag_data_t flt_diag_data;	/* Diagnostic data */
4387c478bd9Sstevel@tonic-gate 	int flt_data_incomplete;	/* Diagnostic data is incomplete */
4397c478bd9Sstevel@tonic-gate 	int flt_trapped_ce;		/* CEEN fault caught by trap handler */
4407c478bd9Sstevel@tonic-gate #if defined(CPU_IMP_L1_CACHE_PARITY)
4417c478bd9Sstevel@tonic-gate 	ch_l1_parity_log_t parity_data;	/* L1$ Parity error logging info */
4427c478bd9Sstevel@tonic-gate #endif	/* CPU_IMP_L1_CACHE_PARITY */
4437c478bd9Sstevel@tonic-gate 	pn_tlb_logout_t tlb_diag_data;	/* TLB parity error Diagnostic data */
4447c478bd9Sstevel@tonic-gate 	uint32_t flt_fpdata[16];	/* Data from fpras failure */
4457c478bd9Sstevel@tonic-gate 	uint64_t flt_sdw_afar;		/* Shadow AFAR */
4467c478bd9Sstevel@tonic-gate 	uint64_t flt_sdw_afsr;		/* Shadow AFSR */
4477c478bd9Sstevel@tonic-gate 	uint64_t flt_sdw_afsr_ext;	/* Shadow Extended AFSR */
4487c478bd9Sstevel@tonic-gate } ch_async_flt_t;
4497c478bd9Sstevel@tonic-gate 
4507c478bd9Sstevel@tonic-gate #define	ECC_ALL_TRAPS	(ECC_D_TRAP | ECC_I_TRAP | ECC_C_TRAP | ECC_F_TRAP)
4517c478bd9Sstevel@tonic-gate #define	ECC_ORPH_TRAPS	(ECC_D_TRAP | ECC_I_TRAP | ECC_C_TRAP)
4527c478bd9Sstevel@tonic-gate #define	ECC_ASYNC_TRAPS	(ECC_D_TRAP | ECC_I_TRAP)
4537c478bd9Sstevel@tonic-gate #define	ECC_MECC_TRAPS	(ECC_D_TRAP | ECC_C_TRAP | ECC_F_TRAP)
4547c478bd9Sstevel@tonic-gate 
4557c478bd9Sstevel@tonic-gate /*
4567c478bd9Sstevel@tonic-gate  * Error type table struct.
4577c478bd9Sstevel@tonic-gate  */
4587c478bd9Sstevel@tonic-gate typedef struct ecc_type_to_info {
4597c478bd9Sstevel@tonic-gate 	uint64_t	ec_afsr_bit;	/* AFSR bit of error */
4607c478bd9Sstevel@tonic-gate 	char		*ec_reason;	/* Short error description */
4617c478bd9Sstevel@tonic-gate 	uint_t		ec_flags;	/* Trap type error should be seen at */
4627c478bd9Sstevel@tonic-gate 	int		ec_flt_type;	/* Used by cpu_async_log_err */
4637c478bd9Sstevel@tonic-gate 	char		*ec_desc;	/* Long error description */
4647c478bd9Sstevel@tonic-gate 	uint64_t	ec_err_payload;	/* FM ereport payload information */
4657c478bd9Sstevel@tonic-gate 	char		*ec_err_class;	/* FM ereport class */
4667c478bd9Sstevel@tonic-gate } ecc_type_to_info_t;
4677c478bd9Sstevel@tonic-gate 
4687c478bd9Sstevel@tonic-gate typedef struct bus_config_eclk {
4697c478bd9Sstevel@tonic-gate 	uint_t		divisor;
4707c478bd9Sstevel@tonic-gate 	uint64_t	mask;
4717c478bd9Sstevel@tonic-gate } bus_config_eclk_t;
4727c478bd9Sstevel@tonic-gate 
4737c478bd9Sstevel@tonic-gate #endif /* _ASM */
4747c478bd9Sstevel@tonic-gate 
4757c478bd9Sstevel@tonic-gate #endif /* _KERNEL */
4767c478bd9Sstevel@tonic-gate 
4777c478bd9Sstevel@tonic-gate #ifndef _ASM
4787c478bd9Sstevel@tonic-gate 
4797c478bd9Sstevel@tonic-gate #include <sys/cpuvar.h>
4807c478bd9Sstevel@tonic-gate 
4817c478bd9Sstevel@tonic-gate /*
4827c478bd9Sstevel@tonic-gate  * Since all the US3_* files share a bunch of routines between each other
4837c478bd9Sstevel@tonic-gate  * we will put all the "extern" definitions in this header file so that we
4847c478bd9Sstevel@tonic-gate  * don't have to repeat it all in every file.
4857c478bd9Sstevel@tonic-gate  */
4867c478bd9Sstevel@tonic-gate 
4877c478bd9Sstevel@tonic-gate /*
4887c478bd9Sstevel@tonic-gate  * functions that are defined in the US3 cpu module:
4897c478bd9Sstevel@tonic-gate  * -------------------------------------------------
4907c478bd9Sstevel@tonic-gate  */
4917c478bd9Sstevel@tonic-gate extern uint64_t get_safari_config(void);
4927c478bd9Sstevel@tonic-gate extern void set_safari_config(uint64_t safari_config);
4937c478bd9Sstevel@tonic-gate extern void shipit(int, int);
4947c478bd9Sstevel@tonic-gate extern void cpu_aflt_log(int ce_code, int tagnum, ch_async_flt_t *aflt,
4957c478bd9Sstevel@tonic-gate     uint_t logflags, const char *endstr, const char *fmt, ...);
4967c478bd9Sstevel@tonic-gate extern uint8_t flt_to_trap_type(struct async_flt *aflt);
4977c478bd9Sstevel@tonic-gate extern void cpu_log_err(struct async_flt *aflt);
4987c478bd9Sstevel@tonic-gate extern void cpu_page_retire(ch_async_flt_t *ch_flt);
4997c478bd9Sstevel@tonic-gate extern int clear_errors(ch_async_flt_t *ch_flt);
5007c478bd9Sstevel@tonic-gate extern void cpu_init_ecache_scrub_dr(struct cpu *cp);
5017c478bd9Sstevel@tonic-gate extern void get_cpu_error_state(ch_cpu_errors_t *);
5027c478bd9Sstevel@tonic-gate extern void set_cpu_error_state(ch_cpu_errors_t *);
5037c478bd9Sstevel@tonic-gate extern int cpu_flt_in_memory(ch_async_flt_t *ch_flt, uint64_t t_afsr_bit);
5047c478bd9Sstevel@tonic-gate extern int cpu_queue_events(ch_async_flt_t *ch_flt, char *reason,
5057c478bd9Sstevel@tonic-gate     uint64_t t_afsr, ch_cpu_logout_t *clop);
5067c478bd9Sstevel@tonic-gate extern void cpu_error_ecache_flush(ch_async_flt_t *);
5077c478bd9Sstevel@tonic-gate extern void cpu_clearphys(struct async_flt *aflt);
5087c478bd9Sstevel@tonic-gate extern void cpu_async_log_ic_parity_err(ch_async_flt_t *);
5097c478bd9Sstevel@tonic-gate extern void cpu_async_log_dc_parity_err(ch_async_flt_t *);
5107c478bd9Sstevel@tonic-gate extern uint64_t get_ecache_ctrl(void);
5117c478bd9Sstevel@tonic-gate extern uint64_t get_jbus_config(void);
5127c478bd9Sstevel@tonic-gate extern void set_jbus_config(uint64_t jbus_config);
5137c478bd9Sstevel@tonic-gate extern uint64_t get_mcu_ctl_reg1(void);
5147c478bd9Sstevel@tonic-gate extern void set_mcu_ctl_reg1(uint64_t mcu_ctl);
5157c478bd9Sstevel@tonic-gate extern void cpu_init_trap(void);
5167c478bd9Sstevel@tonic-gate extern int cpu_ecache_nway(void);
5177c478bd9Sstevel@tonic-gate extern void cpu_delayed_logout(size_t, ch_cpu_logout_t *);
5187c478bd9Sstevel@tonic-gate extern void cpu_payload_add_pcache(struct async_flt *, nvlist_t *);
5197c478bd9Sstevel@tonic-gate extern void cpu_payload_add_tlb(struct async_flt *, nvlist_t *);
5207c478bd9Sstevel@tonic-gate extern int cpu_scrub_cpu_setup(cpu_setup_t, int, void *);
5217c478bd9Sstevel@tonic-gate #if defined(JALAPENO) || defined(SERRANO)
5227c478bd9Sstevel@tonic-gate extern int afsr_to_jaid_status(uint64_t afsr, uint64_t afsr_bit);
5237c478bd9Sstevel@tonic-gate #endif	/* JALAPENO || SERRANO */
5247c478bd9Sstevel@tonic-gate /*
5257c478bd9Sstevel@tonic-gate  * Address of the level 15 interrupt handler preamble, used to log Fast ECC
5267c478bd9Sstevel@tonic-gate  * at TL>0 errors, which will be moved to the trap table address above.
5277c478bd9Sstevel@tonic-gate  */
5287c478bd9Sstevel@tonic-gate extern void ch_pil15_interrupt_instr();
5297c478bd9Sstevel@tonic-gate #ifdef CHEETAHPLUS_ERRATUM_25
5307c478bd9Sstevel@tonic-gate extern int mondo_recover(uint16_t, int);
5317c478bd9Sstevel@tonic-gate #endif	/* CHEETAHPLUS_ERRATUM_25 */
5327c478bd9Sstevel@tonic-gate /*
5337c478bd9Sstevel@tonic-gate  * Adddresses of the Fast ECC Error trap handler preambles which will be
5347c478bd9Sstevel@tonic-gate  * moved to the appropriate trap table addresses.
5357c478bd9Sstevel@tonic-gate  */
5367c478bd9Sstevel@tonic-gate extern void fecc_err_instr(void);
5377c478bd9Sstevel@tonic-gate extern void fecc_err_tl1_instr(void);
5387c478bd9Sstevel@tonic-gate extern void fecc_err_tl1_cont_instr(void);
5397c478bd9Sstevel@tonic-gate 
5407c478bd9Sstevel@tonic-gate extern int afsr_to_overw_status(uint64_t afsr, uint64_t afsr_bit,
5417c478bd9Sstevel@tonic-gate     uint64_t *ow_bits);
5427c478bd9Sstevel@tonic-gate #if defined(CHEETAH_PLUS)
5437c478bd9Sstevel@tonic-gate extern int afsr_to_pn_esynd_status(uint64_t afsr, uint64_t afsr_bit);
5447c478bd9Sstevel@tonic-gate #endif	/* CHEETAH_PLUS */
5457c478bd9Sstevel@tonic-gate extern void flush_ecache(uint64_t physaddr, size_t ecachesize, size_t linesize);
5467c478bd9Sstevel@tonic-gate extern void flush_dcache(void);
5477c478bd9Sstevel@tonic-gate extern void flush_icache(void);
5487c478bd9Sstevel@tonic-gate extern void flush_pcache(void);
5497c478bd9Sstevel@tonic-gate extern void flush_ipb(void);
5507c478bd9Sstevel@tonic-gate extern uint64_t get_dcu(void);
5517c478bd9Sstevel@tonic-gate extern void set_dcu(uint64_t ncc);
5527c478bd9Sstevel@tonic-gate extern void scrubphys(uint64_t paddr, int ecache_set_size);
5537c478bd9Sstevel@tonic-gate extern void clearphys(uint64_t paddr, int ecache_set_size, int ecache_linesize);
5547c478bd9Sstevel@tonic-gate extern void stick_adj(int64_t skew);
5557c478bd9Sstevel@tonic-gate extern void stick_timestamp(int64_t *ts);
5567c478bd9Sstevel@tonic-gate extern void icache_inval_all(void);
5577c478bd9Sstevel@tonic-gate extern void dcache_inval_line(int index);
5587c478bd9Sstevel@tonic-gate extern void ecache_flush_line(uint64_t flushaddr, int ec_size);
5597c478bd9Sstevel@tonic-gate extern int ecache_get_lineinfo(uint32_t ecache_index, uint64_t *tag,
5607c478bd9Sstevel@tonic-gate 		uint64_t *data);
5617c478bd9Sstevel@tonic-gate #if defined(CPU_IMP_L1_CACHE_PARITY)
5627c478bd9Sstevel@tonic-gate extern void get_dcache_dtag(uint32_t dcache_idx, uint64_t *data);
5637c478bd9Sstevel@tonic-gate extern void get_icache_dtag(uint32_t icache_idx, uint64_t *data);
5647c478bd9Sstevel@tonic-gate extern void get_pcache_dtag(uint32_t pcache_idx, uint64_t *data);
5657c478bd9Sstevel@tonic-gate extern void correct_dcache_parity(size_t dcache_size, size_t dcache_linesize);
5667c478bd9Sstevel@tonic-gate #endif	/* CPU_IMP_L1_CACHE_PARITY */
5677c478bd9Sstevel@tonic-gate extern void cpu_check_block(caddr_t, uint_t);
5687c478bd9Sstevel@tonic-gate extern uint32_t us3_gen_ecc(uint64_t data_low, uint64_t data_high);
5697c478bd9Sstevel@tonic-gate extern int cpu_impl_async_log_err(void *, errorq_elem_t *);
5707c478bd9Sstevel@tonic-gate extern void cpu_fast_ecc_error(struct regs *rp, ulong_t p_clo_flags);
5717c478bd9Sstevel@tonic-gate extern void cpu_tl1_error(struct regs *rp, int panic);
5727c478bd9Sstevel@tonic-gate extern void cpu_tl1_err_panic(struct regs *rp, ulong_t flags);
5737c478bd9Sstevel@tonic-gate extern void cpu_disrupting_error(struct regs *rp, ulong_t p_clo_flags);
5747c478bd9Sstevel@tonic-gate extern void cpu_deferred_error(struct regs *rp, ulong_t p_clo_flags);
5757c478bd9Sstevel@tonic-gate #if defined(CPU_IMP_L1_CACHE_PARITY)
5767c478bd9Sstevel@tonic-gate extern void cpu_parity_error(struct regs *rp, uint_t flags, caddr_t tpc);
5777c478bd9Sstevel@tonic-gate #endif	/* CPU_IMP_L1_CACHE_PARITY */
5787c478bd9Sstevel@tonic-gate extern void claimlines(uint64_t startpa, size_t len, int stride);
5797c478bd9Sstevel@tonic-gate extern void copy_tsb_entry(uintptr_t src, uintptr_t dest);
5807c478bd9Sstevel@tonic-gate extern void hwblkpagecopy(const void *src, void *dst);
5817c478bd9Sstevel@tonic-gate #if defined(CHEETAH_PLUS)
5827c478bd9Sstevel@tonic-gate extern void pn_cpu_log_diag_l2_info(ch_async_flt_t *ch_flt);
5837c478bd9Sstevel@tonic-gate extern void set_afsr_ext(uint64_t afsr_ext);
5847c478bd9Sstevel@tonic-gate #endif
5857c478bd9Sstevel@tonic-gate extern void cpu_tlb_parity_error(struct regs *rp, ulong_t trap_va,
5867c478bd9Sstevel@tonic-gate     ulong_t tlb_info);
5877c478bd9Sstevel@tonic-gate extern void log_flt_func(struct async_flt *aflt, char *unum);
5887c478bd9Sstevel@tonic-gate extern uint64_t pn_get_tlb_index(uint64_t va, uint64_t pg_sz);
5897c478bd9Sstevel@tonic-gate extern int popc64(uint64_t val);
5907c478bd9Sstevel@tonic-gate 
5917c478bd9Sstevel@tonic-gate /*
5927c478bd9Sstevel@tonic-gate  * variables and structures that are defined in the US3 cpu module:
5937c478bd9Sstevel@tonic-gate  * ----------------------------------------------------------------
5947c478bd9Sstevel@tonic-gate  */
5957c478bd9Sstevel@tonic-gate extern bus_config_eclk_t bus_config_eclk[];
5967c478bd9Sstevel@tonic-gate extern ecc_type_to_info_t ecc_type_to_info[];
5977c478bd9Sstevel@tonic-gate extern uint64_t ch_err_tl1_paddrs[];
5987c478bd9Sstevel@tonic-gate extern uchar_t ch_err_tl1_pending[];
5997c478bd9Sstevel@tonic-gate #ifdef CHEETAHPLUS_ERRATUM_25
6007c478bd9Sstevel@tonic-gate /*
6017c478bd9Sstevel@tonic-gate  * Tunable defined in us3_common.c
6027c478bd9Sstevel@tonic-gate  */
6037c478bd9Sstevel@tonic-gate extern int cheetah_sendmondo_recover;
6047c478bd9Sstevel@tonic-gate #endif	/* CHEETAHPLUS_ERRATUM_25 */
6057c478bd9Sstevel@tonic-gate /*
6067c478bd9Sstevel@tonic-gate  * The following allows for a one time calculation of the number of dcache
6077c478bd9Sstevel@tonic-gate  * lines vs. calculating the number every time through the scrub routine.
6087c478bd9Sstevel@tonic-gate  */
6097c478bd9Sstevel@tonic-gate int dcache_nlines;			/* max number of D$ lines */
6107c478bd9Sstevel@tonic-gate 
6117c478bd9Sstevel@tonic-gate extern uint64_t afar_overwrite[];
6127c478bd9Sstevel@tonic-gate extern uint64_t esynd_overwrite[];
6137c478bd9Sstevel@tonic-gate extern uint64_t msynd_overwrite[];
6147c478bd9Sstevel@tonic-gate 
6157c478bd9Sstevel@tonic-gate #if defined(JALAPENO) || defined(SERRANO)
6167c478bd9Sstevel@tonic-gate extern uint64_t jreq_overwrite[];
6177c478bd9Sstevel@tonic-gate #if defined(SERRANO)
6187c478bd9Sstevel@tonic-gate extern uint64_t	afar2_overwrite[];
6197c478bd9Sstevel@tonic-gate #endif	/* SERRANO */
6207c478bd9Sstevel@tonic-gate #endif	/* JALAPENO || SERRANO */
6217c478bd9Sstevel@tonic-gate 
6227c478bd9Sstevel@tonic-gate /*
6237c478bd9Sstevel@tonic-gate  * variables and structures that are defined outside the US3 cpu module:
6247c478bd9Sstevel@tonic-gate  * ---------------------------------------------------------------------
6257c478bd9Sstevel@tonic-gate  */
6267c478bd9Sstevel@tonic-gate extern uint64_t xc_tick_limit;
6277c478bd9Sstevel@tonic-gate extern uint64_t xc_tick_jump_limit;
6287c478bd9Sstevel@tonic-gate extern struct kmem_cache *ch_private_cache;
6297c478bd9Sstevel@tonic-gate 
6307c478bd9Sstevel@tonic-gate #if defined(CPU_IMP_L1_CACHE_PARITY)
6317c478bd9Sstevel@tonic-gate /*
6327c478bd9Sstevel@tonic-gate  * Addresses of the Dcache and Icache parity error trap table entries.
6337c478bd9Sstevel@tonic-gate  * If L1 cache parity protection is implemented, need to replace Dcache and
6347c478bd9Sstevel@tonic-gate  * Icache parity error handlers.
6357c478bd9Sstevel@tonic-gate  */
6367c478bd9Sstevel@tonic-gate extern void *tt0_dperr;
6377c478bd9Sstevel@tonic-gate extern void *tt1_dperr;
6387c478bd9Sstevel@tonic-gate extern void *tt1_swtrap1;
6397c478bd9Sstevel@tonic-gate extern void *tt0_iperr;
6407c478bd9Sstevel@tonic-gate extern void *tt1_iperr;
6417c478bd9Sstevel@tonic-gate extern void *tt1_swtrap2;
6427c478bd9Sstevel@tonic-gate /*
6437c478bd9Sstevel@tonic-gate  * Addresses of the Dcache and Icache parity error trap preambles, which will
6447c478bd9Sstevel@tonic-gate  * be moved to the appropriate trap table addresses.
6457c478bd9Sstevel@tonic-gate  */
6467c478bd9Sstevel@tonic-gate extern void dcache_parity_instr();
6477c478bd9Sstevel@tonic-gate extern void dcache_parity_tl1_instr();
6487c478bd9Sstevel@tonic-gate extern void dcache_parity_tl1_cont_instr();
6497c478bd9Sstevel@tonic-gate extern void icache_parity_instr();
6507c478bd9Sstevel@tonic-gate extern void icache_parity_tl1_instr();
6517c478bd9Sstevel@tonic-gate extern void icache_parity_tl1_cont_instr();
6527c478bd9Sstevel@tonic-gate #endif	/* CPU_IMP_L1_CACHE_PARITY */
6537c478bd9Sstevel@tonic-gate 
6547c478bd9Sstevel@tonic-gate /*
6557c478bd9Sstevel@tonic-gate  * Addresses of the Fast ECC error trap table entries.
6567c478bd9Sstevel@tonic-gate  */
6577c478bd9Sstevel@tonic-gate extern void *tt0_fecc;
6587c478bd9Sstevel@tonic-gate extern void *tt1_fecc;
6597c478bd9Sstevel@tonic-gate extern void *tt1_swtrap0;
6607c478bd9Sstevel@tonic-gate /*
6617c478bd9Sstevel@tonic-gate  * Address of trap table level 15 interrupt handler in the trap table.
6627c478bd9Sstevel@tonic-gate  */
663*b9e93c10SJonathan Haslam extern void *pil15_epilogue;
6647c478bd9Sstevel@tonic-gate /*
6657c478bd9Sstevel@tonic-gate  * D$ and I$ global parameters.
6667c478bd9Sstevel@tonic-gate  */
6677c478bd9Sstevel@tonic-gate extern int dcache_size;
6687c478bd9Sstevel@tonic-gate extern int dcache_linesize;
6697c478bd9Sstevel@tonic-gate extern int icache_size;
6707c478bd9Sstevel@tonic-gate extern int icache_linesize;
6717c478bd9Sstevel@tonic-gate 
6727c478bd9Sstevel@tonic-gate /*
6737c478bd9Sstevel@tonic-gate  * Set of all offline cpus
6747c478bd9Sstevel@tonic-gate  */
6757c478bd9Sstevel@tonic-gate extern cpuset_t cpu_offline_set;
6767c478bd9Sstevel@tonic-gate 
6777c478bd9Sstevel@tonic-gate #endif /* _ASM */
6787c478bd9Sstevel@tonic-gate 
6797c478bd9Sstevel@tonic-gate #ifdef	__cplusplus
6807c478bd9Sstevel@tonic-gate }
6817c478bd9Sstevel@tonic-gate #endif
6827c478bd9Sstevel@tonic-gate 
6837c478bd9Sstevel@tonic-gate #endif	/* _SYS_US3_MODULE_H */
684