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