120c794b3Sgavinm/* 220c794b3Sgavinm * CDDL HEADER START 320c794b3Sgavinm * 420c794b3Sgavinm * The contents of this file are subject to the terms of the 520c794b3Sgavinm * Common Development and Distribution License (the "License"). 620c794b3Sgavinm * You may not use this file except in compliance with the License. 720c794b3Sgavinm * 820c794b3Sgavinm * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 920c794b3Sgavinm * or http://www.opensolaris.org/os/licensing. 1020c794b3Sgavinm * See the License for the specific language governing permissions 1120c794b3Sgavinm * and limitations under the License. 1220c794b3Sgavinm * 1320c794b3Sgavinm * When distributing Covered Code, include this CDDL HEADER in each 1420c794b3Sgavinm * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 1520c794b3Sgavinm * If applicable, add the following below this CDDL HEADER, with the 1620c794b3Sgavinm * fields enclosed by brackets "[]" replaced with your own identifying 1720c794b3Sgavinm * information: Portions Copyright [yyyy] [name of copyright owner] 1820c794b3Sgavinm * 1920c794b3Sgavinm * CDDL HEADER END 2020c794b3Sgavinm */ 2120c794b3Sgavinm 2220c794b3Sgavinm/* 23b7d3956bSstephh * Copyright 2008 Sun Microsystems, Inc. All rights reserved. 2420c794b3Sgavinm * Use is subject to license terms. 2520c794b3Sgavinm */ 2620c794b3Sgavinm 2720c794b3Sgavinm/* 2820c794b3Sgavinm * eversholt rules for generic x86 MCA 2920c794b3Sgavinm * 3020c794b3Sgavinm * Most propogations are generated by preprocessor macros. The event 3120c794b3Sgavinm * declarations are deliberately not part of the propogation macros 3220c794b3Sgavinm * so that we know we have full coverage - propogations defined without 3320c794b3Sgavinm * events, or events not used in propogations, will produce compiler 3420c794b3Sgavinm * whinges. 3520c794b3Sgavinm */ 3620c794b3Sgavinm 3720c794b3Sgavinm#pragma dictionary "GMCA" 3820c794b3Sgavinm 3920c794b3Sgavinm/* 4020c794b3Sgavinm * Ereports for Simple error codes. 4120c794b3Sgavinm */ 4220c794b3Sgavinm 4320c794b3Sgavinm#define SMPL_EVENT(leafclass) \ 44e3d60c9bSAdrian Frost event ereport.cpu.generic-x86.leafclass@chip/core/strand { within(1s) } 4520c794b3Sgavinm 4620c794b3SgavinmSMPL_EVENT(unknown); 4720c794b3SgavinmSMPL_EVENT(unclassified); 4820c794b3SgavinmSMPL_EVENT(microcode_rom_parity); 4920c794b3SgavinmSMPL_EVENT(external); 5020c794b3SgavinmSMPL_EVENT(frc); 5120c794b3SgavinmSMPL_EVENT(internal_timer); 52e3d60c9bSAdrian FrostSMPL_EVENT(internal_parity); 5320c794b3SgavinmSMPL_EVENT(internal_unclassified); 5420c794b3Sgavinm 5520c794b3Sgavinm/* 5620c794b3Sgavinm * Propogations for all but "external" and "unknown" simple errors. 57b7d3956bSstephh * If the error is uncorrected we produce a fault immediately by incrementing 58b7d3956bSstephh * by N+1, otherwise we declare a fault when the SERD engine trips. 5920c794b3Sgavinm */ 6020c794b3Sgavinm 61b7d3956bSstephh#define SMPL_N 3 6220c794b3Sgavinm 63e3d60c9bSAdrian Frostengine serd.cpu.generic-x86.simple@chip/core/strand, N=SMPL_N, T=72h; 64e3d60c9bSAdrian Frostevent fault.cpu.generic-x86.internal@chip/core/strand, 65e3d60c9bSAdrian Frost engine=serd.cpu.generic-x86.simple@chip/core/strand; 6620c794b3Sgavinm 67e3d60c9bSAdrian Frostprop fault.cpu.generic-x86.internal@chip/core/strand 68e3d60c9bSAdrian Frost { payloadprop("error_uncorrected") == 1 ? 69e3d60c9bSAdrian Frost setserdincrement(SMPL_N + 1) : 1 } (1)-> 70e3d60c9bSAdrian Frost ereport.cpu.generic-x86.microcode_rom_parity@chip/core/strand, 71e3d60c9bSAdrian Frost ereport.cpu.generic-x86.internal_timer@chip/core/strand, 72e3d60c9bSAdrian Frost ereport.cpu.generic-x86.internal_parity@chip/core/strand, 73e3d60c9bSAdrian Frost ereport.cpu.generic-x86.unclassified@chip/core/strand, 74e3d60c9bSAdrian Frost ereport.cpu.generic-x86.internal_unclassified@chip/core/strand, 75e3d60c9bSAdrian Frost ereport.cpu.generic-x86.frc@chip/core/strand; 7620c794b3Sgavinm 7720c794b3Sgavinm/* 7820c794b3Sgavinm * Ereports for Compound error codes. These are in pairs "foo" and "foo_uc" 7920c794b3Sgavinm * for the corrected and uncorrected version of each error type. All are 80*e4b86885SCheng Sean Ye * detected at chip/core[/strand]. 8120c794b3Sgavinm */ 8220c794b3Sgavinm 8320c794b3Sgavinm#define CMPND_EVENT(leafclass) \ 84e3d60c9bSAdrian Frost event ereport.cpu.generic-x86.leafclass@chip/core/strand \ 85e3d60c9bSAdrian Frost { within(1s) }; \ 86e3d60c9bSAdrian Frost event ereport.cpu.generic-x86.leafclass/**/_uc@chip/core/strand \ 87e3d60c9bSAdrian Frost { within(1s) } 8820c794b3Sgavinm 8920c794b3Sgavinm/* 9020c794b3Sgavinm * Ereports for Compound error codes - generic memory hierarchy errors 9120c794b3Sgavinm */ 9220c794b3SgavinmCMPND_EVENT(l0cache); 9320c794b3SgavinmCMPND_EVENT(l1cache); 9420c794b3SgavinmCMPND_EVENT(l2cache); 9520c794b3SgavinmCMPND_EVENT(cache); 9620c794b3Sgavinm 9720c794b3Sgavinm/* 9820c794b3Sgavinm * Ereports for Compound error codes - TLB errors 9920c794b3Sgavinm */ 10020c794b3SgavinmCMPND_EVENT(l0dtlb); 10120c794b3SgavinmCMPND_EVENT(l1dtlb); 10220c794b3SgavinmCMPND_EVENT(l2dtlb); 10320c794b3SgavinmCMPND_EVENT(dtlb); 10420c794b3Sgavinm 10520c794b3SgavinmCMPND_EVENT(l0itlb); 10620c794b3SgavinmCMPND_EVENT(l1itlb); 10720c794b3SgavinmCMPND_EVENT(l2itlb); 10820c794b3SgavinmCMPND_EVENT(itlb); 10920c794b3Sgavinm 11020c794b3SgavinmCMPND_EVENT(l0tlb); 11120c794b3SgavinmCMPND_EVENT(l1tlb); 11220c794b3SgavinmCMPND_EVENT(l2tlb); 11320c794b3SgavinmCMPND_EVENT(tlb); 11420c794b3Sgavinm 11520c794b3Sgavinm/* 11620c794b3Sgavinm * Ereports for Compound error codes - memory hierarchy errors 11720c794b3Sgavinm */ 11820c794b3SgavinmCMPND_EVENT(l0dcache); 11920c794b3SgavinmCMPND_EVENT(l1dcache); 12020c794b3SgavinmCMPND_EVENT(l2dcache); 12120c794b3SgavinmCMPND_EVENT(dcache); 12220c794b3Sgavinm 12320c794b3SgavinmCMPND_EVENT(l0icache); 12420c794b3SgavinmCMPND_EVENT(l1icache); 12520c794b3SgavinmCMPND_EVENT(l2icache); 12620c794b3SgavinmCMPND_EVENT(icache); 12720c794b3Sgavinm 12820c794b3Sgavinm/* 12920c794b3Sgavinm * Ereports for Compound error codes - bus and interconnect errors 13020c794b3Sgavinm */ 13120c794b3SgavinmCMPND_EVENT(bus_interconnect); 13220c794b3SgavinmCMPND_EVENT(bus_interconnect_memory); 13320c794b3SgavinmCMPND_EVENT(bus_interconnect_io); 134e3d60c9bSAdrian FrostCMPND_EVENT(mc); 13520c794b3Sgavinm 13620c794b3Sgavinm/* 137b7d3956bSstephh * Compound error propogations 13820c794b3Sgavinm * 13920c794b3Sgavinm * We resist the temptation propogate, for example, a single dcache fault 14020c794b3Sgavinm * to all ereports mentioning dcache (l0dcache, l1dcache, l2dcache, dcache). 14120c794b3Sgavinm * Instead we will diagnose a distinct fault for each possible cache level, 14220c794b3Sgavinm * whether or not current chips have dcaches at all levels. 14320c794b3Sgavinm * 14420c794b3Sgavinm * Corrected errors are SERDed and produce a fault when the engine fires; 14520c794b3Sgavinm * the same fault is diagnosed immediately for a corresponding uncorrected 146b7d3956bSstephh * error by incrementing the serd engine by n + 1. 14720c794b3Sgavinm */ 14820c794b3Sgavinm 14920c794b3Sgavinm#define CMPND_FLT_PROP_1(erptleaf, fltleaf, n, t) \ 150e3d60c9bSAdrian Frost engine serd.cpu.generic-x86.fltleaf@chip/core/strand, N=n, T=t; \ 151e3d60c9bSAdrian Frost event fault.cpu.generic-x86.fltleaf@chip/core/strand, \ 152e3d60c9bSAdrian Frost engine=serd.cpu.generic-x86.fltleaf@chip/core/strand; \ 15320c794b3Sgavinm \ 154e3d60c9bSAdrian Frost prop fault.cpu.generic-x86.fltleaf@chip/core/strand (0)-> \ 155e3d60c9bSAdrian Frost ereport.cpu.generic-x86.erptleaf@chip/core/strand; \ 156e3d60c9bSAdrian Frost prop fault.cpu.generic-x86.fltleaf@chip/core/strand \ 157e3d60c9bSAdrian Frost { setserdincrement(n + 1) } (0)-> \ 158e3d60c9bSAdrian Frost ereport.cpu.generic-x86.erptleaf/**/_uc@chip/core/strand 15920c794b3Sgavinm 160b7d3956bSstephh#define CMPND_FLT_PROP_2(erptleaf, fltleaf, n, t) \ 161e3d60c9bSAdrian Frost engine serd.cpu.generic-x86.fltleaf@chip/core/strand, N=n, T=t; \ 162e3d60c9bSAdrian Frost event fault.cpu.generic-x86.fltleaf@chip/core/strand, retire=0, \ 163e3d60c9bSAdrian Frost response=0, engine=serd.cpu.generic-x86.fltleaf@chip/core/strand;\ 164b7d3956bSstephh \ 165e3d60c9bSAdrian Frost prop fault.cpu.generic-x86.fltleaf@chip/core/strand (0)-> \ 166e3d60c9bSAdrian Frost ereport.cpu.generic-x86.erptleaf@chip/core/strand; \ 167e3d60c9bSAdrian Frost prop fault.cpu.generic-x86.fltleaf@chip/core/strand \ 168e3d60c9bSAdrian Frost { setserdincrement(n + 1) } (0)-> \ 169e3d60c9bSAdrian Frost ereport.cpu.generic-x86.erptleaf/**/_uc@chip/core/strand 17020c794b3Sgavinm 17120c794b3SgavinmCMPND_FLT_PROP_1(l0cache, l0cache, 3, 72h); 17220c794b3SgavinmCMPND_FLT_PROP_1(l1cache, l1cache, 3, 72h); 17320c794b3SgavinmCMPND_FLT_PROP_1(l2cache, l2cache, 3, 72h); 17420c794b3SgavinmCMPND_FLT_PROP_1(cache, cache, 12, 72h); 17520c794b3Sgavinm 17620c794b3SgavinmCMPND_FLT_PROP_1(l0dtlb, l0dtlb, 3, 72h); 17720c794b3SgavinmCMPND_FLT_PROP_1(l1dtlb, l1dtlb, 3, 72h); 17820c794b3SgavinmCMPND_FLT_PROP_1(l2dtlb, l2dtlb, 3, 72h); 17920c794b3SgavinmCMPND_FLT_PROP_1(dtlb, dtlb, 12, 72h); 18020c794b3Sgavinm 18120c794b3SgavinmCMPND_FLT_PROP_1(l0itlb, l0itlb, 3, 72h); 18220c794b3SgavinmCMPND_FLT_PROP_1(l1itlb, l1itlb, 3, 72h); 18320c794b3SgavinmCMPND_FLT_PROP_1(l2itlb, l2itlb, 3, 72h); 18420c794b3SgavinmCMPND_FLT_PROP_1(itlb, itlb, 12, 72h); 18520c794b3Sgavinm 18620c794b3SgavinmCMPND_FLT_PROP_1(l0tlb, l0tlb, 3, 72h); 18720c794b3SgavinmCMPND_FLT_PROP_1(l1tlb, l1tlb, 3, 72h); 18820c794b3SgavinmCMPND_FLT_PROP_1(l2tlb, l2tlb, 3, 72h); 18920c794b3SgavinmCMPND_FLT_PROP_1(tlb, tlb, 12, 72h); 19020c794b3Sgavinm 19120c794b3SgavinmCMPND_FLT_PROP_1(l0dcache, l0dcache, 3, 72h); 19220c794b3SgavinmCMPND_FLT_PROP_1(l1dcache, l1dcache, 3, 72h); 19320c794b3SgavinmCMPND_FLT_PROP_1(l2dcache, l2dcache, 3, 72h); 19420c794b3SgavinmCMPND_FLT_PROP_1(dcache, dcache, 12, 72h); 19520c794b3Sgavinm 19620c794b3SgavinmCMPND_FLT_PROP_1(l0icache, l0icache, 3, 72h); 19720c794b3SgavinmCMPND_FLT_PROP_1(l1icache, l1icache, 3, 72h); 19820c794b3SgavinmCMPND_FLT_PROP_1(l2icache, l2icache, 3, 72h); 19920c794b3SgavinmCMPND_FLT_PROP_1(icache, icache, 12, 72h); 20020c794b3Sgavinm 20120c794b3SgavinmCMPND_FLT_PROP_2(bus_interconnect, bus_interconnect, 10, 72h); 20220c794b3SgavinmCMPND_FLT_PROP_2(bus_interconnect_memory, bus_interconnect_memory, 10, 72h); 20320c794b3SgavinmCMPND_FLT_PROP_2(bus_interconnect_io, bus_interconnect_io, 10, 72h); 20420c794b3Sgavinm 205e3d60c9bSAdrian FrostCMPND_FLT_PROP_2(mc, mc, 10, 72h); 206e3d60c9bSAdrian Frost 20720c794b3Sgavinm/* 20820c794b3Sgavinm * Discards - not enough info to diagnose. 20920c794b3Sgavinm */ 210e3d60c9bSAdrian Frostevent upset.discard@chip/core/strand; 211e3d60c9bSAdrian Frost 212e3d60c9bSAdrian Frostprop upset.discard@chip/core/strand (0)-> 213e3d60c9bSAdrian Frost ereport.cpu.generic-x86.external@chip/core/strand, 214e3d60c9bSAdrian Frost ereport.cpu.generic-x86.unknown@chip/core/strand; 215