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 53engine serd.io.device.nonfatal@PCIFN, 54 N=NONFATAL_COUNT, T=NONFATAL_TIME; 55 56engine serd.io.pci.nf-dpe@PCIFN, 57 N=NONFATAL_DPE_COUNT, T=NONFATAL_DPE_TIME; 58 59engine 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 85event fault.io.pci.device-interr-corr@PCIFN, 86 engine=serd.io.device.nonfatal@PCIFN, FITrate=PCI_DEV_FIT; 87 88event fault.io.pci.device-interr-unaf@PCIFN, 89 engine=serd.io.pci.nf-dpe@PCIFN, FITrate=PCI_DEV_FIT; 90 91event fault.io.pci.device-interr-deg@PCIFN, FITrate=PCI_DEV_FIT, retire=0; 92 93event fault.io.pci.device-interr@PCIFN, FITrate=PCI_DEV_FIT; 94 95event fault.io.pci.device-invreq@PCIFN, FITrate=PCI_DEV_FIT; 96 97event fault.io.pci.device-noresp@PCIFN, FITrate=PCI_DEV_FIT; 98 99event fault.io.pci.fw_corrupt@PCIFN, FITrate=PCI_DEV_FIT, retire=0; 100 101event 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 125event error.io.pci.retry-to-d@PCIFN; 126event error.io.pci.nr-pw-d@PCIFN; 127event error.io.pci.nr-drw-d@PCIFN; 128event error.io.pci.ta-pw-d@PCIFN; 129event error.io.pci.ta-drw-d@PCIFN; 130event error.io.pci.badreq-pw-d@PCIFN; 131event error.io.pci.badreq-drw-d@PCIFN; 132event error.io.pci.f-dpe-d@PCIFN; 133event error.io.pci.deg-dpe-d@PCIFN; 134event error.io.pci.nf-dpe-d@PCIFN; 135event error.io.pci.ape-d@PCIFN; 136event error.io.pci.ape-u@PCIFN; 137event error.io.pci.dpdata-dw-d@PCIFN; 138event error.io.pci.dpdata-pw-d@PCIFN; 139event error.io.pci.dpdata-dr-d@PCIFN; 140event error.io.pci.dpdata-pw-u@PCIFN; 141event error.io.pci.dpdata-dw-u@PCIFN; 142event error.io.pci.dpdata-dr-u@PCIFN; 143event error.io.pci.ta-u@PCIFN; 144event error.io.pci.ma-u@PCIFN; 145event error.io.pci.perr-dw-u@PCIFN; 146event error.io.pci.perr-pw-u@PCIFN; 147event error.io.pci.perr-dr-u@PCIFN; 148event error.io.pci.badreq-drw-u@PCIFN; 149event error.io.pci.badreq-pw-u@PCIFN; 150event error.io.pci.device-serr@PCIFN; 151event error.io.pci.device-ta@PCIFN; 152event error.io.pci.device-par@PCIFN; 153event error.io.pci.serr-u@PCIFN; 154event error.io.pcix.scpe-d@PCIFN; 155event error.io.pcix.scpe-u@PCIFN; 156event error.io.pcix.spl-comp-ma-u@PCIFN; 157event error.io.pcix.spl-comp-ta-u@PCIFN; 158event error.io.pcix.spl-comp-ma-d@PCIFN; 159event error.io.pcix.spl-comp-ta-d@PCIFN; 160 161event ereport.io.pci.ma@PCIFN{within(5s)}; 162event ereport.io.pci.rta@PCIFN{within(5s)}; 163event ereport.io.pci.mdpe@PCIFN{within(5s)}; 164event ereport.io.pci.sta@PCIFN{within(5s)}; 165event ereport.io.pci.sserr@PCIFN{within(5s)}; 166event ereport.io.pci.dpe@PCIFN{within(5s)}; 167event ereport.io.pci.target-mdpe@PCIFN{within(5s)}; 168event ereport.io.pci.target-rta@PCIFN{within(5s)}; 169event ereport.io.pci.target-ma@PCIFN{within(5s)}; 170event ereport.io.pcix.discard@PCIFN{within(5s)}; 171 172prop 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 177prop 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 181prop fault.io.pci.device-interr-unaf@pcibus/pcidev[fromdev]/pcifn (0)-> 182 error.io.pci.nf-dpe-d@PCI_FROM_HB; 183 184prop fault.io.pci.device-interr-deg@pcibus/pcidev[fromdev]/pcifn (0)-> 185 error.io.pci.deg-dpe-d@PCI_FROM_HB; 186 187prop 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 192prop 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 197prop 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 201prop 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 205prop 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 */ 214prop error.io.pci.dpdata-pw-u@pcibus/pcidev[fromdev]/pcifn (1)-> 215 ereport.io.pci.dpe@PCI_TO_HB; 216 217prop error.io.pci.dpdata-dw-u@pcibus/pcidev[fromdev]/pcifn (1)-> 218 ereport.io.pci.dpe@PCI_TO_HB; 219 220prop 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 224prop 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 229prop error.io.pci.ape-u@pcibus/pcidev[fromdev]/pcifn (0)-> 230 ereport.io.pci.sta@PCI_TO_HB; 231 232prop error.io.pci.ma-u@pcibus/pcidev[fromdev]/pcifn (1)-> 233 ereport.io.pci.ma@PCI_TO_HB; 234 235prop error.io.pci.ta-u@pcibus/pcidev[fromdev]/pcifn (1)-> 236 ereport.io.pci.rta@PCI_TO_HB; 237 238prop error.io.pci.perr-dw-u@pcibus/pcidev[fromdev]/pcifn (1)-> 239 ereport.io.pci.mdpe@PCI_TO_HB; 240 241prop error.io.pci.perr-pw-u@pcibus/pcidev[fromdev]/pcifn (1)-> 242 ereport.io.pci.mdpe@PCI_TO_HB; 243 244prop error.io.pci.badreq-drw-u@pcibus/pcidev[fromdev]/pcifn (0)-> 245 ereport.io.pci.sta@PCI_TO_HB; 246 247prop error.io.pci.badreq-pw-u@pcibus/pcidev[fromdev]/pcifn (0)-> 248 ereport.io.pci.sta@PCI_TO_HB; 249 250prop 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 254prop 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 260prop 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 265prop 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 301event error.io.pci.retry-to-u@PCIFN; 302event error.io.pci.nr-pw-u@PCIFN; 303event error.io.pci.nr-drw-u@PCIFN; 304event error.io.pci.ta-pw-u@PCIFN; 305event error.io.pci.ta-drw-u@PCIFN; 306event error.io.pci.f-dpe-u@PCIFN; 307event error.io.pci.deg-dpe-u@PCIFN; 308event error.io.pci.nf-dpe-u@PCIFN; 309event error.io.pci.flt-dpdata-pw-u@PCIFN; 310event error.io.pci.flt-dpdata-dw-u@PCIFN; 311event error.io.pci.flt-dpdata-dr-u@PCIFN; 312event error.io.pci.source-dpdata-u@PCIFN; 313event error.io.pci.f-source-dpdata-u@PCIFN; 314event error.io.pci.f-source-dpdata-u@PCIFN/PCIFN; 315event error.io.pci.deg-source-dpdata-u@PCIFN; 316event error.io.pci.deg-source-dpdata-u@PCIFN/PCIFN; 317event error.io.pci.nf-source-dpdata-u@PCIFN; 318event error.io.pci.nf-source-dpdata-u@PCIFN/PCIFN; 319event error.io.pci.perr-d@PCIFN; 320event error.io.pci.target-mdpe-d@PCIFN; 321event error.io.pci.target-mdpe-d@PCIFN/PCIFN; 322event error.io.pci.target-rta-d@PCIFN/PCIFN; 323event error.io.pci.target-ma-d@PCIFN/PCIFN; 324event error.io.pcix.tx-oor@PCIFN; 325event error.io.pcix.rx-unex-sc@PCIFN; 326event error.io.device.nf-device@PCIFN; 327event error.io.device.f-device@PCIFN; 328event error.io.device.deg-device@PCIFN; 329event error.io.service.restored@PCIFN; 330 331event ereport.io.pcix.oor@PCIFN{within(5s)}; 332event ereport.io.pcix.unex-sc@PCIFN{within(5s)}; 333event ereport.io.device.fw_corrupt@PCIFN{within(5s)}; 334event ereport.io.device.fw_mismatch@PCIFN{within(5s)}; 335event ereport.io.service.lost@PCIFN{within(5s)}; 336event ereport.io.service.degraded@PCIFN{within(5s)}; 337event ereport.io.service.unaffected@PCIFN{within(5s)}; 338event ereport.io.service.restored@PCIFN{within(30s)}; 339 340prop 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 345prop fault.io.pci.device-interr-corr@pcibus/pcidev[fromdev]/pcifn (0)-> 346 error.io.device.nf-device@PCI_NOT_HB; 347 348prop fault.io.pci.device-interr-unaf@pcibus/pcidev[fromdev]/pcifn (0)-> 349 error.io.pci.nf-dpe-u@PCI_NOT_HB; 350 351prop 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 355prop 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 366prop fault.io.pci.fw_corrupt@PCIFN {IS_LEAF} (1)-> 367 ereport.io.device.fw_corrupt@PCIFN; 368 369prop fault.io.pci.fw_corrupt@PCIFN {IS_LEAF} (0)-> 370 ereport.io.service.lost@PCIFN, 371 ereport.io.service.degraded@PCIFN; 372 373prop fault.io.pci.fw_mismatch@PCIFN {IS_LEAF} (1)-> 374 ereport.io.device.fw_mismatch@PCIFN; 375 376prop fault.io.pci.fw_mismatch@PCIFN {IS_LEAF} (0)-> 377 ereport.io.service.lost@PCIFN, 378 ereport.io.service.degraded@PCIFN; 379 380prop 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 384prop error.io.pcix.tx-oor@PCIFN (1)-> 385 ereport.io.pcix.oor@PCIFN; 386 387prop error.io.pcix.rx-unex-sc@pcibus/pcidev[fromdev]/pcifn (1)-> 388 ereport.io.pcix.unex-sc@pcibus/pcidev<todev>/pcifn<> {fromdev != todev}; 389 390prop 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 395prop error.io.pci.f-dpe-u@PCIFN (1)-> 396 error.io.pci.f-source-dpdata-u@PCIFN; 397 398prop error.io.pci.f-source-dpdata-u@PCIFN (1)-> 399 error.io.pci.f-source-dpdata-u@PCIFN/PCIFNHZ; 400 401prop error.io.pci.f-source-dpdata-u@PCIFN { IS_LF(PCIFN) } (1)-> 402 error.io.pci.source-dpdata-u@PCIFN; 403 404prop error.io.pci.f-source-dpdata-u@PCIFN { IS_LF(PCIFN) } (0)-> 405 ereport.io.service.lost@PCIFN; 406 407prop 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 412prop error.io.pci.deg-dpe-u@PCIFN (1)-> 413 error.io.pci.deg-source-dpdata-u@PCIFN; 414 415prop error.io.pci.deg-source-dpdata-u@PCIFN (1)-> 416 error.io.pci.deg-source-dpdata-u@PCIFN/PCIFNHZ; 417 418prop error.io.pci.deg-source-dpdata-u@PCIFN { IS_LF(PCIFN) } (1)-> 419 error.io.pci.source-dpdata-u@PCIFN; 420 421prop error.io.pci.deg-source-dpdata-u@PCIFN { IS_LF(PCIFN) } (1)-> 422 ereport.io.service.degraded@PCIFN; 423 424prop 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 429prop error.io.pci.nf-dpe-u@PCIFN (1)-> 430 error.io.pci.nf-source-dpdata-u@PCIFN; 431 432prop error.io.pci.nf-source-dpdata-u@PCIFN (1)-> 433 error.io.pci.nf-source-dpdata-u@PCIFN/PCIFNHZ; 434 435prop error.io.pci.nf-source-dpdata-u@PCIFN { IS_LF(PCIFN) } (1)-> 436 error.io.pci.source-dpdata-u@PCIFN; 437 438prop 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 442prop error.io.pci.flt-dpdata-pw-u@PCIFN (1)-> 443 error.io.pci.dpdata-pw-u@PCIFN; 444 445prop error.io.pci.flt-dpdata-pw-u@PCIFN { IS_BDG } (1)-> 446 error.io.pci.serr-u@PCIFN; 447 448prop 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 452prop 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 473event error.io.pci.ape-d@PCIFN/PCIFN; 474event error.io.pci.f-dpe-d@PCIFN/PCIFN; 475event error.io.pci.deg-dpe-d@PCIFN/PCIFN; 476event error.io.pci.nf-dpe-d@PCIFN/PCIFN; 477event error.io.pci.retry-to-d@PCIFN/PCIFN; 478event error.io.pci.nr-pw-d@PCIFN/PCIFN; 479event error.io.pci.nr-drw-d@PCIFN/PCIFN; 480event error.io.pci.ta-pw-d@PCIFN/PCIFN; 481event error.io.pci.ta-drw-d@PCIFN/PCIFN; 482event error.io.pcix.scpe-d@PCIFN/PCIFN; 483 484prop 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 489prop fault.io.pci.device-interr-unaf@PCIFN (0)-> 490 error.io.pci.nf-dpe-d@PCIFN/PCIFN; 491 492prop fault.io.pci.device-interr-deg@PCIFN (0)-> 493 error.io.pci.deg-dpe-d@PCIFN/PCIFN; 494 495prop 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 514event fault.io.pci.bus-linkerr-unaf@pcibus, 515 engine=serd.io.pci.nf-dpe-bus@pcibus, FITrate=PCI_BUS_FIT; 516 517event fault.io.pci.bus-linkerr-deg@pcibus, FITrate=PCI_BUS_FIT, retire=0; 518 519event fault.io.pci.bus-linkerr@pcibus, FITrate=PCI_BUS_FIT; 520 521prop 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 525prop 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 529prop 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 545event error.io.pci.serr-u@PCIFN/PCIFN; 546event error.io.pci.perr-dw-u@PCIFN/PCIFN; 547event error.io.pci.perr-pw-u@PCIFN/PCIFN; 548event error.io.pci.perr-d@PCIFN/PCIFN; 549event error.io.pci.dpdata-pw-u@PCIFN/PCIFN; 550event error.io.pci.dpdata-dw-u@PCIFN/PCIFN; 551event error.io.pci.dpdata-dr-u@PCIFN/PCIFN; 552event error.io.pci.dpdata-pw-fwd-d@PCIFN; 553event error.io.pci.dpdata-pw-fwd-d@PCIFN/PCIFN; 554event error.io.pci.dpdata-dw-fwd-d@PCIFN; 555event error.io.pci.dpdata-dw-fwd-d@PCIFN/PCIFN; 556event error.io.pci.dpdata-dr-fwd-d@PCIFN; 557event error.io.pci.dpdata-dr-fwd-d@PCIFN/PCIFN; 558event error.io.pci.source-perr-u@PCIFN; 559event error.io.pci.leaf-ape-d@PCIFN; 560event error.io.pci.ape-u@PCIFN/PCIFN; 561event error.io.pci.source-ape-u@PCIFN; 562event error.io.pci.badreq-pw-d@PCIFN/PCIFN; 563event error.io.pci.badreq-drw-d@PCIFN/PCIFN; 564event error.io.pci.badreq-pw-u@PCIFN/PCIFN; 565event error.io.pci.badreq-drw-u@PCIFN/PCIFN; 566event error.io.pci.ta-d@PCIFN; 567event error.io.pci.ta-d@PCIFN/PCIFN; 568event error.io.pci.ta-u@PCIFN/PCIFN; 569event error.io.pci.target-rta-d@PCIFN; 570event error.io.pci.target-ma-d@PCIFN; 571event error.io.pci.nr-pw-u@PCIFN/PCIFN; 572event error.io.pci.ta-pw-u@PCIFN/PCIFN; 573event error.io.pci.retry-to-u@PCIFN/PCIFN; 574event error.io.pcix.scpe-u@PCIFN/PCIFN; 575event error.io.pcix.source-scpe-u@PCIFN; 576event error.io.pcix.spl-comp-ma-u@PCIFN/PCIFN; 577event error.io.pcix.spl-comp-ta-u@PCIFN/PCIFN; 578event error.io.pci.ma-u@PCIFN/PCIFN; 579 580event ereport.io.pci.sec-ma@PCIFN{within(5s)}; 581event ereport.io.pci.sec-sta@PCIFN{within(5s)}; 582event ereport.io.pci.sec-rta@PCIFN{within(5s)}; 583event ereport.io.pci.sec-mdpe@PCIFN{within(5s)}; 584event ereport.io.pci.sec-dpe@PCIFN{within(5s)}; 585event ereport.io.pci.sec-rserr@PCIFN{within(5s)}; 586event ereport.io.pci.dto@PCIFN{within(5s)}; 587event ereport.io.pcix.sec-spl-dis@PCIFN{within(5s)}; 588event 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 */ 593prop error.io.pci.serr-u@pcibus/pcidev[fromdev]/pcifn (0)-> 594 ereport.io.pci.sserr@pcibus/pcidev<todev>/pcifn<> {todev!=fromdev}; 595 596prop error.io.pci.serr-u@PCIFN { IS_BDG } (1)-> 597 ereport.io.pci.sserr@PCIFN; 598 599prop 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 */ 607prop 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 611prop 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 */ 618prop error.io.pci.perr-d@PCIFN { IS_LEAF } (0)-> 619 ereport.io.pci.mdpe@PCIFN; 620 621prop error.io.pci.perr-d@PCIFN { IS_BDG } (1)-> 622 ereport.io.pci.mdpe@PCIFN; 623 624prop 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 */ 635prop error.io.pci.target-mdpe-d@PCIFN (0)-> 636 ereport.io.pci.target-mdpe@PCIFN; 637 638prop error.io.pci.target-mdpe-d@PCIFN (1)-> 639 error.io.pci.target-mdpe-d@PCIFN/PCIFNHZ; 640 641prop error.io.pci.target-rta-d@PCIFN (0)-> 642 ereport.io.pci.target-rta@PCIFN; 643 644prop error.io.pci.target-rta-d@PCIFN (1)-> 645 error.io.pci.target-rta-d@PCIFN/PCIFNHZ; 646 647prop error.io.pci.target-ma-d@PCIFN (0)-> 648 ereport.io.pci.target-ma@PCIFN; 649 650prop 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 */ 656prop error.io.pci.ta-u@PCIFN { IS_BDG } (1)-> 657 ereport.io.pci.sta@PCIFN; 658 659prop error.io.pci.ta-u@PCIFN { IS_LEAF } (0)-> 660 ereport.io.pci.sta@PCIFN; 661 662prop 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 */ 670prop 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 675prop 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 679prop 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 684prop 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 688prop error.io.pci.nr-pw-u@PCIFN/PCIFN (2)-> 689 ereport.io.pci.sec-ma@PCIFN, 690 error.io.pci.serr-u@PCIFN; 691 692prop error.io.pci.ta-pw-u@PCIFN { IS_LEAF } (0)-> 693 ereport.io.pci.sta@PCIFN; 694 695prop error.io.pci.ta-pw-u@PCIFN { IS_BDG } (1)-> 696 ereport.io.pci.sta@PCIFN; 697 698prop error.io.pci.ta-pw-u@PCIFN/PCIFN (2)-> 699 ereport.io.pci.sec-rta@PCIFN, 700 error.io.pci.serr-u@PCIFN; 701 702prop error.io.pci.nr-drw-u@PCIFN (1)-> 703 error.io.pci.ma-u@PCIFN; 704 705prop 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 709prop error.io.pci.ma-u@PCIFN/PCIFN (1)-> 710 ereport.io.pci.sec-ma@PCIFN; 711 712prop error.io.pci.ma-u@PCIFN/PCIFN (1)-> 713 error.io.pci.ma-u@PCIFN, 714 error.io.pci.ta-u@PCIFN; 715 716prop error.io.pci.ta-drw-u@PCIFN (1)-> 717 error.io.pci.ta-u@PCIFN; 718 719prop 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 */ 726prop 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 731prop 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 735prop error.io.pci.nr-pw-d@PCIFN { IS_LEAF } (0)-> 736 ereport.io.pci.ma@PCIFN; 737 738prop error.io.pci.nr-pw-d@PCIFN { IS_BDG } (2)-> 739 ereport.io.pci.ma@PCIFN, 740 error.io.pci.serr-u@PCIFN; 741 742prop error.io.pci.ta-pw-d@PCIFN/PCIFN (1)-> 743 ereport.io.pci.sec-sta@PCIFN; 744 745prop error.io.pci.ta-pw-d@PCIFN { IS_LEAF } (0)-> 746 ereport.io.pci.rta@PCIFN; 747 748prop 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 */ 756prop error.io.pci.badreq-drw-u@PCIFN { IS_LEAF } (0)-> 757 ereport.io.pci.rta@PCIFN, 758 ereport.io.pci.ma@PCIFN; 759 760prop error.io.pci.badreq-drw-u@PCIFN/PCIFN (1)-> 761 ereport.io.pci.ma@PCIFN, 762 ereport.io.pci.rta@PCIFN; 763 764prop error.io.pci.badreq-drw-u@PCIFN/PCIFN (0)-> 765 ereport.io.pci.sec-sta@PCIFN; 766 767prop error.io.pci.badreq-drw-u@PCIFN/PCIFN (0)-> 768 error.io.pci.badreq-drw-u@PCIFN; 769 770prop error.io.pci.nr-drw-d@PCIFN { IS_LEAF } (0)-> 771 ereport.io.pci.ma@PCIFN; 772 773prop error.io.pci.nr-drw-d@PCIFN { IS_BDG } (1)-> 774 ereport.io.pci.ma@PCIFN; 775 776prop error.io.pci.nr-drw-d@PCIFN { IS_BDG } (0)-> 777 ereport.io.pci.sec-sta@PCIFN; 778 779prop 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 783prop error.io.pci.ta-drw-d@PCIFN/PCIFN (1)-> 784 ereport.io.pci.sec-sta@PCIFN; 785 786prop error.io.pci.ta-drw-d@PCIFN (1)-> 787 error.io.pci.ta-d@PCIFN; 788 789prop error.io.pci.ta-d@PCIFN { IS_LEAF } (0)-> 790 ereport.io.pci.rta@PCIFN; 791 792prop error.io.pci.ta-d@PCIFN { IS_BDG } (2)-> 793 ereport.io.pci.sec-sta@PCIFN, 794 ereport.io.pci.rta@PCIFN; 795 796prop 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 */ 804prop 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 809prop 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 815prop error.io.pci.ape-u@PCIFN (0)-> 816 ereport.io.pci.mdpe@PCIFN; 817 818prop 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 822prop 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 */ 835prop 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 841prop 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 845prop error.io.pcix.spl-comp-ma-d@PCIFN (1)-> 846 error.io.pci.serr-u@PCIFN; 847 848prop 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 852prop 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 856prop error.io.pcix.spl-comp-ta-d@PCIFN (1)-> 857 error.io.pci.serr-u@PCIFN; 858 859prop 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 863prop 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 867prop 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 */ 874prop error.io.pci.ape-d@PCIFN (1)-> 875 error.io.pci.serr-u@PCIFN; 876 877prop error.io.pci.ape-d@PCIFN { IS_LEAF } (0)-> 878 error.io.pci.leaf-ape-d@PCIFN; 879 880prop error.io.pci.leaf-ape-d@PCIFN { IS_LEAF } (2)-> 881 ereport.io.pci.sserr@PCIFN, 882 ereport.io.pci.dpe@PCIFN; 883 884prop error.io.pci.ape-d@PCIFN { IS_BDG } (1)-> 885 ereport.io.pci.dpe@PCIFN; 886 887prop 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 */ 903prop 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 909prop 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 913prop 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 917prop error.io.pcix.spl-comp-ma-u@PCIFN/PCIFN (0)-> 918 ereport.io.pci.sec-ma@PCIFN; 919 920prop 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 */ 934prop error.io.pci.dpdata-pw-u@PCIFN { IS_LEAF } (0)-> 935 ereport.io.pci.mdpe@PCIFN; 936 937prop 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 942prop error.io.pci.dpdata-dw-u@PCIFN/PCIFN (1)-> 943 ereport.io.pci.sec-dpe@PCIFN; 944 945prop error.io.pci.dpdata-dw-u@PCIFN/PCIFN (0)-> 946 ereport.io.pci.mdpe@PCIFN, 947 error.io.pci.dpdata-dw-u@PCIFN; 948 949prop error.io.pci.dpdata-dw-u@PCIFN/PCIFN (0)-> 950 error.io.pci.retry-to-u@PCIFN/PCIFN; 951 952prop 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 */ 970prop 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 975prop error.io.pci.f-dpe-d@PCIFN (1)-> 976 error.io.pci.f-source-dpdata-u@PCIFN; 977 978prop 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 983prop error.io.pci.deg-dpe-d@PCIFN (1)-> 984 error.io.pci.deg-source-dpdata-u@PCIFN; 985 986prop 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 991prop error.io.pci.nf-dpe-d@PCIFN (1)-> 992 error.io.pci.nf-source-dpdata-u@PCIFN; 993 994prop 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 998prop error.io.pci.dpdata-pw-fwd-d@PCIFN { IS_LEAF } (1)-> 999 error.io.pci.source-perr-u@PCIFN; 1000 1001prop error.io.pci.dpdata-pw-fwd-d@PCIFN { IS_LEAF } (0)-> 1002 ereport.io.pci.dpe@PCIFN; 1003 1004prop 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 1008prop error.io.pci.dpdata-pw-fwd-d@PCIFN (1)-> 1009 error.io.pci.dpdata-pw-fwd-d@PCIFN/PCIFNHZ; 1010 1011prop 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 1016prop error.io.pci.dpdata-dw-d@PCIFN { IS_BDG } (1)-> 1017 ereport.io.pci.dpe@PCIFN; 1018 1019prop error.io.pci.dpdata-dw-d@PCIFN { IS_BDG } (0)-> 1020 error.io.pci.retry-to-d@PCIFN; 1021 1022prop error.io.pci.dpdata-dw-fwd-d@PCIFN { IS_LEAF } (1)-> 1023 error.io.pci.source-perr-u@PCIFN; 1024 1025prop error.io.pci.dpdata-dw-fwd-d@PCIFN { IS_LEAF } (0)-> 1026 ereport.io.pci.dpe@PCIFN; 1027 1028prop 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 1032prop error.io.pci.dpdata-dw-fwd-d@PCIFN (0)-> 1033 error.io.pci.dpdata-dw-fwd-d@PCIFN/PCIFNHZ; 1034 1035prop 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 1039prop error.io.pci.dpdata-dr-fwd-d@PCIFN { IS_LEAF } (1)-> 1040 error.io.pci.source-perr-u@PCIFN; 1041 1042prop error.io.pci.dpdata-dr-fwd-d@PCIFN { IS_LEAF } (0)-> 1043 ereport.io.pci.dpe@PCIFN, 1044 ereport.io.pci.mdpe@PCIFN; 1045 1046prop error.io.pci.dpdata-dr-fwd-d@PCIFN { IS_BDG } (2)-> 1047 ereport.io.pci.dpe@PCIFN, 1048 ereport.io.pci.mdpe@PCIFN; 1049 1050prop 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 */ 1056prop error.io.pci.retry-to-u@PCIFN/PCIFN (0)-> 1057 error.io.pci.retry-to-u@PCIFN; 1058 1059prop error.io.pci.retry-to-u@PCIFN/PCIFN (1)-> 1060 ereport.io.pci.dto@PCIFN; 1061 1062prop error.io.pci.retry-to-u@PCIFN/PCIFN (0)-> 1063 error.io.pci.serr-u@PCIFN; 1064 1065prop error.io.pci.retry-to-d@PCIFN (0)-> 1066 error.io.pci.retry-to-d@PCIFN/PCIFN; 1067 1068prop error.io.pci.retry-to-d@PCIFN { IS_BDG } (1)-> 1069 ereport.io.pci.dto@PCIFN; 1070 1071prop 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 */ 1079event error.io.pci.source-ape-u@PCIFN/PCIFN; 1080event error.io.pcix.source-scpe-u@PCIFN/PCIFN; 1081 1082prop error.io.pci.source-ape-u@PCIFN (1)-> 1083 error.io.pci.source-ape-u@PCIFN/PCIFNHZ; 1084 1085prop 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 */ 1094event ereport.io.device.inval_state@PCIFN{within(5s)}; 1095event ereport.io.device.no_response@PCIFN{within(5s)}; 1096event ereport.io.device.stall@PCIFN{within(5s)}; 1097event ereport.io.device.badint_limit@PCIFN{within(5s)}; 1098event ereport.io.device.intern_corr@PCIFN{within(5s)}; 1099event ereport.io.device.intern_uncorr@PCIFN{within(5s)}; 1100 1101prop error.io.service.restored@PCIFN { IS_LEAF } (1)-> 1102 ereport.io.service.lost@PCIFN, 1103 ereport.io.service.degraded@PCIFN; 1104 1105prop error.io.service.restored@PCIFN { IS_LEAF } (1)-> 1106 ereport.io.service.restored@PCIFN; 1107 1108prop 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 1116prop error.io.device.f-device@PCIFN { IS_LEAF } (1)-> 1117 ereport.io.service.lost@PCIFN; 1118 1119prop 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 1127prop error.io.device.deg-device@PCIFN { IS_LEAF } (1)-> 1128 ereport.io.service.degraded@PCIFN; 1129 1130prop 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 1138prop 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 1155event ereport.io.pci.nr@PCIFN{within(5s)}; 1156event ereport.io.pcix.unex-spl@PCIFN{within(5s)}; 1157event ereport.io.pcix.rx-spl@PCIFN{within(5s)}; 1158event ereport.io.pcix.sec-unex-spl@PCIFN{within(5s)}; 1159event ereport.io.pcix.sec-spl-or@PCIFN{within(5s)}; 1160event ereport.io.pcix.sec-spl-dly@PCIFN{within(5s)}; 1161event ereport.io.pcix.ecc.ce-addr@PCIFN{within(5s)}; 1162event ereport.io.pcix.ecc.ce-attr@PCIFN{within(5s)}; 1163event ereport.io.pcix.ecc.ce-data@PCIFN{within(5s)}; 1164event ereport.io.pcix.ecc.ue-addr@PCIFN{within(5s)}; 1165event ereport.io.pcix.ecc.ue-attr@PCIFN{within(5s)}; 1166event ereport.io.pcix.ecc.ue-data@PCIFN{within(5s)}; 1167event ereport.io.pcix.s-ce@PCIFN{within(5s)}; 1168event ereport.io.pcix.s-ue@PCIFN{within(5s)}; 1169event ereport.io.pcix.sec-ecc.ce-addr@PCIFN{within(5s)}; 1170event ereport.io.pcix.sec-ecc.ce-attr@PCIFN{within(5s)}; 1171event ereport.io.pcix.sec-ecc.ce-data@PCIFN{within(5s)}; 1172event ereport.io.pcix.sec-ecc.ue-addr@PCIFN{within(5s)}; 1173event ereport.io.pcix.sec-ecc.ue-attr@PCIFN{within(5s)}; 1174event ereport.io.pcix.sec-ecc.ue-data@PCIFN{within(5s)}; 1175event ereport.io.pcix.sec-s-ce@PCIFN{within(5s)}; 1176event ereport.io.pcix.sec-s-ue@PCIFN{within(5s)}; 1177 1178event upset.io.pcix.discard@PCIFN; 1179 1180prop 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