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