pci.esc revision 3779d2d24dac3a9a84c5eefdeee36f7559299b2c
/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License (the "License").
* You may not use this file except in compliance with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
* Copyright 2007 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
/*
* SERD parameters.
*
* Nonfatal dpe errors have to be recovered by the hardened driver which may
* cause intermittant performance/responsiveness problems, so we have tighter
* within devices and bridges, so use similar rates to cpu data cache parity
* errors.
*
* We will be more conservative about nonfatal internal errors reported
* by the driver.
*/
#define FD_IS_LEAF \
"60400" && \
/*
* note general rule for errors is that for upstream propagations
* propagations it is the receiving device.
*/
/*
* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
* A faulty hostbridge may cause:
* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
* - nr-pw-d: the device not to respond to an upstream request
* - nr-drw-d: the device not to respond to an upstream request
* - ta-pw-d: the device to send a target abort to an upstream request
* - ta-drw-d: the device to send a target abort to an upstream request
* - serr-u: the device to report itself in error
* - badreq-pw-d:a bad downstream request - not parity error (may cause target
* to target abort or master abort)
* - badreq-drw-d:a bad downstream request - not parity error (may cause
* target to target abort or master abort)
* - scpe-d: split completion to get corrupted during downstream transmission
* - retry-to-d: the device to exceed the set timeout for a delayed
* transaction retry.
*/
/*
* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
* ereport generation rules for hostbridge
* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
*/
/*
* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
* A faulty PCI leaf device or pci-pci bridge may cause:
* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
* - nr-pw-u: the device not to respond to a valid downstream request
* - nr-drw-u: the device not to respond to a valid downstream request
* - ta-pw-u: the device responds with a ta to a valid downstream
* request
* - ta-drw-u: the device responds with a ta to a valid downstream
* request
* - serr-u: the device to report itself in error
* - badreq-pw-u: a bad upstream request (may cause target to target
* abort or master abort)
* - badreq-drw-u: a bad upstream request (may cause target to target
* abort or master abort)
* - scpe-u: the transfer of bad split completion upstream.
* - retry-to-u: the device to exceed the set timeout for a delayed
* transaction retry.
*
* A faulty PCI-X leaf device or bridge may also cause:
*
* - tx-oor: the device sends a byte count larger than the completers
* address range.
* - rx-unex-sc: the device recieved a split completion with a tag
* which does not match any outstanding transaction.
*/
/*
* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
* A faulty pci-pci bridge may also cause
* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
* - nr-pw-d: the device not to respond to a valid upstream request
* - nr-drw-d: the device not to respond to a valid upstream request
* - ta-pw-d: the device responds with a ta to a valid upstream
* request
* - ta-drw-d: the device responds with a ta to a valid upstream
* request
* - scpe-d: split completion gets corrupted during downstream transmission.
* - retry-to-d: the device to exceed the set timeout for a delayed
* transaction retry.
*/
/*
* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
* A faulty PCI bus may cause:
* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
* - scpe-d: split completion gets corrupted during downstream transmission.
* - scpe-u: split completion to get corrupted during upstream transmission.
*/
/*
* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
* recursive rules for pci-pci bridges
* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
*/
/*
* SERR# can propagate upstream and may be seen by other devices on the bus
*/
/*
* PERR# can propagate upstream for delayed writes. For posted writes
* it turns into an SERR#.
*/
/*
* PERR# can propagate downstream (only for downstream dw parity error)
*/
/*
* downstream target ereports are for any descendant device
*
* A hostbridge driver may generate "target-" ereports when knowledge of the
* physical address associated with a fault allows the target device to be
* determined. This is not a requirement of the Diagnosis Engine, but can be
* valuable when available.
*/
/*
* target aborts propagate upstream
*/
/*
* bad data (ie invalid but not an ape or dpe) can propagate downstream,
* and at some point may result in a target or master abort
*/
/*
* bad data (ie invalid but not an ape or dpe) can propagate upstream,
* and at some point may result in a target or master abort
*/
/*
* for delayed writes we treat upstream badreq specially as rta always
* propagates back downstream to the leaf
*/
/*
* Request with address parity error must be detected by parent device
* and can optionally result in a target or master abort.
* It may also be detected by sibling devices on a bus
*/
/*
* If the bridge sees an upstream split completion error (pci-x only) it could
* result in a number of things
* - for various faults in the split completion (eg address parity error)
* we will respond with a target abort (which the child device will treat
* as a split completion ta)
* - for other faults we can't tell who send the split completion and so
* just drop the request (which the child device sees as a split
* completion ma)
*/
/*
* request with address parity error must be detected by child device
* and can optionally result in a target or master abort.
*/
/*
* If the device sees a downstream split completion error (pci-x only) it could
* result in a number of things
* - for various faults in the split completion (eg address parity error)
* we will respond with a target abort (which the parent bridge will treat
* as a split completion ta)
* - for other faults we can't tell who send the split completion and so
* just drop the request (which the parent bridge sees as a split
* completion ma)
*/
/*
* request with data parity error can propagate upstream
*
* for PCI/X (but not PCI) the split write can optionally be forwarded across
*
* if there is a dpe on a retry on a delayed write, we don't send another
* retry, and eventually the dto timer will expire
*/
/*
* Request with data parity error can propagate downstream. A hardened
* leaf driver should handle the error, but may or may not be able to
* avoid service impact. We handle to two cases separately. If there is
* service impact we will fail immediately, if not we will feed into a SERD
* engine.
*
* for PCI/X (but not PCI) the split write can optionally be forwarded across
*
* if there is a dpe on a retry on a delayed write, we don't send another
* retry, and eventually the dto timer will expire
*/
/*
*/
/*
* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
* source- propagations.
* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
*/
/*
* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
* Handling of leaf driver detected internal errors. Use serd engine if
* no service impact - otherwise fail immediately
* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
*/
/*
* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
* Handling of pci express nonfatal errors (dpe). Use serd engine if
* no service impact - otherwise fail immediately
* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
*/
/*
* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
* stub unused ereports
* - ignore rx-spl as we can't tell what message it was (and we should have
* diagnosed the problem anyway from standard pci ereports)
* - ignore sec-spl-or/sec-spl-dly as these aren't really faults (tuning info)
* - ignore unex-spl/sec-unex-spl
* - ignore ecc.ce ereports for now (could do serd on these)
* - ignore nr ereport
* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
*/