4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
23 * Copyright 2010 Sun Microsystems, Inc. All rights reserved.
24 * Use is subject to license terms.
28 * eversholt rules for generic-sparc sparc cpu errors.
30 * Most propagations are generated by preprocessor macros. The event
31 * declarations are deliberately not part of the propagation macros
32 * so that we know we have full coverage - propagations defined without
33 * events, or events not used in propagations, will produce compiler
37 #define DIAGNOSE_ERPT (payloadprop_defined("diagnose") && \
38 payloadprop("diagnose") != 0x0)
40 #define SET_SERDT (!payloadprop_defined("serd_t") || \
41 setserdt(payloadprop("serd_t")))
43 #define SET_SERDN (!payloadprop_defined("serd_n") || \
44 setserdn(payloadprop("serd_n")))
47 ((payloadprop_defined("filter_ratio") && \
48 payloadprop("filter_ratio") != 0x0) ? \
49 (setserdincrement(payloadprop("filter_ratio"))) : 1)
52 * The ereport and fault events are declared at multiple levels:
53 * some set of @chip, @core, and @strand resources since this is
54 * a generic DE and must be flexible and handle present and future
55 * sun4v platforms. For example, one processor may have an L2
56 * cache per chip, another may have an L2 per core.
58 * For UE errors, faults are produced immediately.
60 * For CE errors, the errors are put through a SERD engine. If
61 * the SERD engine trips, the fault is produced. SERD engine
62 * names are of the format:
63 * serd.cpu.generic-sparc.<resource><suffix>
64 * Ex: serd.cpu.generic-sparc.chipitlb
65 * SERD N/T values are set to default values, but can be
66 * overridden via the ereport or the eft.conf file. The
67 * order or precedence of the SERD N/T values is:
68 * - the 'serd_override' tunable via eft.conf
69 * - the 'serd_n' and 'serd_t' payload members in the
71 * - the built-in default values
73 * The increment rate of the SERD engines can also be
74 * controlled via the ereport payload using the 'filter_ratio'
75 * payload member. N in incremented by the value of
76 * 'filter_ratio' if the payload member is present, 1 otherwise.
79 * Ereport event for cpu errors
81 #define ERPT_EVENT(level, leafclass) \
82 event ereport.cpu.generic-sparc.leafclass@level { within(1s) }
85 * Ereports for uncorrectable cpu errors
87 ERPT_EVENT(chip, itlb-uc);
88 ERPT_EVENT(core, itlb-uc);
89 ERPT_EVENT(strand, itlb-uc);
90 ERPT_EVENT(chip, dtlb-uc);
91 ERPT_EVENT(core, dtlb-uc);
92 ERPT_EVENT(strand, dtlb-uc);
93 ERPT_EVENT(chip, icache-uc);
94 ERPT_EVENT(core, icache-uc);
95 ERPT_EVENT(chip, dcache-uc);
96 ERPT_EVENT(core, dcache-uc);
97 ERPT_EVENT(chip, ireg-uc);
98 ERPT_EVENT(core, ireg-uc);
99 ERPT_EVENT(strand, ireg-uc);
100 ERPT_EVENT(chip, freg-uc);
101 ERPT_EVENT(core, freg-uc);
102 ERPT_EVENT(strand, freg-uc);
103 ERPT_EVENT(chip, mreg-uc);
104 ERPT_EVENT(core, mreg-uc);
105 ERPT_EVENT(strand, mreg-uc);
106 ERPT_EVENT(chip, l2data-uc);
107 ERPT_EVENT(core, l2data-uc);
108 ERPT_EVENT(chip, l2tagctl-uc);
109 ERPT_EVENT(core, l2tagctl-uc);
110 ERPT_EVENT(chip, l3data-uc);
111 ERPT_EVENT(core, l3data-uc);
112 ERPT_EVENT(chip, l3tagctl-uc);
113 ERPT_EVENT(core, l3tagctl-uc);
114 ERPT_EVENT(chip, int-mem-ue);
115 ERPT_EVENT(core, int-mem-ue);
116 ERPT_EVENT(strand, int-mem-ue);
117 ERPT_EVENT(chip, gchip-uc);
118 ERPT_EVENT(core, gcore-uc);
119 ERPT_EVENT(strand, gstrand-uc);
122 * Propagations for CPU UE errors
123 * A fault is produced immediately for a CPU UE errors.
125 #define FLT_CPU_UE(level, erptleaf, fltleaf) \
126 event fault.cpu.generic-sparc.fltleaf@level; \
128 prop fault.cpu.generic-sparc.fltleaf@level \
129 { DIAGNOSE_ERPT } (0)-> \
130 ereport.cpu.generic-sparc.erptleaf@level; \
132 event upset.cpu.generic-sparc.fltleaf@level; \
134 prop upset.cpu.generic-sparc.fltleaf@level \
135 { !DIAGNOSE_ERPT } (0)-> \
136 ereport.cpu.generic-sparc.erptleaf@level
139 FLT_CPU_UE(chip, itlb-uc, chip-uc);
140 FLT_CPU_UE(core, itlb-uc, core-uc);
141 FLT_CPU_UE(strand, itlb-uc, strand-uc);
142 FLT_CPU_UE(chip, dtlb-uc, chip-uc);
143 FLT_CPU_UE(core, dtlb-uc, core-uc);
144 FLT_CPU_UE(strand, dtlb-uc, strand-uc);
145 FLT_CPU_UE(chip, icache-uc, chip-uc);
146 FLT_CPU_UE(core, icache-uc, core-uc);
147 FLT_CPU_UE(chip, dcache-uc, chip-uc);
148 FLT_CPU_UE(core, dcache-uc, core-uc);
149 FLT_CPU_UE(chip, ireg-uc, chip-uc);
150 FLT_CPU_UE(core, ireg-uc, core-uc);
151 FLT_CPU_UE(strand, ireg-uc, strand-uc);
152 FLT_CPU_UE(chip, mreg-uc, chip-uc);
153 FLT_CPU_UE(core, mreg-uc, core-uc);
154 FLT_CPU_UE(strand, mreg-uc, strand-uc);
155 FLT_CPU_UE(chip, freg-uc, chip-uc);
156 FLT_CPU_UE(core, freg-uc, core-uc);
157 FLT_CPU_UE(strand, freg-uc, strand-uc);
158 FLT_CPU_UE(chip, l2data-uc, chip-uc);
159 FLT_CPU_UE(core, l2data-uc, core-uc);
160 FLT_CPU_UE(chip, l2tagctl-uc, chip-uc);
161 FLT_CPU_UE(core, l2tagctl-uc, core-uc);
162 FLT_CPU_UE(chip, l3data-uc, chip-uc);
163 FLT_CPU_UE(core, l3data-uc, core-uc);
164 FLT_CPU_UE(chip, l3tagctl-uc, chip-uc);
165 FLT_CPU_UE(core, l3tagctl-uc, core-uc);
166 FLT_CPU_UE(chip, gchip-uc, chip-uc);
167 FLT_CPU_UE(core, gcore-uc, core-uc);
168 FLT_CPU_UE(strand, gstrand-uc, strand-uc);
172 #define FLT_CPU_UE_UNRETIRED(level, erptleaf, fltleaf) \
173 event fault.cpu.generic-sparc.fltleaf@level, \
176 prop fault.cpu.generic-sparc.fltleaf@level \
177 { DIAGNOSE_ERPT } (0)-> \
178 ereport.cpu.generic-sparc.erptleaf@level; \
180 event upset.cpu.generic-sparc.fltleaf@level; \
182 prop upset.cpu.generic-sparc.fltleaf@level \
183 { !DIAGNOSE_ERPT } (0)-> \
184 ereport.cpu.generic-sparc.erptleaf@level
186 FLT_CPU_UE_UNRETIRED(chip, int-mem-ue, chip-uc-nr);
187 FLT_CPU_UE_UNRETIRED(core, int-mem-ue, core-uc-nr);
188 FLT_CPU_UE_UNRETIRED(strand, int-mem-ue, strand-uc-nr);
191 * Ereport events for corectable errors.
193 ERPT_EVENT(chip, itlb);
194 ERPT_EVENT(core, itlb);
195 ERPT_EVENT(strand, itlb);
196 ERPT_EVENT(chip, dtlb);
197 ERPT_EVENT(core, dtlb);
198 ERPT_EVENT(strand, dtlb);
199 ERPT_EVENT(chip, icache);
200 ERPT_EVENT(core, icache);
201 ERPT_EVENT(chip, dcache);
202 ERPT_EVENT(core, dcache);
203 ERPT_EVENT(chip, ireg);
204 ERPT_EVENT(core, ireg);
205 ERPT_EVENT(strand, ireg);
206 ERPT_EVENT(chip, freg);
207 ERPT_EVENT(core, freg);
208 ERPT_EVENT(strand, freg);
209 ERPT_EVENT(chip, mreg);
210 ERPT_EVENT(core, mreg);
211 ERPT_EVENT(strand, mreg);
212 ERPT_EVENT(chip, l2data);
213 ERPT_EVENT(core, l2data);
214 ERPT_EVENT(chip, l2tagctl);
215 ERPT_EVENT(core, l2tagctl);
216 ERPT_EVENT(chip, l3data);
217 ERPT_EVENT(core, l3data);
218 ERPT_EVENT(chip, l3tagctl);
219 ERPT_EVENT(core, l3tagctl);
220 ERPT_EVENT(chip, int-mem);
221 ERPT_EVENT(core, int-mem);
222 ERPT_EVENT(strand, int-mem);
223 ERPT_EVENT(chip, gchip);
224 ERPT_EVENT(core, gcore);
225 ERPT_EVENT(strand, gstrand);
228 * Propagations for CE errors
229 * Errors are serded and fault is generated when the SERD engine trips
230 * The serd name & the N & T values are set at the running time.
232 engine serd.cpu.generic-sparc.core@core, N=8, T=1week;
233 engine serd.cpu.generic-sparc.strand@strand, N=8, T=1week;
236 #define FLT_CPU_CE(erptleaf, level, fltleaf, n, t) \
238 /* Simple fault event */ \
239 event fault.cpu.generic-sparc.fltleaf@level, \
240 engine=serd.cpu.generic-sparc.fltleaf@level; \
242 /* When the correctable engine trips, diagnose a fault */ \
243 prop fault.cpu.generic-sparc.fltleaf@level \
244 { DIAGNOSE_ERPT && setserdsuffix("erptleaf") && \
245 setserdn(n) && setserdt(t) && SET_SERDN && \
246 SET_SERDT && SET_RATIO } (0) -> \
247 ereport.cpu.generic-sparc.erptleaf@level; \
249 event upset.cpu.generic-sparc.fltleaf@level; \
251 prop upset.cpu.generic-sparc.fltleaf@level \
252 { !DIAGNOSE_ERPT } (0) -> \
253 ereport.cpu.generic-sparc.erptleaf@level
255 FLT_CPU_CE(itlb, core, core, 8, 1week);
256 FLT_CPU_CE(itlb, strand, strand, 8, 1week);
257 FLT_CPU_CE(dtlb, core, core, 8, 1week);
258 FLT_CPU_CE(dtlb, strand, strand, 8, 1week);
259 FLT_CPU_CE(icache, core, core, 8, 1week);
260 FLT_CPU_CE(dcache, core, core, 8, 1week);
261 FLT_CPU_CE(ireg, core, core, 8, 1week);
262 FLT_CPU_CE(ireg, strand, strand, 8, 1week);
263 FLT_CPU_CE(freg, core, core, 8, 1week);
264 FLT_CPU_CE(freg, strand, strand, 8, 1week);
265 FLT_CPU_CE(mreg, core, core, 8, 1week);
266 FLT_CPU_CE(mreg, strand, strand, 8, 1week);
267 FLT_CPU_CE(l2data, core, core, 8, 1week);
268 FLT_CPU_CE(l2tagctl, core, core, 8, 1week);
269 FLT_CPU_CE(l3data, core, core, 8, 1week);
270 FLT_CPU_CE(l3tagctl, core, core, 8, 1week);
271 FLT_CPU_CE(gcore, core, core, 8, 1week);
272 FLT_CPU_CE(gstrand, strand, strand, 8, 1week);
274 engine serd.cpu.generic-sparc.chip-nr@chip, N=8, T=1week;
275 engine serd.cpu.generic-sparc.core-nr@core, N=8, T=1week;
276 engine serd.cpu.generic-sparc.strand-nr@strand, N=8, T=1week;
278 #define FLT_CPU_CE_UNRETIRED(erptleaf, level, fltleaf, n, t) \
280 /* Simple fault event */ \
281 event fault.cpu.generic-sparc.fltleaf@level, \
283 engine=serd.cpu.generic-sparc.fltleaf@level; \
285 /* When the correctable engine trips, diagnose a fault */ \
286 prop fault.cpu.generic-sparc.fltleaf@level \
287 { DIAGNOSE_ERPT && setserdsuffix("erptleaf") && setserdn(n) && \
288 setserdt(t) && SET_SERDN && SET_SERDT && SET_RATIO } (0) -> \
289 ereport.cpu.generic-sparc.erptleaf@level; \
291 event upset.fault.cpu.generic-sparc.fltleaf@level; \
293 prop upset.fault.cpu.generic-sparc.fltleaf@level \
294 { !DIAGNOSE_ERPT } (0)-> \
295 ereport.cpu.generic-sparc.erptleaf@level
297 FLT_CPU_CE_UNRETIRED(itlb, chip, chip-nr, 8, 1week);
298 FLT_CPU_CE_UNRETIRED(dtlb, chip, chip-nr, 8, 1week);
299 FLT_CPU_CE_UNRETIRED(icache, chip, chip-nr, 8, 1week);
300 FLT_CPU_CE_UNRETIRED(dcache, chip, chip-nr, 8, 1week);
301 FLT_CPU_CE_UNRETIRED(ireg, chip, chip-nr, 8, 1week);
302 FLT_CPU_CE_UNRETIRED(freg, chip, chip-nr, 8, 1week);
303 FLT_CPU_CE_UNRETIRED(mreg, chip, chip-nr, 8, 1week);
304 FLT_CPU_CE_UNRETIRED(l2data, chip, chip-nr, 8, 2h);
305 FLT_CPU_CE_UNRETIRED(l2tagctl, chip, chip-nr, 8, 2h);
306 FLT_CPU_CE_UNRETIRED(l3data, chip, chip-nr, 8, 2h);
307 FLT_CPU_CE_UNRETIRED(l3tagctl, chip, chip-nr, 8, 2h);
308 FLT_CPU_CE_UNRETIRED(gchip, chip, chip-nr, 8, 1week);
309 FLT_CPU_CE_UNRETIRED(int-mem, chip, chip-nr, 8, 1week);
310 FLT_CPU_CE_UNRETIRED(int-mem, core, core-nr, 8, 1week);
311 FLT_CPU_CE_UNRETIRED(int-mem, strand, strand-nr, 8, 1week);
314 * c2c-link-uc, c2c-prot-uc, c2c-failover errors
315 * The detector and sender are faulted immediately.
316 * If ereport does not have a sender, all chips are faulted
319 #define CONTAINS_SENDER (payloadprop_contains("sender", asru(chip)))
320 #define HAS_SENDER (payloadprop_defined("sender"))
321 #define HAS_C2C_FAULT(c) has_fault(c, "fault.cpu.generic-sparc.c2c")
322 #define CONTAINS_DET (payloadprop_contains("detector", asru(chip)))
324 event ereport.cpu.generic-sparc.c2c-link-uc@chip { within(1s) };
325 event ereport.cpu.generic-sparc.c2c-prot-uc@chip { within(1s) };
326 event ereport.cpu.generic-sparc.c2c-failover@chip { within(1s) };
328 event fault.cpu.generic-sparc.c2c-uc@chip, retire=0;
329 event fault.cpu.generic-sparc.c2c-failover@chip, retire=0;
330 event upset.cpu.generic-sparc.c2c-uc@chip;
331 event upset.cpu.generic-sparc.c2c-failover@chip;
333 prop fault.cpu.generic-sparc.c2c-uc@chip
334 { DIAGNOSE_ERPT && CONTAINS_SENDER } (0) ->
335 ereport.cpu.generic-sparc.c2c-link-uc@chip<x>;
337 prop fault.cpu.generic-sparc.c2c-uc@chip
338 { DIAGNOSE_ERPT } (0) ->
339 ereport.cpu.generic-sparc.c2c-link-uc@chip;
341 prop fault.cpu.generic-sparc.c2c-uc@chip
342 { DIAGNOSE_ERPT && !HAS_SENDER } (0) ->
343 ereport.cpu.generic-sparc.c2c-link-uc@chip<x>;
345 prop fault.cpu.generic-sparc.c2c-uc@chip
346 { DIAGNOSE_ERPT && CONTAINS_SENDER } (0) ->
347 ereport.cpu.generic-sparc.c2c-prot-uc@chip<x>;
349 prop fault.cpu.generic-sparc.c2c-uc@chip
350 { DIAGNOSE_ERPT } (0) ->
351 ereport.cpu.generic-sparc.c2c-prot-uc@chip;
353 prop fault.cpu.generic-sparc.c2c-uc@chip
354 { DIAGNOSE_ERPT && !HAS_SENDER } (0) ->
355 ereport.cpu.generic-sparc.c2c-prot-uc@chip<x>;
357 prop upset.cpu.generic-sparc.c2c-uc@chip
358 { !DIAGNOSE_ERPT } (0) ->
359 ereport.cpu.generic-sparc.c2c-prot-uc@chip,
360 ereport.cpu.generic-sparc.c2c-link-uc@chip;
362 prop fault.cpu.generic-sparc.c2c-failover@chip
363 { DIAGNOSE_ERPT && CONTAINS_SENDER } (0) ->
364 ereport.cpu.generic-sparc.c2c-failover@chip<x>;
366 prop fault.cpu.generic-sparc.c2c-failover@chip
367 { DIAGNOSE_ERPT } (0) ->
368 ereport.cpu.generic-sparc.c2c-failover@chip;
370 prop fault.cpu.generic-sparc.c2c-failover@chip
371 { DIAGNOSE_ERPT && !HAS_SENDER } (0) ->
372 ereport.cpu.generic-sparc.c2c-failover@chip<x>;
374 prop upset.cpu.generic-sparc.c2c-failover@chip
375 { !DIAGNOSE_ERPT } (0) ->
376 ereport.cpu.generic-sparc.c2c-failover@chip;
379 * c2c-link, c2c-prot. Errors are serded. When the serd trips,
380 * the detector & sender will be faulted.
381 * If ereport does not have a sender, all chips will be faulted
382 * If ereport sender or detector was faulted, discard ereport
384 event ereport.cpu.generic-sparc.c2c-link@chip { within(1s) };
385 event ereport.cpu.generic-sparc.c2c-prot@chip { within(1s) };
387 engine serd.cpu.generic-sparc.c2c@chip, N=120, T=30min;
389 event fault.cpu.generic-sparc.c2c@chip, retire=0,
390 engine=serd.cpu.generic-sparc.c2c@chip;
392 event upset.cpu.generic-sparc.c2c-link@chip;
393 event upset.cpu.generic-sparc.c2c_discard@chip;
395 prop fault.cpu.generic-sparc.c2c@chip
396 { DIAGNOSE_ERPT && CONTAINS_SENDER
397 && !HAS_C2C_FAULT(asru(chip)) && !HAS_C2C_FAULT(payloadprop("detector"))
398 && setserdsuffix("link") && SET_SERDN
399 && SET_SERDT && SET_RATIO } (0) ->
400 ereport.cpu.generic-sparc.c2c-link@chip<x>;
402 prop fault.cpu.generic-sparc.c2c@chip
403 { DIAGNOSE_ERPT && !HAS_C2C_FAULT(asru(chip))
404 && !HAS_C2C_FAULT(payloadprop("sender"))
405 && setserdsuffix("link") && SET_SERDN
406 && SET_SERDT && SET_RATIO } (0) ->
407 ereport.cpu.generic-sparc.c2c-link@chip;
409 prop fault.cpu.generic-sparc.c2c@chip
410 { DIAGNOSE_ERPT && !HAS_SENDER && setserdsuffix("link") &&
411 SET_SERDN && SET_SERDT && SET_RATIO } (0) ->
412 ereport.cpu.generic-sparc.c2c-link@chip<x>;
414 prop fault.cpu.generic-sparc.c2c@chip
415 { DIAGNOSE_ERPT && CONTAINS_SENDER
416 && !HAS_C2C_FAULT(asru(chip)) && !HAS_C2C_FAULT(payloadprop("detector"))
417 && setserdsuffix("prot") && SET_SERDN
418 && SET_SERDT && SET_RATIO } (0) ->
419 ereport.cpu.generic-sparc.c2c-prot@chip<x>;
421 prop fault.cpu.generic-sparc.c2c@chip
422 { DIAGNOSE_ERPT && !HAS_C2C_FAULT(asru(chip))
423 && !HAS_C2C_FAULT(payloadprop("sender"))
424 && setserdsuffix("prot") && SET_SERDN
425 && SET_SERDT && SET_RATIO } (0) ->
426 ereport.cpu.generic-sparc.c2c-prot@chip;
428 prop fault.cpu.generic-sparc.c2c@chip
429 { DIAGNOSE_ERPT && !HAS_SENDER && setserdsuffix("prot") &&
430 SET_SERDN && SET_SERDT && SET_RATIO } (0) ->
431 ereport.cpu.generic-sparc.c2c-prot@chip<x>;
433 prop upset.cpu.generic-sparc.c2c-link@chip
434 { !DIAGNOSE_ERPT } (0) ->
435 ereport.cpu.generic-sparc.c2c-prot@chip,
436 ereport.cpu.generic-sparc.c2c-link@chip;
438 prop upset.cpu.generic-sparc.c2c_discard@chip (0) ->
439 ereport.cpu.generic-sparc.c2c-link@chip,
440 ereport.cpu.generic-sparc.c2c-prot@chip;
443 * addr-oob is a firmware error - there is no associated FRU/ASRU
444 * and firmware is not represented in topology. Rather than ignore
445 * the error, the DE generates a defect with no FRU or ASRU. It
446 * is generated @chassis so no location (label) is picked up out
447 * of the topology. The associated knowledge article can instruct
448 * users what steps to take to address the error.
453 event ereport.cpu.generic-sparc.addr-oob@chassis;
454 event defect.fw.generic-sparc.addr-oob@chassis,
457 event upset.fw.generic-sparc.addr-oob@chassis;
459 prop defect.fw.generic-sparc.addr-oob@chassis
460 { DIAGNOSE_ERPT } (0) ->
461 ereport.cpu.generic-sparc.addr-oob@chassis;
463 prop upset.fw.generic-sparc.addr-oob@chassis
464 { !DIAGNOSE_ERPT } (0) ->
465 ereport.cpu.generic-sparc.addr-oob@chassis;
467 event ereport.cpu.generic-sparc.inconsistent@chassis;
468 event defect.fw.generic-sparc.erpt-gen@chassis,
471 event upset.fw.generic-sparc.erpt-gen@chassis;
473 prop defect.fw.generic-sparc.erpt-gen@chassis
474 { DIAGNOSE_ERPT } (0) ->
475 ereport.cpu.generic-sparc.inconsistent@chassis;
477 prop upset.fw.generic-sparc.erpt-gen@chassis
478 { !DIAGNOSE_ERPT } (0) ->
479 ereport.cpu.generic-sparc.inconsistent@chassis;
481 * bootbus-prot, bootbus-to and bootbus-par errors. Fault the detector.
483 event ereport.cpu.generic-sparc.bootbus-to@chip;
484 event ereport.cpu.generic-sparc.bootbus-par@chip;
485 event ereport.cpu.generic-sparc.bootbus-prot@chip;
486 event upset.cpu.generic-sparc.bootbus@chip;
488 event fault.cpu.generic-sparc.bootbus@chip, retire=0;
490 prop fault.cpu.generic-sparc.bootbus@chip
491 { DIAGNOSE_ERPT } (0) ->
492 ereport.cpu.generic-sparc.bootbus-to@chip;
494 prop fault.cpu.generic-sparc.bootbus@chip
495 { DIAGNOSE_ERPT } (0) ->
496 ereport.cpu.generic-sparc.bootbus-par@chip;
498 prop fault.cpu.generic-sparc.bootbus@chip
499 { DIAGNOSE_ERPT } (0) ->
500 ereport.cpu.generic-sparc.bootbus-prot@chip;
502 prop upset.cpu.generic-sparc.bootbus@chip
503 { !DIAGNOSE_ERPT } (0) ->
504 ereport.cpu.generic-sparc.bootbus-to@chip,
505 ereport.cpu.generic-sparc.bootbus-par@chip,
506 ereport.cpu.generic-sparc.bootbus-prot@chip;
509 * ignore the pio-read error.
511 event ereport.cpu.generic-sparc.pio-read@chip;
512 event upset.cpu.generic-sparc.discard@chip;
514 prop upset.cpu.generic-sparc.discard@chip (0) ->
515 ereport.cpu.generic-sparc.pio-read@chip;