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.
27 #define DIAGNOSE_ERPT (payloadprop_defined("diagnose") && \
28 payloadprop("diagnose") != 0x0)
32 #define CONTAINS_DIMM (payloadprop_contains("resource", asru(DIMMPATH)))
34 #define SET_ADDR (!payloadprop_defined("phys-addr") || \
35 setpayloadprop("physaddr", payloadprop("phys-addr")))
37 #define SET_OFFSET (!payloadprop_defined("offset") || \
38 setpayloadprop("offset",\
39 payloadprop("offset")))
41 #define SET_SERDT (!payloadprop_defined("serd_t") || \
42 setserdt(payloadprop("serd_t")))
44 #define SET_SERDN (!payloadprop_defined("serd_n") || \
45 setserdn(payloadprop("serd_n")))
48 ((payloadprop_defined("filter_ratio") && \
49 payloadprop("filter_ratio") != 0x0) ? \
50 (setserdincrement(payloadprop("filter_ratio"))) : 1)
53 * fault.memory.generic-sparc.bank & fault.memory.generic-sparc.page
54 * are generated for memory ue error.
56 #define MEMUE_ERPT(level) \
57 event ereport.cpu.generic-sparc.mem-uc@level { within(1s)}
63 #define FLT_MEM_UE_BANK(level) \
64 event fault.memory.bank@DIMMPATH; \
66 prop fault.memory.bank@DIMMPATH \
67 { DIAGNOSE_ERPT && CONTAINS_DIMM } (0)-> \
68 ereport.cpu.generic-sparc.mem-uc@level<>; \
70 event upset.memory.bank@DIMMPATH; \
72 prop upset.memory.bank@DIMMPATH \
73 { !DIAGNOSE_ERPT } (0)-> \
74 ereport.cpu.generic-sparc.mem-uc@level<>
76 FLT_MEM_UE_BANK(chip);
77 FLT_MEM_UE_BANK(core);
78 FLT_MEM_UE_BANK(strand);
80 #define FLT_MEM_UE_PAGE(level) \
81 event fault.memory.page@DIMMPATH, \
84 prop fault.memory.page@DIMMPATH \
85 { DIAGNOSE_ERPT && CONTAINS_DIMM && SET_ADDR && SET_OFFSET } (0)-> \
86 ereport.cpu.generic-sparc.mem-uc@level<>; \
88 event upset.memory.page@DIMMPATH; \
90 prop upset.memory.page@DIMMPATH \
91 { !DIAGNOSE_ERPT } (0)-> \
92 ereport.cpu.generic-sparc.mem-uc@level<>
94 FLT_MEM_UE_PAGE(chip);
95 FLT_MEM_UE_PAGE(core);
96 FLT_MEM_UE_PAGE(strand);
100 #define MEM_BUFF memory-buffer
101 #define MEM_CTRL memory-controller
103 #define CONTAINS_CHIP (payloadprop_contains("sender", asru(CHIP)))
104 #define CONTAINS_MEMBUFF (payloadprop_contains("sender", asru(MEM_BUFF)))
105 #define CONTAINS_MEMCTRL (payloadprop_contains("sender", asru(MEM_CTRL)))
107 engine serd.memory.generic-sparc.membuf-crc@CHIP, N=120, T=30min;
108 engine serd.memory.generic-sparc.membuf-crc@MEM_BUFF, N=120, T=30min;
109 engine serd.memory.generic-sparc.membuf-crc@MEM_CTRL, N=120, T=30min;
112 event fault.memory.memlink@CHIP,
113 engine=serd.memory.generic-sparc.membuf-crc@CHIP;
114 event fault.memory.memlink@MEM_BUFF,
115 engine=serd.memory.generic-sparc.membuf-crc@MEM_BUFF;
116 event fault.memory.memlink@MEM_CTRL,
117 engine=serd.memory.generic-sparc.membuf-crc@MEM_CTRL;
120 * 1. if ereport has both sender & detector: membuf-crc errors will fault
121 * both detector & sender.
122 * - if detector is chip or memory-controller, the sender is memory-buffer.
123 * - if detector is memory-buffer, the sender is chip or memory-controller
124 * 2. if ereport does not have sender:
125 * - if detector is chip, sender is memory-buffer
126 * - if detector is memory-controller, sender is memory-buffer
127 * - if detector is memory-buffer:
128 * + if topology is chip/memory-buffer, sender is chip
129 * + if topology is memory-controller/memory-buffer, sender is
133 #define HAS_SENDER (payloadprop_defined("sender"))
135 event ereport.cpu.generic-sparc.membuf-crc@CHIP { within(1s) };
136 event ereport.cpu.generic-sparc.membuf-crc@MEM_BUFF { within(1s) };
137 event ereport.cpu.generic-sparc.membuf-crc@MEM_CTRL { within(1s) };
140 * detector is chip and ereport has a sender
142 prop fault.memory.memlink@CHIP
143 { DIAGNOSE_ERPT && SET_SERDN && SET_SERDT && SET_RATIO } (0) ->
144 ereport.cpu.generic-sparc.membuf-crc@CHIP;
146 prop fault.memory.memlink@MEM_BUFF
147 { DIAGNOSE_ERPT && CONTAINS_MEMBUFF && SET_SERDN &&
148 SET_SERDT && SET_RATIO } (0)->
149 ereport.cpu.generic-sparc.membuf-crc@CHIP<>;
152 * detector is chip and ereport does not have sender
154 engine serd.memory.generic-sparc.membuf-crc@CHIP/MEM_BUFF, N=120, T=30min;
155 event fault.memory.memlink@CHIP/MEM_BUFF,
156 engine=serd.memory.generic-sparc.membuf-crc@CHIP/MEM_BUFF;
158 prop fault.memory.memlink@CHIP/MEM_BUFF
159 { DIAGNOSE_ERPT && !HAS_SENDER &&
160 SET_SERDN && SET_SERDT && SET_RATIO } (0)->
161 ereport.cpu.generic-sparc.membuf-crc@CHIP;
163 event upset.memory.memlink@CHIP;
165 prop upset.memory.memlink@CHIP
166 { !DIAGNOSE_ERPT } (0)->
167 ereport.cpu.generic-sparc.membuf-crc@CHIP;
170 * detector is memory-buffer and ereport has sender
172 prop fault.memory.memlink@MEM_BUFF
173 { DIAGNOSE_ERPT && SET_SERDN && SET_SERDT && SET_RATIO } (0) ->
174 ereport.cpu.generic-sparc.membuf-crc@MEM_BUFF;
176 prop fault.memory.memlink@CHIP
177 { DIAGNOSE_ERPT && CONTAINS_CHIP && SET_SERDN &&
178 SET_SERDT && SET_RATIO } (0) ->
179 ereport.cpu.generic-sparc.membuf-crc@MEM_BUFF<>;
181 prop fault.memory.memlink@MEM_CTRL
182 { DIAGNOSE_ERPT && CONTAINS_MEMCTRL && SET_SERDN &&
183 SET_SERDT && SET_RATIO } (0)->
184 ereport.cpu.generic-sparc.membuf-crc@MEM_BUFF<>;
187 * detector is memory-buffer and ereport does not have sender
189 event ereport.cpu.generic-sparc.membuf-crc@CHIP/MEM_BUFF { within(1s) };
190 event ereport.cpu.generic-sparc.membuf-crc@MEM_CTRL/MEM_BUFF { within(1s) };
192 prop fault.memory.memlink@CHIP
193 { DIAGNOSE_ERPT && !HAS_SENDER &&
194 SET_SERDN && SET_SERDT && SET_RATIO } (0) ->
195 ereport.cpu.generic-sparc.membuf-crc@CHIP/MEM_BUFF<>;
197 prop fault.memory.memlink@MEM_CTRL
198 { DIAGNOSE_ERPT && !HAS_SENDER &&
199 SET_SERDN && SET_SERDT && SET_RATIO } (0) ->
200 ereport.cpu.generic-sparc.membuf-crc@MEM_CTRL/MEM_BUFF<>;
202 event upset.memory.memlink@MEM_BUFF;
204 prop upset.memory.memlink@MEM_BUFF
205 { !DIAGNOSE_ERPT } (0)->
206 ereport.cpu.generic-sparc.membuf-crc@MEM_BUFF;
209 * detector is memory-controller and ereport has a sender
211 prop fault.memory.memlink@MEM_CTRL
212 { DIAGNOSE_ERPT && SET_SERDN && SET_SERDT && SET_RATIO } (0)->
213 ereport.cpu.generic-sparc.membuf-crc@MEM_CTRL;
215 prop fault.memory.memlink@MEM_BUFF
216 { DIAGNOSE_ERPT && CONTAINS_MEMBUFF && SET_SERDN &&
217 SET_SERDT && SET_RATIO } (0)->
218 ereport.cpu.generic-sparc.membuf-crc@MEM_CTRL<>;
221 * detector is memory-controller and ereport does not have a sender
223 engine serd.cpu.generic-sparc.membuf-crc@MEM_CTRL/MEM_BUFF, N=120, T=30min;
224 event fault.memory.memlink@MEM_CTRL/MEM_BUFF,
225 engine=serd.cpu.generic-sparc.membuf-crc@MEM_CTRL/MEM_BUFF;
227 prop fault.memory.memlink@MEM_CTRL/MEM_BUFF
228 { DIAGNOSE_ERPT && !HAS_SENDER &&
229 SET_SERDN && SET_SERDT && SET_RATIO } (0)->
230 ereport.cpu.generic-sparc.membuf-crc@MEM_CTRL;
232 event upset.memory.memlink@MEM_CTRL;
234 prop upset.memory.memlink@MEM_CTRL
235 { !DIAGNOSE_ERPT } (0)->
236 ereport.cpu.generic-sparc.membuf-crc@MEM_CTRL;
239 * membuf-crc-uc, membuf-other-uc will fault the detector FRU and sender FRU
240 * if detector is CHIP or MEM_CTRL, the sender is MEM_BUFF.
241 * if detector is MEM_BUFF, the sender is CHIP or MEM_CTRL
243 event ereport.cpu.generic-sparc.membuf-crc-uc@CHIP { within(1s) };
244 event ereport.cpu.generic-sparc.membuf-crc-uc@MEM_BUFF { within(1s) };
245 event ereport.cpu.generic-sparc.membuf-crc-uc@MEM_CTRL { within(1s) };
247 event ereport.cpu.generic-sparc.membuf-other-uc@CHIP { within(1s) };
248 event ereport.cpu.generic-sparc.membuf-other-uc@MEM_BUFF { within(1s) };
249 event ereport.cpu.generic-sparc.membuf-other-uc@MEM_CTRL { within(1s) };
251 event fault.memory.memlink-uc@CHIP;
252 event fault.memory.memlink-uc@MEM_BUFF;
253 event fault.memory.memlink-uc@MEM_CTRL;
256 * chip is detector and ereport has a sender
258 prop fault.memory.memlink-uc@CHIP
259 { DIAGNOSE_ERPT } (0) ->
260 ereport.cpu.generic-sparc.membuf-crc-uc@CHIP,
261 ereport.cpu.generic-sparc.membuf-other-uc@CHIP;
263 prop fault.memory.memlink-uc@MEM_BUFF
264 { DIAGNOSE_ERPT && CONTAINS_MEMBUFF } (0) ->
265 ereport.cpu.generic-sparc.membuf-crc-uc@CHIP<>,
266 ereport.cpu.generic-sparc.membuf-other-uc@CHIP<>;
269 * chip is detector and ereport does not have a sender
271 event fault.memory.memlink-uc@CHIP/MEM_BUFF;
273 prop fault.memory.memlink-uc@CHIP/MEM_BUFF
274 { DIAGNOSE_ERPT && !HAS_SENDER } (0) ->
275 ereport.cpu.generic-sparc.membuf-crc-uc@CHIP,
276 ereport.cpu.generic-sparc.membuf-other-uc@CHIP;
278 event upset.memory.memlink-uc@CHIP;
280 prop upset.memory.memlink-uc@CHIP
281 { !DIAGNOSE_ERPT } (0)->
282 ereport.cpu.generic-sparc.membuf-crc-uc@CHIP,
283 ereport.cpu.generic-sparc.membuf-other-uc@CHIP;
286 * memory-buffer is detector and ereport has a sender
288 prop fault.memory.memlink-uc@MEM_BUFF
289 { DIAGNOSE_ERPT } (0) ->
290 ereport.cpu.generic-sparc.membuf-crc-uc@MEM_BUFF,
291 ereport.cpu.generic-sparc.membuf-other-uc@MEM_BUFF;
293 prop fault.memory.memlink-uc@CHIP
294 { DIAGNOSE_ERPT && CONTAINS_CHIP } (0) ->
295 ereport.cpu.generic-sparc.membuf-crc-uc@MEM_BUFF<>,
296 ereport.cpu.generic-sparc.membuf-other-uc@MEM_BUFF<>;
298 prop fault.memory.memlink-uc@MEM_CTRL
299 { DIAGNOSE_ERPT && CONTAINS_MEMCTRL } (0) ->
300 ereport.cpu.generic-sparc.membuf-crc-uc@MEM_BUFF<>,
301 ereport.cpu.generic-sparc.membuf-other-uc@MEM_BUFF<>;
304 * memory-buffer is detector and ereport does not have sender
306 event ereport.cpu.generic-sparc.membuf-crc-uc@CHIP/MEM_BUFF { within(1s) };
307 event ereport.cpu.generic-sparc.membuf-other-uc@CHIP/MEM_BUFF { within(1s) };
308 event ereport.cpu.generic-sparc.membuf-crc-uc@MEM_CTRL/MEM_BUFF { within(1s) };
309 event ereport.cpu.generic-sparc.membuf-other-uc@MEM_CTRL/MEM_BUFF
312 prop fault.memory.memlink-uc@CHIP
313 { DIAGNOSE_ERPT && !HAS_SENDER } (0) ->
314 ereport.cpu.generic-sparc.membuf-crc-uc@CHIP/MEM_BUFF<>,
315 ereport.cpu.generic-sparc.membuf-other-uc@CHIP/MEM_BUFF<>;
317 prop fault.memory.memlink-uc@MEM_CTRL
318 { DIAGNOSE_ERPT && !HAS_SENDER } (0) ->
319 ereport.cpu.generic-sparc.membuf-crc-uc@MEM_CTRL/MEM_BUFF<>,
320 ereport.cpu.generic-sparc.membuf-other-uc@MEM_CTRL/MEM_BUFF<>;
322 event upset.memory.memlink-uc@MEM_BUFF;
324 prop upset.memory.memlink-uc@MEM_BUFF
325 { !DIAGNOSE_ERPT } (0)->
326 ereport.cpu.generic-sparc.membuf-crc-uc@MEM_BUFF,
327 ereport.cpu.generic-sparc.membuf-other-uc@MEM_BUFF;
330 * memory-controller is detector and ereport has a sender
332 prop fault.memory.memlink-uc@MEM_CTRL
333 { DIAGNOSE_ERPT } (0) ->
334 ereport.cpu.generic-sparc.membuf-crc-uc@MEM_CTRL,
335 ereport.cpu.generic-sparc.membuf-other-uc@MEM_CTRL;
337 prop fault.memory.memlink-uc@MEM_BUFF
338 { DIAGNOSE_ERPT && CONTAINS_MEMBUFF } (0) ->
339 ereport.cpu.generic-sparc.membuf-crc-uc@MEM_CTRL<>,
340 ereport.cpu.generic-sparc.membuf-other-uc@MEM_CTRL<>;
343 * memory-controller is detector and ereport does not have sender
345 event fault.memory.memlink-uc@MEM_CTRL/MEM_BUFF;
347 prop fault.memory.memlink-uc@MEM_CTRL/MEM_BUFF
348 { DIAGNOSE_ERPT && !HAS_SENDER } (0) ->
349 ereport.cpu.generic-sparc.membuf-crc-uc@MEM_CTRL,
350 ereport.cpu.generic-sparc.membuf-other-uc@MEM_CTRL;
352 event upset.memory.memlink-uc@MEM_CTRL;
354 prop upset.memory.memlink-uc@MEM_CTRL
355 { !DIAGNOSE_ERPT } (0)->
356 ereport.cpu.generic-sparc.membuf-crc-uc@MEM_CTRL,
357 ereport.cpu.generic-sparc.membuf-other-uc@MEM_CTRL;
360 * membuf-crc-failover will fault the detector FRU and sender FRU
361 * if detector is chip or memory-controller, the sender is memory-buffer.
362 * if detector is memory-buffer, the sender is chip or memory-controller
364 event ereport.cpu.generic-sparc.membuf-crc-failover@CHIP { within(1s) };
365 event ereport.cpu.generic-sparc.membuf-crc-failover@MEM_BUFF
367 event ereport.cpu.generic-sparc.membuf-crc-failover@MEM_CTRL
370 event fault.memory.memlink-failover@CHIP;
371 event fault.memory.memlink-failover@MEM_BUFF;
372 event fault.memory.memlink-failover@MEM_CTRL;
375 * chip is detector and ereport has a sender
377 prop fault.memory.memlink-failover@CHIP
378 { DIAGNOSE_ERPT } (0) ->
379 ereport.cpu.generic-sparc.membuf-crc-failover@CHIP;
381 prop fault.memory.memlink-failover@MEM_BUFF
382 { DIAGNOSE_ERPT && CONTAINS_MEMBUFF } (0) ->
383 ereport.cpu.generic-sparc.membuf-crc-failover@CHIP<>;
386 * chip is detector and ereport does not have sender
388 event fault.memory.memlink-failover@CHIP/MEM_BUFF;
390 prop fault.memory.memlink-failover@CHIP/MEM_BUFF
391 { DIAGNOSE_ERPT && !HAS_SENDER } (0) ->
392 ereport.cpu.generic-sparc.membuf-crc-failover@CHIP;
394 event upset.memory.memlink-failover@CHIP;
396 prop upset.memory.memlink-failover@CHIP
397 { !DIAGNOSE_ERPT } (0)->
398 ereport.cpu.generic-sparc.membuf-crc-failover@CHIP;
400 * memory-buffer is detector and ereport has a sender
402 prop fault.memory.memlink-failover@MEM_BUFF
403 { DIAGNOSE_ERPT } (0) ->
404 ereport.cpu.generic-sparc.membuf-crc-failover@MEM_BUFF;
406 prop fault.memory.memlink-failover@CHIP
407 { DIAGNOSE_ERPT && CONTAINS_CHIP } (0) ->
408 ereport.cpu.generic-sparc.membuf-crc-failover@MEM_BUFF<>;
410 prop fault.memory.memlink-failover@MEM_CTRL
411 { DIAGNOSE_ERPT && CONTAINS_MEMCTRL } (0) ->
412 ereport.cpu.generic-sparc.membuf-crc-failover@MEM_BUFF<>;
415 * memory-buffer is detector and ereport does not have sender
417 event ereport.cpu.generic-sparc.membuf-crc-failover@CHIP/MEM_BUFF
419 event ereport.cpu.generic-sparc.membuf-crc-failover@MEM_CTRL/MEM_BUFF
422 prop fault.memory.memlink-failover@CHIP
423 { DIAGNOSE_ERPT && !HAS_SENDER } (0) ->
424 ereport.cpu.generic-sparc.membuf-crc-failover@CHIP/MEM_BUFF<>;
426 prop fault.memory.memlink-failover@MEM_CTRL
427 { DIAGNOSE_ERPT && !HAS_SENDER } (0) ->
428 ereport.cpu.generic-sparc.membuf-crc-failover@MEM_CTRL/MEM_BUFF<>;
430 event upset.memory.memlink-failover@MEM_BUFF;
432 prop upset.memory.memlink-failover@MEM_BUFF
433 { !DIAGNOSE_ERPT } (0)->
434 ereport.cpu.generic-sparc.membuf-crc-failover@MEM_BUFF;
436 * memory-controller is detector and ereport has a sender
438 prop fault.memory.memlink-failover@MEM_CTRL
439 { DIAGNOSE_ERPT } (0) ->
440 ereport.cpu.generic-sparc.membuf-crc-failover@MEM_CTRL;
442 prop fault.memory.memlink-failover@MEM_BUFF
443 { DIAGNOSE_ERPT && CONTAINS_MEMBUFF } (0) ->
444 ereport.cpu.generic-sparc.membuf-crc-failover@MEM_CTRL<>;
447 * memory-controller is detector and ereport does not have sender
449 event fault.memory.memlink-failover@MEM_CTRL/MEM_BUFF;
451 prop fault.memory.memlink-failover@MEM_CTRL/MEM_BUFF
452 { DIAGNOSE_ERPT && !HAS_SENDER } (0) ->
453 ereport.cpu.generic-sparc.membuf-crc-failover@MEM_CTRL;
455 event upset.memory.memlink-failover@MEM_CTRL;
457 prop upset.memory.memlink-failover@MEM_CTRL
458 { !DIAGNOSE_ERPT } (0)->
459 ereport.cpu.generic-sparc.membuf-crc-failover@MEM_CTRL;
461 * ignore the membuf-other errors
463 event ereport.cpu.generic-sparc.membuf-other@CHIP;
464 event ereport.cpu.generic-sparc.membuf-other@MEM_BUFF;
465 event ereport.cpu.generic-sparc.membuf-other@MEM_CTRL;
467 event upset.memory.discard@CHIP;
468 event upset.memory.discard@MEM_BUFF;
469 event upset.memory.discard@MEM_CTRL;
471 prop upset.memory.discard@CHIP (1)->
472 ereport.cpu.generic-sparc.membuf-other@CHIP;
474 prop upset.memory.discard@MEM_BUFF (1)->
475 ereport.cpu.generic-sparc.membuf-other@MEM_BUFF;
477 prop upset.memory.discard@MEM_CTRL (1)->
478 ereport.cpu.generic-sparc.membuf-other@MEM_CTRL;