dmake: do not set MAKEFLAGS=k
[unleashed/tickless.git] / usr / src / cmd / fm / eversholt / files / common / pci.esc
blobfb3613d19eb6cd292fef402473983944396df5e0
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 (the "License").
6  * You may not use this file except in compliance with the License.
7  *
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.
12  *
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]
18  *
19  * CDDL HEADER END
20  */
22  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
23  * Use is subject to license terms.
24  */
26 #pragma dictionary "PCI"
28 #include <fm/topo_hc.h>
30 #define PCI_DEV_FIT 1000
31 #define PCI_BUS_FIT 500
34  * SERD parameters.
35  *
36  * Nonfatal dpe errors have to be recovered by the hardened driver which may
37  * cause intermittant performance/responsiveness problems, so we have tighter
38  * serd parameters for these. These are most likely errors in buffers/caches
39  * within devices and bridges, so use similar rates to cpu data cache parity
40  * errors.
41  * 
42  * We will be more conservative about nonfatal internal errors reported
43  * by the driver.
44  */
45 #define NONFATAL_COUNT 6
46 #define NONFATAL_TIME 2h
47 #define NONFATAL_DPE_COUNT 3
48 #define NONFATAL_DPE_TIME 168h
50 #define PCIFN           pcibus/pcidev/pcifn
51 #define PCIFNHZ         pcibus<>/pcidev<>/pcifn<>
53 engine serd.io.device.nonfatal@PCIFN,
54         N=NONFATAL_COUNT, T=NONFATAL_TIME;
56 engine serd.io.pci.nf-dpe@PCIFN,
57         N=NONFATAL_DPE_COUNT, T=NONFATAL_DPE_TIME;
59 engine serd.io.pci.nf-dpe-bus@pcibus,
60         N=NONFATAL_DPE_COUNT, T=NONFATAL_DPE_TIME;
62 #define IS_LEAF \
63         (confprop_defined(PCIFN, TOPO_PCI_CLASS) && \
64         confprop(PCIFN, TOPO_PCI_CLASS) != "60400" && \
65         confprop(PCIFN, TOPO_PCI_CLASS) != "60401")
67 #define IS_BDG \
68         (confprop(PCIFN, TOPO_PCI_CLASS) == "60400" || \
69         confprop(PCIFN, TOPO_PCI_CLASS) == "60401")
71 #define FD_IS_LEAF \
72         (confprop_defined(pcibus/pcidev[fromdev]/pcifn, TOPO_PCI_CLASS) && \
73         confprop(pcibus/pcidev[fromdev]/pcifn, TOPO_PCI_CLASS) != "60400" && \
74         confprop(pcibus/pcidev[fromdev]/pcifn, TOPO_PCI_CLASS) != "60401")
76 #define IS_LF(f)        (confprop_defined(f, TOPO_PCI_CLASS) && \
77                         confprop(f, TOPO_PCI_CLASS) != "60400" && \
78                         confprop(f, TOPO_PCI_CLASS) != "60401")
80  * note general rule for errors is that for upstream propagations
81  * @PCIFN is the sending device while  for downstream
82  * propagations it is the receiving device.
83  */
85 event fault.io.pci.device-interr-corr@PCIFN,
86         engine=serd.io.device.nonfatal@PCIFN, FITrate=PCI_DEV_FIT;
88 event fault.io.pci.device-interr-unaf@PCIFN,
89         engine=serd.io.pci.nf-dpe@PCIFN, FITrate=PCI_DEV_FIT;
91 event fault.io.pci.device-interr-deg@PCIFN, FITrate=PCI_DEV_FIT, retire=0;
93 event fault.io.pci.device-interr@PCIFN, FITrate=PCI_DEV_FIT;
95 event fault.io.pci.device-invreq@PCIFN, FITrate=PCI_DEV_FIT;
97 event fault.io.pci.device-noresp@PCIFN, FITrate=PCI_DEV_FIT;
99 event fault.io.pci.fw_corrupt@PCIFN, FITrate=PCI_DEV_FIT, retire=0;
101 event fault.io.pci.fw_mismatch@PCIFN, FITrate=PCI_DEV_FIT, retire=0;
104  * ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
105  * A faulty hostbridge may cause:
106  * ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
107  *  - nr-pw-d:  the device not to respond to an upstream request
108  *  - nr-drw-d: the device not to respond to an upstream request
109  *  - ta-pw-d:  the device to send a target abort to an upstream request
110  *  - ta-drw-d: the device to send a target abort to an upstream request
111  *  - serr-u:   the device to report itself in error
112  *  - badreq-pw-d:a bad downstream request - not parity error (may cause target
113  *              to target abort or master abort)
114  *  - badreq-drw-d:a bad downstream request - not parity error (may cause
115  *              target to target abort or master abort)
116  *  - ape-d:    address/parity to get corrupted during downstream transmission
117  *  - scpe-d:   split completion to get corrupted during downstream transmission
118  *  - dpe-d:    the device to transfer bad data and/or bad parity downstream
119  *  - retry-to-d:       the device to exceed the set timeout for a delayed
120  *                      transaction retry.
121  */
122 #define PCI_TO_HB pcibus/pcidev<todev>/pcifn<> {fromdev != 32 && todev == 32}
123 #define PCI_FROM_HB pcibus/pcidev<todev>/pcifn<> {fromdev == 32 && todev != 32}
125 event error.io.pci.retry-to-d@PCIFN;
126 event error.io.pci.nr-pw-d@PCIFN;
127 event error.io.pci.nr-drw-d@PCIFN;
128 event error.io.pci.ta-pw-d@PCIFN;
129 event error.io.pci.ta-drw-d@PCIFN;
130 event error.io.pci.badreq-pw-d@PCIFN;
131 event error.io.pci.badreq-drw-d@PCIFN;
132 event error.io.pci.f-dpe-d@PCIFN;
133 event error.io.pci.deg-dpe-d@PCIFN;
134 event error.io.pci.nf-dpe-d@PCIFN;
135 event error.io.pci.ape-d@PCIFN;
136 event error.io.pci.ape-u@PCIFN;
137 event error.io.pci.dpdata-dw-d@PCIFN;
138 event error.io.pci.dpdata-pw-d@PCIFN;
139 event error.io.pci.dpdata-dr-d@PCIFN;
140 event error.io.pci.dpdata-pw-u@PCIFN;
141 event error.io.pci.dpdata-dw-u@PCIFN;
142 event error.io.pci.dpdata-dr-u@PCIFN;
143 event error.io.pci.ta-u@PCIFN;
144 event error.io.pci.ma-u@PCIFN;
145 event error.io.pci.perr-dw-u@PCIFN;
146 event error.io.pci.perr-pw-u@PCIFN;
147 event error.io.pci.perr-dr-u@PCIFN;
148 event error.io.pci.badreq-drw-u@PCIFN;
149 event error.io.pci.badreq-pw-u@PCIFN;
150 event error.io.pci.device-serr@PCIFN;
151 event error.io.pci.device-ta@PCIFN;
152 event error.io.pci.device-par@PCIFN;
153 event error.io.pci.serr-u@PCIFN;
154 event error.io.pcix.scpe-d@PCIFN;
155 event error.io.pcix.scpe-u@PCIFN;
156 event error.io.pcix.spl-comp-ma-u@PCIFN;
157 event error.io.pcix.spl-comp-ta-u@PCIFN;
158 event error.io.pcix.spl-comp-ma-d@PCIFN;
159 event error.io.pcix.spl-comp-ta-d@PCIFN;
161 event ereport.io.pci.ma@PCIFN{within(5s)};
162 event ereport.io.pci.rta@PCIFN{within(5s)};
163 event ereport.io.pci.mdpe@PCIFN{within(5s)};
164 event ereport.io.pci.sta@PCIFN{within(5s)};
165 event ereport.io.pci.sserr@PCIFN{within(5s)};
166 event ereport.io.pci.dpe@PCIFN{within(5s)};
167 event ereport.io.pci.target-mdpe@PCIFN{within(5s)};
168 event ereport.io.pci.target-rta@PCIFN{within(5s)};
169 event ereport.io.pci.target-ma@PCIFN{within(5s)};
170 event ereport.io.pcix.discard@PCIFN{within(5s)};
172 prop fault.io.pci.device-noresp@pcibus/pcidev[fromdev]/pcifn (0)->
173     error.io.pci.nr-pw-d@PCI_FROM_HB,
174     error.io.pci.nr-drw-d@PCI_FROM_HB,
175     error.io.pci.retry-to-d@PCI_FROM_HB;
177 prop fault.io.pci.device-invreq@pcibus/pcidev[fromdev]/pcifn (0)->
178     error.io.pci.badreq-pw-d@PCI_FROM_HB,
179     error.io.pci.badreq-drw-d@PCI_FROM_HB;
181 prop fault.io.pci.device-interr-unaf@pcibus/pcidev[fromdev]/pcifn (0)->
182     error.io.pci.nf-dpe-d@PCI_FROM_HB;
184 prop fault.io.pci.device-interr-deg@pcibus/pcidev[fromdev]/pcifn (0)->
185     error.io.pci.deg-dpe-d@PCI_FROM_HB;
187 prop fault.io.pci.device-interr@PCIFN (0)->
188     error.io.pci.device-par@PCIFN,
189     error.io.pci.device-ta@PCIFN,
190     error.io.pci.device-serr@PCIFN;
192 prop error.io.pci.device-par@pcibus/pcidev[fromdev]/pcifn (1)->
193     error.io.pci.f-dpe-d@PCI_FROM_HB,
194     error.io.pcix.scpe-d@PCI_FROM_HB,
195     error.io.pci.ape-d@PCI_FROM_HB;
197 prop error.io.pci.device-ta@pcibus/pcidev[fromdev]/pcifn (1)->
198     error.io.pci.ta-pw-d@PCI_FROM_HB,
199     error.io.pci.ta-drw-d@PCI_FROM_HB;
201 prop error.io.pci.device-ta@pcibus/pcidev[fromdev]/pcifn (1)->
202     ereport.io.pci.sta@pcibus/pcidev<todev>/pcifn {
203         todev == fromdev && fromdev == 32 };
205 prop error.io.pci.device-serr@PCIFN (2)->
206     error.io.pci.serr-u@PCIFN,
207     ereport.io.pci.sserr@PCIFN;
210  * ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
211  * ereport generation rules for hostbridge
212  * ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
213  */
214 prop error.io.pci.dpdata-pw-u@pcibus/pcidev[fromdev]/pcifn (1)->
215     ereport.io.pci.dpe@PCI_TO_HB;
217 prop error.io.pci.dpdata-dw-u@pcibus/pcidev[fromdev]/pcifn (1)->
218     ereport.io.pci.dpe@PCI_TO_HB;
220 prop error.io.pci.dpdata-dr-u@pcibus/pcidev[fromdev]/pcifn (2)->
221     ereport.io.pci.mdpe@PCI_TO_HB,
222     ereport.io.pci.dpe@PCI_TO_HB;
224 prop error.io.pci.ape-u@pcibus/pcidev[fromdev]/pcifn (3)->
225     ereport.io.pci.dpe@PCI_TO_HB,
226     error.io.pci.serr-u@PCI_TO_HB,
227     ereport.io.pci.sserr@PCI_TO_HB;
229 prop error.io.pci.ape-u@pcibus/pcidev[fromdev]/pcifn (0)->
230     ereport.io.pci.sta@PCI_TO_HB;
232 prop error.io.pci.ma-u@pcibus/pcidev[fromdev]/pcifn (1)->
233     ereport.io.pci.ma@PCI_TO_HB;
235 prop error.io.pci.ta-u@pcibus/pcidev[fromdev]/pcifn (1)->
236     ereport.io.pci.rta@PCI_TO_HB;
238 prop error.io.pci.perr-dw-u@pcibus/pcidev[fromdev]/pcifn (1)->
239     ereport.io.pci.mdpe@PCI_TO_HB;
241 prop error.io.pci.perr-pw-u@pcibus/pcidev[fromdev]/pcifn (1)->
242     ereport.io.pci.mdpe@PCI_TO_HB;
244 prop error.io.pci.badreq-drw-u@pcibus/pcidev[fromdev]/pcifn (0)->
245     ereport.io.pci.sta@PCI_TO_HB;
247 prop error.io.pci.badreq-pw-u@pcibus/pcidev[fromdev]/pcifn (0)->
248     ereport.io.pci.sta@PCI_TO_HB;
250 prop error.io.pcix.scpe-u@PCIFN (1)->
251     error.io.pcix.spl-comp-ma-d@PCIFN,
252     error.io.pcix.spl-comp-ta-d@PCIFN;
254 prop error.io.pcix.scpe-u@pcibus/pcidev[fromdev]/pcifn (0)->
255     ereport.io.pci.dpe@PCI_TO_HB,
256     error.io.pci.serr-u@PCI_TO_HB,
257     ereport.io.pci.sserr@PCI_TO_HB,
258     ereport.io.pci.sta@PCI_TO_HB;
260 prop error.io.pcix.spl-comp-ma-u@pcibus/pcidev[fromdev]/pcifn (3)->
261     ereport.io.pcix.discard@PCI_TO_HB,
262     error.io.pci.serr-u@PCI_TO_HB,
263     ereport.io.pci.sserr@PCI_TO_HB;
265 prop error.io.pcix.spl-comp-ta-u@pcibus/pcidev[fromdev]/pcifn (3)->
266     ereport.io.pcix.discard@PCI_TO_HB,
267     error.io.pci.serr-u@PCI_TO_HB,
268     ereport.io.pci.sserr@PCI_TO_HB;
271  * ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
272  * A faulty PCI leaf device or pci-pci bridge may cause:
273  * ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
274  *  - nr-pw-u:          the device not to respond to a valid downstream request
275  *  - nr-drw-u:         the device not to respond to a valid downstream request
276  *  - ta-pw-u:          the device responds with a ta to a valid downstream
277  *                      request
278  *  - ta-drw-u:         the device responds with a ta to a valid downstream
279  *                      request
280  *  - serr-u:           the device to report itself in error
281  *  - badreq-pw-u:      a bad upstream request (may cause target to target
282  *                      abort or master abort)
283  *  - badreq-drw-u:     a bad upstream request (may cause target to target
284  *                      abort or master abort)
285  *  - ape-u:            the transfer of bad address/parity upstream.
286  *  - scpe-u:           the transfer of bad split completion upstream.
287  *  - dpe-u:            the device to deliver bad data/parity upstream.
288  *  - retry-to-u:       the device to exceed the set timeout for a delayed
289  *                      transaction retry.
291  * A faulty PCI-X leaf device or bridge may also cause:
293  *  - tx-oor:           the device sends a byte count larger than the completers
294  *                      address range.
295  *  - rx-unex-sc:       the device recieved a split completion with a tag
296  *                      which does not match any outstanding transaction.
297  */
299 #define PCI_NOT_HB pcibus/pcidev[fromdev]/pcifn {fromdev != 32}
301 event error.io.pci.retry-to-u@PCIFN;
302 event error.io.pci.nr-pw-u@PCIFN;
303 event error.io.pci.nr-drw-u@PCIFN;
304 event error.io.pci.ta-pw-u@PCIFN;
305 event error.io.pci.ta-drw-u@PCIFN;
306 event error.io.pci.f-dpe-u@PCIFN;
307 event error.io.pci.deg-dpe-u@PCIFN;
308 event error.io.pci.nf-dpe-u@PCIFN;
309 event error.io.pci.flt-dpdata-pw-u@PCIFN;
310 event error.io.pci.flt-dpdata-dw-u@PCIFN;
311 event error.io.pci.flt-dpdata-dr-u@PCIFN;
312 event error.io.pci.source-dpdata-u@PCIFN;
313 event error.io.pci.f-source-dpdata-u@PCIFN;
314 event error.io.pci.f-source-dpdata-u@PCIFN/PCIFN;
315 event error.io.pci.deg-source-dpdata-u@PCIFN;
316 event error.io.pci.deg-source-dpdata-u@PCIFN/PCIFN;
317 event error.io.pci.nf-source-dpdata-u@PCIFN;
318 event error.io.pci.nf-source-dpdata-u@PCIFN/PCIFN;
319 event error.io.pci.perr-d@PCIFN;
320 event error.io.pci.target-mdpe-d@PCIFN;
321 event error.io.pci.target-mdpe-d@PCIFN/PCIFN;
322 event error.io.pci.target-rta-d@PCIFN/PCIFN;
323 event error.io.pci.target-ma-d@PCIFN/PCIFN;
324 event error.io.pcix.tx-oor@PCIFN;
325 event error.io.pcix.rx-unex-sc@PCIFN;
326 event error.io.device.nf-device@PCIFN;
327 event error.io.device.f-device@PCIFN;
328 event error.io.device.deg-device@PCIFN;
329 event error.io.service.restored@PCIFN;
331 event ereport.io.pcix.oor@PCIFN{within(5s)};
332 event ereport.io.pcix.unex-sc@PCIFN{within(5s)};
333 event ereport.io.device.fw_corrupt@PCIFN{within(5s)};
334 event ereport.io.device.fw_mismatch@PCIFN{within(5s)};
335 event ereport.io.service.lost@PCIFN{within(5s)};
336 event ereport.io.service.degraded@PCIFN{within(5s)};
337 event ereport.io.service.unaffected@PCIFN{within(5s)};
338 event ereport.io.service.restored@PCIFN{within(30s)};
340 prop fault.io.pci.device-noresp@pcibus/pcidev[fromdev]/pcifn (0)->
341     error.io.pci.nr-pw-u@PCI_NOT_HB,
342     error.io.pci.nr-drw-u@PCI_NOT_HB,
343     error.io.pci.retry-to-u@PCI_NOT_HB;
345 prop fault.io.pci.device-interr-corr@pcibus/pcidev[fromdev]/pcifn (0)->
346     error.io.device.nf-device@PCI_NOT_HB;
348 prop fault.io.pci.device-interr-unaf@pcibus/pcidev[fromdev]/pcifn (0)->
349     error.io.pci.nf-dpe-u@PCI_NOT_HB;
351 prop fault.io.pci.device-interr-deg@pcibus/pcidev[fromdev]/pcifn (0)->
352     error.io.device.deg-device@PCI_NOT_HB,
353     error.io.pci.deg-dpe-u@PCI_NOT_HB;
355 prop fault.io.pci.device-interr@pcibus/pcidev[fromdev]/pcifn (0)->
356     error.io.pci.ta-pw-u@PCI_NOT_HB,
357     error.io.pci.ta-drw-u@PCI_NOT_HB,
358     error.io.pci.serr-u@PCI_NOT_HB,
359     error.io.pci.ape-u@PCI_NOT_HB,
360     error.io.pci.f-dpe-u@PCI_NOT_HB,
361     error.io.device.f-device@PCI_NOT_HB,
362     error.io.pcix.scpe-u@PCI_NOT_HB,
363     error.io.pcix.tx-oor@PCI_NOT_HB,
364     error.io.pcix.rx-unex-sc@PCI_NOT_HB;
366 prop fault.io.pci.fw_corrupt@PCIFN {IS_LEAF} (1)->
367     ereport.io.device.fw_corrupt@PCIFN;
369 prop fault.io.pci.fw_corrupt@PCIFN {IS_LEAF} (0)->
370     ereport.io.service.lost@PCIFN,
371     ereport.io.service.degraded@PCIFN;
373 prop fault.io.pci.fw_mismatch@PCIFN {IS_LEAF} (1)->
374     ereport.io.device.fw_mismatch@PCIFN;
376 prop fault.io.pci.fw_mismatch@PCIFN {IS_LEAF} (0)->
377     ereport.io.service.lost@PCIFN,
378     ereport.io.service.degraded@PCIFN;
380 prop fault.io.pci.device-invreq@pcibus/pcidev[fromdev]/pcifn {FD_IS_LEAF} (0)->
381     error.io.pci.badreq-drw-u@PCI_NOT_HB,
382     error.io.pci.badreq-pw-u@PCI_NOT_HB;
384 prop error.io.pcix.tx-oor@PCIFN (1)->
385     ereport.io.pcix.oor@PCIFN;
387 prop error.io.pcix.rx-unex-sc@pcibus/pcidev[fromdev]/pcifn (1)->
388     ereport.io.pcix.unex-sc@pcibus/pcidev<todev>/pcifn<> {fromdev != todev};
390 prop error.io.pci.f-dpe-u@PCIFN (1)->
391     error.io.pci.flt-dpdata-pw-u@PCIFN,
392     error.io.pci.flt-dpdata-dw-u@PCIFN,
393     error.io.pci.flt-dpdata-dr-u@PCIFN;
395 prop error.io.pci.f-dpe-u@PCIFN (1)->
396     error.io.pci.f-source-dpdata-u@PCIFN;
398 prop error.io.pci.f-source-dpdata-u@PCIFN (1)->
399     error.io.pci.f-source-dpdata-u@PCIFN/PCIFNHZ;
401 prop error.io.pci.f-source-dpdata-u@PCIFN { IS_LF(PCIFN) } (1)->
402     error.io.pci.source-dpdata-u@PCIFN;
404 prop error.io.pci.f-source-dpdata-u@PCIFN { IS_LF(PCIFN) } (0)->
405     ereport.io.service.lost@PCIFN;
407 prop error.io.pci.deg-dpe-u@PCIFN (1)->
408     error.io.pci.flt-dpdata-pw-u@PCIFN,
409     error.io.pci.flt-dpdata-dw-u@PCIFN,
410     error.io.pci.flt-dpdata-dr-u@PCIFN;
412 prop error.io.pci.deg-dpe-u@PCIFN (1)->
413     error.io.pci.deg-source-dpdata-u@PCIFN;
415 prop error.io.pci.deg-source-dpdata-u@PCIFN (1)->
416     error.io.pci.deg-source-dpdata-u@PCIFN/PCIFNHZ;
418 prop error.io.pci.deg-source-dpdata-u@PCIFN { IS_LF(PCIFN) } (1)->
419     error.io.pci.source-dpdata-u@PCIFN;
421 prop error.io.pci.deg-source-dpdata-u@PCIFN { IS_LF(PCIFN) } (1)->
422     ereport.io.service.degraded@PCIFN;
424 prop error.io.pci.nf-dpe-u@PCIFN (1)->
425     error.io.pci.flt-dpdata-pw-u@PCIFN,
426     error.io.pci.flt-dpdata-dw-u@PCIFN,
427     error.io.pci.flt-dpdata-dr-u@PCIFN;
429 prop error.io.pci.nf-dpe-u@PCIFN (1)->
430     error.io.pci.nf-source-dpdata-u@PCIFN;
432 prop error.io.pci.nf-source-dpdata-u@PCIFN (1)->
433     error.io.pci.nf-source-dpdata-u@PCIFN/PCIFNHZ;
435 prop error.io.pci.nf-source-dpdata-u@PCIFN { IS_LF(PCIFN) } (1)->
436     error.io.pci.source-dpdata-u@PCIFN;
438 prop error.io.pci.nf-source-dpdata-u@PCIFN { IS_LF(PCIFN) } (1)->
439     ereport.io.service.unaffected@PCIFN,
440     error.io.service.restored@PCIFN;
442 prop error.io.pci.flt-dpdata-pw-u@PCIFN (1)->
443     error.io.pci.dpdata-pw-u@PCIFN;
445 prop error.io.pci.flt-dpdata-pw-u@PCIFN { IS_BDG } (1)->
446     error.io.pci.serr-u@PCIFN;
448 prop error.io.pci.flt-dpdata-dw-u@PCIFN (2)->
449     error.io.pci.perr-d@PCIFN,
450     error.io.pci.dpdata-dw-u@PCIFN;
452 prop error.io.pci.flt-dpdata-dr-u@PCIFN (2)->
453     error.io.pci.dpdata-dr-u@PCIFN,
454     error.io.pci.target-mdpe-d@PCIFN;
457  * ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
458  * A faulty pci-pci bridge may also cause
459  * ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
460  *  - nr-pw-d:          the device not to respond to a valid upstream request
461  *  - nr-drw-d:         the device not to respond to a valid upstream request
462  *  - ta-pw-d:          the device responds with a ta to a valid upstream
463  *                      request
464  *  - ta-drw-d:         the device responds with a ta to a valid upstream
465  *                      request
466  *  - ape-d:    address/parity to get corrupted during downstream transmission.
467  *  - scpe-d:   split completion gets corrupted during downstream transmission.
468  *  - dpe-d:    data/parity to get corrupted during downstream transmission.
469  *  - retry-to-d:       the device to exceed the set timeout for a delayed
470  *                      transaction retry.
471  */
473 event error.io.pci.ape-d@PCIFN/PCIFN;
474 event error.io.pci.f-dpe-d@PCIFN/PCIFN;
475 event error.io.pci.deg-dpe-d@PCIFN/PCIFN;
476 event error.io.pci.nf-dpe-d@PCIFN/PCIFN;
477 event error.io.pci.retry-to-d@PCIFN/PCIFN;
478 event error.io.pci.nr-pw-d@PCIFN/PCIFN;
479 event error.io.pci.nr-drw-d@PCIFN/PCIFN;
480 event error.io.pci.ta-pw-d@PCIFN/PCIFN;
481 event error.io.pci.ta-drw-d@PCIFN/PCIFN;
482 event error.io.pcix.scpe-d@PCIFN/PCIFN;
484 prop fault.io.pci.device-noresp@PCIFN (0)->
485     error.io.pci.nr-pw-d@PCIFN/PCIFN,
486     error.io.pci.nr-drw-d@PCIFN/PCIFN,
487     error.io.pci.retry-to-d@PCIFN/PCIFN;
489 prop fault.io.pci.device-interr-unaf@PCIFN (0)->
490     error.io.pci.nf-dpe-d@PCIFN/PCIFN;
492 prop fault.io.pci.device-interr-deg@PCIFN (0)->
493     error.io.pci.deg-dpe-d@PCIFN/PCIFN;
495 prop fault.io.pci.device-interr@PCIFN (0)->
496     error.io.pci.ta-pw-d@PCIFN/PCIFN,
497     error.io.pci.ta-drw-d@PCIFN/PCIFN,
498     error.io.pci.ape-d@PCIFN/PCIFN,
499     error.io.pcix.scpe-d@PCIFN/PCIFN,
500     error.io.pci.f-dpe-d@PCIFN/PCIFN;
503  * ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
504  * A faulty PCI bus may cause:
505  * ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
506  *  - ape-d:    address/parity to get corrupted during downstream transmission.
507  *  - scpe-d:   split completion gets corrupted during downstream transmission.
508  *  - dpe-d:    data/parity to get corrupted during downstream transmission.
509  *  - ape-u:    address/parity to get corrupted during upstream transmission.
510  *  - dpe-u:    data/parity to get corrupted during read upstream transmission.
511  *  - scpe-u:   split completion to get corrupted during upstream transmission.
512  */
514 event fault.io.pci.bus-linkerr-unaf@pcibus,
515         engine=serd.io.pci.nf-dpe-bus@pcibus, FITrate=PCI_BUS_FIT;
517 event fault.io.pci.bus-linkerr-deg@pcibus, FITrate=PCI_BUS_FIT, retire=0;
519 event fault.io.pci.bus-linkerr@pcibus, FITrate=PCI_BUS_FIT;
521 prop fault.io.pci.bus-linkerr-unaf@pcibus (0)->
522     error.io.pci.nf-dpe-d@pcibus/pcidev<todev>/pcifn { todev != 32},
523     error.io.pci.nf-dpe-u@pcibus/pcidev<todev>/pcifn { todev != 32};
525 prop fault.io.pci.bus-linkerr-deg@pcibus (0)->
526     error.io.pci.deg-dpe-d@pcibus/pcidev<todev>/pcifn { todev != 32},
527     error.io.pci.deg-dpe-u@pcibus/pcidev<todev>/pcifn { todev != 32};
529 prop fault.io.pci.bus-linkerr@pcibus (0)->
530     error.io.pci.ape-d@pcibus/pcidev<todev>/pcifn { todev != 32},
531     error.io.pci.f-dpe-d@pcibus/pcidev<todev>/pcifn { todev != 32},
532     error.io.pci.ape-u@pcibus/pcidev<todev>/pcifn { todev != 32},
533     error.io.pci.f-dpe-u@pcibus/pcidev<todev>/pcifn { todev != 32},
534     error.io.pcix.scpe-d@pcibus/pcidev<todev>/pcifn { todev != 32},
535     error.io.pcix.scpe-u@pcibus/pcidev<todev>/pcifn { todev != 32},
536     error.io.pcix.tx-oor@pcibus/pcidev<todev>/pcifn { todev != 32},
537     error.io.pcix.rx-unex-sc@pcibus/pcidev<todev>/pcifn { todev != 32};
540  * ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
541  * recursive rules for pci-pci bridges
542  * ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
543  */
545 event error.io.pci.serr-u@PCIFN/PCIFN;
546 event error.io.pci.perr-dw-u@PCIFN/PCIFN;
547 event error.io.pci.perr-pw-u@PCIFN/PCIFN;
548 event error.io.pci.perr-d@PCIFN/PCIFN;
549 event error.io.pci.dpdata-pw-u@PCIFN/PCIFN;
550 event error.io.pci.dpdata-dw-u@PCIFN/PCIFN;
551 event error.io.pci.dpdata-dr-u@PCIFN/PCIFN;
552 event error.io.pci.dpdata-pw-fwd-d@PCIFN;
553 event error.io.pci.dpdata-pw-fwd-d@PCIFN/PCIFN;
554 event error.io.pci.dpdata-dw-fwd-d@PCIFN;
555 event error.io.pci.dpdata-dw-fwd-d@PCIFN/PCIFN;
556 event error.io.pci.dpdata-dr-fwd-d@PCIFN;
557 event error.io.pci.dpdata-dr-fwd-d@PCIFN/PCIFN;
558 event error.io.pci.source-perr-u@PCIFN;
559 event error.io.pci.leaf-ape-d@PCIFN;
560 event error.io.pci.ape-u@PCIFN/PCIFN;
561 event error.io.pci.source-ape-u@PCIFN;
562 event error.io.pci.badreq-pw-d@PCIFN/PCIFN;
563 event error.io.pci.badreq-drw-d@PCIFN/PCIFN;
564 event error.io.pci.badreq-pw-u@PCIFN/PCIFN;
565 event error.io.pci.badreq-drw-u@PCIFN/PCIFN;
566 event error.io.pci.ta-d@PCIFN;
567 event error.io.pci.ta-d@PCIFN/PCIFN;
568 event error.io.pci.ta-u@PCIFN/PCIFN;
569 event error.io.pci.target-rta-d@PCIFN;
570 event error.io.pci.target-ma-d@PCIFN;
571 event error.io.pci.nr-pw-u@PCIFN/PCIFN;
572 event error.io.pci.ta-pw-u@PCIFN/PCIFN;
573 event error.io.pci.retry-to-u@PCIFN/PCIFN;
574 event error.io.pcix.scpe-u@PCIFN/PCIFN;
575 event error.io.pcix.source-scpe-u@PCIFN;
576 event error.io.pcix.spl-comp-ma-u@PCIFN/PCIFN;
577 event error.io.pcix.spl-comp-ta-u@PCIFN/PCIFN;
578 event error.io.pci.ma-u@PCIFN/PCIFN;
580 event ereport.io.pci.sec-ma@PCIFN{within(5s)};
581 event ereport.io.pci.sec-sta@PCIFN{within(5s)};
582 event ereport.io.pci.sec-rta@PCIFN{within(5s)};
583 event ereport.io.pci.sec-mdpe@PCIFN{within(5s)};
584 event ereport.io.pci.sec-dpe@PCIFN{within(5s)};
585 event ereport.io.pci.sec-rserr@PCIFN{within(5s)};
586 event ereport.io.pci.dto@PCIFN{within(5s)};
587 event ereport.io.pcix.sec-spl-dis@PCIFN{within(5s)};
588 event ereport.io.pcix.spl-dis@PCIFN{within(5s)};
591  * SERR# can propagate upstream and may be seen by other devices on the bus
592  */
593 prop error.io.pci.serr-u@pcibus/pcidev[fromdev]/pcifn (0)->
594     ereport.io.pci.sserr@pcibus/pcidev<todev>/pcifn<> {todev!=fromdev};
596 prop error.io.pci.serr-u@PCIFN { IS_BDG } (1)->
597     ereport.io.pci.sserr@PCIFN;
599 prop error.io.pci.serr-u@PCIFN/PCIFN (2)->
600     ereport.io.pci.sec-rserr@PCIFN,
601     error.io.pci.serr-u@PCIFN;
604  * PERR# can propagate upstream for delayed writes. For posted writes
605  * it turns into an SERR#.
606  */
607 prop error.io.pci.perr-dw-u@PCIFN/PCIFN (2)->
608     ereport.io.pci.sec-mdpe@PCIFN,
609     error.io.pci.perr-dw-u@PCIFN;
611 prop error.io.pci.perr-pw-u@PCIFN/PCIFN (2)->
612     ereport.io.pci.sec-mdpe@PCIFN,
613     error.io.pci.serr-u@PCIFN;
616  * PERR# can propagate downstream (only for downstream dw parity error)
617  */
618 prop error.io.pci.perr-d@PCIFN { IS_LEAF } (0)->
619     ereport.io.pci.mdpe@PCIFN;
621 prop error.io.pci.perr-d@PCIFN { IS_BDG } (1)->
622     ereport.io.pci.mdpe@PCIFN;
624 prop error.io.pci.perr-d@PCIFN (1)->
625     error.io.pci.perr-d@PCIFN/PCIFNHZ;
628  * downstream target ereports are for any descendant device
630  * A hostbridge driver may generate "target-" ereports when knowledge of the
631  * physical address associated with a fault allows the target device to be
632  * determined. This is not a requirement of the Diagnosis Engine, but can be
633  * valuable when available.
634  */
635 prop error.io.pci.target-mdpe-d@PCIFN (0)->
636     ereport.io.pci.target-mdpe@PCIFN;
638 prop error.io.pci.target-mdpe-d@PCIFN (1)->
639     error.io.pci.target-mdpe-d@PCIFN/PCIFNHZ;
641 prop error.io.pci.target-rta-d@PCIFN (0)->
642     ereport.io.pci.target-rta@PCIFN;
644 prop error.io.pci.target-rta-d@PCIFN (1)->
645     error.io.pci.target-rta-d@PCIFN/PCIFNHZ;
647 prop error.io.pci.target-ma-d@PCIFN (0)->
648     ereport.io.pci.target-ma@PCIFN;
650 prop error.io.pci.target-ma-d@PCIFN (1)->
651     error.io.pci.target-ma-d@PCIFN/PCIFNHZ;
654  * target aborts propagate upstream
655  */
656 prop error.io.pci.ta-u@PCIFN { IS_BDG } (1)->
657     ereport.io.pci.sta@PCIFN;
659 prop error.io.pci.ta-u@PCIFN { IS_LEAF } (0)->
660     ereport.io.pci.sta@PCIFN;
662 prop error.io.pci.ta-u@PCIFN/PCIFN (2)->
663     ereport.io.pci.sec-rta@PCIFN,
664     error.io.pci.ta-u@PCIFN;
667  * bad data (ie invalid but not an ape or dpe) can propagate downstream,
668  * and at some point may result in a target or master abort
669  */
670 prop error.io.pci.badreq-pw-d@PCIFN (1)->
671     error.io.pci.badreq-pw-d@PCIFN/PCIFNHZ,
672     error.io.pci.nr-pw-u@PCIFN,
673     error.io.pci.ta-pw-u@PCIFN;
675 prop error.io.pci.badreq-pw-d@PCIFN { IS_LEAF } (0)->
676     error.io.pci.nr-pw-u@PCIFN,
677     error.io.pci.ta-pw-u@PCIFN;
679 prop error.io.pci.badreq-drw-d@PCIFN (1)->
680     error.io.pci.badreq-drw-d@PCIFN/PCIFNHZ,
681     error.io.pci.nr-drw-u@PCIFN,
682     error.io.pci.ta-drw-u@PCIFN;
684 prop error.io.pci.badreq-drw-d@PCIFN { IS_LEAF } (0)->
685     error.io.pci.nr-drw-u@PCIFN,
686     error.io.pci.ta-drw-u@PCIFN;
688 prop error.io.pci.nr-pw-u@PCIFN/PCIFN (2)-> 
689     ereport.io.pci.sec-ma@PCIFN,
690     error.io.pci.serr-u@PCIFN;
692 prop error.io.pci.ta-pw-u@PCIFN { IS_LEAF } (0)-> 
693     ereport.io.pci.sta@PCIFN;
695 prop error.io.pci.ta-pw-u@PCIFN { IS_BDG } (1)-> 
696     ereport.io.pci.sta@PCIFN;
698 prop error.io.pci.ta-pw-u@PCIFN/PCIFN (2)-> 
699     ereport.io.pci.sec-rta@PCIFN,
700     error.io.pci.serr-u@PCIFN;
702 prop error.io.pci.nr-drw-u@PCIFN (1)->
703     error.io.pci.ma-u@PCIFN;
705 prop error.io.pci.nr-drw-u@PCIFN (1)->
706     error.io.pci.target-rta-d@PCIFN,
707     error.io.pci.target-ma-d@PCIFN;
709 prop error.io.pci.ma-u@PCIFN/PCIFN (1)->
710     ereport.io.pci.sec-ma@PCIFN;
712 prop error.io.pci.ma-u@PCIFN/PCIFN (1)->
713     error.io.pci.ma-u@PCIFN,
714     error.io.pci.ta-u@PCIFN;
716 prop error.io.pci.ta-drw-u@PCIFN (1)-> 
717     error.io.pci.ta-u@PCIFN;
719 prop error.io.pci.ta-drw-u@PCIFN (1)-> 
720     error.io.pci.target-rta-d@PCIFN;
723  * bad data (ie invalid but not an ape or dpe) can propagate upstream,
724  * and at some point may result in a target or master abort
725  */
726 prop error.io.pci.badreq-pw-u@PCIFN/PCIFN (1)->
727     error.io.pci.badreq-pw-u@PCIFN,
728     error.io.pci.nr-pw-d@PCIFN/PCIFN,
729     error.io.pci.ta-pw-d@PCIFN/PCIFN;
731 prop error.io.pci.badreq-pw-u@PCIFN (0)->
732     error.io.pci.nr-pw-d@PCIFN,
733     error.io.pci.ta-pw-d@PCIFN;
735 prop error.io.pci.nr-pw-d@PCIFN { IS_LEAF } (0)->
736     ereport.io.pci.ma@PCIFN;
738 prop error.io.pci.nr-pw-d@PCIFN { IS_BDG } (2)->
739     ereport.io.pci.ma@PCIFN,
740     error.io.pci.serr-u@PCIFN;
742 prop error.io.pci.ta-pw-d@PCIFN/PCIFN (1)->
743     ereport.io.pci.sec-sta@PCIFN;
745 prop error.io.pci.ta-pw-d@PCIFN { IS_LEAF } (0)->
746     ereport.io.pci.rta@PCIFN;
748 prop error.io.pci.ta-pw-d@PCIFN { IS_BDG } (2)->
749     ereport.io.pci.rta@PCIFN,
750     error.io.pci.serr-u@PCIFN;
753  * for delayed writes we treat upstream badreq specially as rta always
754  * propagates back downstream to the leaf
755  */
756 prop error.io.pci.badreq-drw-u@PCIFN { IS_LEAF } (0)->
757     ereport.io.pci.rta@PCIFN,
758     ereport.io.pci.ma@PCIFN; 
760 prop error.io.pci.badreq-drw-u@PCIFN/PCIFN (1)->
761     ereport.io.pci.ma@PCIFN,
762     ereport.io.pci.rta@PCIFN;
764 prop error.io.pci.badreq-drw-u@PCIFN/PCIFN (0)->
765     ereport.io.pci.sec-sta@PCIFN;
767 prop error.io.pci.badreq-drw-u@PCIFN/PCIFN (0)->
768     error.io.pci.badreq-drw-u@PCIFN;
770 prop error.io.pci.nr-drw-d@PCIFN { IS_LEAF } (0)->
771     ereport.io.pci.ma@PCIFN;
773 prop error.io.pci.nr-drw-d@PCIFN { IS_BDG } (1)->
774     ereport.io.pci.ma@PCIFN;
776 prop error.io.pci.nr-drw-d@PCIFN { IS_BDG } (0)->
777     ereport.io.pci.sec-sta@PCIFN;
779 prop error.io.pci.nr-drw-d@PCIFN (1)->
780     error.io.pci.ta-d@PCIFN/PCIFNHZ,
781     error.io.pci.nr-drw-d@PCIFN/PCIFNHZ;
783 prop error.io.pci.ta-drw-d@PCIFN/PCIFN (1)->
784     ereport.io.pci.sec-sta@PCIFN;
786 prop error.io.pci.ta-drw-d@PCIFN (1)->
787     error.io.pci.ta-d@PCIFN;
789 prop error.io.pci.ta-d@PCIFN { IS_LEAF } (0)->
790     ereport.io.pci.rta@PCIFN;
792 prop error.io.pci.ta-d@PCIFN { IS_BDG } (2)->
793     ereport.io.pci.sec-sta@PCIFN,
794     ereport.io.pci.rta@PCIFN;
796 prop error.io.pci.ta-d@PCIFN (1)->
797     error.io.pci.ta-d@PCIFN/PCIFNHZ;
800  * Request with address parity error must be detected by parent device
801  * and can optionally result in a target or master abort.
802  * It may also be detected by sibling devices on a bus
803  */
804 prop error.io.pci.ape-u@PCIFN/PCIFN (3)->
805     ereport.io.pci.sec-dpe@PCIFN,
806     ereport.io.pci.sec-rserr@PCIFN,
807     error.io.pci.serr-u@PCIFN;
809 prop error.io.pci.ape-u@PCIFN (0)->
810     error.io.pci.nr-drw-d@PCIFN,
811     error.io.pci.ta-drw-d@PCIFN,
812     error.io.pci.nr-pw-d@PCIFN,
813     error.io.pci.ta-pw-d@PCIFN;
815 prop error.io.pci.ape-u@PCIFN (0)->
816     ereport.io.pci.mdpe@PCIFN;
818 prop error.io.pci.ape-u@pcibus/pcidev[fromdev]/pcifn (0)->
819     ereport.io.pci.dpe@pcibus/pcidev<todev>/pcifn<> {fromdev != todev},
820     ereport.io.pci.sserr@pcibus/pcidev<todev>/pcifn<> {fromdev != todev};
822 prop error.io.pci.ape-u@PCIFN (1)->
823     error.io.pci.source-ape-u@PCIFN;
826  * If the bridge sees an upstream split completion error (pci-x only) it could
827  * result in a number of things
828  * - for various faults in the split completion (eg address parity error)
829  *   we will respond with a target abort (which the child device will treat
830  *   as a split completion ta)
831  * - for other faults we can't tell who send the split completion and so
832  *   just drop the request (which the child device sees as a split
833  *   completion ma)
834  */
835 prop error.io.pcix.scpe-u@PCIFN/PCIFN (0)->
836     ereport.io.pci.sec-sta@PCIFN,
837     ereport.io.pci.sec-dpe@PCIFN,
838     ereport.io.pci.sec-rserr@PCIFN,
839     error.io.pci.serr-u@PCIFN;
841 prop error.io.pcix.scpe-u@PCIFN (1)->
842     error.io.pcix.spl-comp-ma-d@PCIFN,
843     error.io.pcix.spl-comp-ta-d@PCIFN;
845 prop error.io.pcix.spl-comp-ma-d@PCIFN (1)->
846     error.io.pci.serr-u@PCIFN;
848 prop error.io.pcix.spl-comp-ma-d@PCIFN { IS_LEAF } (0)->
849     ereport.io.pci.sserr@PCIFN,
850     ereport.io.pcix.spl-dis@PCIFN;
852 prop error.io.pcix.spl-comp-ma-d@PCIFN { IS_BDG } (2)->
853     ereport.io.pcix.spl-dis@PCIFN,
854     ereport.io.pci.ma@PCIFN;
856 prop error.io.pcix.spl-comp-ta-d@PCIFN (1)->
857     error.io.pci.serr-u@PCIFN;
859 prop error.io.pcix.spl-comp-ta-d@PCIFN { IS_LEAF } (0)->
860     ereport.io.pci.sserr@PCIFN,
861     ereport.io.pcix.spl-dis@PCIFN;
863 prop error.io.pcix.spl-comp-ta-d@PCIFN { IS_BDG } (2)->
864     ereport.io.pcix.spl-dis@PCIFN,
865     ereport.io.pci.rta@PCIFN;
867 prop error.io.pcix.scpe-u@PCIFN (1)->
868     error.io.pcix.source-scpe-u@PCIFN;
871  * request with address parity error must be detected by child device
872  * and can optionally result in a target or master abort.
873  */
874 prop error.io.pci.ape-d@PCIFN (1)->
875     error.io.pci.serr-u@PCIFN;
877 prop error.io.pci.ape-d@PCIFN { IS_LEAF } (0)->
878     error.io.pci.leaf-ape-d@PCIFN;
880 prop error.io.pci.leaf-ape-d@PCIFN { IS_LEAF } (2)->
881     ereport.io.pci.sserr@PCIFN,
882     ereport.io.pci.dpe@PCIFN;
884 prop error.io.pci.ape-d@PCIFN { IS_BDG } (1)->
885     ereport.io.pci.dpe@PCIFN;
887 prop error.io.pci.ape-d@PCIFN (0)->
888     error.io.pci.ta-pw-u@PCIFN,
889     error.io.pci.ta-drw-u@PCIFN,
890     error.io.pci.nr-pw-u@PCIFN,
891     error.io.pci.nr-drw-u@PCIFN;
894  * If the device sees a downstream split completion error (pci-x only) it could
895  * result in a number of things
896  * - for various faults in the split completion (eg address parity error)
897  *   we will respond with a target abort (which the parent bridge will treat
898  *   as a split completion ta)
899  * - for other faults we can't tell who send the split completion and so
900  *   just drop the request (which the parent bridge sees as a split
901  *   completion ma)
902  */
903 prop error.io.pcix.scpe-d@PCIFN (0)->
904     ereport.io.pci.sta@PCIFN,
905     ereport.io.pci.dpe@PCIFN,
906     ereport.io.pci.sserr@PCIFN,
907     error.io.pci.serr-u@PCIFN;
909 prop error.io.pcix.scpe-d@PCIFN (1)->
910     error.io.pcix.spl-comp-ma-u@PCIFN,
911     error.io.pcix.spl-comp-ta-u@PCIFN;
913 prop error.io.pcix.spl-comp-ma-u@PCIFN/PCIFN (2)->
914     ereport.io.pcix.sec-spl-dis@PCIFN,
915     error.io.pci.serr-u@PCIFN;
917 prop error.io.pcix.spl-comp-ma-u@PCIFN/PCIFN (0)->
918     ereport.io.pci.sec-ma@PCIFN;
920 prop error.io.pcix.spl-comp-ta-u@PCIFN/PCIFN (3)->
921     ereport.io.pcix.sec-spl-dis@PCIFN,
922     error.io.pci.serr-u@PCIFN,
923     ereport.io.pci.sec-rta@PCIFN;
926  * request with data parity error can propagate upstream
928  * for PCI/X (but not PCI) the split write can optionally be forwarded across
929  * the bridge, maintaining bad parity/ecc
931  * if there is a dpe on a retry on a delayed write, we don't send another
932  * retry, and eventually the dto timer will expire
933  */
934 prop error.io.pci.dpdata-pw-u@PCIFN { IS_LEAF } (0)->
935     ereport.io.pci.mdpe@PCIFN;
937 prop error.io.pci.dpdata-pw-u@PCIFN/PCIFN (3)->
938     ereport.io.pci.mdpe@PCIFN,
939     ereport.io.pci.sec-dpe@PCIFN,
940     error.io.pci.dpdata-pw-u@PCIFN;
942 prop error.io.pci.dpdata-dw-u@PCIFN/PCIFN (1)->
943     ereport.io.pci.sec-dpe@PCIFN;
945 prop error.io.pci.dpdata-dw-u@PCIFN/PCIFN (0)->
946     ereport.io.pci.mdpe@PCIFN,
947     error.io.pci.dpdata-dw-u@PCIFN;
949 prop error.io.pci.dpdata-dw-u@PCIFN/PCIFN (0)->
950     error.io.pci.retry-to-u@PCIFN/PCIFN;
952 prop error.io.pci.dpdata-dr-u@PCIFN/PCIFN (3)->
953     ereport.io.pci.sec-dpe@PCIFN,
954     ereport.io.pci.sec-mdpe@PCIFN,
955     error.io.pci.dpdata-dr-u@PCIFN;
958  * Request with data parity error can propagate downstream. A hardened
959  * leaf driver should handle the error, but may or may not be able to
960  * avoid service impact. We handle to two cases separately. If there is
961  * service impact we will fail immediately, if not we will feed into a SERD
962  * engine.
964  * for PCI/X (but not PCI) the split write can optionally be forwarded across
965  * the bridge, maintaining bad parity/ecc
967  * if there is a dpe on a retry on a delayed write, we don't send another
968  * retry, and eventually the dto timer will expire
969  */
970 prop error.io.pci.f-dpe-d@PCIFN (1)->
971     error.io.pci.dpdata-pw-d@PCIFN,
972     error.io.pci.dpdata-dw-d@PCIFN,
973     error.io.pci.dpdata-dr-d@PCIFN;
975 prop error.io.pci.f-dpe-d@PCIFN (1)->
976     error.io.pci.f-source-dpdata-u@PCIFN;
978 prop error.io.pci.deg-dpe-d@PCIFN (1)->
979     error.io.pci.dpdata-pw-d@PCIFN,
980     error.io.pci.dpdata-dw-d@PCIFN,
981     error.io.pci.dpdata-dr-d@PCIFN;
983 prop error.io.pci.deg-dpe-d@PCIFN (1)->
984     error.io.pci.deg-source-dpdata-u@PCIFN;
986 prop error.io.pci.nf-dpe-d@PCIFN (1)->
987     error.io.pci.dpdata-pw-d@PCIFN,
988     error.io.pci.dpdata-dw-d@PCIFN,
989     error.io.pci.dpdata-dr-d@PCIFN;
991 prop error.io.pci.nf-dpe-d@PCIFN (1)->
992     error.io.pci.nf-source-dpdata-u@PCIFN;
994 prop error.io.pci.dpdata-pw-d@PCIFN (2)->
995     error.io.pci.perr-pw-u@PCIFN,
996     error.io.pci.dpdata-pw-fwd-d@PCIFN;
998 prop error.io.pci.dpdata-pw-fwd-d@PCIFN { IS_LEAF } (1)->
999     error.io.pci.source-perr-u@PCIFN;
1001 prop error.io.pci.dpdata-pw-fwd-d@PCIFN { IS_LEAF } (0)->
1002     ereport.io.pci.dpe@PCIFN;
1004 prop error.io.pci.dpdata-pw-fwd-d@PCIFN { IS_BDG } (2)->
1005     ereport.io.pci.dpe@PCIFN,
1006     ereport.io.pci.sec-mdpe@PCIFN;
1008 prop error.io.pci.dpdata-pw-fwd-d@PCIFN (1)->
1009     error.io.pci.dpdata-pw-fwd-d@PCIFN/PCIFNHZ;
1011 prop error.io.pci.dpdata-dw-d@PCIFN (3)->
1012     error.io.pci.perr-dw-u@PCIFN,
1013     error.io.pci.target-mdpe-d@PCIFN,
1014     error.io.pci.dpdata-dw-fwd-d@PCIFN;
1016 prop error.io.pci.dpdata-dw-d@PCIFN { IS_BDG } (1)->
1017     ereport.io.pci.dpe@PCIFN;
1019 prop error.io.pci.dpdata-dw-d@PCIFN { IS_BDG } (0)->
1020     error.io.pci.retry-to-d@PCIFN;
1022 prop error.io.pci.dpdata-dw-fwd-d@PCIFN { IS_LEAF } (1)->
1023     error.io.pci.source-perr-u@PCIFN;
1025 prop error.io.pci.dpdata-dw-fwd-d@PCIFN { IS_LEAF } (0)->
1026     ereport.io.pci.dpe@PCIFN;
1028 prop error.io.pci.dpdata-dw-fwd-d@PCIFN { IS_BDG } (0)->
1029     ereport.io.pci.dpe@PCIFN,
1030     ereport.io.pci.sec-mdpe@PCIFN;
1032 prop error.io.pci.dpdata-dw-fwd-d@PCIFN (0)->
1033     error.io.pci.dpdata-dw-fwd-d@PCIFN/PCIFNHZ;
1035 prop error.io.pci.dpdata-dr-d@PCIFN (2)->
1036     error.io.pci.dpdata-dr-fwd-d@PCIFN,
1037     error.io.pci.perr-dr-u@PCIFN;
1039 prop error.io.pci.dpdata-dr-fwd-d@PCIFN { IS_LEAF } (1)->
1040     error.io.pci.source-perr-u@PCIFN;
1042 prop error.io.pci.dpdata-dr-fwd-d@PCIFN { IS_LEAF } (0)->
1043     ereport.io.pci.dpe@PCIFN,
1044     ereport.io.pci.mdpe@PCIFN;
1046 prop error.io.pci.dpdata-dr-fwd-d@PCIFN { IS_BDG } (2)->
1047     ereport.io.pci.dpe@PCIFN,
1048     ereport.io.pci.mdpe@PCIFN;
1050 prop error.io.pci.dpdata-dr-fwd-d@PCIFN (1)->
1051     error.io.pci.dpdata-dr-fwd-d@PCIFN/PCIFNHZ;
1054  * delayed read/write retry timeout can cause dto at a bridge
1055  */
1056 prop error.io.pci.retry-to-u@PCIFN/PCIFN (0)->
1057     error.io.pci.retry-to-u@PCIFN;
1059 prop error.io.pci.retry-to-u@PCIFN/PCIFN (1)->
1060     ereport.io.pci.dto@PCIFN;
1062 prop error.io.pci.retry-to-u@PCIFN/PCIFN (0)->
1063     error.io.pci.serr-u@PCIFN;
1065 prop error.io.pci.retry-to-d@PCIFN (0)->
1066     error.io.pci.retry-to-d@PCIFN/PCIFN;
1068 prop error.io.pci.retry-to-d@PCIFN { IS_BDG } (1)->
1069     ereport.io.pci.dto@PCIFN;
1071 prop error.io.pci.retry-to-d@PCIFN { IS_BDG } (0)->
1072     error.io.pci.serr-u@PCIFN;
1075  * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1076  * source- propagations.
1077  * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1078  */
1079 event error.io.pci.source-ape-u@PCIFN/PCIFN;
1080 event error.io.pcix.source-scpe-u@PCIFN/PCIFN;
1082 prop error.io.pci.source-ape-u@PCIFN (1)->
1083     error.io.pci.source-ape-u@PCIFN/PCIFNHZ;
1084     
1085 prop error.io.pcix.source-scpe-u@PCIFN (1)->
1086     error.io.pcix.source-scpe-u@PCIFN/PCIFNHZ;
1087     
1089  * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1090  * Handling of leaf driver detected internal errors. Use serd engine if
1091  * no service impact - otherwise fail immediately
1092  * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1093  */
1094 event ereport.io.device.inval_state@PCIFN{within(5s)};
1095 event ereport.io.device.no_response@PCIFN{within(5s)};
1096 event ereport.io.device.stall@PCIFN{within(5s)};
1097 event ereport.io.device.badint_limit@PCIFN{within(5s)};
1098 event ereport.io.device.intern_corr@PCIFN{within(5s)};
1099 event ereport.io.device.intern_uncorr@PCIFN{within(5s)};
1101 prop error.io.service.restored@PCIFN { IS_LEAF } (1)->
1102     ereport.io.service.lost@PCIFN,
1103     ereport.io.service.degraded@PCIFN;
1105 prop error.io.service.restored@PCIFN { IS_LEAF } (1)->
1106     ereport.io.service.restored@PCIFN;
1108 prop error.io.device.f-device@PCIFN { IS_LEAF } (1)->
1109     ereport.io.device.inval_state@PCIFN,
1110     ereport.io.device.no_response@PCIFN,
1111     ereport.io.device.stall@PCIFN,
1112     ereport.io.device.badint_limit@PCIFN,
1113     ereport.io.device.intern_corr@PCIFN,
1114     ereport.io.device.intern_uncorr@PCIFN;
1116 prop error.io.device.f-device@PCIFN { IS_LEAF } (1)->
1117     ereport.io.service.lost@PCIFN;
1119 prop error.io.device.deg-device@PCIFN { IS_LEAF } (1)->
1120     ereport.io.device.inval_state@PCIFN,
1121     ereport.io.device.no_response@PCIFN,
1122     ereport.io.device.stall@PCIFN,
1123     ereport.io.device.badint_limit@PCIFN,
1124     ereport.io.device.intern_corr@PCIFN,
1125     ereport.io.device.intern_uncorr@PCIFN;
1127 prop error.io.device.deg-device@PCIFN { IS_LEAF } (1)->
1128     ereport.io.service.degraded@PCIFN;
1130 prop error.io.device.nf-device@PCIFN { IS_LEAF } (1)->
1131     ereport.io.device.inval_state@PCIFN,
1132     ereport.io.device.no_response@PCIFN,
1133     ereport.io.device.stall@PCIFN,
1134     ereport.io.device.badint_limit@PCIFN,
1135     ereport.io.device.intern_corr@PCIFN,
1136     ereport.io.device.intern_uncorr@PCIFN;
1138 prop error.io.device.nf-device@PCIFN { IS_LEAF } (1)->
1139     ereport.io.service.unaffected@PCIFN,
1140     error.io.service.restored@PCIFN;
1143  * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1144  * stub unused ereports
1145  * - ignore rx-spl as we can't tell what message it was (and we should have
1146  *   diagnosed the problem anyway from standard pci ereports)
1147  * - ignore sec-spl-or/sec-spl-dly as these aren't really faults (tuning info)
1148  * - ignore unex-spl/sec-unex-spl
1149  * - ignore ecc.ue ereports (we get everything we need from dpe/mdpe)
1150  * - ignore ecc.ce ereports for now (could do serd on these)
1151  * - ignore nr ereport
1152  * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1153  */
1155 event ereport.io.pci.nr@PCIFN{within(5s)};
1156 event ereport.io.pcix.unex-spl@PCIFN{within(5s)};
1157 event ereport.io.pcix.rx-spl@PCIFN{within(5s)};
1158 event ereport.io.pcix.sec-unex-spl@PCIFN{within(5s)};
1159 event ereport.io.pcix.sec-spl-or@PCIFN{within(5s)};
1160 event ereport.io.pcix.sec-spl-dly@PCIFN{within(5s)};
1161 event ereport.io.pcix.ecc.ce-addr@PCIFN{within(5s)};
1162 event ereport.io.pcix.ecc.ce-attr@PCIFN{within(5s)};
1163 event ereport.io.pcix.ecc.ce-data@PCIFN{within(5s)};
1164 event ereport.io.pcix.ecc.ue-addr@PCIFN{within(5s)};
1165 event ereport.io.pcix.ecc.ue-attr@PCIFN{within(5s)};
1166 event ereport.io.pcix.ecc.ue-data@PCIFN{within(5s)};
1167 event ereport.io.pcix.s-ce@PCIFN{within(5s)};
1168 event ereport.io.pcix.s-ue@PCIFN{within(5s)};
1169 event ereport.io.pcix.sec-ecc.ce-addr@PCIFN{within(5s)};
1170 event ereport.io.pcix.sec-ecc.ce-attr@PCIFN{within(5s)};
1171 event ereport.io.pcix.sec-ecc.ce-data@PCIFN{within(5s)};
1172 event ereport.io.pcix.sec-ecc.ue-addr@PCIFN{within(5s)};
1173 event ereport.io.pcix.sec-ecc.ue-attr@PCIFN{within(5s)};
1174 event ereport.io.pcix.sec-ecc.ue-data@PCIFN{within(5s)};
1175 event ereport.io.pcix.sec-s-ce@PCIFN{within(5s)};
1176 event ereport.io.pcix.sec-s-ue@PCIFN{within(5s)};
1178 event upset.io.pcix.discard@PCIFN;
1180 prop upset.io.pcix.discard@PCIFN (1)->
1181     ereport.io.pci.nr@PCIFN,
1182     ereport.io.pcix.rx-spl@PCIFN,
1183     ereport.io.pcix.unex-spl@PCIFN,
1184     ereport.io.pcix.sec-unex-spl@PCIFN,
1185     ereport.io.pcix.sec-spl-or@PCIFN,
1186     ereport.io.pcix.sec-spl-dly@PCIFN,
1187     ereport.io.pcix.ecc.ce-addr@PCIFN,
1188     ereport.io.pcix.ecc.ce-attr@PCIFN,
1189     ereport.io.pcix.ecc.ce-data@PCIFN,
1190     ereport.io.pcix.ecc.ue-addr@PCIFN,
1191     ereport.io.pcix.ecc.ue-attr@PCIFN,
1192     ereport.io.pcix.ecc.ue-data@PCIFN,
1193     ereport.io.pcix.s-ce@PCIFN,
1194     ereport.io.pcix.s-ue@PCIFN,
1195     ereport.io.pcix.sec-ecc.ce-addr@PCIFN,
1196     ereport.io.pcix.sec-ecc.ce-attr@PCIFN,
1197     ereport.io.pcix.sec-ecc.ce-data@PCIFN,
1198     ereport.io.pcix.sec-ecc.ue-addr@PCIFN,
1199     ereport.io.pcix.sec-ecc.ue-attr@PCIFN,
1200     ereport.io.pcix.sec-ecc.ue-data@PCIFN,
1201     ereport.io.pcix.sec-s-ce@PCIFN,
1202     ereport.io.pcix.sec-s-ue@PCIFN;