xref: /onnv-gate/usr/src/uts/intel/sys/fm/cpu/GMCA.h (revision 10831:e65585ea170c)
15254Sgavinm /*
25254Sgavinm  * CDDL HEADER START
35254Sgavinm  *
45254Sgavinm  * The contents of this file are subject to the terms of the
55254Sgavinm  * Common Development and Distribution License (the "License").
65254Sgavinm  * You may not use this file except in compliance with the License.
75254Sgavinm  *
85254Sgavinm  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
95254Sgavinm  * or http://www.opensolaris.org/os/licensing.
105254Sgavinm  * See the License for the specific language governing permissions
115254Sgavinm  * and limitations under the License.
125254Sgavinm  *
135254Sgavinm  * When distributing Covered Code, include this CDDL HEADER in each
145254Sgavinm  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
155254Sgavinm  * If applicable, add the following below this CDDL HEADER, with the
165254Sgavinm  * fields enclosed by brackets "[]" replaced with your own identifying
175254Sgavinm  * information: Portions Copyright [yyyy] [name of copyright owner]
185254Sgavinm  *
195254Sgavinm  * CDDL HEADER END
205254Sgavinm  */
215254Sgavinm 
225254Sgavinm /*
23*10831SYanmin.Sun@Sun.COM  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
245254Sgavinm  * Use is subject to license terms.
255254Sgavinm  */
265254Sgavinm 
275254Sgavinm #ifndef	_SYS_FM_CPU_GMCA_H
285254Sgavinm #define	_SYS_FM_CPU_GMCA_H
295254Sgavinm 
305254Sgavinm #ifdef __cplusplus
315254Sgavinm extern "C" {
325254Sgavinm #endif
335254Sgavinm 
345254Sgavinm /*
355254Sgavinm  * Generic x86 cpu ereports.
365254Sgavinm  *
375254Sgavinm  * On a machine-check exception, or on a periodic poll for error status
385254Sgavinm  * of a cpu, we read through all the MCA banks of the processor and
395254Sgavinm  * log an ereport for each MCA bank that contains valid error telemetry.
405254Sgavinm  * These ereports will all share the same detector FMRI and ENA.
415254Sgavinm  *
425254Sgavinm  * Since we have no model-specific knowledge of the cpu we cannot
435254Sgavinm  * decode all details of the error, so we'll stick to the "architectural"
445254Sgavinm  * bits.  Similarly since we have no associated memory-controller driver
455254Sgavinm  * or detailed topology information we cannot produce "resource" ereport
465254Sgavinm  * FMRIs.
475254Sgavinm  */
485254Sgavinm 
495254Sgavinm /* Ereport class subcategory for generic x86 processors */
505254Sgavinm #define	FM_EREPORT_CPU_GENERIC	"generic-x86"
515254Sgavinm 
525254Sgavinm /*
535254Sgavinm  * Simple error code ereport leaf classes
545254Sgavinm  */
555254Sgavinm #define	FM_EREPORT_CPU_GENERIC_UNCLASSIFIED	"unclassified"
565254Sgavinm #define	FM_EREPORT_CPU_GENERIC_MC_CODE_PARITY	"microcode_rom_parity"
575254Sgavinm #define	FM_EREPORT_CPU_GENERIC_EXTERNAL		"external"
585254Sgavinm #define	FM_EREPORT_CPU_GENERIC_FRC		"frc"
597349SAdrian.Frost@Sun.COM #define	FM_EREPORT_CPU_GENERIC_INTERNAL_PARITY	"internal_parity"
605254Sgavinm #define	FM_EREPORT_CPU_GENERIC_INTERNAL_TIMER	"internal_timer"
615254Sgavinm #define	FM_EREPORT_CPU_GENERIC_INTERNAL_UNCLASS	"internal_unclassified"
625254Sgavinm 
635254Sgavinm /*
645254Sgavinm  * Leaf class to be used when we can match no simple or compound class
655254Sgavinm  */
665254Sgavinm #define	FM_EREPORT_CPU_GENERIC_UNKNOWN		"unknown"
675254Sgavinm 
685254Sgavinm /*
695254Sgavinm  * Compound error code ereport leaf classes.  The arguments for snprintf
705254Sgavinm  * will appear in the following order:
715254Sgavinm  *
725254Sgavinm  *	1 - TT interpretation
735254Sgavinm  *	2 - LL interpretation
745254Sgavinm  *	3 - RRRR interpretation
755254Sgavinm  *	4 - PP interpretation
765254Sgavinm  *	5 - II interpretation
775254Sgavinm  *	6 - T interpretation
785254Sgavinm  *	7 - "_uc" if this is a compound error with MCi_STATUS.UC set, else ""
797349SAdrian.Frost@Sun.COM  *	8 - CCCC interpretation
807349SAdrian.Frost@Sun.COM  *	9 - MMM interpretation
815254Sgavinm  *
825254Sgavinm  * They can be selected in the format string using the %n$s specifier form.
835254Sgavinm  *
845254Sgavinm  * The set of interpretations that we expand to will not be exactly the
855254Sgavinm  * same as the set of mnemonics described in Vol 3A (see the
865254Sgavinm  * FM_EREPORT_PAYLOAD_NAME_COMPOUND_ERR ereport payload member for that).
875254Sgavinm  * Instead we wish to compress the possible ereport classes that can
885254Sgavinm  * be generated by pushing things such as "LG" for generic cache level
895254Sgavinm  * down to "".
905254Sgavinm  *
915254Sgavinm  *
925254Sgavinm  * "Memory Hierarchy" in compound errors actually refers to CPU cache
935254Sgavinm  * memory.
945254Sgavinm  */
955254Sgavinm #define	FM_EREPORT_CPU_GENERIC_GENMEMHIER	"%2$s" "cache" "%7$s"
965254Sgavinm #define	FM_EREPORT_CPU_GENERIC_TLB		"%2$s" "%1$s" "tlb" "%7$s"
975254Sgavinm #define	FM_EREPORT_CPU_GENERIC_MEMHIER		"%2$s" "%1$s" "cache" "%7$s"
985254Sgavinm #define	FM_EREPORT_CPU_GENERIC_BUS_INTERCONNECT	"bus_interconnect" "%5$s" "%7$s"
997349SAdrian.Frost@Sun.COM #define	FM_EREPORT_CPU_GENERIC_MEMORY_CONTROLLER "mc"
1005254Sgavinm 
1015254Sgavinm /*
1025254Sgavinm  * The "interpretation" expansions for the above ereport leaf subclasses.
1035254Sgavinm  */
1045254Sgavinm #define	FM_EREPORT_CPU_GENERIC_TT_INSTR		"i"
1055254Sgavinm #define	FM_EREPORT_CPU_GENERIC_TT_DATA		"d"
1065254Sgavinm #define	FM_EREPORT_CPU_GENERIC_TT_GEN		""
1075254Sgavinm 
1085254Sgavinm #define	FM_EREPORT_CPU_GENERIC_LL_L0		"l0"
1095254Sgavinm #define	FM_EREPORT_CPU_GENERIC_LL_L1		"l1"
1105254Sgavinm #define	FM_EREPORT_CPU_GENERIC_LL_L2		"l2"
1115254Sgavinm #define	FM_EREPORT_CPU_GENERIC_LL_LG		""
1125254Sgavinm 
1135254Sgavinm #define	FM_EREPORT_CPU_GENERIC_RRRR_ERR		""
1145254Sgavinm #define	FM_EREPORT_CPU_GENERIC_RRRR_RD		""
1155254Sgavinm #define	FM_EREPORT_CPU_GENERIC_RRRR_WR		""
1165254Sgavinm #define	FM_EREPORT_CPU_GENERIC_RRRR_DRD		""
1175254Sgavinm #define	FM_EREPORT_CPU_GENERIC_RRRR_DWR		""
1185254Sgavinm #define	FM_EREPORT_CPU_GENERIC_RRRR_IRD		""
1195254Sgavinm #define	FM_EREPORT_CPU_GENERIC_RRRR_PREFETCH	""
1205254Sgavinm #define	FM_EREPORT_CPU_GENERIC_RRRR_EVICT	""
1215254Sgavinm #define	FM_EREPORT_CPU_GENERIC_RRRR_SNOOP	""
1225254Sgavinm 
1235254Sgavinm #define	FM_EREPORT_CPU_GENERIC_PP_SRC		""
1245254Sgavinm #define	FM_EREPORT_CPU_GENERIC_PP_RES		""
1255254Sgavinm #define	FM_EREPORT_CPU_GENERIC_PP_OBS		""
1265254Sgavinm #define	FM_EREPORT_CPU_GENERIC_PP_GEN		""
1275254Sgavinm 
1285254Sgavinm #define	FM_EREPORT_CPU_GENERIC_II_MEM		"_memory"
1295254Sgavinm #define	FM_EREPORT_CPU_GENERIC_II_IO		"_io"
1305254Sgavinm #define	FM_EREPORT_CPU_GENERIC_II_GEN		""
1315254Sgavinm 
1325254Sgavinm #define	FM_EREPORT_CPU_GENERIC_T_NOTIMEOUT	""
1335254Sgavinm #define	FM_EREPORT_CPU_GENERIC_T_TIMEOUT	""
1345254Sgavinm 
1357349SAdrian.Frost@Sun.COM #define	FM_EREPORT_CPU_GENERIC_CCCC		""
1367349SAdrian.Frost@Sun.COM 
1377349SAdrian.Frost@Sun.COM #define	FM_EREPORT_CPU_GENERIC_MMM_ERR		""
1387349SAdrian.Frost@Sun.COM #define	FM_EREPORT_CPU_GENERIC_MMM_RD		""
1397349SAdrian.Frost@Sun.COM #define	FM_EREPORT_CPU_GENERIC_MMM_WR		""
1407349SAdrian.Frost@Sun.COM #define	FM_EREPORT_CPU_GENERIC_MMM_ADRCMD	""
141*10831SYanmin.Sun@Sun.COM #define	FM_EREPORT_CPU_GENERIC_MMM_SCRUB	""
1427349SAdrian.Frost@Sun.COM 
1435254Sgavinm /*
1445254Sgavinm  * Ereport payload member names together with bitmask values to select
1455254Sgavinm  * their inclusion in ereports.
1465254Sgavinm  */
1475254Sgavinm 
1485254Sgavinm #define	_FM_EREPORT_FLAG(n) (1ULL << (n))
1495254Sgavinm 
1505254Sgavinm #define	FM_EREPORT_PAYLOAD_FLAG_COMPOUND_ERR _FM_EREPORT_FLAG(1)
1515254Sgavinm #define	FM_EREPORT_PAYLOAD_NAME_COMPOUND_ERR	"compound_errorname"
1525254Sgavinm 
1535254Sgavinm #define	FM_EREPORT_PAYLOAD_FLAG_MCG_STATUS _FM_EREPORT_FLAG(2)
1545254Sgavinm #define	FM_EREPORT_PAYLOAD_NAME_MCG_STATUS	"IA32_MCG_STATUS"
1555254Sgavinm #define	FM_EREPORT_PAYLOAD_NAME_MCG_STATUS_MCIP	"machine_check_in_progress"
1565254Sgavinm 
1575254Sgavinm #define	FM_EREPORT_PAYLOAD_FLAG_IP _FM_EREPORT_FLAG(3)
1585254Sgavinm #define	FM_EREPORT_PAYLOAD_NAME_IP		"ip"
1595254Sgavinm 
1605254Sgavinm #define	FM_EREPORT_PAYLOAD_FLAG_PRIV _FM_EREPORT_FLAG(4)
1615254Sgavinm #define	FM_EREPORT_PAYLOAD_NAME_PRIV		"privileged"
1625254Sgavinm 
1635254Sgavinm #define	FM_EREPORT_PAYLOAD_FLAG_BANK_NUM _FM_EREPORT_FLAG(5)
1645254Sgavinm #define	FM_EREPORT_PAYLOAD_NAME_BANK_NUM	"bank_number"
1655254Sgavinm #define	FM_EREPORT_PAYLOAD_NAME_BANK_MSR_OFFSET	"bank_msr_offset"
1665254Sgavinm 
1675254Sgavinm #define	FM_EREPORT_PAYLOAD_FLAG_MC_STATUS _FM_EREPORT_FLAG(6)
1685254Sgavinm #define	FM_EREPORT_PAYLOAD_NAME_MC_STATUS	"IA32_MCi_STATUS"
1695254Sgavinm #define	FM_EREPORT_PAYLOAD_NAME_MC_STATUS_OVER	"overflow"
1705254Sgavinm #define	FM_EREPORT_PAYLOAD_NAME_MC_STATUS_UC	"error_uncorrected"
1715254Sgavinm #define	FM_EREPORT_PAYLOAD_NAME_MC_STATUS_EN	"error_enabled"
1725254Sgavinm #define	FM_EREPORT_PAYLOAD_NAME_MC_STATUS_PCC	"processor_context_corrupt"
1735254Sgavinm #define	FM_EREPORT_PAYLOAD_NAME_MC_STATUS_TES	"threshold_based_error_status"
1745254Sgavinm #define	FM_EREPORT_PAYLOAD_NAME_MC_STATUS_ERRCODE "error_code"
1755254Sgavinm #define	FM_EREPORT_PAYLOAD_NAME_MC_STATUS_EXTERRCODE "model_specific_error_code"
1765254Sgavinm 
1775254Sgavinm #define	FM_EREPORT_PAYLOAD_FLAG_MC_ADDR _FM_EREPORT_FLAG(7)
1785254Sgavinm #define	FM_EREPORT_PAYLOAD_NAME_MC_ADDR		"IA32_MCi_ADDR"
1795254Sgavinm 
1805254Sgavinm #define	FM_EREPORT_PAYLOAD_FLAG_MC_MISC _FM_EREPORT_FLAG(8)
1815254Sgavinm #define	FM_EREPORT_PAYLOAD_NAME_MC_MISC		"IA32_MCi_MISC"
1825254Sgavinm 
1835254Sgavinm #define	FM_EREPORT_PAYLOAD_FLAG_DISP	_FM_EREPORT_FLAG(9)
1845254Sgavinm #define	FM_EREPORT_PAYLOAD_NAME_DISP		"disp"
1855254Sgavinm 
1865254Sgavinm /*
1875254Sgavinm  * Common combinations of payload members
1885254Sgavinm  */
1895254Sgavinm #define	FM_EREPORT_PAYLOAD_FLAGS_GLOBAL \
1905254Sgavinm 	(FM_EREPORT_PAYLOAD_FLAG_MCG_STATUS | \
1915254Sgavinm 	FM_EREPORT_PAYLOAD_FLAG_IP | \
1925254Sgavinm 	FM_EREPORT_PAYLOAD_FLAG_PRIV)
1935254Sgavinm 
1945254Sgavinm #define	FM_EREPORT_PAYLOAD_FLAGS_BANK \
1955254Sgavinm 	(FM_EREPORT_PAYLOAD_FLAG_BANK_NUM | \
1965254Sgavinm 	FM_EREPORT_PAYLOAD_FLAG_MC_STATUS | \
1975254Sgavinm 	FM_EREPORT_PAYLOAD_FLAG_MC_ADDR | \
1985254Sgavinm 	FM_EREPORT_PAYLOAD_FLAG_MC_MISC | \
1995254Sgavinm 	FM_EREPORT_PAYLOAD_FLAG_DISP)
2005254Sgavinm 
2015254Sgavinm #define	FM_EREPORT_PAYLOAD_FLAGS_COMMON \
2025254Sgavinm 	(FM_EREPORT_PAYLOAD_FLAGS_GLOBAL | FM_EREPORT_PAYLOAD_FLAGS_BANK)
2035254Sgavinm 
2045254Sgavinm #define	FM_EREPORT_PAYLOAD_FLAGS_COMPOUND_ERR \
2055254Sgavinm 	(FM_EREPORT_PAYLOAD_FLAGS_COMMON | FM_EREPORT_PAYLOAD_FLAG_COMPOUND_ERR)
2065254Sgavinm 
2075254Sgavinm #ifdef __cplusplus
2085254Sgavinm }
2095254Sgavinm #endif
2105254Sgavinm 
2115254Sgavinm #endif /* _SYS_FM_CPU_GMCA_H */
212