xref: /illumos-gate/usr/src/cmd/fm/eversholt/files/common/pciex.esc (revision e23347b1b88ce2c0847fad6e9467a1f953597aa7)
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 2009 Sun Microsystems, Inc.  All rights reserved.
23 * Use is subject to license terms.
24 */
25
26#pragma dictionary "PCIEX"
27
28#include <fm/topo_hc.h>
29
30/*
31 * FIT rates - assume leaf devices are somewhat less reliable than
32 * root complexes, switches and bridges
33 */
34#define PCIEX_RC_FIT 500
35#define PCIEX_SW_FIT 500
36#define PCIEX_BDG_FIT 500
37#define PCIEX_DEV_FIT 1000
38#define PCIEX_RC_INV_FIT 500
39#define PCIEX_DEV_INV_FIT 1000
40#define PCIEX_RC_NR_FIT 500
41#define PCIEX_SW_NR_FIT 500
42#define PCIEX_BDG_NR_FIT 500
43#define PCIEX_DEV_NR_FIT 1000
44#define PCIEX_BUS_FIT 500
45#define PCIEX_BUS_NR_FIT 500
46
47/*
48 * SERD parameters.
49 *
50 * PCI Express correctable link errors are automatically handled by the
51 * hardware, so have relatively little impact and we can allow quite a
52 * high frequency. We will also be quite conservative about nonfatal internal
53 * errors reported by the driver.
54 *
55 * Nonfatal dpe errors (ptlp/ecrc errors) have to be recovered by the hardened
56 * driver which may cause intermittant performance/responsiveness problems, so
57 * we have tighter serd parameters for these. These are most likely errors in
58 * buffers/caches within devices and bridges, so use similar rates to cpu
59 * data cache parity errors.
60 */
61#define CORRLINK_COUNT 6
62#define CORRLINK_TIME 2h
63#define BTLP_COUNT 6
64#define BTLP_TIME 2h
65#define BDLLP_COUNT 6
66#define BDLLP_TIME 2h
67#define RTO_COUNT 6
68#define RTO_TIME 2h
69#define RNR_COUNT 6
70#define RNR_TIME 2h
71#define RE_COUNT 6
72#define RE_TIME 2h
73#define NONFATAL_DPE_COUNT 3
74#define NONFATAL_DPE_TIME 168h
75
76/*
77 * if the source-id payload is valid, then check it matches
78 */
79#define SOURCE_ID_MATCHES_BDF \
80	(!payloadprop_defined("source-valid") || \
81	payloadprop("source-valid") == 0 || \
82	payloadprop("source-id") == ((b << 8) | (d << 3) | f))
83
84#define SOURCE_ID_MATCHES_OWN_BDF \
85	(payloadprop_defined("source-valid") && \
86	payloadprop("source-valid") == 1 && \
87	payloadprop("source-id") == (confprop(pciexrc, TOPO_PCI_BDF) + 0))
88
89/*
90 * Other useful macros. These use the EXCAP property (PCI Express Capabilities
91 * register) to find the type for PCI Express devices, and the CLASS-CODE
92 * property (PCI Class Code register) for to find the type of PCI devices behind
93 * a PCI Express-PCI bridge - note that 60400 and 60401 are defined as PCI-PCI
94 * bridges, everything else is consider a PCI leaf device.
95 */
96#define	PCIEXFN		pciexbus/pciexdev/pciexfn
97#define	PCIEXFNHZ	pciexbus<>/pciexdev<>/pciexfn<>
98#define	PCIEXFN1	pciexbus[b]/pciexdev[d]/pciexfn[f]
99#define	PCIFN		pcibus/pcidev/pcifn
100#define	PCIFNHZ		pcibus<>/pcidev<>/pcifn<>
101#define	PCIFN1		pcibus[b]/pcidev[d]/pcifn[f]
102#define IS_LF(f) 	(confprop(f, TOPO_PCI_EXCAP) == "pciexdev")
103#define IS_BG(f) 	(confprop(f, TOPO_PCI_EXCAP) == "pcibus")
104#define IS_SD(f)	(confprop(f, TOPO_PCI_EXCAP) == "pciexswd")
105#define IS_SU(f)	(confprop(f, TOPO_PCI_EXCAP) == "pciexswu")
106#define	IS_PCI_LF(f)	(confprop_defined(f, TOPO_PCI_CLASS) && \
107			confprop(f, TOPO_PCI_CLASS) != "60400" && \
108			confprop(f, TOPO_PCI_CLASS) != "60401")
109
110/*
111 * define faults
112 */
113event fault.io.pciex.device-interr@PCIEXFN, FITrate=PCIEX_DEV_FIT;
114
115event fault.io.pciex.device-interr-deg@PCIEXFN, FITrate=PCIEX_DEV_FIT, retire=0;
116
117engine serd.io.pciex.flt-nf@PCIEXFN, N=NONFATAL_DPE_COUNT, T=NONFATAL_DPE_TIME;
118event fault.io.pciex.device-interr-unaf@PCIEXFN, FITrate=PCIEX_DEV_FIT,
119	engine=serd.io.pciex.flt-nf@PCIEXFN;
120
121engine serd.io.device.nonfatal@PCIEXFN, N=CORRLINK_COUNT, T=CORRLINK_TIME;
122event fault.io.pciex.device-interr-corr@PCIEXFN, FITrate=PCIEX_DEV_FIT,
123	engine=serd.io.device.nonfatal@PCIEXFN;
124engine serd.io.device.nonfatal@PCIEXFN/PCIEXFN,
125	N=CORRLINK_COUNT, T=CORRLINK_TIME;
126event fault.io.pciex.device-interr-corr@PCIEXFN/PCIEXFN, FITrate=PCIEX_DEV_FIT,
127	engine=serd.io.device.nonfatal@PCIEXFN/PCIEXFN;
128engine serd.io.device.nonfatal@pciexrc/PCIEXFN,
129	N=CORRLINK_COUNT, T=CORRLINK_TIME;
130event fault.io.pciex.device-interr-corr@pciexrc/PCIEXFN, FITrate=PCIEX_DEV_FIT,
131	engine=serd.io.device.nonfatal@pciexrc/PCIEXFN;
132
133event fault.io.pciex.device-interr@pciexrc, FITrate=PCIEX_RC_FIT;
134
135event fault.io.pciex.device-interr-deg@pciexrc, FITrate=PCIEX_RC_FIT, retire=0;
136
137engine serd.io.pciex.flt-nf@pciexrc, N=NONFATAL_DPE_COUNT, T=NONFATAL_DPE_TIME;
138event fault.io.pciex.device-interr-unaf@pciexrc, FITrate=PCIEX_RC_FIT,
139	engine=serd.io.pciex.flt-nf@pciexrc;
140
141engine serd.io.device.nonfatal@pciexrc, N=CORRLINK_COUNT, T=CORRLINK_TIME;
142event fault.io.pciex.device-interr-corr@pciexrc, FITrate=PCIEX_RC_FIT,
143	engine=serd.io.device.nonfatal@pciexrc;
144
145event fault.io.pciex.device-invreq@PCIEXFN, FITrate=PCIEX_DEV_INV_FIT;
146
147event fault.io.pciex.device-invreq@pciexrc, FITrate=PCIEX_RC_FIT;
148
149event fault.io.pciex.device-noresp@PCIEXFN, FITrate=PCIEX_DEV_NR_FIT;
150
151event fault.io.pciex.device-noresp@pciexrc, FITrate=PCIEX_RC_NR_FIT;
152
153event fault.io.pciex.bus-noresp@PCIEXFN, FITrate=PCIEX_BUS_NR_FIT;
154
155event fault.io.pciex.bus-linkerr@PCIEXFN, FITrate=PCIEX_BUS_FIT;
156
157engine serd.io.pciex.corrlink-bus@pciexrc/PCIEXFN,
158	N=CORRLINK_COUNT, T=CORRLINK_TIME;
159event fault.io.pciex.bus-linkerr-corr@pciexrc/PCIEXFN, FITrate=PCIEX_BUS_FIT,
160	engine=serd.io.pciex.corrlink-bus@pciexrc/PCIEXFN;
161engine serd.io.pciex.corrlink-bus@PCIEXFN/PCIEXFN,
162	N=CORRLINK_COUNT, T=CORRLINK_TIME;
163event fault.io.pciex.bus-linkerr-corr@PCIEXFN/PCIEXFN, FITrate=PCIEX_BUS_FIT,
164	engine=serd.io.pciex.corrlink-bus@PCIEXFN/PCIEXFN;
165
166/*
167 * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
168 * Handling of leaf driver detected internal errors. Use serd engine if
169 * no service impact - otherwise fail immediately
170 * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
171 */
172event ereport.io.device.inval_state@PCIEXFN{within(5s)};
173event ereport.io.device.no_response@PCIEXFN{within(5s)};
174event ereport.io.device.stall@PCIEXFN{within(5s)};
175event ereport.io.device.badint_limit@PCIEXFN{within(5s)};
176event ereport.io.device.intern_corr@PCIEXFN{within(5s)};
177event ereport.io.device.intern_uncorr@PCIEXFN{within(5s)};
178event ereport.io.service.lost@PCIEXFN{within(5s)};
179event ereport.io.service.degraded@PCIEXFN{within(5s)};
180event ereport.io.service.unaffected@PCIEXFN{within(5s)};
181event ereport.io.service.restored@PCIEXFN{within(30s)};
182event ereport.io.service.lost@PCIFN{within(5s)};
183event ereport.io.service.degraded@PCIFN{within(5s)};
184event ereport.io.service.unaffected@PCIFN{within(5s)};
185
186event error.io.pciex.noimpact-d@PCIEXFN;
187event error.io.pciex.noimpact-d@PCIEXFN/PCIEXFN;
188event error.io.pciex.noimpact-d@PCIEXFN/PCIFN;
189event error.io.pciex.noimpact-d@PCIFN/PCIFN;
190event error.io.pciex.noimpact-d@PCIFN;
191event error.io.pciex.degraded-d@PCIEXFN;
192event error.io.pciex.degraded-d@PCIEXFN/PCIEXFN;
193event error.io.pciex.degraded-d@PCIEXFN/PCIFN;
194event error.io.pciex.degraded-d@PCIFN/PCIFN;
195event error.io.pciex.degraded-d@PCIFN;
196event error.io.pciex.lost-d@PCIEXFN;
197event error.io.pciex.lost-d@PCIEXFN/PCIEXFN;
198event error.io.pciex.lost-d@PCIEXFN/PCIFN;
199event error.io.pciex.lost-d@PCIFN/PCIFN;
200event error.io.pciex.lost-d@PCIFN;
201event error.io.service.restored@PCIEXFN;
202event error.io.service.restored@PCIFN;
203event error.io.device.nf-device@PCIEXFN;
204event error.io.device.deg-device@PCIEXFN;
205event error.io.device.f-device@PCIEXFN;
206
207prop error.io.device.f-device@PCIEXFN (1)->
208    ereport.io.device.inval_state@PCIEXFN,
209    ereport.io.device.no_response@PCIEXFN,
210    ereport.io.device.stall@PCIEXFN,
211    ereport.io.device.badint_limit@PCIEXFN,
212    ereport.io.device.intern_corr@PCIEXFN,
213    ereport.io.device.intern_uncorr@PCIEXFN;
214
215prop error.io.device.f-device@PCIEXFN (0)->
216    error.io.pciex.lost-d@PCIEXFN;
217
218prop error.io.device.deg-device@PCIEXFN (1)->
219    ereport.io.device.inval_state@PCIEXFN,
220    ereport.io.device.no_response@PCIEXFN,
221    ereport.io.device.stall@PCIEXFN,
222    ereport.io.device.badint_limit@PCIEXFN,
223    ereport.io.device.intern_corr@PCIEXFN,
224    ereport.io.device.intern_uncorr@PCIEXFN;
225
226prop error.io.device.deg-device@PCIEXFN (1)->
227    error.io.pciex.degraded-d@PCIEXFN;
228
229prop error.io.device.nf-device@PCIEXFN (1)->
230    ereport.io.device.inval_state@PCIEXFN,
231    ereport.io.device.no_response@PCIEXFN,
232    ereport.io.device.stall@PCIEXFN,
233    ereport.io.device.badint_limit@PCIEXFN,
234    ereport.io.device.intern_corr@PCIEXFN,
235    ereport.io.device.intern_uncorr@PCIEXFN;
236
237prop error.io.device.nf-device@PCIEXFN (1)->
238    error.io.pciex.noimpact-d@PCIEXFN;
239
240/*
241 * handling of service impact ereports.
242 */
243prop error.io.pciex.lost-d@PCIEXFN (1)->
244    ereport.io.service.lost@PCIEXFN,
245    error.io.pciex.lost-d@PCIEXFN/PCIEXFNHZ,
246    error.io.pciex.lost-d@PCIEXFN/PCIFNHZ;
247
248prop error.io.pciex.lost-d@PCIEXFN (0)->
249    ereport.io.service.unaffected@PCIEXFN,
250    ereport.io.service.degraded@PCIEXFN;
251
252prop error.io.pciex.lost-d@PCIFN (1)->
253    ereport.io.service.lost@PCIFN,
254    error.io.pciex.lost-d@PCIFN/PCIFNHZ;
255
256prop error.io.pciex.lost-d@PCIFN (0)->
257    ereport.io.service.unaffected@PCIFN,
258    ereport.io.service.degraded@PCIFN;
259
260prop error.io.pciex.degraded-d@PCIEXFN (1)->
261    ereport.io.service.degraded@PCIEXFN,
262    error.io.pciex.degraded-d@PCIEXFN/PCIEXFNHZ,
263    error.io.pciex.degraded-d@PCIEXFN/PCIFNHZ;
264
265prop error.io.pciex.degraded-d@PCIEXFN (0)->
266    ereport.io.service.unaffected@PCIEXFN;
267
268prop error.io.pciex.degraded-d@PCIFN (1)->
269    ereport.io.service.degraded@PCIFN,
270    error.io.pciex.degraded-d@PCIFN/PCIFNHZ;
271
272prop error.io.pciex.degraded-d@PCIFN (0)->
273    ereport.io.service.unaffected@PCIFN;
274
275prop error.io.pciex.noimpact-d@PCIEXFN (1)->
276    ereport.io.service.unaffected@PCIEXFN,
277    error.io.service.restored@PCIEXFN,
278    error.io.pciex.noimpact-d@PCIEXFN/PCIEXFNHZ,
279    error.io.pciex.noimpact-d@PCIEXFN/PCIFNHZ;
280
281prop error.io.pciex.noimpact-d@PCIFN (1)->
282    ereport.io.service.unaffected@PCIFN,
283    error.io.service.restored@PCIFN,
284    error.io.pciex.noimpact-d@PCIFN/PCIFNHZ;
285
286prop error.io.service.restored@PCIEXFN (1)->
287    ereport.io.service.lost@PCIEXFN,
288    ereport.io.service.degraded@PCIEXFN;
289
290prop error.io.service.restored@PCIEXFN (1)->
291    ereport.io.service.restored@PCIEXFN;
292
293/*
294 * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
295 * A faulty PCI Express hostbridge (root complex) may cause:
296 * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
297 * - nr-d:		the device not to respond to a valid upstream request
298 * - ca-d:		the device to completer abort a valid upstream request
299 * - mtlp-d:		a malformed tlp to be transmitted downstream
300 * - badreq-d:		a bad downstream request - not CRC error (may cause
301 *			completer to respond with ur or ca)
302 * - ecrcreq-d:		TLP with end-to-end CRC error transmitted downstream
303 * - ecrccomp-d:	TLP with end-to-end CRC error transmitted downstream
304 * - poisreq-d:		poisoned request transmitted downstream
305 * - poiscomp-d:	poisoned completion transmitted downstream
306 * - corrlink:		correctable link or physical level error
307 * - fatlink:		fatal link or physical level error
308 */
309event error.io.pciex.nr-d@pciexrc/PCIEXFN;
310event error.io.pciex.ca-d@pciexrc/PCIEXFN;
311event error.io.pciex.mtlp-d@pciexrc/PCIEXFN;
312event error.io.pciex.fatlink@pciexrc/PCIEXFN;
313event error.io.pciex.badreq-d@pciexrc/PCIEXFN;
314event error.io.pciex.nf-poisecrc-d@pciexrc/PCIEXFN;
315event error.io.pciex.f-poisecrc-d@pciexrc/PCIEXFN;
316event error.io.pciex.deg-poisecrc-d@pciexrc/PCIEXFN;
317event ereport.io.pciex.dl.btlp@pciexrc{within(5s)};
318event ereport.io.pciex.dl.bdllp@pciexrc{within(5s)};
319event ereport.io.pciex.dl.rto@pciexrc{within(5s)};
320event ereport.io.pciex.dl.rnr@pciexrc{within(5s)};
321event ereport.io.pciex.pl.re@pciexrc{within(5s)};
322event ereport.io.pciex.dl.btlp@pciexrc/PCIEXFN{within(5s)};
323event ereport.io.pciex.dl.bdllp@pciexrc/PCIEXFN{within(5s)};
324event ereport.io.pciex.dl.rto@pciexrc/PCIEXFN{within(5s)};
325event ereport.io.pciex.dl.rnr@pciexrc/PCIEXFN{within(5s)};
326event ereport.io.pciex.pl.re@pciexrc/PCIEXFN{within(5s)};
327
328prop fault.io.pciex.device-noresp@pciexrc (1)->
329    error.io.pciex.nr-d@pciexrc/PCIEXFNHZ;
330
331prop fault.io.pciex.device-invreq@pciexrc (1)->
332    error.io.pciex.badreq-d@pciexrc/PCIEXFNHZ;
333
334prop fault.io.pciex.device-interr-corr@pciexrc {
335    payloadprop_defined("detector") && setserdsuffix("_btlp") &&
336    setserdn(BTLP_COUNT) && setserdt(BTLP_TIME) } (0)->
337    ereport.io.pciex.dl.btlp@pciexrc,
338    ereport.io.pciex.dl.btlp@pciexrc/PCIEXFNHZ;
339
340prop fault.io.pciex.device-interr-corr@pciexrc {
341    payloadprop_defined("detector") && setserdsuffix("_bdllp") &&
342    setserdn(BDLLP_COUNT) && setserdt(BDLLP_TIME) } (0)->
343    ereport.io.pciex.dl.bdllp@pciexrc,
344    ereport.io.pciex.dl.bdllp@pciexrc/PCIEXFNHZ;
345
346prop fault.io.pciex.device-interr-corr@pciexrc {
347    payloadprop_defined("detector") && setserdsuffix("_rto") &&
348    setserdn(RTO_COUNT) && setserdt(RTO_TIME) } (0)->
349    ereport.io.pciex.dl.rto@pciexrc,
350    ereport.io.pciex.dl.rto@pciexrc/PCIEXFNHZ;
351
352prop fault.io.pciex.device-interr-corr@pciexrc {
353    payloadprop_defined("detector") && setserdsuffix("_rnr") &&
354    setserdn(RNR_COUNT) && setserdt(RNR_TIME) } (0)->
355    ereport.io.pciex.dl.rnr@pciexrc,
356    ereport.io.pciex.dl.rnr@pciexrc/PCIEXFNHZ;
357
358prop fault.io.pciex.device-interr-corr@pciexrc {
359    payloadprop_defined("detector") && setserdsuffix("_re") &&
360    setserdn(RE_COUNT) && setserdt(RE_TIME) } (0)->
361    ereport.io.pciex.pl.re@pciexrc,
362    ereport.io.pciex.pl.re@pciexrc/PCIEXFNHZ;
363
364prop fault.io.pciex.device-interr-unaf@pciexrc (1)->
365    error.io.pciex.nf-poisecrc-d@pciexrc/PCIEXFNHZ;
366
367prop fault.io.pciex.device-interr-deg@pciexrc (1)->
368    error.io.pciex.deg-poisecrc-d@pciexrc/PCIEXFNHZ;
369
370prop fault.io.pciex.device-interr@pciexrc (1)->
371    error.io.pciex.f-poisecrc-d@pciexrc/PCIEXFNHZ,
372    error.io.pciex.ca-d@pciexrc/PCIEXFNHZ,
373    error.io.pciex.mtlp-d@pciexrc/PCIEXFNHZ,
374    error.io.pciex.fatlink@pciexrc/PCIEXFNHZ;
375
376/*
377 * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
378 * A faulty PCI Express leaf device or upstream switch port may cause:
379 * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
380 * - flt-nr-u:		the device not to respond to a valid downstream request
381 * - flt-ca-u:		the device to completer abort a valid downstream request
382 * - flt-badreq-u:	a bad upstream request - not CRC error (may cause
383 *			completer to respond with ur or ca) - leaf only
384 * - flt-mtlp-u:	a malformed tlp transmitted upstream - leaf only
385 * - flt-ecrcreq-u:	request with end-to-end CRC error transmitted upstream
386 * - flt-ecrccomp-u:	compl with end-to-end CRC error transmitted upstream
387 * - flt-poisreq-u:	poisoned request transmitted upstream
388 * - flt-poiscomp-u:	poisoned completion transmitted upstream
389 * - device:		internal error reported by leaf device
390 * - corrlink:		correctable link or physical level error
391 * - fatlink:		fatal link or physical level error
392 */
393
394event error.io.pciex.flt-nr-u@PCIEXFN;
395event error.io.pciex.flt-ca-u@PCIEXFN;
396event error.io.pciex.flt-mtlp-u@PCIEXFN;
397event error.io.pciex.fatlink@PCIEXFN;
398event error.io.pciex.flt-badreq-u@PCIEXFN;
399event error.io.pciex.flt-nf-poisecrc-u@PCIEXFN;
400event error.io.pciex.flt-f-poisecrc-u@PCIEXFN;
401event error.io.pciex.flt-deg-poisecrc-u@PCIEXFN;
402event ereport.io.pciex.dl.btlp@PCIEXFN{within(5s)};
403event ereport.io.pciex.dl.bdllp@PCIEXFN{within(5s)};
404event ereport.io.pciex.dl.rto@PCIEXFN{within(5s)};
405event ereport.io.pciex.dl.rnr@PCIEXFN{within(5s)};
406event ereport.io.pciex.pl.re@PCIEXFN{within(5s)};
407event ereport.io.pciex.dl.btlp@PCIEXFN/PCIEXFN{within(5s)};
408event ereport.io.pciex.dl.bdllp@PCIEXFN/PCIEXFN{within(5s)};
409event ereport.io.pciex.dl.rto@PCIEXFN/PCIEXFN{within(5s)};
410event ereport.io.pciex.dl.rnr@PCIEXFN/PCIEXFN{within(5s)};
411event ereport.io.pciex.pl.re@PCIEXFN/PCIEXFN{within(5s)};
412
413prop fault.io.pciex.device-noresp@PCIEXFN { IS_LF(PCIEXFN) } (1)->
414    error.io.pciex.flt-nr-u@PCIEXFN;
415
416prop fault.io.pciex.device-noresp@PCIEXFN { IS_SU(PCIEXFN) } (1)->
417    error.io.pciex.flt-nr-u@PCIEXFN;
418
419prop fault.io.pciex.device-invreq@PCIEXFN { IS_LF(PCIEXFN) } (1)->
420    error.io.pciex.flt-badreq-u@PCIEXFN;
421
422prop fault.io.pciex.device-interr-corr@pciexrc/PCIEXFN {
423    payloadprop_defined("detector") && setserdsuffix("_btlp") &&
424    setserdn(BTLP_COUNT) && setserdt(BTLP_TIME) } (0)->
425    ereport.io.pciex.dl.btlp@pciexrc,
426    ereport.io.pciex.dl.btlp@pciexrc/PCIEXFNHZ;
427
428prop fault.io.pciex.device-interr-corr@pciexrc/PCIEXFN {
429    payloadprop_defined("detector") && setserdsuffix("_bdllp") &&
430    setserdn(BDLLP_COUNT) && setserdt(BDLLP_TIME) } (0)->
431    ereport.io.pciex.dl.bdllp@pciexrc,
432    ereport.io.pciex.dl.bdllp@pciexrc/PCIEXFNHZ;
433
434prop fault.io.pciex.device-interr-corr@pciexrc/PCIEXFN {
435    payloadprop_defined("detector") && setserdsuffix("_rto") &&
436    setserdn(RTO_COUNT) && setserdt(RTO_TIME) } (0)->
437    ereport.io.pciex.dl.rto@pciexrc,
438    ereport.io.pciex.dl.rto@pciexrc/PCIEXFNHZ;
439
440prop fault.io.pciex.device-interr-corr@pciexrc/PCIEXFN {
441    payloadprop_defined("detector") && setserdsuffix("_rnr") &&
442    setserdn(RNR_COUNT) && setserdt(RNR_TIME) } (0)->
443    ereport.io.pciex.dl.rnr@pciexrc,
444    ereport.io.pciex.dl.rnr@pciexrc/PCIEXFNHZ;
445
446prop fault.io.pciex.device-interr-corr@pciexrc/PCIEXFN {
447    payloadprop_defined("detector") && setserdsuffix("_re") &&
448    setserdn(RE_COUNT) && setserdt(RE_TIME) } (0)->
449    ereport.io.pciex.pl.re@pciexrc,
450    ereport.io.pciex.pl.re@pciexrc/PCIEXFNHZ;
451
452prop fault.io.pciex.device-interr-corr@PCIEXFN/PCIEXFN {
453    !IS_SD(PCIEXFN/PCIEXFN) &&
454    payloadprop_defined("detector") && setserdsuffix("_btlp") &&
455    setserdn(BTLP_COUNT) && setserdt(BTLP_TIME) } (0)->
456    ereport.io.pciex.dl.btlp@PCIEXFN,
457    ereport.io.pciex.dl.btlp@PCIEXFN/PCIEXFNHZ;
458
459prop fault.io.pciex.device-interr-corr@PCIEXFN/PCIEXFN {
460    !IS_SD(PCIEXFN/PCIEXFN) &&
461    payloadprop_defined("detector") && setserdsuffix("_bdllp") &&
462    setserdn(BDLLP_COUNT) && setserdt(BDLLP_TIME) } (0)->
463    ereport.io.pciex.dl.bdllp@PCIEXFN,
464    ereport.io.pciex.dl.bdllp@PCIEXFN/PCIEXFNHZ;
465
466prop fault.io.pciex.device-interr-corr@PCIEXFN/PCIEXFN {
467    !IS_SD(PCIEXFN/PCIEXFN) &&
468    payloadprop_defined("detector") && setserdsuffix("_rto") &&
469    setserdn(RTO_COUNT) && setserdt(RTO_TIME) } (0)->
470    ereport.io.pciex.dl.rto@PCIEXFN,
471    ereport.io.pciex.dl.rto@PCIEXFN/PCIEXFNHZ;
472
473prop fault.io.pciex.device-interr-corr@PCIEXFN/PCIEXFN {
474    !IS_SD(PCIEXFN/PCIEXFN) &&
475    payloadprop_defined("detector") && setserdsuffix("_rnr") &&
476    setserdn(RNR_COUNT) && setserdt(RNR_TIME) } (0)->
477    ereport.io.pciex.dl.rnr@PCIEXFN,
478    ereport.io.pciex.dl.rnr@PCIEXFN/PCIEXFNHZ;
479
480prop fault.io.pciex.device-interr-corr@PCIEXFN/PCIEXFN {
481    !IS_SD(PCIEXFN/PCIEXFN) &&
482    payloadprop_defined("detector") && setserdsuffix("_re") &&
483    setserdn(RE_COUNT) && setserdt(RE_TIME) } (0)->
484    ereport.io.pciex.pl.re@PCIEXFN,
485    ereport.io.pciex.pl.re@PCIEXFN/PCIEXFNHZ;
486
487prop fault.io.pciex.device-interr-unaf@PCIEXFN { IS_SU(PCIEXFN) } (1)->
488    error.io.pciex.flt-nf-poisecrc-u@PCIEXFN;
489
490prop fault.io.pciex.device-interr-corr@PCIEXFN { IS_LF(PCIEXFN) } (0)->
491    error.io.device.nf-device@PCIEXFN;
492
493prop fault.io.pciex.device-interr-unaf@PCIEXFN { IS_LF(PCIEXFN) } (1)->
494    error.io.pciex.flt-nf-poisecrc-u@PCIEXFN;
495
496prop fault.io.pciex.device-interr-deg@PCIEXFN { IS_SU(PCIEXFN) } (1)->
497    error.io.pciex.flt-deg-poisecrc-u@PCIEXFN;
498
499prop fault.io.pciex.device-interr@PCIEXFN { IS_SU(PCIEXFN) } (1)->
500    error.io.pciex.flt-f-poisecrc-u@PCIEXFN,
501    error.io.pciex.flt-ca-u@PCIEXFN,
502    error.io.pciex.fatlink@PCIEXFN;
503
504prop fault.io.pciex.device-interr-deg@PCIEXFN { IS_LF(PCIEXFN) } (1)->
505    error.io.pciex.flt-deg-poisecrc-u@PCIEXFN,
506    error.io.device.deg-device@PCIEXFN;
507
508prop fault.io.pciex.device-interr@PCIEXFN { IS_LF(PCIEXFN) } (1)->
509    error.io.pciex.flt-f-poisecrc-u@PCIEXFN,
510    error.io.device.f-device@PCIEXFN,
511    error.io.pciex.flt-ca-u@PCIEXFN,
512    error.io.pciex.flt-mtlp-u@PCIEXFN,
513    error.io.pciex.fatlink@PCIEXFN;
514
515/*
516 * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
517 * A faulty PCI Express downstream switch port may cause
518 * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
519 * - nr-d:		the device not to respond to an upstream request
520 * - ca-d:		the device to completer abort an upstream request
521 * - ecrcreq-d:		TLP with end-to-end CRC error transmitted upstream
522 * - ecrccomp-d:	TLP with end-to-end CRC error transmitted upstream
523 * - poisreq-d:		poisoned request transmitted upstream
524 * - poiscomp-d:	poisoned completion transmitted upstream
525 * - corrlink:		correctable link or physical level error
526 * - fatlink:		fatal link or physical level error
527 */
528
529event error.io.pciex.nr-d@PCIEXFN/PCIEXFN;
530event error.io.pciex.ca-d@PCIEXFN/PCIEXFN;
531event error.io.pciex.fatlink@PCIEXFN/PCIEXFN;
532event error.io.pciex.nf-poisecrc-d@PCIEXFN/PCIEXFN;
533event error.io.pciex.f-poisecrc-d@PCIEXFN/PCIEXFN;
534event error.io.pciex.deg-poisecrc-d@PCIEXFN/PCIEXFN;
535
536prop fault.io.pciex.device-noresp@PCIEXFN { IS_SD(PCIEXFN) } (1)->
537    error.io.pciex.nr-d@PCIEXFN/PCIEXFNHZ;
538
539prop fault.io.pciex.device-interr-corr@PCIEXFN { IS_SD(PCIEXFN) &&
540    payloadprop_defined("detector") && setserdsuffix("_btlp") &&
541    setserdn(BTLP_COUNT) && setserdt(BTLP_TIME) } (0)->
542    ereport.io.pciex.dl.btlp@PCIEXFN,
543    ereport.io.pciex.dl.btlp@PCIEXFN/PCIEXFNHZ;
544
545prop fault.io.pciex.device-interr-corr@PCIEXFN { IS_SD(PCIEXFN) &&
546    payloadprop_defined("detector") && setserdsuffix("_bdllp") &&
547    setserdn(BDLLP_COUNT) && setserdt(BDLLP_TIME) } (0)->
548    ereport.io.pciex.dl.bdllp@PCIEXFN,
549    ereport.io.pciex.dl.bdllp@PCIEXFN/PCIEXFNHZ;
550
551prop fault.io.pciex.device-interr-corr@PCIEXFN { IS_SD(PCIEXFN) &&
552    payloadprop_defined("detector") && setserdsuffix("_rto") &&
553    setserdn(RTO_COUNT) && setserdt(RTO_TIME) } (0)->
554    ereport.io.pciex.dl.rto@PCIEXFN,
555    ereport.io.pciex.dl.rto@PCIEXFN/PCIEXFNHZ;
556
557prop fault.io.pciex.device-interr-corr@PCIEXFN { IS_SD(PCIEXFN) &&
558    payloadprop_defined("detector") && setserdsuffix("_rnr") &&
559    setserdn(RNR_COUNT) && setserdt(RNR_TIME) } (0)->
560    ereport.io.pciex.dl.rnr@PCIEXFN,
561    ereport.io.pciex.dl.rnr@PCIEXFN/PCIEXFNHZ;
562
563prop fault.io.pciex.device-interr-corr@PCIEXFN { IS_SD(PCIEXFN) &&
564    payloadprop_defined("detector") && setserdsuffix("_re") &&
565    setserdn(RE_COUNT) && setserdt(RE_TIME) } (0)->
566    ereport.io.pciex.pl.re@PCIEXFN,
567    ereport.io.pciex.pl.re@PCIEXFN/PCIEXFNHZ;
568
569prop fault.io.pciex.device-interr-unaf@PCIEXFN { IS_SD(PCIEXFN) } (1)->
570    error.io.pciex.nf-poisecrc-d@PCIEXFN/PCIEXFNHZ;
571
572prop fault.io.pciex.device-interr-deg@PCIEXFN { IS_SD(PCIEXFN) } (1)->
573    error.io.pciex.deg-poisecrc-d@PCIEXFN/PCIEXFNHZ;
574
575prop fault.io.pciex.device-interr@PCIEXFN { IS_SD(PCIEXFN) } (1)->
576    error.io.pciex.ca-d@PCIEXFN/PCIEXFNHZ,
577    error.io.pciex.f-poisecrc-d@PCIEXFN/PCIEXFNHZ,
578    error.io.pciex.fatlink@PCIEXFN/PCIEXFNHZ;
579
580/*
581 * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
582 * A faulty PCIEX bus may cause:
583 * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
584 * - flt-nr-u:		a device to not respond because the link is down
585 * - nr-d:		a device to not respond because the link is down
586 * - corrlink:		correctable link or physical level error
587 * - fatlink:		fatal link or physical level error
588 */
589
590event error.io.pciex.nr-d@PCIEXFN;
591
592prop fault.io.pciex.bus-noresp@PCIEXFN { !IS_SD(PCIEXFN) } (0)->
593    error.io.pciex.flt-nr-u@PCIEXFN,
594    error.io.pciex.nr-d@PCIEXFN;
595
596prop fault.io.pciex.bus-linkerr-corr@PCIEXFN/PCIEXFN {
597    !IS_SD(PCIEXFN/PCIEXFN) &&
598    payloadprop_defined("detector") && setserdsuffix("_btlp") &&
599    setserdn(BTLP_COUNT) && setserdt(BTLP_TIME) } (0)->
600    ereport.io.pciex.dl.btlp@PCIEXFN,
601    ereport.io.pciex.dl.btlp@PCIEXFN/PCIEXFNHZ;
602
603prop fault.io.pciex.bus-linkerr-corr@PCIEXFN/PCIEXFN {
604    !IS_SD(PCIEXFN/PCIEXFN) &&
605    payloadprop_defined("detector") && setserdsuffix("_bdllp") &&
606    setserdn(BDLLP_COUNT) && setserdt(BDLLP_TIME) } (0)->
607    ereport.io.pciex.dl.bdllp@PCIEXFN,
608    ereport.io.pciex.dl.bdllp@PCIEXFN/PCIEXFNHZ;
609
610prop fault.io.pciex.bus-linkerr-corr@PCIEXFN/PCIEXFN {
611    !IS_SD(PCIEXFN/PCIEXFN) &&
612    payloadprop_defined("detector") && setserdsuffix("_rto") &&
613    setserdn(RTO_COUNT) && setserdt(RTO_TIME) } (0)->
614    ereport.io.pciex.dl.rto@PCIEXFN,
615    ereport.io.pciex.dl.rto@PCIEXFN/PCIEXFNHZ;
616
617prop fault.io.pciex.bus-linkerr-corr@PCIEXFN/PCIEXFN {
618    !IS_SD(PCIEXFN/PCIEXFN) &&
619    payloadprop_defined("detector") && setserdsuffix("_rnr") &&
620    setserdn(RNR_COUNT) && setserdt(RNR_TIME) } (0)->
621    ereport.io.pciex.dl.rnr@PCIEXFN,
622    ereport.io.pciex.dl.rnr@PCIEXFN/PCIEXFNHZ;
623
624prop fault.io.pciex.bus-linkerr-corr@PCIEXFN/PCIEXFN {
625    !IS_SD(PCIEXFN/PCIEXFN) &&
626    payloadprop_defined("detector") && setserdsuffix("_re") &&
627    setserdn(RE_COUNT) && setserdt(RE_TIME) } (0)->
628    ereport.io.pciex.pl.re@PCIEXFN,
629    ereport.io.pciex.pl.re@PCIEXFN/PCIEXFNHZ;
630
631prop fault.io.pciex.bus-linkerr-corr@pciexrc/PCIEXFN {
632    payloadprop_defined("detector") && setserdsuffix("_btlp") &&
633    setserdn(BTLP_COUNT) && setserdt(BTLP_TIME) } (0)->
634    ereport.io.pciex.dl.btlp@pciexrc,
635    ereport.io.pciex.dl.btlp@pciexrc/PCIEXFNHZ;
636
637prop fault.io.pciex.bus-linkerr-corr@pciexrc/PCIEXFN {
638    payloadprop_defined("detector") && setserdsuffix("_bdllp") &&
639    setserdn(BDLLP_COUNT) && setserdt(BDLLP_TIME) } (0)->
640    ereport.io.pciex.dl.bdllp@pciexrc,
641    ereport.io.pciex.dl.bdllp@pciexrc/PCIEXFNHZ;
642
643prop fault.io.pciex.bus-linkerr-corr@pciexrc/PCIEXFN {
644    payloadprop_defined("detector") && setserdsuffix("_rto") &&
645    setserdn(RTO_COUNT) && setserdt(RTO_TIME) } (0)->
646    ereport.io.pciex.dl.rto@pciexrc,
647    ereport.io.pciex.dl.rto@pciexrc/PCIEXFNHZ;
648
649prop fault.io.pciex.bus-linkerr-corr@pciexrc/PCIEXFN {
650    payloadprop_defined("detector") && setserdsuffix("_rnr") &&
651    setserdn(RNR_COUNT) && setserdt(RNR_TIME) } (0)->
652    ereport.io.pciex.dl.rnr@pciexrc,
653    ereport.io.pciex.dl.rnr@pciexrc/PCIEXFNHZ;
654
655prop fault.io.pciex.bus-linkerr-corr@pciexrc/PCIEXFN {
656    payloadprop_defined("detector") && setserdsuffix("_re") &&
657    setserdn(RE_COUNT) && setserdt(RE_TIME) } (0)->
658    ereport.io.pciex.pl.re@pciexrc,
659    ereport.io.pciex.pl.re@pciexrc/PCIEXFNHZ;
660
661prop fault.io.pciex.bus-linkerr@PCIEXFN { !IS_SD(PCIEXFN) } (0)->
662    error.io.pciex.fatlink@PCIEXFN;
663
664/*
665 * ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
666 * A faulty pciex-pci bridge may cause
667 * ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
668 * The following errors to propagate onto the PCI Express fabric
669 * - flt-nr-u:		the device not to respond to a valid downstream request
670 * - flt-ca-u:		the device to completer abort a valid downstream request
671 * - flt-ecrcreq-u:	request with end-to-end CRC error transmitted upstream
672 * - flt-ecrccomp-u:	compl with end-to-end CRC error transmitted upstream
673 * - flt-poisreq-u:	poisoned request transmitted upstream
674 * - flt-poiscomp-u:	poisoned completion transmitted upstream
675 * - corrlink:		correctable link or physical level error upstream
676 * - fatlink:		fatal link or physical level error upstream
677 * - sec-interr:	internal error on pci express to pci bridge
678 *
679 * And the following errors to propagate onto the secondary pci or pci/x bus
680 * (these will be handled by code in the pci.esc file).
681 * - nr-pw-d:		the device not to respond to a valid upstream request
682 * - nr-drw-d:		the device not to respond to a valid upstream request
683 * - retry-to-d:	failure to retry an downstream delayed request
684 * - ta-pw-d:		the device responds with a ta to a valid upstream
685 *			request
686 * - ta-drw-d:		the device responds with a ta to a valid upstream
687 *			request
688 * - ape-d:	address/parity to get corrupted during downstream transmission.
689 * - dpe-d:	data/parity to get corrupted during downstream transmission.
690 * - scpe-d:	split completion to get corrupted during downstream transmission
691 */
692
693event error.io.pci.ape-d@PCIEXFN/PCIFN;
694event error.io.pci.f-dpe-d@PCIEXFN/PCIFN;
695event error.io.pci.deg-dpe-d@PCIEXFN/PCIFN;
696event error.io.pci.nf-dpe-d@PCIEXFN/PCIFN;
697event error.io.pci.retry-to-d@PCIEXFN/PCIFN;
698event error.io.pci.nr-pw-d@PCIEXFN/PCIFN;
699event error.io.pci.nr-drw-d@PCIEXFN/PCIFN;
700event error.io.pci.ta-pw-d@PCIEXFN/PCIFN;
701event error.io.pci.ta-drw-d@PCIEXFN/PCIFN;
702event error.io.pcix.scpe-d@PCIEXFN/PCIFN;
703event error.io.pciex.sec-interr@PCIEXFN;
704event ereport.io.pci.sec-sta@PCIEXFN{within(5s)};
705
706prop fault.io.pciex.device-noresp@PCIEXFN { IS_BG(PCIEXFN) } (1)->
707    error.io.pciex.flt-nr-u@PCIEXFN,
708    error.io.pci.retry-to-d@PCIEXFN/PCIFNHZ,
709    error.io.pci.nr-pw-d@PCIEXFN/PCIFNHZ,
710    error.io.pci.nr-drw-d@PCIEXFN/PCIFNHZ;
711
712prop fault.io.pciex.device-interr-unaf@PCIEXFN { IS_BG(PCIEXFN) } (1)->
713    error.io.pciex.flt-nf-poisecrc-u@PCIEXFN,
714    error.io.pci.nf-dpe-d@PCIEXFN/PCIFNHZ;
715
716prop fault.io.pciex.device-interr-deg@PCIEXFN { IS_BG(PCIEXFN) } (1)->
717    error.io.pciex.flt-deg-poisecrc-u@PCIEXFN,
718    error.io.pci.deg-dpe-d@PCIEXFN/PCIFNHZ;
719
720prop fault.io.pciex.device-interr@PCIEXFN { IS_BG(PCIEXFN) } (1)->
721    error.io.pciex.flt-f-poisecrc-u@PCIEXFN,
722    error.io.pciex.flt-ca-u@PCIEXFN,
723    error.io.pciex.flt-mtlp-u@PCIEXFN,
724    error.io.pciex.sec-interr@PCIEXFN,
725    error.io.pciex.fatlink@PCIEXFN,
726    error.io.pci.ta-pw-d@PCIEXFN/PCIFNHZ,
727    error.io.pci.ta-drw-d@PCIEXFN/PCIFNHZ,
728    error.io.pci.ape-d@PCIEXFN/PCIFNHZ,
729    error.io.pcix.scpe-d@PCIEXFN/PCIFNHZ,
730    error.io.pci.f-dpe-d@PCIEXFN/PCIFNHZ;
731
732prop fault.io.pciex.device-interr-unaf@PCIEXFN { IS_BG(PCIEXFN) } (0)->
733    ereport.io.pci.sec-sta@PCIEXFN;
734
735prop fault.io.pciex.device-interr@PCIEXFN { IS_BG(PCIEXFN) } (0)->
736    ereport.io.pci.sec-sta@PCIEXFN;
737
738/*
739 * the following rules for ptlp and ecrc faults are split into fatal and
740 * nonfatal, depending on the service impact reported by the leaf driver
741 */
742event error.io.pciex.nf-poisecrc-d@PCIEXFN;
743event error.io.pciex.deg-poisecrc-d@PCIEXFN;
744event error.io.pciex.f-poisecrc-d@PCIEXFN;
745event error.io.pciex.ecrcreq-d@PCIEXFN;
746event error.io.pciex.ecrccomp-d@PCIEXFN;
747event error.io.pciex.poisreq-d@PCIEXFN;
748event error.io.pciex.poiscomp-d@PCIEXFN;
749event error.io.pciex.flt-poisreq-u@PCIEXFN;
750event error.io.pciex.flt-poiscomp-u@PCIEXFN;
751event error.io.pciex.flt-ecrcreq-u@PCIEXFN;
752event error.io.pciex.flt-ecrccomp-u@PCIEXFN;
753
754prop error.io.pciex.nf-poisecrc-d@PCIEXFN (1)->
755    error.io.pciex.ecrcreq-d@PCIEXFN,
756    error.io.pciex.ecrccomp-d@PCIEXFN,
757    error.io.pciex.poisreq-d@PCIEXFN,
758    error.io.pciex.poiscomp-d@PCIEXFN;
759
760prop error.io.pciex.nf-poisecrc-d@PCIEXFN (1)->
761    error.io.pciex.noimpact-d@PCIEXFN;
762
763prop error.io.pciex.f-poisecrc-d@PCIEXFN (1)->
764    error.io.pciex.ecrcreq-d@PCIEXFN,
765    error.io.pciex.ecrccomp-d@PCIEXFN,
766    error.io.pciex.poisreq-d@PCIEXFN,
767    error.io.pciex.poiscomp-d@PCIEXFN;
768
769prop error.io.pciex.f-poisecrc-d@PCIEXFN (0)->
770    error.io.pciex.lost-d@PCIEXFN;
771
772prop error.io.pciex.deg-poisecrc-d@PCIEXFN (1)->
773    error.io.pciex.ecrcreq-d@PCIEXFN,
774    error.io.pciex.ecrccomp-d@PCIEXFN,
775    error.io.pciex.poisreq-d@PCIEXFN,
776    error.io.pciex.poiscomp-d@PCIEXFN;
777
778prop error.io.pciex.deg-poisecrc-d@PCIEXFN (1)->
779    error.io.pciex.degraded-d@PCIEXFN;
780
781prop error.io.pciex.flt-nf-poisecrc-u@PCIEXFN (1)->
782    error.io.pciex.flt-ecrcreq-u@PCIEXFN,
783    error.io.pciex.flt-ecrccomp-u@PCIEXFN,
784    error.io.pciex.flt-poisreq-u@PCIEXFN,
785    error.io.pciex.flt-poiscomp-u@PCIEXFN;
786
787prop error.io.pciex.flt-nf-poisecrc-u@PCIEXFN (1)->
788    error.io.pciex.noimpact-d@PCIEXFN;
789
790prop error.io.pciex.flt-deg-poisecrc-u@PCIEXFN (1)->
791    error.io.pciex.flt-ecrcreq-u@PCIEXFN,
792    error.io.pciex.flt-ecrccomp-u@PCIEXFN,
793    error.io.pciex.flt-poisreq-u@PCIEXFN,
794    error.io.pciex.flt-poiscomp-u@PCIEXFN;
795
796prop error.io.pciex.flt-deg-poisecrc-u@PCIEXFN (1)->
797    error.io.pciex.degraded-d@PCIEXFN;
798
799prop error.io.pciex.flt-f-poisecrc-u@PCIEXFN (1)->
800    error.io.pciex.flt-ecrcreq-u@PCIEXFN,
801    error.io.pciex.flt-ecrccomp-u@PCIEXFN,
802    error.io.pciex.flt-poisreq-u@PCIEXFN,
803    error.io.pciex.flt-poiscomp-u@PCIEXFN;
804
805prop error.io.pciex.flt-f-poisecrc-u@PCIEXFN (0)->
806    error.io.pciex.lost-d@PCIEXFN;
807
808/*
809 * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
810 * declarations
811 * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
812 */
813event error.io.pciex.fatal@PCIEXFN;
814event error.io.pciex.nonfatal@PCIEXFN;
815event error.io.pciex.flt-ur-u@PCIEXFN;
816event error.io.pciex.mtlp-d@PCIEXFN;
817event error.io.pciex.sw-mtlp-d@PCIEXFN;
818event error.io.pciex.mtlp-d@PCIEXFN/PCIEXFN;
819event error.io.pciex.ca-d@PCIEXFN;
820event error.io.pciex.ca-fwd-d@PCIEXFN;
821event error.io.pciex.ca-fwd-d@PCIEXFN/PCIEXFN;
822event error.io.pciex.poisreq-fwd-d@PCIEXFN;
823event error.io.pciex.poisreq-fwd-d@pciexrc/PCIEXFN;
824event error.io.pciex.poisreq-fwd-d@PCIEXFN/PCIEXFN;
825event error.io.pciex.poiscomp-fwd-d@PCIEXFN;
826event error.io.pciex.poiscomp-fwd-d@PCIEXFN/PCIEXFN;
827event error.io.pciex.ecrcreq-fwd-d@PCIEXFN/PCIEXFN;
828event error.io.pciex.ecrccomp-fwd-d@PCIEXFN/PCIEXFN;
829event error.io.pciex.ecrcreq-fwd-d@PCIEXFN;
830event error.io.pciex.ecrccomp-fwd-d@PCIEXFN;
831event error.io.pciex.source-ecrcreq-u@PCIEXFN;
832event error.io.pciex.source-ecrccomp-u@PCIEXFN;
833event error.io.pciex.source-poiscomp-u@PCIEXFN;
834event error.io.pciex.source-poisreq-u@PCIEXFN;
835event error.io.pciex.badreq-d@PCIEXFN;
836event error.io.pciex.badreq-d@PCIEXFN/PCIEXFN;
837event error.io.pci.badreq-pw-d@PCIEXFN/PCIFN;
838event error.io.pci.badreq-drw-d@PCIEXFN/PCIFN;
839event error.io.pci.target-ma-d@PCIEXFN;
840event error.io.pci.target-rta-d@PCIEXFN;
841event error.io.pci.dpdata-pw-d@PCIEXFN/PCIFN;
842event error.io.pci.dpdata-dw-d@PCIEXFN/PCIFN;
843event error.io.pci.dpdata-dr-d@PCIEXFN/PCIFN;
844event error.io.pciex.ca-u@PCIEXFN;
845event error.io.pciex.ca-u@PCIEXFN/PCIEXFN;
846event error.io.pciex.ca-u@pciexrc/PCIEXFN;
847event error.io.pciex.ur-u@PCIEXFN;
848event error.io.pciex.ur-u@PCIEXFN/PCIEXFN;
849event error.io.pciex.ur-u@pciexrc/PCIEXFN;
850event error.io.pciex.nr-u@PCIEXFN;
851event error.io.pciex.nr-u@PCIEXFN/PCIEXFN;
852event error.io.pciex.nr-u@pciexrc/PCIEXFN;
853event error.io.pciex.mtlp-u@PCIEXFN;
854event error.io.pciex.mtlp-u@PCIEXFN/PCIEXFN;
855event error.io.pciex.mtlp-u@pciexrc/PCIEXFN;
856event error.io.pciex.badreq-u@PCIEXFN;
857event error.io.pciex.badreq-u@PCIEXFN/PCIEXFN;
858event error.io.pciex.badreq-u@pciexrc/PCIEXFN;
859event error.io.pciex.poisreq-u@PCIEXFN;
860event error.io.pciex.poisreq-u@PCIEXFN/PCIEXFN;
861event error.io.pciex.poisreq-u@pciexrc/PCIEXFN;
862event error.io.pciex.poiscomp-u@PCIEXFN;
863event error.io.pciex.poiscomp-u@PCIEXFN/PCIEXFN;
864event error.io.pciex.poiscomp-u@pciexrc/PCIEXFN;
865event error.io.pciex.ecrcreq-u@PCIEXFN;
866event error.io.pciex.ecrcreq-u@PCIEXFN/PCIEXFN;
867event error.io.pciex.ecrccomp-u@PCIEXFN;
868event error.io.pciex.ecrccomp-u@PCIEXFN/PCIEXFN;
869
870event ereport.io.pci.ma@PCIEXFN{within(5s)};
871event ereport.io.pci.mdpe@PCIEXFN{within(5s)};
872event ereport.io.pci.dpe@PCIEXFN{within(5s)};
873event ereport.io.pci.rta@PCIEXFN{within(5s)};
874event ereport.io.pci.sta@PCIEXFN{within(5s)};
875event ereport.io.pciex.dl.dllp@PCIEXFN{within(5s)};
876event ereport.io.pciex.pl.te@PCIEXFN{within(5s)};
877event ereport.io.pciex.tl.fcp@PCIEXFN{within(5s)};
878event ereport.io.pciex.tl.rof@PCIEXFN{within(5s)};
879event ereport.io.pciex.tl.mtlp@PCIEXFN{within(5s)};
880event ereport.io.pciex.tl.ur@PCIEXFN{within(5s)};
881event ereport.io.pciex.tl.ca@PCIEXFN{within(5s)};
882event ereport.io.pciex.tl.ptlp@PCIEXFN{within(5s)};
883event ereport.io.pciex.tl.ecrc@PCIEXFN{within(5s)};
884event ereport.io.pciex.tl.uc@PCIEXFN{within(5s)};
885event ereport.io.pciex.tl.cto@PCIEXFN{within(5s)};
886event ereport.io.pciex.dl.dllp@pciexrc{within(5s)};
887event ereport.io.pciex.pl.te@pciexrc{within(5s)};
888event ereport.io.pciex.tl.fcp@pciexrc{within(5s)};
889event ereport.io.pciex.tl.rof@pciexrc{within(5s)};
890event ereport.io.pciex.tl.mtlp@pciexrc{within(5s)};
891event ereport.io.pciex.tl.ur@pciexrc{within(5s)};
892event ereport.io.pciex.tl.ca@pciexrc{within(5s)};
893event ereport.io.pciex.tl.ptlp@pciexrc{within(5s)};
894event ereport.io.pciex.tl.ecrc@pciexrc{within(5s)};
895event ereport.io.pciex.tl.cto@pciexrc{within(5s)};
896event ereport.io.pci.sec-ma@pciexrc{within(5s)};
897event ereport.io.pci.sec-mdpe@pciexrc{within(5s)};
898event ereport.io.pci.sec-dpe@pciexrc{within(5s)};
899event ereport.io.pci.sec-rta@pciexrc{within(5s)};
900event ereport.io.pci.sec-sta@pciexrc{within(5s)};
901event ereport.io.pci.sec-mdpe@PCIEXFN{within(5s)};
902event ereport.io.pci.sec-dpe@PCIEXFN{within(5s)};
903event ereport.io.pci.sec-rserr@PCIEXFN{within(5s)};
904event ereport.io.pci.sserr@PCIEXFN{within(5s)};
905event ereport.io.pci.sec-rserr@pciexrc{within(5s)};
906event ereport.io.pciex.rc.fe-msg@pciexrc{within(5s)};
907event ereport.io.pciex.rc.nfe-msg@pciexrc{within(5s)};
908event ereport.io.pciex.rc.mue-msg@pciexrc{within(5s)};
909event ereport.io.pciex.bdg.sec-interr@PCIEXFN{within(5s)};
910event ereport.io.pciex.bdg.sec-ude@PCIEXFN{within(5s)};
911event ereport.io.pci.target-mdpe@PCIEXFN{within(5s)};
912event ereport.io.pci.target-mdpe@PCIFN{within(5s)};
913
914/*
915 * handling of fatal and nonfatal error messages propagated up to root complex
916 *
917 * Use these for errors reported by root-complex on behalf of another device.
918 * Can use source-id payload to identify where the message came from.
919 */
920prop error.io.pciex.fatal@PCIEXFN1 (1)->
921    ereport.io.pciex.rc.mue-msg@pciexrc { is_under(pciexrc, PCIEXFN1) },
922    ereport.io.pciex.rc.fe-msg@pciexrc { is_under(pciexrc, PCIEXFN1) &&
923	SOURCE_ID_MATCHES_BDF };
924
925prop error.io.pciex.fatal@PCIEXFN (0)->
926    ereport.io.pci.sserr@PCIEXFN;
927
928prop error.io.pciex.fatal@PCIEXFN { is_under(PCIEXFN1, PCIEXFN) } (0)->
929    ereport.io.pci.sserr@PCIEXFN1,
930    ereport.io.pci.sec-rserr@PCIEXFN1;
931
932prop error.io.pciex.fatal@PCIEXFN { is_under(pciexrc, PCIEXFN) } (0)->
933    ereport.io.pci.sec-rserr@pciexrc;
934
935prop error.io.pciex.nonfatal@PCIEXFN1 (1)->
936    ereport.io.pciex.rc.mue-msg@pciexrc { is_under(pciexrc, PCIEXFN1) },
937    ereport.io.pciex.rc.nfe-msg@pciexrc { is_under(pciexrc, PCIEXFN1) &&
938	SOURCE_ID_MATCHES_BDF };
939
940prop error.io.pciex.nonfatal@PCIEXFN (0)->
941    ereport.io.pci.sserr@PCIEXFN;
942
943prop error.io.pciex.nonfatal@PCIEXFN { is_under(PCIEXFN1, PCIEXFN) } (0)->
944    ereport.io.pci.sserr@PCIEXFN1,
945    ereport.io.pci.sec-rserr@PCIEXFN1;
946
947prop error.io.pciex.nonfatal@PCIEXFN { is_under(pciexrc, PCIEXFN) } (0)->
948    ereport.io.pci.sec-rserr@pciexrc;
949
950/*
951 * link-level errors - could generate ereports at either end of link
952 *
953 * can use may propagations here as these ereports are only seen for these
954 * faults.
955 */
956prop error.io.pciex.fatlink@PCIEXFN { !IS_SD(PCIEXFN) } (0)->
957    error.io.pciex.fatal@PCIEXFN;
958
959prop error.io.pciex.fatlink@PCIEXFN { !IS_SD(PCIEXFN) } (0)->
960    ereport.io.pciex.dl.dllp@PCIEXFN,
961    ereport.io.pciex.tl.fcp@PCIEXFN,
962    ereport.io.pciex.tl.rof@PCIEXFN;
963
964prop error.io.pciex.fatlink@PCIEXFN/PCIEXFN { IS_SD(PCIEXFN) } (0)->
965    error.io.pciex.fatal@PCIEXFN;
966
967prop error.io.pciex.fatlink@PCIEXFN/PCIEXFN { IS_SD(PCIEXFN) } (0)->
968    ereport.io.pciex.dl.dllp@PCIEXFN,
969    ereport.io.pciex.pl.te@PCIEXFN,
970    ereport.io.pciex.tl.fcp@PCIEXFN,
971    ereport.io.pciex.tl.rof@PCIEXFN;
972
973prop error.io.pciex.fatlink@pciexrc/PCIEXFN (0)->
974    ereport.io.pciex.dl.dllp@pciexrc,
975    ereport.io.pciex.pl.te@pciexrc,
976    ereport.io.pciex.tl.fcp@pciexrc,
977    ereport.io.pciex.tl.rof@pciexrc;
978
979/*
980 * bridge internal error
981 */
982prop error.io.pciex.sec-interr@PCIEXFN { IS_BG(PCIEXFN) } (2) ->
983    error.io.pciex.nonfatal@PCIEXFN,
984    ereport.io.pciex.bdg.sec-interr@PCIEXFN;
985
986/*
987 * downstream poisoned request
988 *
989 * - poisreq-d cascades down to the leaf device/bridge and any switch ports
990 *   on route must raise a ptlp ereport while any switch ports forwarding
991 *   the poisoned request must raise sec-mdpe ereports. The originator of the
992 *   poisoning (be it root complex or downstream port of a switch) also raises
993 *   sec-mdpe. A hardened leaf driver will also raise ptlp. A target-mdpe may
994 *   be seen at the leaf (which may be a pci device beyond the bridge).
995 *
996 * Additionally, the leaf/bridge may treat the request as a ur, which the
997 * root complex will see and report an ma. Use flt-ur-u to represent this.
998 *
999 * The fault can always be recognized and the source identified using the ptlp
1000 * and sec-mdpe ereports.
1001 */
1002prop error.io.pciex.poisreq-d@PCIEXFN (1)->
1003    error.io.pciex.poisreq-fwd-d@PCIEXFN;
1004
1005prop error.io.pciex.poisreq-fwd-d@PCIEXFN { IS_SD(PCIEXFN) ||
1006    IS_SU(PCIEXFN) } (1)->
1007    error.io.pciex.flt-ur-u@PCIEXFN,
1008    error.io.pciex.poisreq-fwd-d@PCIEXFN/PCIEXFNHZ;
1009
1010prop error.io.pciex.poisreq-fwd-d@pciexrc/PCIEXFN (1)->
1011    ereport.io.pci.sec-mdpe@pciexrc;
1012
1013prop error.io.pciex.poisreq-fwd-d@PCIEXFN/PCIEXFN { IS_SU(PCIEXFN) } (0)->
1014    ereport.io.pci.sec-mdpe@PCIEXFN;
1015
1016prop error.io.pciex.poisreq-fwd-d@PCIEXFN { IS_SU(PCIEXFN) } (2)->
1017    ereport.io.pci.dpe@PCIEXFN,
1018    ereport.io.pciex.tl.ptlp@PCIEXFN;
1019
1020prop error.io.pciex.poisreq-fwd-d@PCIEXFN { IS_SU(PCIEXFN) } (0)->
1021    error.io.pciex.nonfatal@PCIEXFN;
1022
1023prop error.io.pciex.poisreq-fwd-d@PCIEXFN/PCIEXFN { IS_SD(PCIEXFN) } (1)->
1024    ereport.io.pci.sec-mdpe@PCIEXFN;
1025
1026prop error.io.pciex.poisreq-fwd-d@PCIEXFN { IS_SD(PCIEXFN) } (0)->
1027    ereport.io.pci.dpe@PCIEXFN,
1028    ereport.io.pciex.tl.ptlp@PCIEXFN,
1029    error.io.pciex.nonfatal@PCIEXFN;
1030
1031prop error.io.pciex.poisreq-fwd-d@PCIEXFN { IS_BG(PCIEXFN) } (3)->
1032    ereport.io.pci.dpe@PCIEXFN,
1033    ereport.io.pciex.tl.ptlp@PCIEXFN,
1034    error.io.pciex.nonfatal@PCIEXFN;
1035
1036prop error.io.pciex.poisreq-fwd-d@PCIEXFN { IS_BG(PCIEXFN) } (1)->
1037    error.io.pci.dpdata-pw-d@PCIEXFN/PCIFNHZ,
1038    error.io.pci.dpdata-dw-d@PCIEXFN/PCIFNHZ;
1039
1040prop error.io.pciex.poisreq-fwd-d@PCIEXFN { IS_LF(PCIEXFN) } (1)->
1041    error.io.pciex.nonfatal@PCIEXFN;
1042
1043prop error.io.pciex.poisreq-fwd-d@PCIEXFN { IS_LF(PCIEXFN) } (0)->
1044    ereport.io.pci.dpe@PCIEXFN,
1045    ereport.io.pciex.tl.ptlp@PCIEXFN,
1046    error.io.pciex.flt-ur-u@PCIEXFN;
1047
1048prop error.io.pciex.poisreq-fwd-d@PCIEXFN (0)->
1049    ereport.io.pci.target-mdpe@PCIEXFN;
1050
1051/*
1052 * downstream poisoned completion
1053 *
1054 * - poiscomp-d cascades down to the leaf device/bridge and any switch ports on
1055 *   route must raise ptlp and mdpe ereports.  A hardened leaf driver will also
1056 *   raise pltp and mdpe. For non-hardened leaf devices, no ptlp/mdpe may be
1057 *   reported, and though we should still see a nonfatal error reported from
1058 *   the root complex identifying the leaf device, we won't actually be informed
1059 *   that the error was an ptlp.
1060 */
1061prop error.io.pciex.poiscomp-d@PCIEXFN (1)->
1062    error.io.pciex.poiscomp-fwd-d@PCIEXFN;
1063
1064prop error.io.pciex.poiscomp-fwd-d@PCIEXFN (1)->
1065    error.io.pciex.poiscomp-fwd-d@PCIEXFN/PCIEXFNHZ;
1066
1067prop error.io.pciex.poiscomp-fwd-d@PCIEXFN { IS_SU(PCIEXFN) } (2)->
1068    ereport.io.pci.dpe@PCIEXFN,
1069    ereport.io.pciex.tl.ptlp@PCIEXFN;
1070
1071prop error.io.pciex.poiscomp-fwd-d@PCIEXFN { IS_SU(PCIEXFN) } (1)->
1072    ereport.io.pci.mdpe@PCIEXFN,
1073    ereport.io.pci.sec-mdpe@PCIEXFN;
1074
1075prop error.io.pciex.poiscomp-fwd-d@PCIEXFN { IS_SU(PCIEXFN) } (0)->
1076    error.io.pciex.nonfatal@PCIEXFN;
1077
1078prop error.io.pciex.poiscomp-fwd-d@PCIEXFN { IS_SD(PCIEXFN) } (0)->
1079    ereport.io.pci.mdpe@PCIEXFN,
1080    ereport.io.pci.sec-mdpe@PCIEXFN,
1081    ereport.io.pci.dpe@PCIEXFN,
1082    ereport.io.pciex.tl.ptlp@PCIEXFN,
1083    error.io.pciex.nonfatal@PCIEXFN;
1084
1085prop error.io.pciex.poiscomp-fwd-d@PCIEXFN { IS_BG(PCIEXFN) } (4)->
1086    ereport.io.pci.mdpe@PCIEXFN,
1087    ereport.io.pci.dpe@PCIEXFN,
1088    ereport.io.pciex.tl.ptlp@PCIEXFN,
1089    error.io.pciex.nonfatal@PCIEXFN;
1090
1091prop error.io.pciex.poiscomp-fwd-d@PCIEXFN { IS_BG(PCIEXFN) } (1)->
1092    error.io.pci.dpdata-dr-d@PCIEXFN/PCIFNHZ;
1093
1094prop error.io.pciex.poiscomp-fwd-d@PCIEXFN { IS_LF(PCIEXFN) } (1)->
1095    error.io.pciex.nonfatal@PCIEXFN;
1096
1097prop error.io.pciex.poiscomp-fwd-d@PCIEXFN { IS_LF(PCIEXFN) } (0)->
1098    ereport.io.pci.mdpe@PCIEXFN,
1099    ereport.io.pci.dpe@PCIEXFN,
1100    ereport.io.pciex.tl.ptlp@PCIEXFN;
1101
1102/*
1103 * downstream request with ecrc error.
1104 *
1105 * - ecrcreq-d cascades down to the leaf device/bridge and any switches on
1106 *   route can optionally raise an ecrc ereport. A hardened leaf driver may also
1107 *   raise ecrc. For non-hardened leaf devices, no ecrc may be reported, and
1108 *   though we should still see a nonfatal error reported from the root complex
1109 *   identifying the leaf device, we won't actually be informed that the error
1110 *   was an ecrc.
1111 *
1112 * Additionally, as the leaf/bridge will just throw away the packet, we should
1113 * eventually get a cto at the root complex - so use an nr-u at the pciex
1114 * leaf or bridge to get the appropriate behaviour. For the case where the leaf
1115 * driver wasn't hardened we may be able to identify the leaf device (and
1116 * therefore any intermediate switches which might have caused the problem)
1117 * either via a target-ma ereport if available or via the nonfatal error
1118 * reported from the root complex identifying the leaf device. The combination
1119 * of a nonfatal error reported from the root complex and a cto from the root
1120 * complex is sufficient to positively identify this case.
1121 */
1122prop error.io.pciex.ecrcreq-d@PCIEXFN (1)->
1123    error.io.pciex.ecrcreq-fwd-d@PCIEXFN;
1124
1125prop error.io.pciex.ecrcreq-fwd-d@PCIEXFN { IS_SU(PCIEXFN) ||
1126    IS_SD(PCIEXFN) } (1)->
1127    error.io.pciex.flt-nr-u@PCIEXFN,
1128    error.io.pciex.ecrcreq-fwd-d@PCIEXFN/PCIEXFNHZ;
1129
1130prop error.io.pciex.ecrcreq-fwd-d@PCIEXFN { IS_SU(PCIEXFN) ||
1131    IS_SD(PCIEXFN) } (0)->
1132    ereport.io.pciex.tl.ecrc@PCIEXFN,
1133    error.io.pciex.nonfatal@PCIEXFN;
1134
1135prop error.io.pciex.ecrcreq-fwd-d@PCIEXFN { IS_BG(PCIEXFN) } (3)->
1136    error.io.pciex.nonfatal@PCIEXFN,
1137    ereport.io.pciex.tl.ecrc@PCIEXFN,
1138    error.io.pciex.flt-nr-u@PCIEXFN;
1139
1140prop error.io.pciex.ecrcreq-fwd-d@PCIEXFN { IS_LF(PCIEXFN) } (2)->
1141    error.io.pciex.nonfatal@PCIEXFN,
1142    error.io.pciex.flt-nr-u@PCIEXFN;
1143
1144prop error.io.pciex.ecrcreq-fwd-d@PCIEXFN { IS_LF(PCIEXFN) } (0)->
1145    ereport.io.pciex.tl.ecrc@PCIEXFN;
1146
1147/*
1148 * downstream completion with ecrc error.
1149 *
1150 * - ecrccomp-d cascades down to the leaf device/bridge and any switches on
1151 *   route can optionally raise an ecrc ereport. A hardened leaf driver may
1152 *   also raise ecrc. For non-hardened leaf devices, no ecrc may be reported,
1153 *   and though we should still see a nonfatal error reported from the root
1154 *   complex identifying the leaf device, we won't actually be informed that
1155 *   the error was an ecrc.
1156 *
1157 * Additionally, as the leaf/bridge will just throw away the packet, we should
1158 * eventually get a cto. Note the leaf ereports are optional (ie in case driver
1159 * not hardened) but if we get both ecrc and cto we need to distinguish from
1160 * cto only which would be an nr-d.
1161 */
1162prop error.io.pciex.ecrccomp-d@PCIEXFN (1)->
1163    error.io.pciex.ecrccomp-fwd-d@PCIEXFN;
1164
1165prop error.io.pciex.ecrccomp-fwd-d@PCIEXFN (1)->
1166    error.io.pciex.ecrccomp-fwd-d@PCIEXFN/PCIEXFNHZ;
1167
1168prop error.io.pciex.ecrccomp-fwd-d@PCIEXFN { IS_SU(PCIEXFN) ||
1169    IS_SD(PCIEXFN) } (0)->
1170    error.io.pciex.nonfatal@PCIEXFN,
1171    ereport.io.pciex.tl.ecrc@PCIEXFN;
1172
1173prop error.io.pciex.ecrccomp-fwd-d@PCIEXFN { IS_BG(PCIEXFN) } (3)->
1174    error.io.pciex.nonfatal@PCIEXFN,
1175    ereport.io.pciex.tl.ecrc@PCIEXFN,
1176    error.io.pciex.nr-d@PCIEXFN;
1177
1178prop error.io.pciex.ecrccomp-fwd-d@PCIEXFN { IS_LF(PCIEXFN) } (1)->
1179    error.io.pciex.nonfatal@PCIEXFN;
1180
1181prop error.io.pciex.ecrccomp-fwd-d@PCIEXFN { IS_LF(PCIEXFN) } (0)->
1182    ereport.io.pciex.tl.ecrc@PCIEXFN,
1183    error.io.pciex.nr-d@PCIEXFN;
1184
1185/*
1186 * upstream poisoned request
1187 *
1188 * - flt-poisreq-u is on the pciex node which generated the fault
1189 * - source-poisreq-u refers to at least one leaf or bridge device
1190 *   whose bdf (if leaf) must match the source-id in the payload of the
1191 *   ereport generated from the root complex.
1192 * - poisreq-u propagates up to the root complex and any switch ports on
1193 *   route will raise a ptlp ereport, while any upstream devices generating
1194 *   or forwarding the poisoned packed will raise an mdpe ereport. The root
1195 *   complex should also report a ptlp.
1196 *
1197 * Additionally, as the root complex may treat the request as a ur, which the
1198 * leaf/bridge will see (and if hardened report) as an ma (including sending a
1199 * ta onto the child pci bus if this was a delayed write).
1200 *
1201 * We can always recognize what sort of fault this is from the ptlp (with no
1202 * sec-mdpe) at the root complex. Recognizing which originating devices may be
1203 * implicated can be done using the mdpe ereport (for a hardened leaf driver),
1204 * or for a non-hardened leaf driver by using the source-id payload in the ptlp
1205 * ereport to identify the originator of the request.  The ptlp/mdpe ereports
1206 * at the intervening switches will narrow the fault down to a single suspect.
1207 */
1208
1209prop error.io.pciex.flt-poisreq-u@PCIEXFN1 { (IS_LF(PCIEXFN) ||
1210    IS_BG(PCIEXFN)) && is_under(PCIEXFN1, PCIEXFN) } (0)->
1211    error.io.pciex.source-poisreq-u@PCIEXFN;
1212
1213prop error.io.pciex.source-poisreq-u@PCIEXFN1 { IS_LF(PCIEXFN1) &&
1214    SOURCE_ID_MATCHES_BDF && is_under(pciexrc, PCIEXFN1) } (0)->
1215    ereport.io.pciex.tl.ptlp@pciexrc,
1216    ereport.io.pciex.tl.ur@pciexrc;
1217
1218prop error.io.pciex.source-poisreq-u@PCIEXFN { IS_LF(PCIEXFN) } (0)->
1219    ereport.io.pci.ma@PCIEXFN;
1220
1221prop error.io.pciex.source-poisreq-u@PCIEXFN { IS_BG(PCIEXFN) &&
1222    is_under(pciexrc, PCIEXFN) } (0)->
1223    ereport.io.pciex.tl.ptlp@pciexrc,
1224    ereport.io.pciex.tl.ur@pciexrc;
1225
1226prop error.io.pciex.source-poisreq-u@PCIEXFN { IS_BG(PCIEXFN) } (0)->
1227    ereport.io.pci.ma@PCIEXFN,
1228    ereport.io.pci.sec-sta@PCIEXFN,
1229    error.io.pci.ta-drw-d@PCIEXFN/PCIFN;
1230
1231prop error.io.pciex.flt-poisreq-u@PCIEXFN (1)->
1232    error.io.pciex.poisreq-u@PCIEXFN;
1233
1234/*
1235 * the remaining propagations are also used for poisoned requests propagating
1236 * up due to a fault behind a pcie-pci bridge
1237 */
1238prop error.io.pciex.poisreq-u@PCIEXFN/PCIEXFN (1)->
1239    error.io.pciex.poisreq-u@PCIEXFN;
1240
1241prop error.io.pciex.poisreq-u@PCIEXFN { IS_BG(PCIEXFN) } (1)->
1242    ereport.io.pci.mdpe@PCIEXFN;
1243
1244prop error.io.pciex.poisreq-u@PCIEXFN { IS_LF(PCIEXFN) } (0)->
1245    ereport.io.pci.mdpe@PCIEXFN;
1246
1247prop error.io.pciex.poisreq-u@PCIEXFN { IS_SD(PCIEXFN) } (2)->
1248    ereport.io.pci.sec-dpe@PCIEXFN,
1249    ereport.io.pciex.tl.ptlp@PCIEXFN;
1250
1251prop error.io.pciex.poisreq-u@PCIEXFN { IS_SD(PCIEXFN) } (0)->
1252    ereport.io.pci.mdpe@PCIEXFN,
1253    error.io.pciex.nonfatal@PCIEXFN;
1254
1255prop error.io.pciex.poisreq-u@PCIEXFN { IS_SU(PCIEXFN) } (1)->
1256    ereport.io.pci.mdpe@PCIEXFN;
1257
1258prop error.io.pciex.poisreq-u@PCIEXFN { IS_SU(PCIEXFN) } (0)->
1259    ereport.io.pci.sec-dpe@PCIEXFN,
1260    ereport.io.pciex.tl.ptlp@PCIEXFN,
1261    error.io.pciex.nonfatal@PCIEXFN;
1262
1263prop error.io.pciex.poisreq-u@pciexrc/PCIEXFN (1)->
1264    ereport.io.pci.sec-dpe@pciexrc;
1265
1266/*
1267 * upstream poisoned completion
1268 *
1269 * - flt-poiscomp-u is on the pciex node which generated the fault. There will
1270 *   be a target-mdpe downstream from here.
1271 * - source-poiscomp-u refers to at least one leaf or bridge device
1272 *   whose bdf (if leaf) must match the source-id in the payload of the
1273 *   ereport generated from the root complex.
1274 * - poiscomp-u propagates up to the root complex and any switches on
1275 *   route will raise ptlp and sec-mdpe ereports. The root complex will also
1276 *   raise a sec-mdpe and ptlp.
1277 *
1278 * We can always recognize what sort of fault this is from the ptlp/sec-mdpe at
1279 * the root complex. Recognizing which originating devices may be implicated
1280 * can be done using the source-id payload in the ptlp ereport to identify the
1281 * originator of the completion. The ptlp/sec-mdpe ereports at the intervening
1282 * switches will narrow the fault down to a single suspect.
1283 */
1284prop error.io.pciex.flt-poiscomp-u@PCIEXFN { IS_LF(PCIEXFN1) &&
1285    is_under(PCIEXFN, PCIEXFN1) } (0)->
1286    ereport.io.pci.target-mdpe@PCIEXFN1;
1287
1288prop error.io.pciex.flt-poiscomp-u@PCIEXFN { IS_PCI_LF(PCIFN) &&
1289    is_under(PCIEXFN, PCIFN) } (0)->
1290    ereport.io.pci.target-mdpe@PCIFN;
1291
1292prop error.io.pciex.flt-poiscomp-u@PCIEXFN1 { (IS_LF(PCIEXFN) ||
1293    IS_BG(PCIEXFN)) && is_under(PCIEXFN1, PCIEXFN) } (0)->
1294    error.io.pciex.source-poiscomp-u@PCIEXFN;
1295
1296prop error.io.pciex.source-poiscomp-u@PCIEXFN1 { IS_LF(PCIEXFN1) &&
1297    SOURCE_ID_MATCHES_BDF && is_under(pciexrc, PCIEXFN1) } (0)->
1298    ereport.io.pciex.tl.ptlp@pciexrc;
1299
1300prop error.io.pciex.source-poiscomp-u@PCIEXFN1 { IS_BG(PCIEXFN1) &&
1301    is_under(pciexrc, PCIEXFN1) } (0)->
1302    ereport.io.pciex.tl.ptlp@pciexrc;
1303
1304prop error.io.pciex.flt-poiscomp-u@PCIEXFN (1)->
1305    error.io.pciex.poiscomp-u@PCIEXFN;
1306
1307/*
1308 * the remaining propagations are also used for poisoned completions propagating
1309 * up due to a fault behind a pcie-pci bridge
1310 */
1311prop error.io.pciex.poiscomp-u@PCIEXFN/PCIEXFN (1)->
1312    error.io.pciex.poiscomp-u@PCIEXFN;
1313
1314prop error.io.pciex.poiscomp-u@PCIEXFN { IS_SD(PCIEXFN) } (2)->
1315    ereport.io.pci.sec-dpe@PCIEXFN,
1316    ereport.io.pciex.tl.ptlp@PCIEXFN;
1317
1318prop error.io.pciex.poiscomp-u@PCIEXFN { IS_SD(PCIEXFN) } (1)->
1319    ereport.io.pci.sec-mdpe@PCIEXFN,
1320    ereport.io.pci.mdpe@PCIEXFN;
1321
1322prop error.io.pciex.poiscomp-u@PCIEXFN { IS_SD(PCIEXFN) } (0)->
1323    error.io.pciex.nonfatal@PCIEXFN;
1324
1325prop error.io.pciex.poiscomp-u@PCIEXFN { IS_SU(PCIEXFN) } (0)->
1326    ereport.io.pci.mdpe@PCIEXFN,
1327    ereport.io.pci.sec-mdpe@PCIEXFN,
1328    ereport.io.pci.sec-dpe@PCIEXFN,
1329    ereport.io.pciex.tl.ptlp@PCIEXFN,
1330    error.io.pciex.nonfatal@PCIEXFN;
1331
1332prop error.io.pciex.poiscomp-u@pciexrc/PCIEXFN (1)->
1333    ereport.io.pci.sec-dpe@pciexrc;
1334
1335prop error.io.pciex.poiscomp-u@pciexrc/PCIEXFN (0)->
1336    ereport.io.pci.sec-mdpe@pciexrc;
1337
1338/*
1339 * upstream request with ecrc error.
1340 *
1341 * - flt-ecrcreq-u is on the pciex node which generated the fault.
1342 * - source-ecrcreq-u cascades down to at least one leaf device (pciex or pci),
1343 *   whose bdf (if pciex) must match the source-id in the payload of the
1344 *   ereport generated from the root complex.
1345 * - ecrcreq-u propagates up to the root complex which must report it with an
1346 *   ecrc ereport and any switches on route can optionally raise an ecrc ereport
1347 *
1348 * Additionally, as the root complex will just throw away the packet, we may
1349 * eventually get a cto - so use an nr-d at the pciex leaf or bridge to get
1350 * the appropriate behaviour.
1351 *
1352 * We can always recognize what sort of fault this is from the ecrc (with no
1353 * cto) at the root complex. Recognizing which leaf device may be implicated
1354 * can be done from the cto ereport (for a hardened leaf driver) or for a
1355 * non-hardened leaf using the source-id payload of the ecrc.
1356 */
1357prop error.io.pciex.flt-ecrcreq-u@PCIEXFN1 { (IS_LF(PCIEXFN) ||
1358    IS_BG(PCIEXFN)) && is_under(PCIEXFN1, PCIEXFN) } (0)->
1359    error.io.pciex.source-ecrcreq-u@PCIEXFN;
1360
1361prop error.io.pciex.source-ecrcreq-u@PCIEXFN (0)->
1362    error.io.pciex.nr-d@PCIEXFN;
1363
1364prop error.io.pciex.source-ecrcreq-u@PCIEXFN1 { IS_LF(PCIEXFN1) &&
1365    SOURCE_ID_MATCHES_BDF && is_under(pciexrc, PCIEXFN1) } (0)->
1366    ereport.io.pciex.tl.ecrc@pciexrc;
1367
1368prop error.io.pciex.source-ecrcreq-u@PCIEXFN { IS_BG(PCIEXFN) &&
1369    is_under(pciexrc, PCIEXFN) } (0)->
1370    ereport.io.pciex.tl.ecrc@pciexrc;
1371
1372prop error.io.pciex.flt-ecrcreq-u@PCIEXFN (1)->
1373     error.io.pciex.ecrcreq-u@PCIEXFN;
1374
1375prop error.io.pciex.ecrcreq-u@PCIEXFN/PCIEXFN (1)->
1376     error.io.pciex.ecrcreq-u@PCIEXFN;
1377
1378prop error.io.pciex.ecrcreq-u@PCIEXFN { IS_SD(PCIEXFN)||IS_SU(PCIEXFN) } (0)->
1379    ereport.io.pciex.tl.ecrc@PCIEXFN,
1380    error.io.pciex.nonfatal@PCIEXFN;
1381
1382/*
1383 * upstream completion with ecrc error.
1384 *
1385 * - flt-ecrccomp-u is on the pciex node which generated the fault.
1386 * - source-ecrccomp-u cascades down to at least one leaf device (pciex or pci),
1387 *   whose bdf (if pciex) must match the source-id in the payload of the
1388 *   ereport generated from the root complex.
1389 * - ecrccomp-u propagates up to the root complex, which should report it with
1390 *   an ecrc ereport and any switches on route can optionally raise an ecrc
1391 *   ereport.
1392 *
1393 * Additionally, as the root complex will just throw away the packet, we'll
1394 * eventually get a cto - so use an flt-nr-u at the pciex leaf or bridge to get
1395 * the appropriate behaviour.
1396 *
1397 * We can always recognize what sort of fault this from the ecrc/cto from the
1398 * root complex. Recognizing which leaf device may be implicated can be done
1399 * using either the source-id payload of the ecrc or the target-ma ereport if
1400 * available.
1401 */
1402prop error.io.pciex.flt-ecrccomp-u@PCIEXFN1 { (IS_LF(PCIEXFN) ||
1403    IS_BG(PCIEXFN)) && is_under(PCIEXFN1, PCIEXFN) } (0)->
1404    error.io.pciex.source-ecrccomp-u@PCIEXFN;
1405
1406prop error.io.pciex.source-ecrccomp-u@PCIEXFN (0)->
1407    error.io.pciex.flt-nr-u@PCIEXFN;
1408
1409prop error.io.pciex.source-ecrccomp-u@PCIEXFN1 { IS_LF(PCIEXFN1) &&
1410    SOURCE_ID_MATCHES_BDF && is_under(pciexrc, PCIEXFN1) } (0)->
1411    ereport.io.pciex.tl.ecrc@pciexrc;
1412
1413prop error.io.pciex.source-ecrccomp-u@PCIEXFN { IS_BG(PCIEXFN) &&
1414    is_under(pciexrc, PCIEXFN) } (0)->
1415    ereport.io.pciex.tl.ecrc@pciexrc;
1416
1417prop error.io.pciex.flt-ecrccomp-u@PCIEXFN (1)->
1418    error.io.pciex.ecrccomp-u@PCIEXFN;
1419
1420prop error.io.pciex.ecrccomp-u@PCIEXFN/PCIEXFN (1)->
1421    error.io.pciex.ecrccomp-u@PCIEXFN;
1422
1423prop error.io.pciex.ecrccomp-u@PCIEXFN { IS_SD(PCIEXFN)||IS_SU(PCIEXFN) } (0)->
1424    ereport.io.pciex.tl.ecrc@PCIEXFN,
1425    error.io.pciex.nonfatal@PCIEXFN;
1426
1427/*
1428 * no response to downstream requester
1429 *
1430 * - nr-d will effectively cascade downstream to the requester. The fault here
1431 *   is always at the root complex. For a hardened leaf device driver, we will
1432 *   always be able to recognize this as the requester will report this as a
1433 *   cto. For non-hardened leaf devices, no cto will be reported, and though we
1434 *   should still see a nonfatal error reported from the root complex
1435 *   identifying the leaf device, we won't actually be informed that the error
1436 *   was a cto.
1437 */
1438prop error.io.pciex.nr-d@PCIEXFN (1)->
1439    error.io.pciex.nr-d@PCIEXFN/PCIEXFNHZ;
1440
1441prop error.io.pciex.nr-d@PCIEXFN { IS_BG(PCIEXFN) } (2)->
1442    error.io.pciex.nonfatal@PCIEXFN,
1443    ereport.io.pciex.tl.cto@PCIEXFN;
1444
1445prop error.io.pciex.nr-d@PCIEXFN { IS_BG(PCIEXFN) } (0)->
1446    ereport.io.pci.ma@PCIEXFN,
1447    ereport.io.pci.sec-sta@PCIEXFN,
1448    error.io.pci.nr-drw-d@PCIEXFN/PCIFN,
1449    error.io.pci.ta-drw-d@PCIEXFN/PCIFN;
1450
1451prop error.io.pciex.nr-d@PCIEXFN { IS_LF(PCIEXFN) } (1)->
1452    error.io.pciex.nonfatal@PCIEXFN;
1453
1454prop error.io.pciex.nr-d@PCIEXFN { IS_LF(PCIEXFN) } (0)->
1455    ereport.io.pci.ma@PCIEXFN,
1456    ereport.io.pciex.tl.cto@PCIEXFN;
1457
1458/*
1459 * no response to upstream requester
1460 *
1461 * - flt-nr-u will effectively cascade upstream to the root complex which will
1462 *   report it as a cto.
1463 *
1464 * We have to use target-ma to informs us which device failed to respond.
1465 */
1466prop error.io.pciex.flt-nr-u@PCIEXFN (1)->
1467    error.io.pci.target-ma-d@PCIEXFN;
1468
1469prop error.io.pciex.flt-nr-u@PCIEXFN (1)->
1470    error.io.pciex.nr-u@PCIEXFN;
1471
1472prop error.io.pciex.nr-u@PCIEXFN/PCIEXFN (1)->
1473    error.io.pciex.nr-u@PCIEXFN;
1474
1475prop error.io.pciex.nr-u@pciexrc/PCIEXFN (1)->
1476    ereport.io.pciex.tl.cto@pciexrc;
1477
1478prop error.io.pciex.nr-u@pciexrc/PCIEXFN (0)->
1479    ereport.io.pci.sec-ma@pciexrc;
1480
1481/*
1482 * downstream malformed tlp
1483 *
1484 * This will cascade downstream to the receiver which will report it as an mtlp.
1485 * For non-hardened leaf drivers, no mtlp will be reported, and though we should
1486 * still see a fatal error reported from the root complex identifying the leaf
1487 * device, we won't actually be informed that the error was a mtlp.
1488 * Note that sw-mtlp-d is to handle the case where the switch is actually
1489 * the target of the packet (config request etc).
1490 */
1491prop error.io.pciex.mtlp-d@PCIEXFN { IS_SD(PCIEXFN) || IS_SU(PCIEXFN) } (1)->
1492    error.io.pciex.sw-mtlp-d@PCIEXFN,
1493    error.io.pciex.mtlp-d@PCIEXFN/PCIEXFNHZ;
1494
1495prop error.io.pciex.sw-mtlp-d@PCIEXFN { IS_SU(PCIEXFN) } (2)->
1496    error.io.pciex.fatal@PCIEXFN,
1497    ereport.io.pciex.tl.mtlp@PCIEXFN;
1498
1499prop error.io.pciex.mtlp-d@PCIEXFN { IS_BG(PCIEXFN) } (2)->
1500    error.io.pciex.fatal@PCIEXFN,
1501    ereport.io.pciex.tl.mtlp@PCIEXFN;
1502
1503prop error.io.pciex.mtlp-d@PCIEXFN { IS_LF(PCIEXFN) } (1)->
1504    error.io.pciex.fatal@PCIEXFN;
1505
1506prop error.io.pciex.mtlp-d@PCIEXFN { IS_LF(PCIEXFN) } (0)->
1507    ereport.io.pciex.tl.mtlp@PCIEXFN;
1508
1509/*
1510 * upstream malformed tlp
1511 *
1512 * This will cascade upstream to the receiver which will report it as an mtlp.
1513 */
1514prop error.io.pciex.flt-mtlp-u@PCIEXFN (1)->
1515    error.io.pciex.mtlp-u@PCIEXFN;
1516
1517prop error.io.pciex.mtlp-u@PCIEXFN/PCIEXFN (1)->
1518    error.io.pciex.mtlp-u@PCIEXFN;
1519
1520prop error.io.pciex.mtlp-u@pciexrc/PCIEXFN (1)->
1521    ereport.io.pciex.tl.mtlp@pciexrc;
1522
1523/*
1524 * downstream completer aborts
1525 *
1526 * This could be the fault of the root complex or a switch reporting an internal
1527 * error, or of the leaf device sending an invalid request (the latter is
1528 * handled by the flt-badreq-u case below).
1529 *
1530 * This is reported by the completer or by an intervening downstream switch
1531 * port. The completer abort response propagates down to the initiator which
1532 * will set the legacy pci bit rta.
1533 *
1534 * The fault can always be recognized by the ca ereport from the root complex
1535 * or downstream switch port. The originator of the request can be recognized
1536 * by the rta for a hardened driver or by using the source-id payload of the
1537 * ca ereport for a non-hardened driver.
1538 */
1539prop error.io.pciex.ca-d@pciexrc/PCIEXFN (0)->
1540    ereport.io.pciex.tl.ca@pciexrc;
1541
1542prop error.io.pciex.ca-d@pciexrc/PCIEXFN (1)->
1543    ereport.io.pci.sec-sta@pciexrc;
1544
1545prop error.io.pciex.ca-d@PCIEXFN/PCIEXFN (0)->
1546    ereport.io.pci.sec-sta@PCIEXFN;
1547
1548prop error.io.pciex.ca-d@PCIEXFN/PCIEXFN (2)->
1549    ereport.io.pciex.tl.ca@PCIEXFN,
1550    error.io.pciex.nonfatal@PCIEXFN;
1551
1552prop error.io.pciex.ca-d@PCIEXFN (0)->
1553    error.io.pciex.ca-fwd-d@PCIEXFN;
1554
1555prop error.io.pciex.ca-fwd-d@PCIEXFN (1)->
1556    error.io.pciex.ca-fwd-d@PCIEXFN/PCIEXFNHZ;
1557
1558prop error.io.pciex.ca-fwd-d@PCIEXFN { IS_BG(PCIEXFN) } (1)->
1559    ereport.io.pci.rta@PCIEXFN;
1560
1561prop error.io.pciex.ca-fwd-d@PCIEXFN { IS_BG(PCIEXFN) } (0)->
1562    ereport.io.pci.sec-sta@PCIEXFN,
1563    error.io.pci.ta-drw-d@PCIEXFN/PCIFN;
1564
1565prop error.io.pciex.ca-fwd-d@PCIEXFN { IS_LF(PCIEXFN) } (0)->
1566    ereport.io.pci.rta@PCIEXFN;
1567
1568/*
1569 * upstream completer aborts
1570 *
1571 * This could be the fault of the leaf device/bridge/upstream switch port
1572 * reporting an internal error, or of the root complex sending an invalid
1573 * request (the latter case is handled by badreq-d below).
1574 *
1575 * This is reported as a ca by the completer. The completer (for non-posted
1576 * requests) sends the appropriate error bits in the completion message to
1577 * the initiator which will set the legacy pci bit sec-rta.
1578 *
1579 * The fault can always be recognized from the sec-rta bit at the root complex.
1580 *
1581 * If the fault was with a PCI Express leaf with a hardened driver, then we
1582 * will identify the device from the ca ereport.
1583 *
1584 * If the fault was with a PCI Express leaf with a non-hardened driver, then we
1585 * can still identify the leaf device from the source-id payload of the nonfatal
1586 * message ereport from the root complex or from the target-rta ereport.
1587 */
1588prop error.io.pciex.flt-ca-u@PCIEXFN { !IS_LF(PCIEXFN) } (1)->
1589    ereport.io.pciex.tl.ca@PCIEXFN;
1590
1591prop error.io.pciex.flt-ca-u@PCIEXFN { IS_LF(PCIEXFN) } (0)->
1592    ereport.io.pciex.tl.ca@PCIEXFN;
1593
1594prop error.io.pciex.flt-ca-u@PCIEXFN (0)->
1595    error.io.pciex.nonfatal@PCIEXFN,
1596    ereport.io.pci.sta@PCIEXFN;
1597
1598prop error.io.pciex.flt-ca-u@PCIEXFN (2)->
1599    error.io.pci.target-rta-d@PCIEXFN,
1600    error.io.pciex.ca-u@PCIEXFN;
1601
1602prop error.io.pciex.ca-u@PCIEXFN/PCIEXFN (1)->
1603    error.io.pciex.ca-u@PCIEXFN;
1604
1605prop error.io.pciex.ca-u@pciexrc/PCIEXFN (0)->
1606    ereport.io.pci.sec-rta@pciexrc;
1607
1608/*
1609 * upstream bad request
1610 *
1611 * When detecting bad data on a request the completer (or any switch on the
1612 * way to the completer) may report ur or ca. If the switch detects the problem
1613 * first then the request doesn't get forwarded on to the completer.
1614 *
1615 * These are reported as ur/ca ereports. For non-posted requests, the reporter
1616 * then sends the appropriate error bits in the completion message to the
1617 * initiator which will set the legacy pci bits ma or rta.
1618 *
1619 * For flt-badreq-u, the ca/ur ereports contain a source-id payload that
1620 * identifies the initiator.
1621 *
1622 * The fault can always be recognized by the ca/ur ereport from the root
1623 * complex or downstream switch port. The originator of the request can be
1624 * recognized by the rta/ma for a hardened driver or by using the source-id
1625 * payload of the ca/ur ereport for a non-hardened driver.
1626 */
1627prop error.io.pciex.flt-badreq-u@PCIEXFN (0)->
1628    ereport.io.pci.ma@PCIEXFN,
1629    ereport.io.pci.rta@PCIEXFN;
1630
1631prop error.io.pciex.flt-badreq-u@PCIEXFN1 {
1632    SOURCE_ID_MATCHES_BDF && is_under(pciexrc, PCIEXFN1) } (0)->
1633    ereport.io.pciex.tl.ur@pciexrc,
1634    ereport.io.pciex.tl.ca@pciexrc;
1635
1636prop error.io.pciex.flt-badreq-u@PCIEXFN (1)->
1637    error.io.pciex.badreq-u@PCIEXFN;
1638
1639prop error.io.pciex.badreq-u@PCIEXFN/PCIEXFN (1)->
1640    error.io.pciex.badreq-u@PCIEXFN;
1641
1642prop error.io.pciex.badreq-u@pciexrc/PCIEXFN (0)->
1643    ereport.io.pci.sec-sta@pciexrc;
1644
1645prop error.io.pciex.flt-badreq-u@PCIEXFN1 { IS_SD(PCIEXFN) &&
1646    SOURCE_ID_MATCHES_BDF && is_under(PCIEXFN, PCIEXFN1) } (0)->
1647    ereport.io.pciex.tl.ur@PCIEXFN,
1648    ereport.io.pciex.tl.ca@PCIEXFN;
1649
1650prop error.io.pciex.flt-badreq-u@PCIEXFN1 { IS_SD(PCIEXFN) &&
1651    is_under(PCIEXFN, PCIEXFN1) } (0)->
1652    ereport.io.pci.sec-sta@PCIEXFN,
1653    error.io.pciex.nonfatal@PCIEXFN;
1654
1655/*
1656 * downstream bad request
1657 *
1658 * When detecting bad data on a request the completer (or any switch on the
1659 * way to the completer) may report ur or ca. If the switch detects the problem
1660 * first then the request doesn't get forwarded on to the completer.
1661 *
1662 * These are reported as ur/ca ereports (except where the completer is a non-
1663 * hardened leaf driver when all we get is a nonfatal error from the root
1664 * complex identifying the leaf device). The reporter then sends the appropriate
1665 * error bits in the completion message to the initiator which will set the
1666 * legacy pci bits ma or rta (oddly there is no equivalent in pcie error
1667 * reporting).
1668 */
1669prop error.io.pciex.badreq-d@PCIEXFN { IS_SU(PCIEXFN) || IS_SD(PCIEXFN) } (1)->
1670    error.io.pciex.flt-ur-u@PCIEXFN,
1671    error.io.pciex.flt-ca-u@PCIEXFN,
1672    error.io.pciex.badreq-d@PCIEXFN/PCIEXFNHZ;
1673
1674prop error.io.pciex.badreq-d@PCIEXFN { IS_BG(PCIEXFN) } (1)->
1675    error.io.pciex.flt-ur-u@PCIEXFN,
1676    error.io.pciex.flt-ca-u@PCIEXFN,
1677    error.io.pci.badreq-pw-d@PCIEXFN/PCIFNHZ,
1678    error.io.pci.badreq-drw-d@PCIEXFN/PCIFNHZ;
1679
1680prop error.io.pciex.badreq-d@PCIEXFN { IS_LF(PCIEXFN) } (1)->
1681    error.io.pciex.flt-ur-u@PCIEXFN,
1682    error.io.pciex.flt-ca-u@PCIEXFN;
1683
1684prop error.io.pciex.flt-ur-u@PCIEXFN { !IS_LF(PCIEXFN) } (1)->
1685    ereport.io.pciex.tl.ur@PCIEXFN;
1686
1687prop error.io.pciex.flt-ur-u@PCIEXFN { IS_LF(PCIEXFN) } (0)->
1688    ereport.io.pciex.tl.ur@PCIEXFN;
1689
1690prop error.io.pciex.flt-ur-u@PCIEXFN (2)->
1691    error.io.pci.target-ma-d@PCIEXFN,
1692    error.io.pciex.ur-u@PCIEXFN;
1693
1694prop error.io.pciex.flt-ur-u@PCIEXFN (0)->
1695    error.io.pciex.nonfatal@PCIEXFN;
1696
1697prop error.io.pciex.ur-u@PCIEXFN/PCIEXFN (1)->
1698    error.io.pciex.ur-u@PCIEXFN;
1699
1700prop error.io.pciex.ur-u@pciexrc/PCIEXFN (0)->
1701    ereport.io.pci.sec-ma@pciexrc;
1702
1703/*
1704 * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1705 * Stub unused legacy pci ereports at root complex.
1706 * Stub tl.uc as we can't do anything useful with it (we should eventually
1707 * get a cto which we can do something with - a uc without a cto is a genuinely
1708 * spurious completion which is at least harmless).
1709 * Stub messages that the root complex sends to itself.
1710 * Stub mce/mue/ce/nr/noadverr.
1711 * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1712 */
1713
1714event error.io.pciex.discard_rc@pciexrc;
1715
1716event ereport.io.pciex.noadverr@PCIEXFN{within(5s)};
1717event ereport.io.pciex.correctable@PCIEXFN{within(5s)};
1718event ereport.io.pciex.nonfatal@PCIEXFN{within(5s)};
1719event ereport.io.pciex.a-nonfatal@PCIEXFN{within(5s)};
1720event ereport.io.pciex.fatal@PCIEXFN{within(5s)};
1721event ereport.io.pci.nr@PCIEXFN{within(5s)};
1722event ereport.io.pci.nr@pciexrc{within(5s)};
1723event ereport.io.pci.ma@pciexrc{within(5s)};
1724event ereport.io.pci.rta@pciexrc{within(5s)};
1725event ereport.io.pci.sta@pciexrc{within(5s)};
1726event ereport.io.pci.dpe@pciexrc{within(5s)};
1727event ereport.io.pci.mdpe@pciexrc{within(5s)};
1728event ereport.io.pci.sserr@pciexrc{within(5s)};
1729event ereport.io.pciex.tl.uc@pciexrc{within(5s)};
1730event ereport.io.pciex.noadverr@pciexrc{within(5s)};
1731event ereport.io.pciex.a-nonfatal@pciexrc{within(5s)};
1732event ereport.io.pciex.rc.ce-msg@pciexrc{within(5s)};
1733event ereport.io.pciex.rc.mce-msg@pciexrc{within(5s)};
1734
1735event upset.io.pciex.discard_uc@PCIEXFN;
1736event upset.io.pciex.discard@PCIEXFN;
1737event upset.io.pciex.discard@pciexrc;
1738
1739prop upset.io.pciex.discard_uc@PCIEXFN { IS_BG(PCIEXFN) } (1)->
1740    ereport.io.pciex.tl.uc@PCIEXFN;
1741
1742prop upset.io.pciex.discard_uc@PCIEXFN { IS_LF(PCIEXFN) } (1)->
1743    ereport.io.pciex.tl.uc@PCIEXFN;
1744
1745prop upset.io.pciex.discard@PCIEXFN (1)->
1746    ereport.io.pci.nr@PCIEXFN,
1747    ereport.io.pciex.noadverr@PCIEXFN,
1748    ereport.io.pciex.correctable@PCIEXFN,
1749    ereport.io.pciex.nonfatal@PCIEXFN,
1750    ereport.io.pciex.a-nonfatal@PCIEXFN,
1751    ereport.io.pciex.fatal@PCIEXFN;
1752
1753prop error.io.pciex.discard_rc@pciexrc (0)->
1754    ereport.io.pciex.rc.mue-msg@pciexrc,
1755    ereport.io.pciex.rc.fe-msg@pciexrc { SOURCE_ID_MATCHES_OWN_BDF },
1756    ereport.io.pciex.rc.nfe-msg@pciexrc { SOURCE_ID_MATCHES_OWN_BDF };
1757
1758prop upset.io.pciex.discard@pciexrc (1)->
1759    error.io.pciex.discard_rc@pciexrc,
1760    ereport.io.pci.nr@pciexrc,
1761    ereport.io.pciex.noadverr@pciexrc,
1762    ereport.io.pciex.a-nonfatal@pciexrc,
1763    ereport.io.pciex.rc.ce-msg@pciexrc,
1764    ereport.io.pciex.rc.mce-msg@pciexrc,
1765    ereport.io.pciex.tl.uc@pciexrc,
1766    ereport.io.pci.ma@pciexrc,
1767    ereport.io.pci.rta@pciexrc,
1768    ereport.io.pci.sta@pciexrc,
1769    ereport.io.pci.dpe@pciexrc,
1770    ereport.io.pci.mdpe@pciexrc,
1771    ereport.io.pci.sserr@pciexrc;
1772
1773/*
1774 * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1775 * rules for propagations from child PCI bus
1776 * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1777 */
1778
1779event error.io.pci.retry-to-u@PCIEXFN/PCIFN;
1780event error.io.pci.ma-u@PCIEXFN/PCIFN;
1781event error.io.pci.ta-u@PCIEXFN/PCIFN;
1782event error.io.pci.ape-u@PCIEXFN/PCIFN;
1783event error.io.pci.source-ape-u@PCIFN;
1784event error.io.pci.target-ma-d@PCIFN;
1785event error.io.pci.target-rta-d@PCIFN;
1786event error.io.pci.badreq-pw-u@PCIEXFN/PCIFN;
1787event error.io.pci.badreq-drw-u@PCIEXFN/PCIFN;
1788event error.io.pci.source-perr-u@PCIFN;
1789event error.io.pci.source-dpdata-u@PCIFN;
1790event error.io.pci.dpdata-pw-u@PCIEXFN/PCIFN;
1791event error.io.pci.dpdata-dw-u@PCIEXFN/PCIFN;
1792event error.io.pci.dpdata-dr-u@PCIEXFN/PCIFN;
1793event error.io.pci.perr-pw-u@PCIEXFN/PCIFN;
1794event error.io.pci.perr-dw-u@PCIEXFN/PCIFN;
1795event error.io.pci.perr-dr-u@PCIEXFN/PCIFN;
1796event error.io.pci.serr-u@PCIEXFN/PCIFN;
1797event error.io.pcix.scpe-u@PCIEXFN/PCIFN;
1798event error.io.pcix.source-scpe-u@PCIFN;
1799event error.io.pcix.spl-comp-ma-u@PCIEXFN/PCIFN;
1800event error.io.pcix.spl-comp-ta-u@PCIEXFN/PCIFN;
1801event error.io.pcix.spl-comp-ma-d@PCIEXFN/PCIFN;
1802event error.io.pcix.spl-comp-ta-d@PCIEXFN/PCIFN;
1803event error.io.pcix.uscmd@PCIEXFN;
1804
1805event ereport.io.pcix.sec-spl-dis@PCIEXFN{within(5s)};
1806event ereport.io.pciex.bdg.uscmd@PCIEXFN{within(5s)};
1807event ereport.io.pciex.bdg.sec-perr@PCIEXFN{within(5s)};
1808event ereport.io.pciex.bdg.sec-uadr@PCIEXFN{within(5s)};
1809event ereport.io.pciex.bdg.sec-uat@PCIEXFN{within(5s)};
1810event ereport.io.pciex.bdg.sec-serr@PCIEXFN{within(5s)};
1811event ereport.io.pciex.bdg.sec-tex@PCIEXFN{within(5s)};
1812event ereport.io.pciex.bdg.sec-rma@PCIEXFN{within(5s)};
1813event ereport.io.pciex.bdg.sec-rta@PCIEXFN{within(5s)};
1814event ereport.io.pciex.bdg.sec-ma-sc@PCIEXFN{within(5s)};
1815event ereport.io.pciex.bdg.sec-ta-sc@PCIEXFN{within(5s)};
1816event ereport.io.pci.dto@PCIEXFN{within(5s)};
1817event ereport.io.pci.sec-rta@PCIEXFN{within(5s)};
1818event ereport.io.pci.sec-ma@PCIEXFN{within(5s)};
1819
1820/*
1821 * ma-u will only propagate on to pciex bus for non-posted accesses. It
1822 * is then represented as an unsupported request.
1823 */
1824prop error.io.pci.ma-u@PCIEXFN/PCIFN (0)->
1825    ereport.io.pciex.tl.ur@PCIEXFN;
1826
1827prop error.io.pci.ma-u@PCIEXFN/PCIFN { is_under(pciexrc, PCIEXFN/PCIFN) } (0)->
1828    ereport.io.pci.sec-ma@pciexrc;
1829
1830prop error.io.pci.ma-u@PCIEXFN/PCIFN (2)->
1831    ereport.io.pci.sec-ma@PCIEXFN,
1832    error.io.pciex.nonfatal@PCIEXFN;
1833
1834prop error.io.pci.target-ma-d@PCIFN1 { IS_BG(PCIEXFN) && IS_PCI_LF(PCIFN1) &&
1835    SOURCE_ID_MATCHES_BDF && is_under(PCIEXFN, PCIFN1) } (0)->
1836    ereport.io.pciex.bdg.sec-rma@PCIEXFN;
1837
1838/*
1839 * ta-u will only propagate on to pciex bus for non-posted accesses. It is
1840 * then represented as a completer abort.
1841 */
1842prop error.io.pci.ta-u@PCIEXFN/PCIFN (0)->
1843    ereport.io.pci.sta@PCIEXFN,
1844    ereport.io.pciex.tl.ca@PCIEXFN;
1845
1846prop error.io.pci.ta-u@PCIEXFN/PCIFN { is_under(pciexrc, PCIEXFN/PCIFN) } (0)->
1847    ereport.io.pci.sec-rta@pciexrc;
1848
1849prop error.io.pci.ta-u@PCIEXFN/PCIFN (2)->
1850    ereport.io.pci.sec-rta@PCIEXFN,
1851    error.io.pciex.nonfatal@PCIEXFN;
1852
1853prop error.io.pci.target-rta-d@PCIFN1 { IS_BG(PCIEXFN) && IS_PCI_LF(PCIFN1) &&
1854    SOURCE_ID_MATCHES_BDF && is_under(PCIEXFN, PCIFN1) } (0)->
1855    ereport.io.pciex.bdg.sec-rta@PCIEXFN;
1856
1857/*
1858 * PERR# on a delayed write is represented as an unsupported request
1859 */
1860prop error.io.pci.perr-dw-u@PCIEXFN/PCIFN (1)->
1861    ereport.io.pci.sec-mdpe@PCIEXFN;
1862
1863prop error.io.pci.perr-dw-u@PCIEXFN/PCIFN (0)->
1864    error.io.pciex.flt-ur-u@PCIEXFN;
1865
1866prop error.io.pci.perr-pw-u@PCIEXFN/PCIFN (1)->
1867    ereport.io.pci.sec-mdpe@PCIEXFN;
1868
1869prop error.io.pci.perr-pw-u@PCIEXFN/PCIFN (0)->
1870    error.io.pciex.nonfatal@PCIEXFN;
1871
1872prop error.io.pci.perr-dr-u@PCIEXFN/PCIFN (1)->
1873    error.io.pciex.nonfatal@PCIEXFN;
1874
1875prop error.io.pci.source-perr-u@PCIFN1 { IS_BG(PCIEXFN) && IS_PCI_LF(PCIFN1) &&
1876    SOURCE_ID_MATCHES_BDF && is_under(PCIEXFN, PCIFN1) } (0)->
1877    ereport.io.pciex.bdg.sec-perr@PCIEXFN;
1878
1879/*
1880 * If the bridge receives data with bad ecc/parity from pci/pci-x, it will
1881 * propagate onto pci express as a poisoned tlp
1882 */
1883prop error.io.pci.dpdata-dr-u@PCIEXFN/PCIFN (2)->
1884    ereport.io.pci.sec-dpe@PCIEXFN,
1885    error.io.pciex.poiscomp-u@PCIEXFN;
1886
1887prop error.io.pci.dpdata-dr-u@PCIEXFN/PCIFN (0)->
1888    error.io.pciex.nonfatal@PCIEXFN;
1889
1890prop error.io.pci.dpdata-dr-u@PCIEXFN/PCIFN (1)->
1891    ereport.io.pci.sec-mdpe@PCIEXFN,
1892    ereport.io.pci.mdpe@PCIEXFN;
1893
1894prop error.io.pci.dpdata-dw-u@PCIEXFN/PCIFN (1)->
1895    ereport.io.pci.sec-dpe@PCIEXFN;
1896
1897prop error.io.pci.dpdata-dw-u@PCIEXFN/PCIFN (0)->
1898    error.io.pciex.nonfatal@PCIEXFN,
1899    error.io.pciex.poisreq-u@PCIEXFN,
1900    ereport.io.pci.ma@PCIEXFN,
1901    ereport.io.pci.sec-sta@PCIEXFN,
1902    error.io.pci.ta-drw-d@PCIEXFN/PCIFN;
1903
1904prop error.io.pci.dpdata-pw-u@PCIEXFN/PCIFN (2)->
1905    ereport.io.pci.sec-dpe@PCIEXFN,
1906    error.io.pciex.poisreq-u@PCIEXFN;
1907
1908prop error.io.pci.dpdata-pw-u@PCIEXFN/PCIFN (0)->
1909    error.io.pciex.nonfatal@PCIEXFN,
1910    ereport.io.pci.ma@PCIEXFN;
1911
1912prop error.io.pci.source-dpdata-u@PCIFN { is_under(pciexrc, PCIFN) } (0)->
1913    ereport.io.pciex.tl.ptlp@pciexrc,
1914    ereport.io.pciex.tl.ur@pciexrc;
1915
1916prop error.io.pci.source-dpdata-u@PCIFN1 { IS_BG(PCIEXFN) && IS_PCI_LF(PCIFN1)
1917    && SOURCE_ID_MATCHES_BDF && is_under(PCIEXFN, PCIFN1) } (0)->
1918    ereport.io.pciex.bdg.sec-ude@PCIEXFN;
1919
1920/*
1921 * If the bridge sees an address or attribute parity error it is considered
1922 * a fatal error.
1923 */
1924prop error.io.pci.ape-u@PCIEXFN/PCIFN (2)->
1925    ereport.io.pci.sec-dpe@PCIEXFN,
1926    error.io.pciex.fatal@PCIEXFN;
1927
1928prop error.io.pci.source-ape-u@PCIFN1 { IS_BG(PCIEXFN) && IS_PCI_LF(PCIFN1) &&
1929    SOURCE_ID_MATCHES_BDF && is_under(PCIEXFN, PCIFN1) } (0)->
1930    ereport.io.pciex.bdg.sec-uat@PCIEXFN,
1931    ereport.io.pciex.bdg.sec-uadr@PCIEXFN;
1932
1933prop error.io.pci.ape-u@PCIEXFN/PCIFN (0)->
1934    ereport.io.pci.sec-rserr@PCIEXFN,
1935    ereport.io.pciex.bdg.sec-serr@PCIEXFN,
1936    ereport.io.pci.sec-sta@PCIEXFN;
1937
1938/*
1939 * If the bridge sees a split completion error (pci-x only) it could
1940 * result in a number of things
1941 * - unrecovered split completion message data error (uscmd). This would
1942 *   happen on a pio write. A completer abort is returned to the initiator.
1943 * - for various faults in the split completion (eg address parity error)
1944 *   we will respond with a target abort (which the child device will treat
1945 *   as a split completion ta)
1946 * - for other faults we can't tell who send the split completion and so
1947 *   just drop the request (which the child device sees as a split
1948 *   completion ma)
1949 */
1950prop error.io.pcix.scpe-u@PCIEXFN/PCIFN (0)->
1951    ereport.io.pci.sec-dpe@PCIEXFN,
1952    ereport.io.pci.sec-rserr@PCIEXFN,
1953    ereport.io.pciex.bdg.sec-serr@PCIEXFN,
1954    ereport.io.pci.sec-sta@PCIEXFN,
1955    error.io.pciex.fatal@PCIEXFN;
1956
1957prop error.io.pcix.source-scpe-u@PCIFN1 { IS_BG(PCIEXFN) && IS_PCI_LF(PCIFN1) &&
1958    SOURCE_ID_MATCHES_BDF && is_under(PCIEXFN, PCIFN1) } (0)->
1959    ereport.io.pciex.bdg.sec-uat@PCIEXFN,
1960    ereport.io.pciex.bdg.sec-uadr@PCIEXFN;
1961
1962prop error.io.pcix.scpe-u@PCIEXFN/PCIFN (1)->
1963    error.io.pcix.uscmd@PCIEXFN,
1964    error.io.pcix.spl-comp-ma-d@PCIEXFN/PCIFN,
1965    error.io.pcix.spl-comp-ta-d@PCIEXFN/PCIFN;
1966
1967prop error.io.pcix.uscmd@PCIEXFN (4)->
1968    error.io.pciex.fatal@PCIEXFN,
1969    ereport.io.pci.sta@PCIEXFN,
1970    ereport.io.pciex.tl.ca@PCIEXFN,
1971    ereport.io.pciex.bdg.uscmd@PCIEXFN;
1972
1973prop error.io.pcix.uscmd@PCIEXFN { is_under(pciexrc, PCIEXFN) } (0)->
1974    ereport.io.pci.sec-rta@pciexrc;
1975
1976/*
1977 * Similarly a child device may have responded with a master abort or
1978 * target abort to one of our split competions. The hardware just logs these.
1979 */
1980prop error.io.pcix.spl-comp-ma-u@PCIEXFN/PCIFN (3)->
1981    error.io.pciex.nonfatal@PCIEXFN,
1982    ereport.io.pcix.sec-spl-dis@PCIEXFN,
1983    ereport.io.pciex.bdg.sec-ma-sc@PCIEXFN;
1984
1985prop error.io.pcix.spl-comp-ma-u@PCIEXFN/PCIFN (0)->
1986    ereport.io.pci.sec-ma@PCIEXFN;
1987
1988prop error.io.pcix.spl-comp-ta-u@PCIEXFN/PCIFN (4)->
1989    error.io.pciex.nonfatal@PCIEXFN,
1990    ereport.io.pcix.sec-spl-dis@PCIEXFN,
1991    ereport.io.pciex.bdg.sec-ta-sc@PCIEXFN,
1992    ereport.io.pci.sec-rta@PCIEXFN;
1993
1994/*
1995 * SERR# is considered fatal
1996 */
1997prop error.io.pci.serr-u@PCIEXFN/PCIFN (3)->
1998    error.io.pciex.fatal@PCIEXFN,
1999    ereport.io.pci.sec-rserr@PCIEXFN,
2000    ereport.io.pciex.bdg.sec-serr@PCIEXFN;
2001
2002/*
2003 * Retry time-out is nonfatal. The initial requester has stopped retrying so
2004 * there's nothing else the hardware can do but flag the error.
2005 */
2006prop error.io.pci.retry-to-u@PCIEXFN/PCIFN (2)->
2007    error.io.pciex.nonfatal@PCIEXFN,
2008    ereport.io.pciex.bdg.sec-tex@PCIEXFN;
2009
2010prop error.io.pci.retry-to-u@PCIEXFN/PCIFN (0)->
2011    ereport.io.pci.sta@PCIEXFN,
2012    ereport.io.pci.dto@PCIEXFN;
2013
2014prop error.io.pci.retry-to-u@PCIEXFN/PCIFN {
2015    is_under(pciexrc, PCIEXFN/PCIFN) } (0)->
2016    ereport.io.pci.sec-rta@pciexrc;
2017
2018/*
2019 * A bad dma request (eg with invalid address) propagates onto pci express
2020 * as a bad dma request. The end result may be a master abort or target abort
2021 * (depending on whether the child is pci-x or pci).
2022 */
2023prop error.io.pci.badreq-pw-u@PCIEXFN/PCIFN (0)->
2024    ereport.io.pci.ma@PCIEXFN,
2025    ereport.io.pci.rta@PCIEXFN,
2026    ereport.io.pci.sec-sta@PCIEXFN;
2027
2028prop error.io.pci.badreq-pw-u@PCIEXFN/PCIFN {
2029    is_under(pciexrc, PCIEXFN/PCIFN) } (0)->
2030    ereport.io.pciex.tl.ur@pciexrc,
2031    ereport.io.pciex.tl.ca@pciexrc,
2032    ereport.io.pci.sec-sta@pciexrc;
2033
2034prop error.io.pci.badreq-pw-u@PCIEXFN/PCIFN { IS_SD(PCIEXFN1) &&
2035    is_under(PCIEXFN1, PCIEXFN/PCIFN) } (0)->
2036    ereport.io.pciex.tl.ur@PCIEXFN1,
2037    ereport.io.pciex.tl.ca@PCIEXFN1,
2038    ereport.io.pci.sec-sta@PCIEXFN1,
2039    error.io.pciex.nonfatal@PCIEXFN1;
2040
2041prop error.io.pci.badreq-drw-u@PCIEXFN/PCIFN (0)->
2042    ereport.io.pci.ma@PCIEXFN,
2043    ereport.io.pci.rta@PCIEXFN,
2044    ereport.io.pci.sec-sta@PCIEXFN;
2045
2046prop error.io.pci.badreq-drw-u@PCIEXFN/PCIFN {
2047    is_under(pciexrc, PCIEXFN/PCIFN) } (0)->
2048    ereport.io.pciex.tl.ur@pciexrc,
2049    ereport.io.pciex.tl.ca@pciexrc,
2050    ereport.io.pci.sec-sta@pciexrc;
2051
2052prop error.io.pci.badreq-drw-u@PCIEXFN/PCIFN { IS_SD(PCIEXFN1) &&
2053    is_under(PCIEXFN1, PCIEXFN/PCIFN) } (0)->
2054    ereport.io.pciex.tl.ur@PCIEXFN1,
2055    ereport.io.pciex.tl.ca@PCIEXFN1,
2056    ereport.io.pci.sec-sta@PCIEXFN1,
2057    error.io.pciex.nonfatal@PCIEXFN1;
2058
2059/*
2060 * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2061 * target- propagations
2062 *
2063 * A Root Complex driver may generate "target-" ereports when knowledge of the
2064 * physical address associated with a fault allows the target device to be
2065 * determined. This is not a requirement of the Diagnosis Engine, but can be
2066 * valuable when available.
2067 * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2068 */
2069event error.io.pci.target-ma-d@PCIEXFN/PCIEXFN;
2070event error.io.pci.target-rta-d@PCIEXFN/PCIEXFN;
2071event error.io.pci.target-ma-d@PCIEXFN/PCIFN;
2072event error.io.pci.target-rta-d@PCIEXFN/PCIFN;
2073
2074event ereport.io.pci.target-rta@PCIEXFN{within(5s)};
2075event ereport.io.pci.target-ma@PCIEXFN{within(5s)};
2076
2077prop error.io.pci.target-ma-d@PCIEXFN (1)->
2078    error.io.pci.target-ma-d@PCIEXFN/PCIEXFNHZ;
2079
2080prop error.io.pci.target-ma-d@PCIEXFN (1)->
2081    error.io.pci.target-ma-d@PCIEXFN/PCIFNHZ;
2082
2083prop error.io.pci.target-ma-d@PCIEXFN (0)->
2084    ereport.io.pci.target-ma@PCIEXFN;
2085
2086prop error.io.pci.target-rta-d@PCIEXFN (1)->
2087    error.io.pci.target-rta-d@PCIEXFN/PCIEXFNHZ;
2088
2089prop error.io.pci.target-rta-d@PCIEXFN (1)->
2090    error.io.pci.target-rta-d@PCIEXFN/PCIFNHZ;
2091
2092prop error.io.pci.target-rta-d@PCIEXFN (0)->
2093    ereport.io.pci.target-rta@PCIEXFN;
2094
2095/*
2096 * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2097 * stub unused pciex-pci bridge ereports
2098 * - ignore usc/sec-unex-spl
2099 * - ignore sec-spl-or/sec-spl-dly as these aren't really faults (tuning info)
2100 * - ignore ecc.ue ereports (we get everything we need from dpe/mdpe)
2101 * - ignore ecc.ce ereports for now (could do serd on these)
2102 * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2103 */
2104
2105event ereport.io.pciex.bdg.usc@PCIEXFN{within(5s)};
2106event ereport.io.pcix.sec-unex-spl@PCIEXFN{within(5s)};
2107event ereport.io.pcix.sec-spl-or@PCIEXFN{within(5s)};
2108event ereport.io.pcix.sec-spl-dly@PCIEXFN{within(5s)};
2109event ereport.io.pcix.sec-ecc.ce-addr@PCIEXFN{within(5s)};
2110event ereport.io.pcix.sec-ecc.ce-attr@PCIEXFN{within(5s)};
2111event ereport.io.pcix.sec-ecc.ce-data@PCIEXFN{within(5s)};
2112event ereport.io.pcix.sec-ecc.ue-addr@PCIEXFN{within(5s)};
2113event ereport.io.pcix.sec-ecc.ue-attr@PCIEXFN{within(5s)};
2114event ereport.io.pcix.sec-ecc.ue-data@PCIEXFN{within(5s)};
2115event ereport.io.pcix.sec-s-ce@PCIEXFN{within(5s)};
2116event ereport.io.pcix.sec-s-ue@PCIEXFN{within(5s)};
2117
2118event upset.io.pciex.discard-bdg@PCIEXFN;
2119
2120prop upset.io.pciex.discard-bdg@PCIEXFN (1)->
2121    ereport.io.pciex.bdg.usc@PCIEXFN,
2122    ereport.io.pcix.sec-unex-spl@PCIEXFN,
2123    ereport.io.pcix.sec-spl-or@PCIEXFN,
2124    ereport.io.pcix.sec-spl-dly@PCIEXFN,
2125    ereport.io.pcix.sec-ecc.ce-addr@PCIEXFN,
2126    ereport.io.pcix.sec-ecc.ce-attr@PCIEXFN,
2127    ereport.io.pcix.sec-ecc.ce-data@PCIEXFN,
2128    ereport.io.pcix.sec-ecc.ue-addr@PCIEXFN,
2129    ereport.io.pcix.sec-ecc.ue-attr@PCIEXFN,
2130    ereport.io.pcix.sec-ecc.ue-data@PCIEXFN,
2131    ereport.io.pcix.sec-s-ce@PCIEXFN,
2132    ereport.io.pcix.sec-s-ue@PCIEXFN;
2133