xref: /onnv-gate/usr/src/cmd/fm/eversholt/files/sparc/sun4/fire.esc (revision 992:91a3e4a36e92)
1/*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License, Version 1.0 only
6 * (the "License").  You may not use this file except in compliance
7 * with the License.
8 *
9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10 * or http://www.opensolaris.org/os/licensing.
11 * See the License for the specific language governing permissions
12 * and limitations under the License.
13 *
14 * When distributing Covered Code, include this CDDL HEADER in each
15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16 * If applicable, add the following below this CDDL HEADER, with the
17 * fields enclosed by brackets "[]" replaced with your own identifying
18 * information: Portions Copyright [yyyy] [name of copyright owner]
19 *
20 * CDDL HEADER END
21 */
22/*
23 * Copyright 2005 Sun Microsystems, Inc.  All rights reserved.
24 * Use is subject to license terms.
25 */
26
27#pragma ident	"%Z%%M%	%I%	%E% SMI"
28
29#pragma dictionary "SUN4"
30
31/*
32 * Eversholt rules for the Fire nexus driver
33 */
34
35#define HB_FIT			1000
36#define HBUS_FIT		1000
37#define PCI_DEV_FIT		1000
38#define PCIEX_DEV_FIT		1000
39#define EBUS_FIT		1000
40#define LINK_EVENTS_COUNT	10
41#define LINK_EVENTS_TIME	1h
42
43#define PROP_PLAT_FRU		"PLAT-FRU"
44
45/*
46 * Test for primary or secondary ereports
47 */
48#define IS_PRIMARY (payloadprop("primary"))
49#define IS_SECONDARY (! payloadprop("primary"))
50
51/*
52 * payload: imu-rds or imu-scs
53 *
54 * Extract the request id, the BDF, value in the IMU RDS/SCS log register
55 *
56 * PRM 2.0, pg 227-228
57 *    REQ_ID field: bits [47:32]
58 *
59 * Example:
60 *   0x7766554433221100
61 *         ^^^^
62 */
63#define IMU_REQ_ID_BIT_OFFSET	32
64#define IMU_REQ_ID_BIT_MODULO	(1 << 16)
65#define IMU_MATCH_BDF(imu_rds_scs, b, d, f) \
66	( (payloadprop("primary")) && \
67	  ((((imu_rds_scs) >> IMU_REQ_ID_BIT_OFFSET) % IMU_REQ_ID_BIT_MODULO) \
68        	 == ((b << 8) | (d << 3) | f)) \
69	)
70
71
72/*
73 * payload: mmu-tfsr
74 *
75 * Extract the request id, the BDF value, in the MMU TFSR register
76 *
77 * PRM 2.0, pg 243
78 *    Request ID: bits 15:0
79 *
80 * Example:
81 *   0x7766554433221100
82 *                 ^^^^
83 */
84#define MMU_REQ_ID_BIT_MODULO (1 << 16)
85#define MMU_MATCH_BDF(mmu_tfsr, b, d, f) \
86	( (payloadprop("primary")) && \
87	  (((mmu_tfsr) % MMU_REQ_ID_BIT_MODULO) == ((b << 8) | (d << 3) | f)) \
88	)
89
90
91event error.io.fire.dmc.bad_op@hostbridge/pciexrc;
92event error.io.fire.dmc.bad_parity@hostbridge/pciexrc;
93event error.io.fire.pec.i-e-buffer-parity@hostbridge/pciexrc;
94event error.io.fire.pec.misc-egress@hostbridge/pciexrc ;
95event error.io.fire.pec.adjacentnode@hostbridge/pciexrc ;
96event error.io.fire.pec.secondary@hostbridge/pciexrc ;
97event error.io.fire.pec.fabric_error@hostbridge/pciexrc ;
98
99/*
100 * Fatal JBC ereport: (mb_pea, cpe, ape, pio_cpe, jtceew, jtceei, jtceer)
101 * ebus_to   ereport:
102 *   The fmri of the ereport is ioboard0/hostbridge0
103 *
104 * Other ereports:
105 *   The fmri is ioboard0/hostbridge0/pciexrc[0-1]
106 *
107 */
108event ereport.io.fire.jbc.ill_acc@hostbridge/pciexrc{within(5s)};
109event ereport.io.fire.jbc.ill_acc_rd@hostbridge/pciexrc{within(5s)};
110
111event ereport.io.fire.jbc.mb_pea@hostbridge{within(5s)};
112event ereport.io.fire.jbc.mb_per@hostbridge/pciexrc{within(5s)};
113event ereport.io.fire.jbc.mb_pew@hostbridge/pciexrc{within(5s)};
114event ereport.io.fire.jbc.ebus_to@hostbridge{within(5s)};
115event ereport.io.fire.jbc.ebus_to@hostbridge/pciexrc{within(5s)};
116
117
118/*
119 * Do not diagnose or silently consume the next 15 ereports.
120 * There will be a no-subscriber fmd message.
121 */
122 /*
123event ereport.io.fire.jbc.jue@hostbridge/pciexrc{within(5s)};
124event ereport.io.fire.jbc.pio_unmap@hostbridge/pciexrc{within(5s)};
125event ereport.io.fire.jbc.pio_unmap_rd@hostbridge/pciexrc{within(5s)};
126event ereport.io.fire.jbc.jte@hostbridge/pciexrc{within(5s)};
127event ereport.io.fire.jbc.jbe@hostbridge/pciexrc{within(5s)};
128event ereport.io.fire.jbc.jtceew@hostbridge{within(5s)};
129event ereport.io.fire.jbc.jtceer@hostbridge{within(5s)};
130event ereport.io.fire.jbc.jtceei@hostbridge{within(5s)};
131event ereport.io.fire.jbc.icise@hostbridge/pciexrc{within(5s)};
132event ereport.io.fire.jbc.ijp@hostbridge/pciexrc{within(5s)};
133event ereport.io.fire.jbc.ill_bmw@hostbridge/pciexrc{within(5s)} ;
134event ereport.io.fire.jbc.ill_bmr@hostbridge/pciexrc{within(5s)} ;
135event ereport.io.fire.jbc.unsol_rd@hostbridge/pciexrc{within(5s)};
136event ereport.io.fire.jbc.unsol_intr@hostbridge/pciexrc{within(5s)};
137event ereport.io.fire.jbc.bjc@hostbridge/pciexrc{within(5s)};
138 */
139
140/*
141 * DMC ereports
142 *
143 */
144event ereport.io.fire.dmc.byp_err@hostbridge/pciexrc{within(5s)};
145event ereport.io.fire.dmc.byp_oor@hostbridge/pciexrc{within(5s)};
146event ereport.io.fire.dmc.trn_err@hostbridge/pciexrc{within(5s)};
147event ereport.io.fire.dmc.trn_oor@hostbridge/pciexrc{within(5s)};
148event ereport.io.fire.dmc.tte_inv@hostbridge/pciexrc{within(5s)};
149event ereport.io.fire.dmc.tte_prt@hostbridge/pciexrc{within(5s)};
150event ereport.io.fire.dmc.ttc_dpe@hostbridge/pciexrc{within(5s)};
151event ereport.io.fire.dmc.tbw_dme@hostbridge/pciexrc{within(5s)};
152event ereport.io.fire.dmc.tbw_ude@hostbridge/pciexrc{within(5s)};
153event ereport.io.fire.dmc.tbw_err@hostbridge/pciexrc{within(5s)};
154event ereport.io.fire.dmc.tbw_dpe@hostbridge/pciexrc{within(5s)};
155event ereport.io.fire.dmc.ttc_cae@hostbridge/pciexrc{within(5s)};
156event ereport.io.fire.dmc.eq_over@hostbridge/pciexrc{within(5s)};
157
158/*
159 * TLU Other Event ereports
160 *
161 */
162event ereport.io.fire.pec.ihb_pe@hostbridge/pciexrc{within(5s)};
163event ereport.io.fire.pec.iip@hostbridge/pciexrc{within(5s)};
164event ereport.io.fire.pec.edp@hostbridge/pciexrc{within(5s)};
165event ereport.io.fire.pec.ehp@hostbridge/pciexrc{within(5s)};
166event ereport.io.fire.pec.eru@hostbridge/pciexrc{within(5s)};
167event ereport.io.fire.pec.ero@hostbridge/pciexrc{within(5s)};
168event ereport.io.fire.pec.emp@hostbridge/pciexrc{within(5s)};
169event ereport.io.fire.pec.epe@hostbridge/pciexrc{within(5s)};
170event ereport.io.fire.pec.erp@hostbridge/pciexrc{within(5s)};
171event ereport.io.fire.pec.eip@hostbridge/pciexrc{within(5s)};
172
173event ereport.io.fire.link-events-trip@hostbridge/pciexrc ;
174
175/*
176 * TLU Uncorrectable and Correctable ereports
177 */
178event ereport.io.fire.pec.ur@hostbridge/pciexrc {within(5s)};
179event ereport.io.fire.pec.uc@hostbridge/pciexrc {within(5s)};
180event ereport.io.fire.pec.cto@hostbridge/pciexrc {within(5s)};
181event ereport.io.fire.pec.rof@hostbridge/pciexrc {within(5s)};
182event ereport.io.fire.pec.mfp@hostbridge/pciexrc {within(5s)};
183event ereport.io.fire.pec.pois@hostbridge/pciexrc {within(5s)};
184event ereport.io.fire.pec.fcp@hostbridge/pciexrc {within(5s)};
185event ereport.io.fire.pec.dlp@hostbridge/pciexrc {within(5s)};
186event ereport.io.fire.pec.te@hostbridge/pciexrc {within(5s)};
187event ereport.io.fire.pec.re@hostbridge/pciexrc {within(5s)};
188event ereport.io.fire.pec.bdp@hostbridge/pciexrc {within(5s)};
189event ereport.io.fire.pec.btp@hostbridge/pciexrc {within(5s)};
190event ereport.io.fire.pec.rnr@hostbridge/pciexrc {within(5s)};
191event ereport.io.fire.pec.rto@hostbridge/pciexrc {within(5s)};
192
193/*
194 * Fire Fabric ereport
195 * Whenever a leaf device sends an error message (fatal, non-fatal, or CE) to
196 * root complex, the nexus driver publishes this ereport to log the ereport.
197 */
198event ereport.io.fire.fabric@hostbridge/pciexrc {within(5s)};
199
200/*
201 * A faulty Fire hostbridge may cause (* may cause PCI-E abort):
202 *
203 *  - merge buffer errors mb_pea,w,r
204 *  - mmu data parity errors ttc_dpe*, tbw_dpe*
205 *  - ingress/egress buffer parity errors ihb_pe, iip, edp, ehp
206 *  - misc egress eru, ero, emp, epe, erp, eip
207 *  - too many link down/reset events
208 *  - EQ overflow
209 */
210
211fru hostbridge/pciexrc;
212asru hostbridge/pciexrc;
213
214event fault.io.fire.asic@hostbridge/pciexrc,
215    FITrate=HB_FIT, FRU=hostbridge/pciexrc, ASRU=hostbridge/pciexrc;
216
217prop fault.io.fire.asic@hostbridge/pciexrc (0)->
218    ereport.io.fire.jbc.mb_pea@hostbridge,
219    ereport.io.fire.jbc.mb_per@hostbridge/pciexrc,
220    ereport.io.fire.jbc.mb_pew@hostbridge/pciexrc,
221    ereport.io.fire.dmc.eq_over@hostbridge/pciexrc,
222    error.io.fire.dmc.bad_parity@hostbridge/pciexrc,
223    error.io.fire.pec.i-e-buffer-parity@hostbridge/pciexrc,
224    error.io.fire.pec.misc-egress@hostbridge/pciexrc,
225    error.io.fire.pec.adjacentnode@hostbridge/pciexrc;
226
227prop error.io.fire.dmc.bad_parity@hostbridge/pciexrc (1)->
228    ereport.io.fire.dmc.ttc_dpe@hostbridge/pciexrc,
229    ereport.io.fire.dmc.tbw_dpe@hostbridge/pciexrc;
230
231prop error.io.fire.pec.i-e-buffer-parity@hostbridge/pciexrc (1) ->
232    ereport.io.fire.pec.ihb_pe@hostbridge/pciexrc,
233    ereport.io.fire.pec.iip@hostbridge/pciexrc,
234    ereport.io.fire.pec.ehp@hostbridge/pciexrc,
235    ereport.io.fire.pec.edp@hostbridge/pciexrc;
236
237prop error.io.fire.pec.misc-egress@hostbridge/pciexrc (1) ->
238    ereport.io.fire.pec.eru@hostbridge/pciexrc,
239    ereport.io.fire.pec.ero@hostbridge/pciexrc,
240    ereport.io.fire.pec.emp@hostbridge/pciexrc,
241    ereport.io.fire.pec.epe@hostbridge/pciexrc,
242    ereport.io.fire.pec.erp@hostbridge/pciexrc,
243    ereport.io.fire.pec.eip@hostbridge/pciexrc;
244
245
246/*
247 * EBUS fault
248 */
249event fault.io.ebus@hostbridge/pciexrc,
250    FITrate=EBUS_FIT, FRU=hostbridge/pciexrc, ASRU=hostbridge/pciexrc;
251
252/*
253 * A faulty ebus can cause ebus timeout ebus_to
254 */
255prop fault.io.ebus@hostbridge/pciexrc (0)->
256    ereport.io.fire.jbc.ebus_to@hostbridge,
257    ereport.io.fire.jbc.ebus_to@hostbridge/pciexrc;
258
259
260/*
261 * hostbus
262 */
263event fault.io.fire.hbus@hostbridge/pciexrc,
264    FITrate=HBUS_FIT, FRU=hostbridge/pciexrc, ASRU=hostbridge/pciexrc;
265
266event error.io.fire.jbc.pio_dpe@hostbridge/pciexrc;
267
268event ereport.io.fire.jbc.ape@hostbridge{within(5s)};
269event ereport.io.fire.jbc.pio_dpe@hostbridge/pciexrc{within(5s)};
270event ereport.io.fire.jbc.rd_dpe@hostbridge/pciexrc{within(5s)};
271event ereport.io.fire.jbc.wr_dpe@hostbridge/pciexrc{within(5s)};
272event ereport.io.fire.jbc.cpe@hostbridge{within(5s)};
273event ereport.io.fire.jbc.pio_cpe@hostbridge{within(5s)};
274
275/* A faulty host bus may cause:
276 *
277 *  - ape:      jbus address parity error.
278 *  - pio_dpe*: jbus PIO write parity error.
279 *  - rd_dpe :  jbus DMA read parity error
280 *  - wr_dpe:   jbus DMA write parity error.
281 *  - cpe:      jbus control parity error.
282 *  - pio_cpe:  jbus PIO control parity error.
283 */
284prop fault.io.fire.hbus@hostbridge/pciexrc (0)->
285    ereport.io.fire.jbc.ape@hostbridge,
286    error.io.fire.jbc.pio_dpe@hostbridge/pciexrc,
287    ereport.io.fire.jbc.rd_dpe@hostbridge/pciexrc,
288    ereport.io.fire.jbc.wr_dpe@hostbridge/pciexrc,
289    ereport.io.fire.jbc.cpe@hostbridge,
290    ereport.io.fire.jbc.pio_cpe@hostbridge;
291
292prop error.io.fire.jbc.pio_dpe@hostbridge/pciexrc (1)->
293    ereport.io.fire.jbc.pio_dpe@hostbridge/pciexrc ;
294
295event ereport.io.fire.dmc.msi_par_err@hostbridge/pciexrc{within(5s)};
296event ereport.io.fire.dmc.msi_mal_err@hostbridge/pciexrc{within(5s)};
297
298/*
299 *
300 * PCI-E device fault
301 *
302 */
303fru pciexbus/pciexdev;
304asru pciexbus/pciexdev/pciexfn;
305event fault.io.fire.pciex.device@pciexbus/pciexdev/pciexfn,
306    FRU=pciexbus/pciexdev,
307    ASRU=pciexbus/pciexdev/pciexfn,
308    FITrate=PCIEX_DEV_FIT;
309
310/*
311 * A faulty PCI-E device can cause (chip specific ereports):
312 *
313 *    MSI malformed or parity error
314 *
315 * Extract the request id in the RDS/SCS log register. It 's the BDF
316 * value of the device.
317 */
318prop fault.io.fire.pciex.device@pciexbus[b]/pciexdev[d]/pciexfn[f] (0) ->
319    ereport.io.fire.dmc.msi_mal_err@hostbridge/pciexrc
320        {
321            IMU_MATCH_BDF(payloadprop("imu-rds"), b, d, f) &&
322            is_under(hostbridge/pciexrc, pciexbus[b]/pciexdev[d]/pciexfn[f])
323        },
324    ereport.io.fire.dmc.msi_par_err@hostbridge/pciexrc
325        {
326            IMU_MATCH_BDF(payloadprop("imu-rds"), b, d, f) &&
327            is_under(hostbridge/pciexrc, pciexbus[b]/pciexdev[d]/pciexfn[f])
328        };
329
330/*
331 *  Event queue overflow
332 */
333prop fault.io.fire.pciex.device@pciexbus[b]/pciexdev[d]/pciexfn[0] (0) ->
334    ereport.io.fire.dmc.eq_over@hostbridge/pciexrc
335        {
336            /*
337             * Indict PCI-E FRU(s) under this root complex excluding the
338             * one that the Fire ASIC resides on.
339             */
340            is_under(hostbridge/pciexrc, pciexbus[b]/pciexdev[d]/pciexfn[0])
341	    &&
342	    (confprop(asru(pciexbus[b]/pciexdev[d]/pciexfn[0]), PROP_PLAT_FRU)
343	        !=
344	     confprop(asru(hostbridge/pciexrc), PROP_PLAT_FRU))
345        };
346
347
348/*
349 * PCI devices
350 * Similar to the above rules.
351 */
352
353fru pcibus/pcidev;
354asru pcibus/pcidev/pcifn;
355event fault.io.fire.pci.device@pcibus/pcidev/pcifn,
356    FITrate=PCI_DEV_FIT,
357    FRU=pcibus/pcidev,
358    ASRU=pcibus/pcidev/pcifn;
359
360prop fault.io.fire.pci.device@pcibus[b]/pcidev[d]/pcifn[f] (0) ->
361    ereport.io.fire.dmc.msi_mal_err@hostbridge/pciexrc
362        {
363            IMU_MATCH_BDF(payloadprop("imu-rds"), b, d, f) &&
364            is_under(hostbridge/pciexrc, pcibus[b]/pcidev[d]/pcifn[f])
365        },
366    ereport.io.fire.dmc.msi_par_err@hostbridge/pciexrc
367        {
368            IMU_MATCH_BDF(payloadprop("imu-rds"), b, d, f) &&
369            is_under(hostbridge/pciexrc, pcibus[b]/pcidev[d]/pcifn[f])
370        };
371
372prop fault.io.fire.pci.device@pcibus[b]/pcidev[d]/pcifn[0] (0) ->
373    ereport.io.fire.dmc.eq_over@hostbridge/pciexrc
374        {
375            /*
376             * Indict PCI FRU(s) under this root complex excluding the
377             * one that the Fire ASIC resides on.
378             */
379            is_under(hostbridge/pciexrc, pcibus[b]/pcidev[d]/pcifn[0])
380	    &&
381	    (confprop(asru(pcibus[b]/pcidev[d]/pcifn[0]), PROP_PLAT_FRU)
382	        !=
383	     confprop(asru(hostbridge/pciexrc), PROP_PLAT_FRU))
384        };
385
386
387event ereport.io.fire.dmc.msi_not_en@hostbridge/pciexrc{within(5s)};
388event ereport.io.fire.dmc.cor_not_en@hostbridge/pciexrc{within(5s)};
389event ereport.io.fire.dmc.nonfatal_not_en@hostbridge/pciexrc{within(5s)};
390event ereport.io.fire.dmc.fatal_not_en@hostbridge/pciexrc{within(5s)};
391event ereport.io.fire.dmc.pmpme_not_en@hostbridge/pciexrc{within(5s)};
392event ereport.io.fire.dmc.pmeack_not_en@hostbridge/pciexrc{within(5s)};
393event ereport.io.fire.dmc.eq_not_en@hostbridge/pciexrc{within(5s)};
394
395event error.io.fire.dmc.msg_not_en@hostbridge/pciexrc ;
396
397event defect.io.fire.pci.driver@pcibus/pcidev/pcifn;
398event defect.io.fire.pciex.driver@pciexbus/pciexdev/pciexfn;
399
400/*
401 * A faulty bridge or leaf device driver can cause
402 * - mmu invalid, out of range, protection etc. all except data parity
403 * - invalid pio r/w
404 * - msg received to unenabled queue
405 * - unsupported request
406 *
407 * Need to break into multiple prop to avoid the "line to long" runtime error
408 */
409prop defect.io.fire.pciex.driver@pciexbus[b]/pciexdev[d]/pciexfn[f] (0) ->
410    /* msg not enable */
411    ereport.io.fire.dmc.msi_not_en@hostbridge/pciexrc
412        {
413            IMU_MATCH_BDF(payloadprop("imu-rds"), b, d, f) &&
414            is_under(hostbridge/pciexrc, pciexbus[b]/pciexdev[d]/pciexfn[f])
415        },
416    ereport.io.fire.dmc.cor_not_en@hostbridge/pciexrc
417        {
418            IMU_MATCH_BDF(payloadprop("imu-rds"), b, d, f) &&
419            is_under(hostbridge/pciexrc, pciexbus[b]/pciexdev[d]/pciexfn[f])
420        },
421    ereport.io.fire.dmc.nonfatal_not_en@hostbridge/pciexrc
422        {
423            IMU_MATCH_BDF(payloadprop("imu-rds"), b, d, f) &&
424            is_under(hostbridge/pciexrc, pciexbus[b]/pciexdev[d]/pciexfn[f])
425        },
426    ereport.io.fire.dmc.fatal_not_en@hostbridge/pciexrc
427        {
428            IMU_MATCH_BDF(payloadprop("imu-rds"), b, d, f) &&
429            is_under(hostbridge/pciexrc, pciexbus[b]/pciexdev[d]/pciexfn[f])
430        },
431    ereport.io.fire.dmc.pmpme_not_en@hostbridge/pciexrc
432        {
433            IMU_MATCH_BDF(payloadprop("imu-rds"), b, d, f) &&
434            is_under(hostbridge/pciexrc, pciexbus[b]/pciexdev[d]/pciexfn[f])
435        },
436    ereport.io.fire.dmc.pmeack_not_en@hostbridge/pciexrc
437        {
438            IMU_MATCH_BDF(payloadprop("imu-rds"), b, d, f) &&
439            is_under(hostbridge/pciexrc, pciexbus[b]/pciexdev[d]/pciexfn[f])
440        },
441    ereport.io.fire.dmc.eq_not_en@hostbridge/pciexrc
442        {
443            IMU_MATCH_BDF(payloadprop("imu-scs"), b, d, f) &&
444            is_under(hostbridge/pciexrc, pciexbus[b]/pciexdev[d]/pciexfn[f])
445        };
446
447
448prop defect.io.fire.pciex.driver@pciexbus[b]/pciexdev[d]/pciexfn[f] (0) ->
449    /* bad_op */
450    ereport.io.fire.dmc.byp_err@hostbridge/pciexrc
451        {
452            MMU_MATCH_BDF(payloadprop("mmu-tfsr"), b, d, f) &&
453            is_under(hostbridge/pciexrc, pciexbus[b]/pciexdev[d]/pciexfn[f])
454        },
455    ereport.io.fire.dmc.byp_oor@hostbridge/pciexrc
456        {
457            MMU_MATCH_BDF(payloadprop("mmu-tfsr"), b, d, f) &&
458            is_under(hostbridge/pciexrc, pciexbus[b]/pciexdev[d]/pciexfn[f])
459        },
460    ereport.io.fire.dmc.trn_err@hostbridge/pciexrc
461        {
462            MMU_MATCH_BDF(payloadprop("mmu-tfsr"), b, d, f) &&
463            is_under(hostbridge/pciexrc, pciexbus[b]/pciexdev[d]/pciexfn[f])
464        },
465    ereport.io.fire.dmc.trn_oor@hostbridge/pciexrc
466        {
467            MMU_MATCH_BDF(payloadprop("mmu-tfsr"), b, d, f) &&
468            is_under(hostbridge/pciexrc, pciexbus[b]/pciexdev[d]/pciexfn[f])
469        },
470    ereport.io.fire.dmc.tte_inv@hostbridge/pciexrc
471        {
472            MMU_MATCH_BDF(payloadprop("mmu-tfsr"), b, d, f) &&
473            is_under(hostbridge/pciexrc, pciexbus[b]/pciexdev[d]/pciexfn[f])
474        },
475    ereport.io.fire.dmc.tte_prt@hostbridge/pciexrc
476        {
477            MMU_MATCH_BDF(payloadprop("mmu-tfsr"), b, d, f) &&
478            is_under(hostbridge/pciexrc, pciexbus[b]/pciexdev[d]/pciexfn[f])
479        },
480    ereport.io.fire.dmc.tbw_dme@hostbridge/pciexrc
481        {
482            MMU_MATCH_BDF(payloadprop("mmu-tfsr"), b, d, f) &&
483            is_under(hostbridge/pciexrc, pciexbus[b]/pciexdev[d]/pciexfn[f])
484        },
485    ereport.io.fire.dmc.tbw_ude@hostbridge/pciexrc
486        {
487            MMU_MATCH_BDF(payloadprop("mmu-tfsr"), b, d, f) &&
488            is_under(hostbridge/pciexrc, pciexbus[b]/pciexdev[d]/pciexfn[f])
489        },
490    ereport.io.fire.dmc.tbw_err@hostbridge/pciexrc
491        {
492            MMU_MATCH_BDF(payloadprop("mmu-tfsr"), b, d, f) &&
493            is_under(hostbridge/pciexrc, pciexbus[b]/pciexdev[d]/pciexfn[f])
494        };
495
496
497/* repeat the above prop for PCI devices */
498prop defect.io.fire.pci.driver@pcibus[b]/pcidev[d]/pcifn[f] (0) ->
499    /* msg not enable */
500    ereport.io.fire.dmc.msi_not_en@hostbridge/pciexrc
501        {
502            IMU_MATCH_BDF(payloadprop("imu-rds"), b, d, f) &&
503            is_under(hostbridge/pciexrc, pcibus[b]/pcidev[d]/pcifn[f])
504        },
505    ereport.io.fire.dmc.cor_not_en@hostbridge/pciexrc
506        {
507            IMU_MATCH_BDF(payloadprop("imu-rds"), b, d, f) &&
508            is_under(hostbridge/pciexrc, pcibus[b]/pcidev[d]/pcifn[f])
509        },
510    ereport.io.fire.dmc.nonfatal_not_en@hostbridge/pciexrc
511        {
512            IMU_MATCH_BDF(payloadprop("imu-rds"), b, d, f) &&
513            is_under(hostbridge/pciexrc, pcibus[b]/pcidev[d]/pcifn[f])
514        },
515    ereport.io.fire.dmc.fatal_not_en@hostbridge/pciexrc
516        {
517            IMU_MATCH_BDF(payloadprop("imu-rds"), b, d, f) &&
518            is_under(hostbridge/pciexrc, pcibus[b]/pcidev[d]/pcifn[f])
519        },
520    ereport.io.fire.dmc.pmpme_not_en@hostbridge/pciexrc
521        {
522            IMU_MATCH_BDF(payloadprop("imu-rds"), b, d, f) &&
523            is_under(hostbridge/pciexrc, pcibus[b]/pcidev[d]/pcifn[f])
524        },
525    ereport.io.fire.dmc.pmeack_not_en@hostbridge/pciexrc
526        {
527            IMU_MATCH_BDF(payloadprop("imu-rds"), b, d, f) &&
528            is_under(hostbridge/pciexrc, pcibus[b]/pcidev[d]/pcifn[f])
529        },
530    ereport.io.fire.dmc.eq_not_en@hostbridge/pciexrc
531        {
532            IMU_MATCH_BDF(payloadprop("imu-scs"), b, d, f) &&
533            is_under(hostbridge/pciexrc, pcibus[b]/pcidev[d]/pcifn[f])
534        };
535
536prop defect.io.fire.pci.driver@pcibus[b]/pcidev[d]/pcifn[f] (0) ->
537    /* bad_op */
538    ereport.io.fire.dmc.byp_err@hostbridge/pciexrc
539        {
540            MMU_MATCH_BDF(payloadprop("mmu-tfsr"), b, d, f) &&
541            is_under(hostbridge/pciexrc, pcibus[b]/pcidev[d]/pcifn[f])
542        },
543    ereport.io.fire.dmc.byp_oor@hostbridge/pciexrc
544        {
545            MMU_MATCH_BDF(payloadprop("mmu-tfsr"), b, d, f) &&
546            is_under(hostbridge/pciexrc, pcibus[b]/pcidev[d]/pcifn[f])
547        },
548    ereport.io.fire.dmc.trn_err@hostbridge/pciexrc
549        {
550            MMU_MATCH_BDF(payloadprop("mmu-tfsr"), b, d, f) &&
551            is_under(hostbridge/pciexrc, pcibus[b]/pcidev[d]/pcifn[f])
552        },
553    ereport.io.fire.dmc.trn_oor@hostbridge/pciexrc
554        {
555            MMU_MATCH_BDF(payloadprop("mmu-tfsr"), b, d, f) &&
556            is_under(hostbridge/pciexrc, pcibus[b]/pcidev[d]/pcifn[f])
557        },
558    ereport.io.fire.dmc.tte_inv@hostbridge/pciexrc
559        {
560            MMU_MATCH_BDF(payloadprop("mmu-tfsr"), b, d, f) &&
561            is_under(hostbridge/pciexrc, pcibus[b]/pcidev[d]/pcifn[f])
562        },
563    ereport.io.fire.dmc.tte_prt@hostbridge/pciexrc
564        {
565            MMU_MATCH_BDF(payloadprop("mmu-tfsr"), b, d, f) &&
566            is_under(hostbridge/pciexrc, pcibus[b]/pcidev[d]/pcifn[f])
567        },
568    ereport.io.fire.dmc.tbw_dme@hostbridge/pciexrc
569        {
570            MMU_MATCH_BDF(payloadprop("mmu-tfsr"), b, d, f) &&
571            is_under(hostbridge/pciexrc, pcibus[b]/pcidev[d]/pcifn[f])
572        },
573    ereport.io.fire.dmc.tbw_ude@hostbridge/pciexrc
574        {
575            MMU_MATCH_BDF(payloadprop("mmu-tfsr"), b, d, f) &&
576            is_under(hostbridge/pciexrc, pcibus[b]/pcidev[d]/pcifn[f])
577        },
578    ereport.io.fire.dmc.tbw_err@hostbridge/pciexrc
579        {
580            MMU_MATCH_BDF(payloadprop("mmu-tfsr"), b, d, f) &&
581            is_under(hostbridge/pciexrc, pcibus[b]/pcidev[d]/pcifn[f])
582        };
583
584
585event defect.io.fire.pciex.driver@hostbridge/pciexrc;
586
587/*
588 * A faulty Fire nexus driver can cause
589 * - Jbus unmapped error
590 * - mmu invalid, out of range, protection etc. all except data parity
591 * - invalid pio r/w
592 * - msg received to unenabled queue
593 */
594
595prop defect.io.fire.pciex.driver@hostbridge/pciexrc (0)->
596    error.io.fire.dmc.bad_op@hostbridge/pciexrc,
597    error.io.fire.dmc.msg_not_en@hostbridge/pciexrc;
598
599prop error.io.fire.dmc.bad_op@hostbridge/pciexrc (1)->
600    ereport.io.fire.dmc.byp_err@hostbridge/pciexrc,
601    ereport.io.fire.dmc.byp_oor@hostbridge/pciexrc,
602    ereport.io.fire.dmc.trn_err@hostbridge/pciexrc,
603    ereport.io.fire.dmc.trn_oor@hostbridge/pciexrc,
604    ereport.io.fire.dmc.tte_inv@hostbridge/pciexrc,
605    ereport.io.fire.dmc.tte_prt@hostbridge/pciexrc,
606    ereport.io.fire.dmc.tbw_dme@hostbridge/pciexrc,
607    ereport.io.fire.dmc.tbw_ude@hostbridge/pciexrc,
608    ereport.io.fire.dmc.tbw_err@hostbridge/pciexrc;
609
610prop error.io.fire.dmc.msg_not_en@hostbridge/pciexrc (1)->
611    ereport.io.fire.dmc.msi_not_en@hostbridge/pciexrc,
612    ereport.io.fire.dmc.cor_not_en@hostbridge/pciexrc,
613    ereport.io.fire.dmc.nonfatal_not_en@hostbridge/pciexrc,
614    ereport.io.fire.dmc.fatal_not_en@hostbridge/pciexrc,
615    ereport.io.fire.dmc.pmpme_not_en@hostbridge/pciexrc,
616    ereport.io.fire.dmc.pmeack_not_en@hostbridge/pciexrc,
617    ereport.io.fire.dmc.eq_not_en@hostbridge/pciexrc;
618
619
620engine serd.io.fire.link-events@hostbridge/pciexrc,
621    N=LINK_EVENTS_COUNT, T=LINK_EVENTS_TIME, method=persistent,
622    trip=ereport.io.fire.link-events-trip@hostbridge/pciexrc ;
623
624event upset.io.fire.link-events@hostbridge/pciexrc ,
625    engine=serd.io.fire.link-events@hostbridge/pciexrc ;
626
627event error.io.fire.link-events@hostbridge/pciexrc ;
628
629event ereport.io.fire.pec.lin@hostbridge/pciexrc{within(5s)};
630event ereport.io.fire.pec.lrs@hostbridge/pciexrc{within(5s)};
631event ereport.io.fire.pec.ldn@hostbridge/pciexrc{within(5s)};
632event ereport.io.fire.pec.lup@hostbridge/pciexrc{within(5s)};
633
634prop upset.io.fire.link-events@hostbridge/pciexrc (0)->
635    error.io.fire.link-events@hostbridge/pciexrc ;
636
637prop error.io.fire.link-events@hostbridge/pciexrc (1)->
638    ereport.io.fire.pec.lrs@hostbridge/pciexrc ,
639    ereport.io.fire.pec.ldn@hostbridge/pciexrc ;
640
641
642/*
643 * Fault at the adjacent node which is right below the Fire ASIC
644 */
645fru hostbridge/pciexrc/pciexbus/pciexdev;
646asru hostbridge/pciexrc/pciexbus/pciexdev/pciexfn;
647event fault.io.fire.pciex.device@hostbridge/pciexrc/pciexbus/pciexdev/pciexfn,
648    FITrate=HB_FIT, FRU=hostbridge/pciexrc/pciexbus/pciexdev,
649    ASRU=hostbridge/pciexrc/pciexbus/pciexdev/pciexfn;
650
651/*
652 * Faulty adjacent node may cause
653 *    too many link down/reset events
654 */
655prop fault.io.fire.pciex.device@hostbridge/pciexrc/pciexbus/pciexdev/pciexfn
656(0) ->
657    error.io.fire.pec.adjacentnode@hostbridge/pciexrc
658        {
659            is_under(hostbridge/pciexrc,
660                     hostbridge/pciexrc/pciexbus/pciexdev/pciexfn)
661        };
662
663prop error.io.fire.pec.adjacentnode@hostbridge/pciexrc (0) ->
664    ereport.io.fire.link-events-trip@hostbridge/pciexrc;
665
666
667/*
668 * Secondary errors of the ereport that the device is at fault.
669 * Undiagnosed the secondary errors since the payload is invalid.
670 */
671prop error.io.fire.pec.secondary@hostbridge/pciexrc (0) ->
672    ereport.io.fire.dmc.msi_par_err@hostbridge/pciexrc{ IS_SECONDARY },
673    ereport.io.fire.dmc.msi_mal_err@hostbridge/pciexrc{ IS_SECONDARY },
674    ereport.io.fire.dmc.eq_over@hostbridge/pciexrc{ IS_SECONDARY };
675
676/*
677 * For logging purpose only.
678 * The Fire nexus driver generates equivalent pciex ereports for the
679 * common pciex rules to diagnose.
680 */
681prop error.io.fire.pec.fabric_error@hostbridge/pciexrc(0) ->
682    ereport.io.fire.pec.cto@hostbridge/pciexrc,
683    ereport.io.fire.pec.ur@hostbridge/pciexrc,
684    ereport.io.fire.pec.uc@hostbridge/pciexrc,
685    ereport.io.fire.pec.cto@hostbridge/pciexrc,
686    ereport.io.fire.pec.rof@hostbridge/pciexrc,
687    ereport.io.fire.pec.mfp@hostbridge/pciexrc,
688    ereport.io.fire.pec.pois@hostbridge/pciexrc,
689    ereport.io.fire.pec.fcp@hostbridge/pciexrc,
690    ereport.io.fire.pec.dlp@hostbridge/pciexrc,
691    ereport.io.fire.pec.te@hostbridge/pciexrc,
692    ereport.io.fire.pec.re@hostbridge/pciexrc,
693    ereport.io.fire.pec.bdp@hostbridge/pciexrc,
694    ereport.io.fire.pec.btp@hostbridge/pciexrc,
695    ereport.io.fire.pec.rnr@hostbridge/pciexrc,
696    ereport.io.fire.pec.rto@hostbridge/pciexrc;
697
698
699/* add memory async ereports */
700event ereport.io.fire.jbc.ce_asyn@hostbridge/pciexrc{within(5s)};
701event ereport.io.fire.jbc.ue_asyn@hostbridge/pciexrc{within(5s)};
702event ereport.io.fire.pec.mrc@hostbridge/pciexrc{within(5s)};
703event ereport.io.fire.pec.wuc@hostbridge/pciexrc{within(5s)};
704event ereport.io.fire.pec.ruc@hostbridge/pciexrc{within(5s)};
705event ereport.io.fire.pec.crs@hostbridge/pciexrc{within(5s)};
706
707/*
708 * Upset used to hide ereports that are not currently diagnosed.
709 */
710event upset.io.fire.nodiag@hostbridge;
711
712prop upset.io.fire.nodiag@hostbridge (0)->
713    ereport.io.fire.jbc.ue_asyn@hostbridge/pciexrc,
714    ereport.io.fire.jbc.ce_asyn@hostbridge/pciexrc,
715    ereport.io.fire.jbc.ill_acc@hostbridge/pciexrc,
716    ereport.io.fire.jbc.ill_acc_rd@hostbridge/pciexrc,
717    ereport.io.fire.dmc.ttc_cae@hostbridge/pciexrc,
718    ereport.io.fire.pec.mrc@hostbridge/pciexrc,
719    ereport.io.fire.pec.wuc@hostbridge/pciexrc,
720    ereport.io.fire.pec.ruc@hostbridge/pciexrc,
721    ereport.io.fire.pec.crs@hostbridge/pciexrc,
722    ereport.io.fire.pec.lin@hostbridge/pciexrc,
723    ereport.io.fire.pec.lup@hostbridge/pciexrc,
724    error.io.fire.pec.secondary@hostbridge/pciexrc,
725    error.io.fire.pec.fabric_error@hostbridge/pciexrc,
726    ereport.io.fire.fabric@hostbridge/pciexrc
727    ;
728
729