xref: /titanic_44/usr/src/cmd/fm/eversholt/files/common/pci.esc (revision a576ab5b6e08c47732b3dedca9eaa8a8cbb85720)
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 */
21/*
22 * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
23 * Use is subject to license terms.
24 */
25
26#pragma ident	"%Z%%M%	%I%	%E% SMI"
27
28#pragma dictionary "PCI"
29
30#include <fm/topo_hc.h>
31
32#define PCI_DEV_FIT 1000
33#define PCI_BUS_FIT 500
34
35/*
36 * SERD parameters.
37 *
38 * Nonfatal dpe errors have to be recovered by the hardened driver which may
39 * cause intermittant performance/responsiveness problems, so we have tighter
40 * serd parameters for these. These are most likely errors in buffers/caches
41 * within devices and bridges, so use similar rates to cpu data cache parity
42 * errors.
43 *
44 * We will be more conservative about nonfatal internal errors reported
45 * by the driver.
46 */
47#define NONFATAL_COUNT 6
48#define NONFATAL_TIME 2h
49#define NONFATAL_DPE_U_COUNT 3
50#define NONFATAL_DPE_U_TIME 168h
51#define NONFATAL_DPE_D_COUNT 3
52#define NONFATAL_DPE_D_TIME 168h
53
54#define	IS_LEAF \
55	(confprop_defined(asru(pcibus/pcidev/pcifn), TOPO_PCI_CLASS) && \
56	confprop(asru(pcibus/pcidev/pcifn), TOPO_PCI_CLASS) != "60400" && \
57	confprop(asru(pcibus/pcidev/pcifn), TOPO_PCI_CLASS) != "60401")
58
59#define	IS_BDG \
60	(confprop(asru(pcibus/pcidev/pcifn), TOPO_PCI_CLASS) == "60400" || \
61	confprop(asru(pcibus/pcidev/pcifn), TOPO_PCI_CLASS) == "60401")
62
63#define	FD_IS_LEAF \
64	(confprop_defined(asru(pcibus/pcidev[fromdev]/pcifn), \
65	TOPO_PCI_CLASS) && \
66	confprop(asru(pcibus/pcidev[fromdev]/pcifn), TOPO_PCI_CLASS) != \
67	"60400" && \
68	confprop(asru(pcibus/pcidev[fromdev]/pcifn), TOPO_PCI_CLASS) != "60401")
69
70/*
71 * note general rule for errors is that for upstream propagations
72 * @pcibus/pcidev/pcifn is the sending device while  for downstream
73 * propagations it is the receiving device.
74 */
75
76asru pcibus/pcidev/pcifn;
77fru pcibus/pcidev;
78
79event fault.io.pci.device-interr@pcibus/pcidev/pcifn,
80        FITrate=PCI_DEV_FIT, FRU=pcibus/pcidev, ASRU=pcibus/pcidev/pcifn;
81
82event fault.io.pci.device-invreq@pcibus/pcidev/pcifn,
83        FITrate=PCI_DEV_FIT, FRU=pcibus/pcidev, ASRU=pcibus/pcidev/pcifn;
84
85event fault.io.pci.device-noresp@pcibus/pcidev/pcifn,
86        FITrate=PCI_DEV_FIT, FRU=pcibus/pcidev, ASRU=pcibus/pcidev/pcifn;
87
88/*
89 * ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
90 * A faulty hostbridge may cause:
91 * ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
92 *  - nr-pw-d:	the device not to respond to an upstream request
93 *  - nr-drw-d:	the device not to respond to an upstream request
94 *  - ta-pw-d:	the device to send a target abort to an upstream request
95 *  - ta-drw-d:	the device to send a target abort to an upstream request
96 *  - serr-u:	the device to report itself in error
97 *  - badreq-pw-d:a bad downstream request - not parity error (may cause target
98 * 		to target abort or master abort)
99 *  - badreq-drw-d:a bad downstream request - not parity error (may cause
100 * 		target to target abort or master abort)
101 *  - ape-d:	address/parity to get corrupted during downstream transmission
102 *  - scpe-d:	split completion to get corrupted during downstream transmission
103 *  - dpe-d:	the device to transfer bad data and/or bad parity downstream
104 *  - retry-to-d:	the device to exceed the set timeout for a delayed
105 *			transaction retry.
106 */
107#define	PCI_TO_HB pcibus/pcidev<todev>/pcifn<> {fromdev != 32 && todev == 32}
108#define	PCI_FROM_HB pcibus/pcidev<todev>/pcifn<> {fromdev == 32 && todev != 32}
109
110event error.io.pci.retry-to-d@pcibus/pcidev/pcifn;
111event error.io.pci.nr-pw-d@pcibus/pcidev/pcifn;
112event error.io.pci.nr-drw-d@pcibus/pcidev/pcifn;
113event error.io.pci.ta-pw-d@pcibus/pcidev/pcifn;
114event error.io.pci.ta-drw-d@pcibus/pcidev/pcifn;
115event error.io.pci.badreq-pw-d@pcibus/pcidev/pcifn;
116event error.io.pci.badreq-drw-d@pcibus/pcidev/pcifn;
117event error.io.pci.f-dpe-d@pcibus/pcidev/pcifn;
118event error.io.pci.nf-dpe-d@pcibus/pcidev/pcifn;
119event error.io.pci.nonfatal-dpe-d@pcibus/pcidev/pcifn;
120event error.io.pci.ape-d@pcibus/pcidev/pcifn;
121event error.io.pci.ape-u@pcibus/pcidev/pcifn;
122event error.io.pci.f-dpdata-dw-d@pcibus/pcidev/pcifn;
123event error.io.pci.nf-dpdata-dw-d@pcibus/pcidev/pcifn;
124event error.io.pci.f-dpdata-pw-d@pcibus/pcidev/pcifn;
125event error.io.pci.nf-dpdata-pw-d@pcibus/pcidev/pcifn;
126event error.io.pci.f-dpdata-dr-d@pcibus/pcidev/pcifn;
127event error.io.pci.nf-dpdata-dr-d@pcibus/pcidev/pcifn;
128event error.io.pci.dpdata-pw-u@pcibus/pcidev/pcifn;
129event error.io.pci.dpdata-dw-u@pcibus/pcidev/pcifn;
130event error.io.pci.dpdata-dr-u@pcibus/pcidev/pcifn;
131event error.io.pci.ta-u@pcibus/pcidev/pcifn;
132event error.io.pci.ma-u@pcibus/pcidev/pcifn;
133event error.io.pci.perr-dw-u@pcibus/pcidev/pcifn;
134event error.io.pci.perr-pw-u@pcibus/pcidev/pcifn;
135event error.io.pci.perr-dr-u@pcibus/pcidev/pcifn;
136event error.io.pci.badreq-drw-u@pcibus/pcidev/pcifn;
137event error.io.pci.badreq-pw-u@pcibus/pcidev/pcifn;
138event error.io.pci.device-serr@pcibus/pcidev/pcifn;
139event error.io.pci.device-ta@pcibus/pcidev/pcifn;
140event error.io.pci.device-par@pcibus/pcidev/pcifn;
141event error.io.pci.serr-u@pcibus/pcidev/pcifn;
142event error.io.pcix.scpe-d@pcibus/pcidev/pcifn;
143event error.io.pcix.scpe-u@pcibus/pcidev/pcifn;
144event error.io.pcix.spl-comp-ma-u@pcibus/pcidev/pcifn;
145event error.io.pcix.spl-comp-ta-u@pcibus/pcidev/pcifn;
146event error.io.pcix.spl-comp-ma-d@pcibus/pcidev/pcifn;
147event error.io.pcix.spl-comp-ta-d@pcibus/pcidev/pcifn;
148
149event ereport.io.pci.ma@pcibus/pcidev/pcifn{within(5s)};
150event ereport.io.pci.rta@pcibus/pcidev/pcifn{within(5s)};
151event ereport.io.pci.mdpe@pcibus/pcidev/pcifn{within(5s)};
152event ereport.io.pci.sta@pcibus/pcidev/pcifn{within(5s)};
153event ereport.io.pci.sserr@pcibus/pcidev/pcifn{within(5s)};
154event ereport.io.pci.dpe@pcibus/pcidev/pcifn{within(5s)};
155event ereport.io.pci.target-mdpe@pcibus/pcidev/pcifn{within(5s)};
156event ereport.io.pci.target-rta@pcibus/pcidev/pcifn{within(5s)};
157event ereport.io.pci.target-ma@pcibus/pcidev/pcifn{within(5s)};
158event ereport.io.pcix.discard@pcibus/pcidev/pcifn{within(5s)};
159
160prop fault.io.pci.device-noresp@pcibus/pcidev[fromdev]/pcifn (0)->
161    error.io.pci.nr-pw-d@PCI_FROM_HB,
162    error.io.pci.nr-drw-d@PCI_FROM_HB,
163    error.io.pci.retry-to-d@PCI_FROM_HB;
164
165prop fault.io.pci.device-invreq@pcibus/pcidev[fromdev]/pcifn (0)->
166    error.io.pci.badreq-pw-d@PCI_FROM_HB,
167    error.io.pci.badreq-drw-d@PCI_FROM_HB;
168
169prop fault.io.pci.device-interr@pcibus/pcidev/pcifn (0)->
170    error.io.pci.device-par@pcibus/pcidev/pcifn,
171    error.io.pci.device-ta@pcibus/pcidev/pcifn,
172    error.io.pci.device-serr@pcibus/pcidev/pcifn;
173
174prop error.io.pci.device-par@pcibus/pcidev[fromdev]/pcifn (1)->
175    error.io.pci.f-dpe-d@PCI_FROM_HB,
176    error.io.pci.nf-dpe-d@PCI_FROM_HB,
177    error.io.pcix.scpe-d@PCI_FROM_HB,
178    error.io.pci.ape-d@PCI_FROM_HB;
179
180prop error.io.pci.device-ta@pcibus/pcidev[fromdev]/pcifn (1)->
181    error.io.pci.ta-pw-d@PCI_FROM_HB,
182    error.io.pci.ta-drw-d@PCI_FROM_HB;
183
184prop error.io.pci.device-ta@pcibus/pcidev[fromdev]/pcifn (1)->
185    ereport.io.pci.sta@pcibus/pcidev<todev>/pcifn {
186	todev == fromdev && fromdev == 32 };
187
188prop error.io.pci.device-serr@pcibus/pcidev/pcifn (2)->
189    error.io.pci.serr-u@pcibus/pcidev/pcifn,
190    ereport.io.pci.sserr@pcibus/pcidev/pcifn;
191
192prop error.io.pci.f-dpe-d@pcibus/pcidev/pcifn (1)->
193    error.io.pci.f-dpdata-pw-d@pcibus/pcidev/pcifn,
194    error.io.pci.f-dpdata-dw-d@pcibus/pcidev/pcifn,
195    error.io.pci.f-dpdata-dr-d@pcibus/pcidev/pcifn;
196
197prop error.io.pci.nonfatal-dpe-d@pcibus/pcidev/pcifn (1)->
198    error.io.pci.nf-dpdata-pw-d@pcibus/pcidev/pcifn,
199    error.io.pci.nf-dpdata-dw-d@pcibus/pcidev/pcifn,
200    error.io.pci.nf-dpdata-dr-d@pcibus/pcidev/pcifn;
201
202/*
203 * ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
204 * ereport generation rules for hostbridge
205 * ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
206 */
207prop error.io.pci.dpdata-pw-u@pcibus/pcidev[fromdev]/pcifn (1)->
208    ereport.io.pci.dpe@PCI_TO_HB;
209
210prop error.io.pci.dpdata-dw-u@pcibus/pcidev[fromdev]/pcifn (1)->
211    ereport.io.pci.dpe@PCI_TO_HB;
212
213prop error.io.pci.dpdata-dr-u@pcibus/pcidev[fromdev]/pcifn (2)->
214    ereport.io.pci.mdpe@PCI_TO_HB,
215    ereport.io.pci.dpe@PCI_TO_HB;
216
217prop error.io.pci.ape-u@pcibus/pcidev[fromdev]/pcifn (3)->
218    ereport.io.pci.dpe@PCI_TO_HB,
219    error.io.pci.serr-u@PCI_TO_HB,
220    ereport.io.pci.sserr@PCI_TO_HB;
221
222prop error.io.pci.ape-u@pcibus/pcidev[fromdev]/pcifn (0)->
223    ereport.io.pci.sta@PCI_TO_HB;
224
225prop error.io.pci.ma-u@pcibus/pcidev[fromdev]/pcifn (1)->
226    ereport.io.pci.ma@PCI_TO_HB;
227
228prop error.io.pci.ta-u@pcibus/pcidev[fromdev]/pcifn (1)->
229    ereport.io.pci.rta@PCI_TO_HB;
230
231prop error.io.pci.perr-dw-u@pcibus/pcidev[fromdev]/pcifn (1)->
232    ereport.io.pci.mdpe@PCI_TO_HB;
233
234prop error.io.pci.perr-pw-u@pcibus/pcidev[fromdev]/pcifn (1)->
235    ereport.io.pci.mdpe@PCI_TO_HB;
236
237prop error.io.pci.badreq-drw-u@pcibus/pcidev[fromdev]/pcifn (0)->
238    ereport.io.pci.sta@PCI_TO_HB;
239
240prop error.io.pci.badreq-pw-u@pcibus/pcidev[fromdev]/pcifn (0)->
241    ereport.io.pci.sta@PCI_TO_HB;
242
243prop error.io.pcix.scpe-u@pcibus/pcidev/pcifn (1)->
244    error.io.pcix.spl-comp-ma-d@pcibus/pcidev/pcifn,
245    error.io.pcix.spl-comp-ta-d@pcibus/pcidev/pcifn;
246
247prop error.io.pcix.scpe-u@pcibus/pcidev[fromdev]/pcifn (0)->
248    ereport.io.pci.dpe@PCI_TO_HB,
249    error.io.pci.serr-u@PCI_TO_HB,
250    ereport.io.pci.sserr@PCI_TO_HB,
251    ereport.io.pci.sta@PCI_TO_HB;
252
253prop error.io.pcix.spl-comp-ma-u@pcibus/pcidev[fromdev]/pcifn (3)->
254    ereport.io.pcix.discard@PCI_TO_HB,
255    error.io.pci.serr-u@PCI_TO_HB,
256    ereport.io.pci.sserr@PCI_TO_HB;
257
258prop error.io.pcix.spl-comp-ta-u@pcibus/pcidev[fromdev]/pcifn (3)->
259    ereport.io.pcix.discard@PCI_TO_HB,
260    error.io.pci.serr-u@PCI_TO_HB,
261    ereport.io.pci.sserr@PCI_TO_HB;
262
263/*
264 * ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
265 * A faulty PCI leaf device or pci-pci bridge may cause:
266 * ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
267 *  - nr-pw-u:		the device not to respond to a valid downstream request
268 *  - nr-drw-u:		the device not to respond to a valid downstream request
269 *  - ta-pw-u:		the device responds with a ta to a valid downstream
270 *			request
271 *  - ta-drw-u:		the device responds with a ta to a valid downstream
272 *			request
273 *  - serr-u:		the device to report itself in error
274 *  - badreq-pw-u:	a bad upstream request (may cause target to target
275 *			abort or master abort)
276 *  - badreq-drw-u:	a bad upstream request (may cause target to target
277 *			abort or master abort)
278 *  - ape-u:		the transfer of bad address/parity upstream.
279 *  - scpe-u:		the transfer of bad split completion upstream.
280 *  - dpe-u:		the device to deliver bad data/parity upstream.
281 *  - retry-to-u:	the device to exceed the set timeout for a delayed
282 *			transaction retry.
283 *
284 * A faulty PCI-X leaf device or bridge may also cause:
285 *
286 *  - tx-oor:		the device sends a byte count larger than the completers
287 *			address range.
288 *  - rx-unex-sc:	the device recieved a split completion with a tag
289 * 			which does not match any outstanding transaction.
290 */
291
292#define	PCI_NOT_HB pcibus/pcidev[fromdev]/pcifn {fromdev != 32}
293
294event error.io.pci.retry-to-u@pcibus/pcidev/pcifn;
295event error.io.pci.nr-pw-u@pcibus/pcidev/pcifn;
296event error.io.pci.nr-drw-u@pcibus/pcidev/pcifn;
297event error.io.pci.ta-pw-u@pcibus/pcidev/pcifn;
298event error.io.pci.ta-drw-u@pcibus/pcidev/pcifn;
299event error.io.pci.f-dpe-u@pcibus/pcidev/pcifn;
300event error.io.pci.nf-dpe-u@pcibus/pcidev/pcifn;
301event error.io.pci.nonfatal-dpe-u@pcibus/pcidev/pcifn;
302event error.io.pci.flt-f-dpdata-pw-u@pcibus/pcidev/pcifn;
303event error.io.pci.flt-nf-dpdata-pw-u@pcibus/pcidev/pcifn;
304event error.io.pci.flt-f-dpdata-dw-u@pcibus/pcidev/pcifn;
305event error.io.pci.flt-nf-dpdata-dw-u@pcibus/pcidev/pcifn;
306event error.io.pci.flt-f-dpdata-dr-u@pcibus/pcidev/pcifn;
307event error.io.pci.flt-nf-dpdata-dr-u@pcibus/pcidev/pcifn;
308event error.io.pci.perr-d@pcibus/pcidev/pcifn;
309event error.io.pci.target-mdpe-d@pcibus/pcidev/pcifn;
310event error.io.pci.target-mdpe-d@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
311event error.io.pci.target-rta-d@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
312event error.io.pci.target-ma-d@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
313event error.io.pcix.tx-oor@pcibus/pcidev/pcifn;
314event error.io.pcix.rx-unex-sc@pcibus/pcidev/pcifn;
315event error.io.pci.source-nf-dpdata-w-u@pcibus/pcidev/pcifn;
316event error.io.pci.source-f-dpdata-w-u@pcibus/pcidev/pcifn;
317event error.io.pci.source-nf-dpdata-r-u@pcibus/pcidev/pcifn;
318event error.io.pci.source-f-dpdata-r-u@pcibus/pcidev/pcifn;
319event error.io.device.nf-device@pcibus/pcidev/pcifn;
320event error.io.device.f-device@pcibus/pcidev/pcifn;
321
322event ereport.io.pcix.oor@pcibus/pcidev/pcifn{within(5s)};
323event ereport.io.pcix.unex-sc@pcibus/pcidev/pcifn{within(5s)};
324
325prop fault.io.pci.device-noresp@pcibus/pcidev[fromdev]/pcifn (0)->
326    error.io.pci.nr-pw-u@PCI_NOT_HB,
327    error.io.pci.nr-drw-u@PCI_NOT_HB,
328    error.io.pci.retry-to-u@PCI_NOT_HB;
329
330prop fault.io.pci.device-interr@pcibus/pcidev[fromdev]/pcifn (0)->
331    error.io.pci.ta-pw-u@PCI_NOT_HB,
332    error.io.pci.ta-drw-u@PCI_NOT_HB,
333    error.io.pci.serr-u@PCI_NOT_HB,
334    error.io.pci.ape-u@PCI_NOT_HB,
335    error.io.pci.f-dpe-u@PCI_NOT_HB,
336    error.io.pci.nf-dpe-u@PCI_NOT_HB,
337    error.io.device.f-device@PCI_NOT_HB,
338    error.io.device.nf-device@PCI_NOT_HB,
339    error.io.pcix.scpe-u@PCI_NOT_HB,
340    error.io.pcix.tx-oor@PCI_NOT_HB,
341    error.io.pcix.rx-unex-sc@PCI_NOT_HB;
342
343prop fault.io.pci.device-invreq@pcibus/pcidev[fromdev]/pcifn {FD_IS_LEAF} (0)->
344    error.io.pci.badreq-drw-u@PCI_NOT_HB,
345    error.io.pci.badreq-pw-u@PCI_NOT_HB;
346
347prop error.io.pcix.tx-oor@pcibus/pcidev/pcifn (1)->
348    ereport.io.pcix.oor@pcibus/pcidev/pcifn;
349
350prop error.io.pcix.rx-unex-sc@pcibus/pcidev[fromdev]/pcifn (1)->
351    ereport.io.pcix.unex-sc@pcibus/pcidev<todev>/pcifn<> {fromdev != todev};
352
353prop error.io.pci.f-dpe-u@pcibus/pcidev/pcifn (1)->
354    error.io.pci.flt-f-dpdata-pw-u@pcibus/pcidev/pcifn,
355    error.io.pci.flt-f-dpdata-dw-u@pcibus/pcidev/pcifn,
356    error.io.pci.flt-f-dpdata-dr-u@pcibus/pcidev/pcifn;
357
358prop error.io.pci.flt-f-dpdata-pw-u@pcibus/pcidev/pcifn (2)->
359    error.io.pci.source-f-dpdata-w-u@pcibus/pcidev/pcifn,
360    error.io.pci.dpdata-pw-u@pcibus/pcidev/pcifn;
361
362prop error.io.pci.flt-f-dpdata-pw-u@pcibus/pcidev/pcifn { IS_BDG } (1)->
363    error.io.pci.serr-u@pcibus/pcidev/pcifn;
364
365prop error.io.pci.flt-f-dpdata-dw-u@pcibus/pcidev/pcifn (3)->
366    error.io.pci.source-f-dpdata-w-u@pcibus/pcidev/pcifn,
367    error.io.pci.perr-d@pcibus/pcidev/pcifn,
368    error.io.pci.dpdata-dw-u@pcibus/pcidev/pcifn;
369
370prop error.io.pci.flt-f-dpdata-dr-u@pcibus/pcidev/pcifn (2)->
371    error.io.pci.source-f-dpdata-r-u@pcibus/pcidev/pcifn,
372    error.io.pci.dpdata-dr-u@pcibus/pcidev/pcifn;
373
374prop error.io.pci.flt-f-dpdata-dr-u@pcibus/pcidev/pcifn (1)->
375    error.io.pci.target-mdpe-d@pcibus/pcidev/pcifn;
376
377prop error.io.pci.nonfatal-dpe-u@pcibus/pcidev/pcifn (1)->
378    error.io.pci.flt-nf-dpdata-pw-u@pcibus/pcidev/pcifn,
379    error.io.pci.flt-nf-dpdata-dw-u@pcibus/pcidev/pcifn,
380    error.io.pci.flt-nf-dpdata-dr-u@pcibus/pcidev/pcifn;
381
382prop error.io.pci.flt-nf-dpdata-pw-u@pcibus/pcidev/pcifn (2)->
383    error.io.pci.source-nf-dpdata-w-u@pcibus/pcidev/pcifn,
384    error.io.pci.dpdata-pw-u@pcibus/pcidev/pcifn;
385
386prop error.io.pci.flt-nf-dpdata-pw-u@pcibus/pcidev/pcifn { IS_BDG } (1)->
387    error.io.pci.serr-u@pcibus/pcidev/pcifn;
388
389prop error.io.pci.flt-nf-dpdata-dw-u@pcibus/pcidev/pcifn (3)->
390    error.io.pci.source-nf-dpdata-w-u@pcibus/pcidev/pcifn,
391    error.io.pci.perr-d@pcibus/pcidev/pcifn,
392    error.io.pci.dpdata-dw-u@pcibus/pcidev/pcifn;
393
394prop error.io.pci.flt-nf-dpdata-dr-u@pcibus/pcidev/pcifn (2)->
395    error.io.pci.source-nf-dpdata-r-u@pcibus/pcidev/pcifn,
396    error.io.pci.dpdata-dr-u@pcibus/pcidev/pcifn;
397
398prop error.io.pci.flt-nf-dpdata-dr-u@pcibus/pcidev/pcifn (1)->
399    error.io.pci.target-mdpe-d@pcibus/pcidev/pcifn;
400
401/*
402 * ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
403 * A faulty pci-pci bridge may also cause
404 * ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
405 *  - nr-pw-d:		the device not to respond to a valid upstream request
406 *  - nr-drw-d:		the device not to respond to a valid upstream request
407 *  - ta-pw-d:		the device responds with a ta to a valid upstream
408 *			request
409 *  - ta-drw-d:		the device responds with a ta to a valid upstream
410 *			request
411 *  - ape-d:	address/parity to get corrupted during downstream transmission.
412 *  - scpe-d:	split completion gets corrupted during downstream transmission.
413 *  - dpe-d:	data/parity to get corrupted during downstream transmission.
414 *  - retry-to-d:	the device to exceed the set timeout for a delayed
415 *			transaction retry.
416 */
417
418event error.io.pci.ape-d@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
419event error.io.pci.f-dpe-d@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
420event error.io.pci.nf-dpe-d@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
421event error.io.pci.retry-to-d@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
422event error.io.pci.nr-pw-d@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
423event error.io.pci.nr-drw-d@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
424event error.io.pci.ta-pw-d@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
425event error.io.pci.ta-drw-d@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
426event error.io.pcix.scpe-d@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
427
428prop fault.io.pci.device-noresp@pcibus/pcidev/pcifn (0)->
429    error.io.pci.nr-pw-d@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn,
430    error.io.pci.nr-drw-d@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn,
431    error.io.pci.retry-to-d@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
432
433prop fault.io.pci.device-interr@pcibus/pcidev/pcifn (0)->
434    error.io.pci.ta-pw-d@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn,
435    error.io.pci.ta-drw-d@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn,
436    error.io.pci.ape-d@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn,
437    error.io.pcix.scpe-d@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn,
438    error.io.pci.f-dpe-d@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn,
439    error.io.pci.nf-dpe-d@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
440
441/*
442 * ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
443 * A faulty PCI bus may cause:
444 * ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
445 *  - ape-d:	address/parity to get corrupted during downstream transmission.
446 *  - scpe-d:	split completion gets corrupted during downstream transmission.
447 *  - dpe-d:	data/parity to get corrupted during downstream transmission.
448 *  - ape-u:	address/parity to get corrupted during upstream transmission.
449 *  - dpe-u:	data/parity to get corrupted during read upstream transmission.
450 *  - scpe-u:	split completion to get corrupted during upstream transmission.
451 */
452
453fru pcibus;
454asru pcibus;
455
456event fault.io.pci.bus-linkerr@pcibus,
457        FITrate=PCI_BUS_FIT, FRU=pcibus, ASRU=pcibus;
458
459prop fault.io.pci.bus-linkerr@pcibus (0)->
460    error.io.pci.ape-d@pcibus/pcidev<todev>/pcifn { todev != 32},
461    error.io.pci.f-dpe-d@pcibus/pcidev<todev>/pcifn { todev != 32},
462    error.io.pci.nf-dpe-d@pcibus/pcidev<todev>/pcifn { todev != 32},
463    error.io.pci.ape-u@pcibus/pcidev<todev>/pcifn { todev != 32},
464    error.io.pci.f-dpe-u@pcibus/pcidev<todev>/pcifn { todev != 32},
465    error.io.pci.nf-dpe-u@pcibus/pcidev<todev>/pcifn { todev != 32},
466    error.io.pcix.scpe-d@pcibus/pcidev<todev>/pcifn { todev != 32},
467    error.io.pcix.scpe-u@pcibus/pcidev<todev>/pcifn { todev != 32},
468    error.io.pcix.tx-oor@pcibus/pcidev<todev>/pcifn { todev != 32},
469    error.io.pcix.rx-unex-sc@pcibus/pcidev<todev>/pcifn { todev != 32};
470
471/*
472 * ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
473 * recursive rules for pci-pci bridges
474 * ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
475 */
476
477event error.io.pci.serr-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
478event error.io.pci.perr-dw-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
479event error.io.pci.perr-pw-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
480event error.io.pci.perr-d@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
481event error.io.pci.dpdata-pw-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
482event error.io.pci.dpdata-dw-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
483event error.io.pci.dpdata-dr-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
484event error.io.pci.dpdata-pw-fwd-d@pcibus/pcidev/pcifn;
485event error.io.pci.dpdata-pw-fwd-d@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
486event error.io.pci.dpdata-dw-fwd-d@pcibus/pcidev/pcifn;
487event error.io.pci.dpdata-dw-fwd-d@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
488event error.io.pci.f-dpdata-dr-d@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
489event error.io.pci.nf-dpdata-dr-d@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
490event error.io.pci.leaf-ape-d@pcibus/pcidev/pcifn;
491event error.io.pci.ape-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
492event error.io.pci.source-ape-u@pcibus/pcidev/pcifn;
493event error.io.pci.source-f-perr-u@pcibus/pcidev/pcifn;
494event error.io.pci.source-nf-perr-u@pcibus/pcidev/pcifn;
495event error.io.pci.badreq-pw-d@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
496event error.io.pci.badreq-drw-d@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
497event error.io.pci.badreq-pw-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
498event error.io.pci.badreq-drw-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
499event error.io.pci.ta-d@pcibus/pcidev/pcifn;
500event error.io.pci.ta-d@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
501event error.io.pci.ta-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
502event error.io.pci.target-rta-d@pcibus/pcidev/pcifn;
503event error.io.pci.target-ma-d@pcibus/pcidev/pcifn;
504event error.io.pci.ta-pw-d@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
505event error.io.pci.ta-drw-d@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
506event error.io.pci.nr-pw-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
507event error.io.pci.ta-pw-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
508event error.io.pci.retry-to-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
509event error.io.pcix.scpe-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
510event error.io.pcix.source-scpe-u@pcibus/pcidev/pcifn;
511event error.io.pcix.spl-comp-ma-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
512event error.io.pcix.spl-comp-ta-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
513event error.io.pci.ma-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
514
515event ereport.io.pci.sec-ma@pcibus/pcidev/pcifn{within(5s)};
516event ereport.io.pci.sec-sta@pcibus/pcidev/pcifn{within(5s)};
517event ereport.io.pci.sec-rta@pcibus/pcidev/pcifn{within(5s)};
518event ereport.io.pci.sec-mdpe@pcibus/pcidev/pcifn{within(5s)};
519event ereport.io.pci.sec-dpe@pcibus/pcidev/pcifn{within(5s)};
520event ereport.io.pci.sec-rserr@pcibus/pcidev/pcifn{within(5s)};
521event ereport.io.pci.dto@pcibus/pcidev/pcifn{within(5s)};
522event ereport.io.pcix.sec-spl-dis@pcibus/pcidev/pcifn{within(5s)};
523event ereport.io.pcix.spl-dis@pcibus/pcidev/pcifn{within(5s)};
524
525/*
526 * SERR# can propagate upstream and may be seen by other devices on the bus
527 */
528prop error.io.pci.serr-u@pcibus/pcidev[fromdev]/pcifn (0)->
529    ereport.io.pci.sserr@pcibus/pcidev<todev>/pcifn<> {todev!=fromdev};
530
531prop error.io.pci.serr-u@pcibus/pcidev/pcifn { IS_BDG } (1)->
532    ereport.io.pci.sserr@pcibus/pcidev/pcifn;
533
534prop error.io.pci.serr-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn (2)->
535    ereport.io.pci.sec-rserr@pcibus/pcidev/pcifn,
536    error.io.pci.serr-u@pcibus/pcidev/pcifn;
537
538/*
539 * PERR# can propagate upstream for delayed writes. For posted writes
540 * it turns into an SERR#.
541 */
542prop error.io.pci.perr-dw-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn (2)->
543    ereport.io.pci.sec-mdpe@pcibus/pcidev/pcifn,
544    error.io.pci.perr-dw-u@pcibus/pcidev/pcifn;
545
546prop error.io.pci.perr-pw-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn (2)->
547    ereport.io.pci.sec-mdpe@pcibus/pcidev/pcifn,
548    error.io.pci.serr-u@pcibus/pcidev/pcifn;
549
550/*
551 * PERR# can propagate downstream (only for downstream dw parity error)
552 */
553prop error.io.pci.perr-d@pcibus/pcidev/pcifn { IS_LEAF } (0)->
554    ereport.io.pci.mdpe@pcibus/pcidev/pcifn;
555
556prop error.io.pci.perr-d@pcibus/pcidev/pcifn { IS_BDG } (1)->
557    ereport.io.pci.mdpe@pcibus/pcidev/pcifn;
558
559prop error.io.pci.perr-d@pcibus/pcidev/pcifn (1)->
560    error.io.pci.perr-d@pcibus/pcidev/pcifn/pcibus<>/pcidev<>/pcifn<>;
561
562/*
563 * downstream target ereports are for any descendant device
564 *
565 * A hostbridge driver may generate "target-" ereports when knowledge of the
566 * physical address associated with a fault allows the target device to be
567 * determined. This is not a requirement of the Diagnosis Engine, but can be
568 * valuable when available.
569 */
570prop error.io.pci.target-mdpe-d@pcibus/pcidev/pcifn (0)->
571    ereport.io.pci.target-mdpe@pcibus/pcidev/pcifn;
572
573prop error.io.pci.target-mdpe-d@pcibus/pcidev/pcifn (1)->
574    error.io.pci.target-mdpe-d@pcibus/pcidev/pcifn/pcibus<>/pcidev<>/pcifn<>;
575
576prop error.io.pci.target-rta-d@pcibus/pcidev/pcifn (0)->
577    ereport.io.pci.target-rta@pcibus/pcidev/pcifn;
578
579prop error.io.pci.target-rta-d@pcibus/pcidev/pcifn (1)->
580    error.io.pci.target-rta-d@pcibus/pcidev/pcifn/pcibus<>/pcidev<>/pcifn<>;
581
582prop error.io.pci.target-ma-d@pcibus/pcidev/pcifn (0)->
583    ereport.io.pci.target-ma@pcibus/pcidev/pcifn;
584
585prop error.io.pci.target-ma-d@pcibus/pcidev/pcifn (1)->
586    error.io.pci.target-ma-d@pcibus/pcidev/pcifn/pcibus<>/pcidev<>/pcifn<>;
587
588/*
589 * target aborts propagate upstream
590 */
591prop error.io.pci.ta-u@pcibus/pcidev/pcifn { IS_BDG } (1)->
592    ereport.io.pci.sta@pcibus/pcidev/pcifn;
593
594prop error.io.pci.ta-u@pcibus/pcidev/pcifn { IS_LEAF } (0)->
595    ereport.io.pci.sta@pcibus/pcidev/pcifn;
596
597prop error.io.pci.ta-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn (2)->
598    ereport.io.pci.sec-rta@pcibus/pcidev/pcifn,
599    error.io.pci.ta-u@pcibus/pcidev/pcifn;
600
601/*
602 * bad data (ie invalid but not an ape or dpe) can propagate downstream,
603 * and at some point may result in a target or master abort
604 */
605prop error.io.pci.badreq-pw-d@pcibus/pcidev/pcifn (1)->
606    error.io.pci.badreq-pw-d@pcibus/pcidev/pcifn/pcibus<>/pcidev<>/pcifn<>,
607    error.io.pci.nr-pw-u@pcibus/pcidev/pcifn,
608    error.io.pci.ta-pw-u@pcibus/pcidev/pcifn;
609
610prop error.io.pci.badreq-pw-d@pcibus/pcidev/pcifn { IS_LEAF } (0)->
611    error.io.pci.nr-pw-u@pcibus/pcidev/pcifn,
612    error.io.pci.ta-pw-u@pcibus/pcidev/pcifn;
613
614prop error.io.pci.badreq-drw-d@pcibus/pcidev/pcifn (1)->
615    error.io.pci.badreq-drw-d@pcibus/pcidev/pcifn/pcibus<>/pcidev<>/pcifn<>,
616    error.io.pci.nr-drw-u@pcibus/pcidev/pcifn,
617    error.io.pci.ta-drw-u@pcibus/pcidev/pcifn;
618
619prop error.io.pci.badreq-drw-d@pcibus/pcidev/pcifn { IS_LEAF } (0)->
620    error.io.pci.nr-drw-u@pcibus/pcidev/pcifn,
621    error.io.pci.ta-drw-u@pcibus/pcidev/pcifn;
622
623prop error.io.pci.nr-pw-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn (2)->
624    ereport.io.pci.sec-ma@pcibus/pcidev/pcifn,
625    error.io.pci.serr-u@pcibus/pcidev/pcifn;
626
627prop error.io.pci.ta-pw-u@pcibus/pcidev/pcifn { IS_LEAF } (0)->
628    ereport.io.pci.sta@pcibus/pcidev/pcifn;
629
630prop error.io.pci.ta-pw-u@pcibus/pcidev/pcifn { IS_BDG } (1)->
631    ereport.io.pci.sta@pcibus/pcidev/pcifn;
632
633prop error.io.pci.ta-pw-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn (2)->
634    ereport.io.pci.sec-rta@pcibus/pcidev/pcifn,
635    error.io.pci.serr-u@pcibus/pcidev/pcifn;
636
637prop error.io.pci.nr-drw-u@pcibus/pcidev/pcifn (1)->
638    error.io.pci.ma-u@pcibus/pcidev/pcifn;
639
640prop error.io.pci.nr-drw-u@pcibus/pcidev/pcifn (1)->
641    error.io.pci.target-rta-d@pcibus/pcidev/pcifn,
642    error.io.pci.target-ma-d@pcibus/pcidev/pcifn;
643
644prop error.io.pci.ma-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn (1)->
645    ereport.io.pci.sec-ma@pcibus/pcidev/pcifn;
646
647prop error.io.pci.ma-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn (1)->
648    error.io.pci.ma-u@pcibus/pcidev/pcifn,
649    error.io.pci.ta-u@pcibus/pcidev/pcifn;
650
651prop error.io.pci.ta-drw-u@pcibus/pcidev/pcifn (1)->
652    error.io.pci.ta-u@pcibus/pcidev/pcifn;
653
654prop error.io.pci.ta-drw-u@pcibus/pcidev/pcifn (1)->
655    error.io.pci.target-rta-d@pcibus/pcidev/pcifn;
656
657/*
658 * bad data (ie invalid but not an ape or dpe) can propagate upstream,
659 * and at some point may result in a target or master abort
660 */
661prop error.io.pci.badreq-pw-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn (1)->
662    error.io.pci.badreq-pw-u@pcibus/pcidev/pcifn,
663    error.io.pci.nr-pw-d@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn,
664    error.io.pci.ta-pw-d@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
665
666prop error.io.pci.badreq-pw-u@pcibus/pcidev/pcifn (0)->
667    error.io.pci.nr-pw-d@pcibus/pcidev/pcifn,
668    error.io.pci.ta-pw-d@pcibus/pcidev/pcifn;
669
670prop error.io.pci.nr-pw-d@pcibus/pcidev/pcifn { IS_LEAF } (0)->
671    ereport.io.pci.ma@pcibus/pcidev/pcifn;
672
673prop error.io.pci.nr-pw-d@pcibus/pcidev/pcifn { IS_BDG } (2)->
674    ereport.io.pci.ma@pcibus/pcidev/pcifn,
675    error.io.pci.serr-u@pcibus/pcidev/pcifn;
676
677prop error.io.pci.ta-pw-d@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn (1)->
678    ereport.io.pci.sec-sta@pcibus/pcidev/pcifn;
679
680prop error.io.pci.ta-pw-d@pcibus/pcidev/pcifn { IS_LEAF } (0)->
681    ereport.io.pci.rta@pcibus/pcidev/pcifn;
682
683prop error.io.pci.ta-pw-d@pcibus/pcidev/pcifn { IS_BDG } (2)->
684    ereport.io.pci.rta@pcibus/pcidev/pcifn,
685    error.io.pci.serr-u@pcibus/pcidev/pcifn;
686
687/*
688 * for delayed writes we treat upstream badreq specially as rta always
689 * propagates back downstream to the leaf
690 */
691prop error.io.pci.badreq-drw-u@pcibus/pcidev/pcifn { IS_LEAF } (0)->
692    ereport.io.pci.rta@pcibus/pcidev/pcifn,
693    ereport.io.pci.ma@pcibus/pcidev/pcifn;
694
695prop error.io.pci.badreq-drw-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn (1)->
696    ereport.io.pci.ma@pcibus/pcidev/pcifn,
697    ereport.io.pci.rta@pcibus/pcidev/pcifn;
698
699prop error.io.pci.badreq-drw-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn (0)->
700    ereport.io.pci.sec-sta@pcibus/pcidev/pcifn;
701
702prop error.io.pci.badreq-drw-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn (0)->
703    error.io.pci.badreq-drw-u@pcibus/pcidev/pcifn;
704
705prop error.io.pci.nr-drw-d@pcibus/pcidev/pcifn { IS_LEAF } (0)->
706    ereport.io.pci.ma@pcibus/pcidev/pcifn;
707
708prop error.io.pci.nr-drw-d@pcibus/pcidev/pcifn { IS_BDG } (1)->
709    ereport.io.pci.ma@pcibus/pcidev/pcifn;
710
711prop error.io.pci.nr-drw-d@pcibus/pcidev/pcifn { IS_BDG } (0)->
712    ereport.io.pci.sec-sta@pcibus/pcidev/pcifn;
713
714prop error.io.pci.nr-drw-d@pcibus/pcidev/pcifn (1)->
715    error.io.pci.ta-d@pcibus/pcidev/pcifn/pcibus<>/pcidev<>/pcifn<>,
716    error.io.pci.nr-drw-d@pcibus/pcidev/pcifn/pcibus<>/pcidev<>/pcifn<>;
717
718prop error.io.pci.ta-drw-d@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn (1)->
719    ereport.io.pci.sec-sta@pcibus/pcidev/pcifn;
720
721prop error.io.pci.ta-drw-d@pcibus/pcidev/pcifn (1)->
722    error.io.pci.ta-d@pcibus/pcidev/pcifn;
723
724prop error.io.pci.ta-d@pcibus/pcidev/pcifn { IS_LEAF } (0)->
725    ereport.io.pci.rta@pcibus/pcidev/pcifn;
726
727prop error.io.pci.ta-d@pcibus/pcidev/pcifn { IS_BDG } (2)->
728    ereport.io.pci.sec-sta@pcibus/pcidev/pcifn,
729    ereport.io.pci.rta@pcibus/pcidev/pcifn;
730
731prop error.io.pci.ta-d@pcibus/pcidev/pcifn (1)->
732    error.io.pci.ta-d@pcibus/pcidev/pcifn/pcibus<>/pcidev<>/pcifn<>;
733
734/*
735 * Request with address parity error must be detected by parent device
736 * and can optionally result in a target or master abort.
737 * It may also be detected by sibling devices on a bus
738 */
739prop error.io.pci.ape-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn (3)->
740    ereport.io.pci.sec-dpe@pcibus/pcidev/pcifn,
741    ereport.io.pci.sec-rserr@pcibus/pcidev/pcifn,
742    error.io.pci.serr-u@pcibus/pcidev/pcifn;
743
744prop error.io.pci.ape-u@pcibus/pcidev/pcifn (0)->
745    error.io.pci.nr-drw-d@pcibus/pcidev/pcifn,
746    error.io.pci.ta-drw-d@pcibus/pcidev/pcifn,
747    error.io.pci.nr-pw-d@pcibus/pcidev/pcifn,
748    error.io.pci.ta-pw-d@pcibus/pcidev/pcifn;
749
750prop error.io.pci.ape-u@pcibus/pcidev/pcifn (0)->
751    ereport.io.pci.mdpe@pcibus/pcidev/pcifn;
752
753prop error.io.pci.ape-u@pcibus/pcidev[fromdev]/pcifn (0)->
754    ereport.io.pci.dpe@pcibus/pcidev<todev>/pcifn<> {fromdev != todev},
755    ereport.io.pci.sserr@pcibus/pcidev<todev>/pcifn<> {fromdev != todev};
756
757prop error.io.pci.ape-u@pcibus/pcidev/pcifn (1)->
758    error.io.pci.source-ape-u@pcibus/pcidev/pcifn;
759
760/*
761 * If the bridge sees an upstream split completion error (pci-x only) it could
762 * result in a number of things
763 * - for various faults in the split completion (eg address parity error)
764 *   we will respond with a target abort (which the child device will treat
765 *   as a split completion ta)
766 * - for other faults we can't tell who send the split completion and so
767 *   just drop the request (which the child device sees as a split
768 *   completion ma)
769 */
770prop error.io.pcix.scpe-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn (0)->
771    ereport.io.pci.sec-sta@pcibus/pcidev/pcifn,
772    ereport.io.pci.sec-dpe@pcibus/pcidev/pcifn,
773    ereport.io.pci.sec-rserr@pcibus/pcidev/pcifn,
774    error.io.pci.serr-u@pcibus/pcidev/pcifn;
775
776prop error.io.pcix.scpe-u@pcibus/pcidev/pcifn (1)->
777    error.io.pcix.spl-comp-ma-d@pcibus/pcidev/pcifn,
778    error.io.pcix.spl-comp-ta-d@pcibus/pcidev/pcifn;
779
780prop error.io.pcix.spl-comp-ma-d@pcibus/pcidev/pcifn (1)->
781    error.io.pci.serr-u@pcibus/pcidev/pcifn;
782
783prop error.io.pcix.spl-comp-ma-d@pcibus/pcidev/pcifn { IS_LEAF } (0)->
784    ereport.io.pci.sserr@pcibus/pcidev/pcifn,
785    ereport.io.pcix.spl-dis@pcibus/pcidev/pcifn;
786
787prop error.io.pcix.spl-comp-ma-d@pcibus/pcidev/pcifn { IS_BDG } (2)->
788    ereport.io.pcix.spl-dis@pcibus/pcidev/pcifn,
789    ereport.io.pci.ma@pcibus/pcidev/pcifn;
790
791prop error.io.pcix.spl-comp-ta-d@pcibus/pcidev/pcifn (1)->
792    error.io.pci.serr-u@pcibus/pcidev/pcifn;
793
794prop error.io.pcix.spl-comp-ta-d@pcibus/pcidev/pcifn { IS_LEAF } (0)->
795    ereport.io.pci.sserr@pcibus/pcidev/pcifn,
796    ereport.io.pcix.spl-dis@pcibus/pcidev/pcifn;
797
798prop error.io.pcix.spl-comp-ta-d@pcibus/pcidev/pcifn { IS_BDG } (2)->
799    ereport.io.pcix.spl-dis@pcibus/pcidev/pcifn,
800    ereport.io.pci.rta@pcibus/pcidev/pcifn;
801
802prop error.io.pcix.scpe-u@pcibus/pcidev/pcifn (1)->
803    error.io.pcix.source-scpe-u@pcibus/pcidev/pcifn;
804
805/*
806 * request with address parity error must be detected by child device
807 * and can optionally result in a target or master abort.
808 */
809prop error.io.pci.ape-d@pcibus/pcidev/pcifn (1)->
810    error.io.pci.serr-u@pcibus/pcidev/pcifn;
811
812prop error.io.pci.ape-d@pcibus/pcidev/pcifn { IS_LEAF } (0)->
813    error.io.pci.leaf-ape-d@pcibus/pcidev/pcifn;
814
815prop error.io.pci.leaf-ape-d@pcibus/pcidev/pcifn { IS_LEAF } (2)->
816    ereport.io.pci.sserr@pcibus/pcidev/pcifn,
817    ereport.io.pci.dpe@pcibus/pcidev/pcifn;
818
819prop error.io.pci.ape-d@pcibus/pcidev/pcifn { IS_BDG } (1)->
820    ereport.io.pci.dpe@pcibus/pcidev/pcifn;
821
822prop error.io.pci.ape-d@pcibus/pcidev/pcifn (0)->
823    error.io.pci.ta-pw-u@pcibus/pcidev/pcifn,
824    error.io.pci.ta-drw-u@pcibus/pcidev/pcifn,
825    error.io.pci.nr-pw-u@pcibus/pcidev/pcifn,
826    error.io.pci.nr-drw-u@pcibus/pcidev/pcifn;
827
828/*
829 * If the device sees a downstream split completion error (pci-x only) it could
830 * result in a number of things
831 * - for various faults in the split completion (eg address parity error)
832 *   we will respond with a target abort (which the parent bridge will treat
833 *   as a split completion ta)
834 * - for other faults we can't tell who send the split completion and so
835 *   just drop the request (which the parent bridge sees as a split
836 *   completion ma)
837 */
838prop error.io.pcix.scpe-d@pcibus/pcidev/pcifn (0)->
839    ereport.io.pci.sta@pcibus/pcidev/pcifn,
840    ereport.io.pci.dpe@pcibus/pcidev/pcifn,
841    ereport.io.pci.sserr@pcibus/pcidev/pcifn,
842    error.io.pci.serr-u@pcibus/pcidev/pcifn;
843
844prop error.io.pcix.scpe-d@pcibus/pcidev/pcifn (1)->
845    error.io.pcix.spl-comp-ma-u@pcibus/pcidev/pcifn,
846    error.io.pcix.spl-comp-ta-u@pcibus/pcidev/pcifn;
847
848prop error.io.pcix.spl-comp-ma-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn (2)->
849    ereport.io.pcix.sec-spl-dis@pcibus/pcidev/pcifn,
850    error.io.pci.serr-u@pcibus/pcidev/pcifn;
851
852prop error.io.pcix.spl-comp-ma-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn (0)->
853    ereport.io.pci.sec-ma@pcibus/pcidev/pcifn;
854
855prop error.io.pcix.spl-comp-ta-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn (3)->
856    ereport.io.pcix.sec-spl-dis@pcibus/pcidev/pcifn,
857    error.io.pci.serr-u@pcibus/pcidev/pcifn,
858    ereport.io.pci.sec-rta@pcibus/pcidev/pcifn;
859
860/*
861 * request with data parity error can propagate upstream
862 *
863 * for PCI/X (but not PCI) the split write can optionally be forwarded across
864 * the bridge, maintaining bad parity/ecc
865 *
866 * if there is a dpe on a retry on a delayed write, we don't send another
867 * retry, and eventually the dto timer will expire
868 */
869prop error.io.pci.dpdata-pw-u@pcibus/pcidev/pcifn { IS_LEAF } (0)->
870    ereport.io.pci.mdpe@pcibus/pcidev/pcifn;
871
872prop error.io.pci.dpdata-pw-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn (3)->
873    ereport.io.pci.mdpe@pcibus/pcidev/pcifn,
874    ereport.io.pci.sec-dpe@pcibus/pcidev/pcifn,
875    error.io.pci.dpdata-pw-u@pcibus/pcidev/pcifn;
876
877prop error.io.pci.dpdata-dw-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn (1)->
878    ereport.io.pci.sec-dpe@pcibus/pcidev/pcifn;
879
880prop error.io.pci.dpdata-dw-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn (0)->
881    ereport.io.pci.mdpe@pcibus/pcidev/pcifn,
882    error.io.pci.dpdata-dw-u@pcibus/pcidev/pcifn;
883
884prop error.io.pci.dpdata-dw-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn (0)->
885    error.io.pci.retry-to-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
886
887prop error.io.pci.dpdata-dr-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn (3)->
888    ereport.io.pci.sec-dpe@pcibus/pcidev/pcifn,
889    ereport.io.pci.sec-mdpe@pcibus/pcidev/pcifn,
890    error.io.pci.dpdata-dr-u@pcibus/pcidev/pcifn;
891
892/*
893 * Request with data parity error can propagate downstream. A hardened
894 * leaf driver should handle the error, but may or may not be able to
895 * avoid service impact. We handle to two cases separately. If there is
896 * service impact we will fail immediately, if not we will feed into a SERD
897 * engine.
898 *
899 * for PCI/X (but not PCI) the split write can optionally be forwarded across
900 * the bridge, maintaining bad parity/ecc
901 *
902 * if there is a dpe on a retry on a delayed write, we don't send another
903 * retry, and eventually the dto timer will expire
904 */
905prop error.io.pci.f-dpdata-pw-d@pcibus/pcidev/pcifn (2)->
906    error.io.pci.perr-pw-u@pcibus/pcidev/pcifn,
907    error.io.pci.source-f-perr-u@pcibus/pcidev/pcifn;
908
909prop error.io.pci.f-dpdata-pw-d@pcibus/pcidev/pcifn { IS_LEAF } (0)->
910    ereport.io.pci.dpe@pcibus/pcidev/pcifn;
911
912prop error.io.pci.f-dpdata-pw-d@pcibus/pcidev/pcifn { IS_BDG } (2)->
913    ereport.io.pci.dpe@pcibus/pcidev/pcifn,
914    ereport.io.pci.sec-mdpe@pcibus/pcidev/pcifn;
915
916prop error.io.pci.f-dpdata-pw-d@pcibus/pcidev/pcifn (1)->
917    error.io.pci.dpdata-pw-fwd-d@pcibus/pcidev/pcifn/pcibus<>/pcidev<>/pcifn<>;
918
919prop error.io.pci.nf-dpdata-pw-d@pcibus/pcidev/pcifn (2)->
920    error.io.pci.perr-pw-u@pcibus/pcidev/pcifn,
921    error.io.pci.source-nf-perr-u@pcibus/pcidev/pcifn;
922
923prop error.io.pci.nf-dpdata-pw-d@pcibus/pcidev/pcifn { IS_LEAF } (0)->
924    ereport.io.pci.dpe@pcibus/pcidev/pcifn;
925
926prop error.io.pci.nf-dpdata-pw-d@pcibus/pcidev/pcifn { IS_BDG } (2)->
927    ereport.io.pci.dpe@pcibus/pcidev/pcifn,
928    ereport.io.pci.sec-mdpe@pcibus/pcidev/pcifn;
929
930prop error.io.pci.nf-dpdata-pw-d@pcibus/pcidev/pcifn (1)->
931    error.io.pci.dpdata-pw-fwd-d@pcibus/pcidev/pcifn/pcibus<>/pcidev<>/pcifn<>;
932
933prop error.io.pci.dpdata-pw-fwd-d@pcibus/pcidev/pcifn { IS_LEAF } (0)->
934    ereport.io.pci.dpe@pcibus/pcidev/pcifn;
935
936prop error.io.pci.dpdata-pw-fwd-d@pcibus/pcidev/pcifn { IS_BDG } (2)->
937    ereport.io.pci.dpe@pcibus/pcidev/pcifn,
938    ereport.io.pci.sec-mdpe@pcibus/pcidev/pcifn;
939
940prop error.io.pci.dpdata-pw-fwd-d@pcibus/pcidev/pcifn (1)->
941    error.io.pci.dpdata-pw-fwd-d@pcibus/pcidev/pcifn/pcibus<>/pcidev<>/pcifn<>;
942
943prop error.io.pci.f-dpdata-dw-d@pcibus/pcidev/pcifn (3)->
944    error.io.pci.perr-dw-u@pcibus/pcidev/pcifn,
945    error.io.pci.source-f-perr-u@pcibus/pcidev/pcifn,
946    error.io.pci.target-mdpe-d@pcibus/pcidev/pcifn;
947
948prop error.io.pci.f-dpdata-dw-d@pcibus/pcidev/pcifn (0)->
949    ereport.io.pci.sec-mdpe@pcibus/pcidev/pcifn,
950    error.io.pci.dpdata-dw-fwd-d@pcibus/pcidev/pcifn/pcibus<>/pcidev<>/pcifn<>;
951
952prop error.io.pci.f-dpdata-dw-d@pcibus/pcidev/pcifn { IS_LEAF } (0)->
953    ereport.io.pci.dpe@pcibus/pcidev/pcifn;
954
955prop error.io.pci.f-dpdata-dw-d@pcibus/pcidev/pcifn { IS_BDG } (1)->
956    ereport.io.pci.dpe@pcibus/pcidev/pcifn;
957
958prop error.io.pci.f-dpdata-dw-d@pcibus/pcidev/pcifn { IS_BDG } (0)->
959    error.io.pci.retry-to-d@pcibus/pcidev/pcifn;
960
961prop error.io.pci.nf-dpdata-dw-d@pcibus/pcidev/pcifn (3)->
962    error.io.pci.perr-dw-u@pcibus/pcidev/pcifn,
963    error.io.pci.source-nf-perr-u@pcibus/pcidev/pcifn,
964    error.io.pci.target-mdpe-d@pcibus/pcidev/pcifn;
965
966prop error.io.pci.nf-dpdata-dw-d@pcibus/pcidev/pcifn (0)->
967    ereport.io.pci.sec-mdpe@pcibus/pcidev/pcifn,
968    error.io.pci.dpdata-dw-fwd-d@pcibus/pcidev/pcifn/pcibus<>/pcidev<>/pcifn<>;
969
970prop error.io.pci.nf-dpdata-dw-d@pcibus/pcidev/pcifn { IS_LEAF } (0)->
971    ereport.io.pci.dpe@pcibus/pcidev/pcifn;
972
973prop error.io.pci.nf-dpdata-dw-d@pcibus/pcidev/pcifn { IS_BDG } (1)->
974    ereport.io.pci.dpe@pcibus/pcidev/pcifn;
975
976prop error.io.pci.nf-dpdata-dw-d@pcibus/pcidev/pcifn { IS_BDG } (0)->
977    error.io.pci.retry-to-d@pcibus/pcidev/pcifn;
978
979prop error.io.pci.dpdata-dw-fwd-d@pcibus/pcidev/pcifn (0)->
980    ereport.io.pci.dpe@pcibus/pcidev/pcifn,
981    ereport.io.pci.sec-mdpe@pcibus/pcidev/pcifn,
982    error.io.pci.dpdata-dw-fwd-d@pcibus/pcidev/pcifn/pcibus<>/pcidev<>/pcifn<>;
983
984prop error.io.pci.f-dpdata-dr-d@pcibus/pcidev/pcifn (2)->
985    error.io.pci.perr-dr-u@pcibus/pcidev/pcifn,
986    error.io.pci.source-f-perr-u@pcibus/pcidev/pcifn;
987
988prop error.io.pci.f-dpdata-dr-d@pcibus/pcidev/pcifn { IS_LEAF } (0)->
989    ereport.io.pci.dpe@pcibus/pcidev/pcifn,
990    ereport.io.pci.mdpe@pcibus/pcidev/pcifn;
991
992prop error.io.pci.f-dpdata-dr-d@pcibus/pcidev/pcifn { IS_BDG } (2)->
993    ereport.io.pci.dpe@pcibus/pcidev/pcifn,
994    ereport.io.pci.mdpe@pcibus/pcidev/pcifn;
995
996prop error.io.pci.f-dpdata-dr-d@pcibus/pcidev/pcifn (1)->
997    error.io.pci.f-dpdata-dr-d@pcibus/pcidev/pcifn/pcibus<>/pcidev<>/pcifn<>;
998
999prop error.io.pci.nf-dpdata-dr-d@pcibus/pcidev/pcifn (2)->
1000    error.io.pci.perr-dr-u@pcibus/pcidev/pcifn,
1001    error.io.pci.source-nf-perr-u@pcibus/pcidev/pcifn;
1002
1003prop error.io.pci.nf-dpdata-dr-d@pcibus/pcidev/pcifn { IS_LEAF } (0)->
1004    ereport.io.pci.dpe@pcibus/pcidev/pcifn,
1005    ereport.io.pci.mdpe@pcibus/pcidev/pcifn;
1006
1007prop error.io.pci.nf-dpdata-dr-d@pcibus/pcidev/pcifn { IS_BDG } (2)->
1008    ereport.io.pci.dpe@pcibus/pcidev/pcifn,
1009    ereport.io.pci.mdpe@pcibus/pcidev/pcifn;
1010
1011prop error.io.pci.nf-dpdata-dr-d@pcibus/pcidev/pcifn (1)->
1012    error.io.pci.nf-dpdata-dr-d@pcibus/pcidev/pcifn/pcibus<>/pcidev<>/pcifn<>;
1013
1014/*
1015 * delayed read/write retry timeout can cause dto at a bridge
1016 */
1017prop error.io.pci.retry-to-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn (0)->
1018    error.io.pci.retry-to-u@pcibus/pcidev/pcifn;
1019
1020prop error.io.pci.retry-to-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn (1)->
1021    ereport.io.pci.dto@pcibus/pcidev/pcifn;
1022
1023prop error.io.pci.retry-to-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn (0)->
1024    error.io.pci.serr-u@pcibus/pcidev/pcifn;
1025
1026prop error.io.pci.retry-to-d@pcibus/pcidev/pcifn (0)->
1027    error.io.pci.retry-to-d@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
1028
1029prop error.io.pci.retry-to-d@pcibus/pcidev/pcifn { IS_BDG } (1)->
1030    ereport.io.pci.dto@pcibus/pcidev/pcifn;
1031
1032prop error.io.pci.retry-to-d@pcibus/pcidev/pcifn { IS_BDG } (0)->
1033    error.io.pci.serr-u@pcibus/pcidev/pcifn;
1034
1035/*
1036 * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1037 * source- propagations.
1038 * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1039 */
1040event error.io.pci.source-f-dpdata-w-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
1041event error.io.pci.source-nf-dpdata-w-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
1042event error.io.pci.source-f-dpdata-r-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
1043event error.io.pci.source-nf-dpdata-r-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
1044event error.io.pci.source-f-perr-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
1045event error.io.pci.source-nf-perr-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
1046event error.io.pci.source-ape-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
1047event error.io.pcix.source-scpe-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
1048event error.io.service.restored@pcibus/pcidev/pcifn;
1049
1050event ereport.io.service.lost@pcibus/pcidev/pcifn{within(5s)};
1051event ereport.io.service.degraded@pcibus/pcidev/pcifn{within(5s)};
1052event ereport.io.service.unaffected@pcibus/pcidev/pcifn{within(5s)};
1053event ereport.io.service.restored@pcibus/pcidev/pcifn{within(30s)};
1054
1055prop error.io.pci.source-f-dpdata-w-u@pcibus/pcidev/pcifn { IS_LEAF } (0)->
1056    ereport.io.service.lost@pcibus/pcidev/pcifn,
1057    ereport.io.service.degraded@pcibus/pcidev/pcifn;
1058
1059prop error.io.pci.source-nf-dpdata-w-u@pcibus/pcidev/pcifn { IS_LEAF } (1)->
1060    ereport.io.service.unaffected@pcibus/pcidev/pcifn,
1061    error.io.service.restored@pcibus/pcidev/pcifn;
1062
1063prop error.io.pci.source-f-dpdata-r-u@pcibus/pcidev/pcifn { IS_LEAF } (0)->
1064    ereport.io.service.lost@pcibus/pcidev/pcifn,
1065    ereport.io.service.degraded@pcibus/pcidev/pcifn;
1066
1067prop error.io.pci.source-nf-dpdata-r-u@pcibus/pcidev/pcifn { IS_LEAF } (1)->
1068    ereport.io.service.unaffected@pcibus/pcidev/pcifn,
1069    error.io.service.restored@pcibus/pcidev/pcifn;
1070
1071prop error.io.pci.source-f-perr-u@pcibus/pcidev/pcifn { IS_LEAF } (0)->
1072    ereport.io.service.lost@pcibus/pcidev/pcifn,
1073    ereport.io.service.degraded@pcibus/pcidev/pcifn;
1074
1075prop error.io.pci.source-nf-perr-u@pcibus/pcidev/pcifn { IS_LEAF } (1)->
1076    ereport.io.service.unaffected@pcibus/pcidev/pcifn,
1077    error.io.service.restored@pcibus/pcidev/pcifn;
1078
1079prop error.io.pci.source-f-perr-u@pcibus/pcidev/pcifn (1)->
1080    error.io.pci.source-f-perr-u@pcibus/pcidev/pcifn/pcibus<>/pcidev<>/pcifn<>;
1081
1082prop error.io.pci.source-nf-perr-u@pcibus/pcidev/pcifn (1)->
1083    error.io.pci.source-nf-perr-u@pcibus/pcidev/pcifn/pcibus<>/pcidev<>/pcifn<>;
1084
1085prop error.io.pci.source-f-dpdata-w-u@pcibus/pcidev/pcifn (1)->
1086    error.io.pci.source-f-dpdata-w-u@pcibus/pcidev/pcifn/pcibus<>/pcidev<>/pcifn<>;
1087
1088prop error.io.pci.source-nf-dpdata-w-u@pcibus/pcidev/pcifn (1)->
1089    error.io.pci.source-nf-dpdata-w-u@pcibus/pcidev/pcifn/pcibus<>/pcidev<>/pcifn<>;
1090
1091prop error.io.pci.source-f-dpdata-r-u@pcibus/pcidev/pcifn (1)->
1092    error.io.pci.source-f-dpdata-r-u@pcibus/pcidev/pcifn/pcibus<>/pcidev<>/pcifn<>;
1093
1094prop error.io.pci.source-nf-dpdata-r-u@pcibus/pcidev/pcifn (1)->
1095    error.io.pci.source-nf-dpdata-r-u@pcibus/pcidev/pcifn/pcibus<>/pcidev<>/pcifn<>;
1096
1097prop error.io.pci.source-ape-u@pcibus/pcidev/pcifn (1)->
1098    error.io.pci.source-ape-u@pcibus/pcidev/pcifn/pcibus<>/pcidev<>/pcifn<>;
1099
1100prop error.io.pcix.source-scpe-u@pcibus/pcidev/pcifn (1)->
1101    error.io.pcix.source-scpe-u@pcibus/pcidev/pcifn/pcibus<>/pcidev<>/pcifn<>;
1102
1103/*
1104 * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1105 * Handling of leaf driver detected internal errors. Use serd engine if
1106 * no service impact - otherwise fail immediately
1107 * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1108 */
1109event ereport.io.device.inval_state@pcibus/pcidev/pcifn{within(5s)};
1110event ereport.io.device.no_response@pcibus/pcidev/pcifn{within(5s)};
1111event ereport.io.device.stall@pcibus/pcidev/pcifn{within(5s)};
1112event ereport.io.device.badint_limit@pcibus/pcidev/pcifn{within(5s)};
1113event ereport.io.device.intern_corr@pcibus/pcidev/pcifn{within(5s)};
1114event ereport.io.device.intern_uncorr@pcibus/pcidev/pcifn{within(5s)};
1115event ereport.io.device.nf-device@pcibus/pcidev/pcifn{within(5s)};
1116
1117prop error.io.service.restored@pcibus/pcidev/pcifn { IS_LEAF } (1)->
1118    ereport.io.service.lost@pcibus/pcidev/pcifn,
1119    ereport.io.service.degraded@pcibus/pcidev/pcifn;
1120
1121prop error.io.service.restored@pcibus/pcidev/pcifn { IS_LEAF } (1)->
1122    ereport.io.service.restored@pcibus/pcidev/pcifn;
1123
1124prop error.io.device.f-device@pcibus/pcidev/pcifn { IS_LEAF } (1)->
1125    ereport.io.device.inval_state@pcibus/pcidev/pcifn,
1126    ereport.io.device.no_response@pcibus/pcidev/pcifn,
1127    ereport.io.device.stall@pcibus/pcidev/pcifn,
1128    ereport.io.device.badint_limit@pcibus/pcidev/pcifn,
1129    ereport.io.device.intern_corr@pcibus/pcidev/pcifn,
1130    ereport.io.device.intern_uncorr@pcibus/pcidev/pcifn;
1131
1132prop error.io.device.f-device@pcibus/pcidev/pcifn { IS_LEAF } (1)->
1133    ereport.io.service.lost@pcibus/pcidev/pcifn,
1134    ereport.io.service.degraded@pcibus/pcidev/pcifn;
1135
1136engine serd.io.device.nonfatal@pcibus/pcidev/pcifn,
1137    N=NONFATAL_COUNT, T=NONFATAL_TIME, method=persistent,
1138    trip=ereport.io.device.nf-device@pcibus/pcidev/pcifn;
1139
1140event upset.io.device.nonfatal@pcibus/pcidev/pcifn,
1141    engine=serd.io.device.nonfatal@pcibus/pcidev/pcifn;
1142
1143prop error.io.device.nf-device@pcibus/pcidev/pcifn { IS_LEAF } (1)->
1144    ereport.io.device.nf-device@pcibus/pcidev/pcifn;
1145
1146prop error.io.device.nf-device@pcibus/pcidev/pcifn { IS_LEAF } (0)->
1147    ereport.io.device.inval_state@pcibus/pcidev/pcifn,
1148    ereport.io.device.no_response@pcibus/pcidev/pcifn,
1149    ereport.io.device.stall@pcibus/pcidev/pcifn,
1150    ereport.io.device.badint_limit@pcibus/pcidev/pcifn,
1151    ereport.io.device.intern_corr@pcibus/pcidev/pcifn,
1152    ereport.io.device.intern_uncorr@pcibus/pcidev/pcifn,
1153    ereport.io.service.unaffected@pcibus/pcidev/pcifn,
1154    error.io.service.restored@pcibus/pcidev/pcifn;
1155
1156prop upset.io.device.nonfatal@pcibus/pcidev/pcifn { IS_LEAF } (1)->
1157    ereport.io.device.inval_state@pcibus/pcidev/pcifn,
1158    ereport.io.device.no_response@pcibus/pcidev/pcifn,
1159    ereport.io.device.stall@pcibus/pcidev/pcifn,
1160    ereport.io.device.badint_limit@pcibus/pcidev/pcifn,
1161    ereport.io.device.intern_corr@pcibus/pcidev/pcifn,
1162    ereport.io.device.intern_uncorr@pcibus/pcidev/pcifn;
1163
1164prop upset.io.device.nonfatal@pcibus/pcidev/pcifn { IS_LEAF } (1)->
1165    ereport.io.service.unaffected@pcibus/pcidev/pcifn,
1166    error.io.service.restored@pcibus/pcidev/pcifn;
1167
1168/*
1169 * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1170 * Handling of pci express nonfatal errors (dpe). Use serd engine if
1171 * no service impact - otherwise fail immediately
1172 * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1173 */
1174event ereport.io.pci.nf-dpe-d@pcibus/pcidev/pcifn{within(5s)};
1175event ereport.io.pci.nf-dpe-u@pcibus/pcidev/pcifn{within(5s)};
1176
1177engine serd.io.pci.nf-dpe-u@pcibus/pcidev/pcifn,
1178    N=NONFATAL_DPE_U_COUNT, T=NONFATAL_DPE_U_TIME, method=persistent,
1179    trip=ereport.io.pci.nf-dpe-u@pcibus/pcidev/pcifn;
1180
1181event upset.io.pci.nf-dpe-u@pcibus/pcidev/pcifn,
1182    engine=serd.io.pci.nf-dpe-u@pcibus/pcidev/pcifn;
1183
1184prop error.io.pci.nf-dpe-u@pcibus/pcidev/pcifn { IS_LEAF } (1)->
1185    ereport.io.pci.nf-dpe-u@pcibus/pcidev/pcifn;
1186
1187prop error.io.pci.nf-dpe-u@pcibus/pcidev/pcifn { IS_LEAF } (0)->
1188    error.io.pci.nonfatal-dpe-u@pcibus/pcidev/pcifn,
1189    ereport.io.service.unaffected@pcibus/pcidev/pcifn,
1190    error.io.service.restored@pcibus/pcidev/pcifn;
1191
1192prop upset.io.pci.nf-dpe-u@pcibus/pcidev/pcifn { IS_LEAF } (1)->
1193    error.io.pci.nonfatal-dpe-u@pcibus/pcidev/pcifn;
1194
1195prop upset.io.pci.nf-dpe-u@pcibus/pcidev/pcifn { IS_LEAF } (1)->
1196    ereport.io.service.unaffected@pcibus/pcidev/pcifn,
1197    error.io.service.restored@pcibus/pcidev/pcifn;
1198
1199engine serd.io.pci.nf-dpe-d@pcibus/pcidev/pcifn,
1200    N=NONFATAL_DPE_D_COUNT, T=NONFATAL_DPE_D_TIME, method=persistent,
1201    trip=ereport.io.pci.nf-dpe-d@pcibus/pcidev/pcifn;
1202
1203event upset.io.pci.nf-dpe-d@pcibus/pcidev/pcifn,
1204    engine=serd.io.pci.nf-dpe-d@pcibus/pcidev/pcifn;
1205
1206prop error.io.pci.nf-dpe-d@pcibus/pcidev/pcifn { IS_LEAF } (1)->
1207    ereport.io.pci.nf-dpe-d@pcibus/pcidev/pcifn;
1208
1209prop error.io.pci.nf-dpe-d@pcibus/pcidev/pcifn { IS_LEAF } (0)->
1210    error.io.pci.nonfatal-dpe-d@pcibus/pcidev/pcifn,
1211    ereport.io.service.unaffected@pcibus/pcidev/pcifn,
1212    error.io.service.restored@pcibus/pcidev/pcifn;
1213
1214prop upset.io.pci.nf-dpe-d@pcibus/pcidev/pcifn { IS_LEAF } (1)->
1215    error.io.pci.nonfatal-dpe-d@pcibus/pcidev/pcifn;
1216
1217prop upset.io.pci.nf-dpe-d@pcibus/pcidev/pcifn { IS_LEAF } (1)->
1218    ereport.io.service.unaffected@pcibus/pcidev/pcifn,
1219    error.io.service.restored@pcibus/pcidev/pcifn;
1220
1221/*
1222 * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1223 * stub unused ereports
1224 * - ignore rx-spl as we can't tell what message it was (and we should have
1225 *   diagnosed the problem anyway from standard pci ereports)
1226 * - ignore sec-spl-or/sec-spl-dly as these aren't really faults (tuning info)
1227 * - ignore unex-spl/sec-unex-spl
1228 * - ignore ecc.ue ereports (we get everything we need from dpe/mdpe)
1229 * - ignore ecc.ce ereports for now (could do serd on these)
1230 * - ignore nr ereport
1231 * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1232 */
1233
1234event ereport.io.pci.nr@pcibus/pcidev/pcifn{within(5s)};
1235event ereport.io.pcix.unex-spl@pcibus/pcidev/pcifn{within(5s)};
1236event ereport.io.pcix.rx-spl@pcibus/pcidev/pcifn{within(5s)};
1237event ereport.io.pcix.sec-unex-spl@pcibus/pcidev/pcifn{within(5s)};
1238event ereport.io.pcix.sec-spl-or@pcibus/pcidev/pcifn{within(5s)};
1239event ereport.io.pcix.sec-spl-dly@pcibus/pcidev/pcifn{within(5s)};
1240event ereport.io.pcix.ecc.ce-addr@pcibus/pcidev/pcifn{within(5s)};
1241event ereport.io.pcix.ecc.ce-attr@pcibus/pcidev/pcifn{within(5s)};
1242event ereport.io.pcix.ecc.ce-data@pcibus/pcidev/pcifn{within(5s)};
1243event ereport.io.pcix.ecc.ue-addr@pcibus/pcidev/pcifn{within(5s)};
1244event ereport.io.pcix.ecc.ue-attr@pcibus/pcidev/pcifn{within(5s)};
1245event ereport.io.pcix.ecc.ue-data@pcibus/pcidev/pcifn{within(5s)};
1246event ereport.io.pcix.s-ce@pcibus/pcidev/pcifn{within(5s)};
1247event ereport.io.pcix.s-ue@pcibus/pcidev/pcifn{within(5s)};
1248event ereport.io.pcix.sec-ecc.ce-addr@pcibus/pcidev/pcifn{within(5s)};
1249event ereport.io.pcix.sec-ecc.ce-attr@pcibus/pcidev/pcifn{within(5s)};
1250event ereport.io.pcix.sec-ecc.ce-data@pcibus/pcidev/pcifn{within(5s)};
1251event ereport.io.pcix.sec-ecc.ue-addr@pcibus/pcidev/pcifn{within(5s)};
1252event ereport.io.pcix.sec-ecc.ue-attr@pcibus/pcidev/pcifn{within(5s)};
1253event ereport.io.pcix.sec-ecc.ue-data@pcibus/pcidev/pcifn{within(5s)};
1254event ereport.io.pcix.sec-s-ce@pcibus/pcidev/pcifn{within(5s)};
1255event ereport.io.pcix.sec-s-ue@pcibus/pcidev/pcifn{within(5s)};
1256
1257event upset.io.pcix.discard@pcibus/pcidev/pcifn;
1258
1259prop upset.io.pcix.discard@pcibus/pcidev/pcifn (1)->
1260    ereport.io.pci.nr@pcibus/pcidev/pcifn,
1261    ereport.io.pcix.rx-spl@pcibus/pcidev/pcifn,
1262    ereport.io.pcix.unex-spl@pcibus/pcidev/pcifn,
1263    ereport.io.pcix.sec-unex-spl@pcibus/pcidev/pcifn,
1264    ereport.io.pcix.sec-spl-or@pcibus/pcidev/pcifn,
1265    ereport.io.pcix.sec-spl-dly@pcibus/pcidev/pcifn,
1266    ereport.io.pcix.ecc.ce-addr@pcibus/pcidev/pcifn,
1267    ereport.io.pcix.ecc.ce-attr@pcibus/pcidev/pcifn,
1268    ereport.io.pcix.ecc.ce-data@pcibus/pcidev/pcifn,
1269    ereport.io.pcix.ecc.ue-addr@pcibus/pcidev/pcifn,
1270    ereport.io.pcix.ecc.ue-attr@pcibus/pcidev/pcifn,
1271    ereport.io.pcix.ecc.ue-data@pcibus/pcidev/pcifn,
1272    ereport.io.pcix.s-ce@pcibus/pcidev/pcifn,
1273    ereport.io.pcix.s-ue@pcibus/pcidev/pcifn,
1274    ereport.io.pcix.sec-ecc.ce-addr@pcibus/pcidev/pcifn,
1275    ereport.io.pcix.sec-ecc.ce-attr@pcibus/pcidev/pcifn,
1276    ereport.io.pcix.sec-ecc.ce-data@pcibus/pcidev/pcifn,
1277    ereport.io.pcix.sec-ecc.ue-addr@pcibus/pcidev/pcifn,
1278    ereport.io.pcix.sec-ecc.ue-attr@pcibus/pcidev/pcifn,
1279    ereport.io.pcix.sec-ecc.ue-data@pcibus/pcidev/pcifn,
1280    ereport.io.pcix.sec-s-ce@pcibus/pcidev/pcifn,
1281    ereport.io.pcix.sec-s-ue@pcibus/pcidev/pcifn;
1282