changeset 3420:0d6bd61bb5d0

6502201 Galaxy1F panics while running MAXQ with Northstar duel port card and also with Northstar QGE card
author anish
date Sun, 14 Jan 2007 09:14:05 -0800
parents 83f3eb80c815
children 45bf66715362
files usr/src/uts/common/os/pcifm.c usr/src/uts/common/sys/pcifm.h usr/src/uts/i86pc/io/pciex/pcie_error.c
diffstat 3 files changed, 16 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/usr/src/uts/common/os/pcifm.c	Sat Jan 13 16:24:00 2007 -0800
+++ b/usr/src/uts/common/os/pcifm.c	Sun Jan 14 09:14:05 2007 -0800
@@ -20,7 +20,7 @@
  */
 
 /*
- * Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
+ * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
  */
 
@@ -897,8 +897,10 @@
 
 	/* Disable PTLP/ECRC (or mask these two) for Switches */
 	if (dev_type == PCIE_PCIECAP_DEV_TYPE_UP ||
-	    dev_type == PCIE_PCIECAP_DEV_TYPE_DOWN)
+	    dev_type == PCIE_PCIECAP_DEV_TYPE_DOWN) {
+		erpt_p->pe_dflags |= PCIEX_SWITCH_DEV;
 		mask |= PCIE_AER_UCE_PTLP | PCIE_AER_UCE_ECRC;
+	}
 
 	if (pcie_regs->pcie_adv_regs->pcie_ue_mask != mask) {
 		pci_config_put32(erpt_p->pe_hdl,
@@ -1952,12 +1954,12 @@
 			goto done;
 #if !defined(__sparc)
 		/*
-		 * On x86 ignore UR on non-RBER leaf devices and pciex-pci
-		 * bridges.
+		 * On x86 ignore UR on non-RBER leaf devices, pciex-pci
+		 * bridges and switches.
 		 */
 		if ((pcie_regs->pcie_err_status & PCIE_DEVSTS_UR_DETECTED) &&
 		    !(pcie_regs->pcie_err_status & PCIE_DEVSTS_FE_DETECTED) &&
-		    ((erpt_p->pe_dflags & PCIEX_2PCI_DEV) ||
+		    ((erpt_p->pe_dflags & (PCIEX_2PCI_DEV|PCIEX_SWITCH_DEV)) ||
 		    !(erpt_p->pe_dflags & PCI_BRIDGE_DEV)) &&
 		    !(pcie_regs->pcie_dev_cap & PCIE_DEVCAP_ROLE_BASED_ERR_REP))
 			goto done;
@@ -2019,7 +2021,8 @@
 			 * advisory nonfatal.
 			 */
 			if (pciex_ue_err_tbl[i].reg_bit == PCIE_AER_UCE_UR &&
-			    ((erpt_p->pe_dflags & PCIEX_2PCI_DEV) ||
+			    ((erpt_p->pe_dflags &
+			    (PCIEX_2PCI_DEV|PCIEX_SWITCH_DEV)) ||
 			    !(erpt_p->pe_dflags & PCI_BRIDGE_DEV))) {
 				if (!(pcie_regs->pcie_dev_cap &
 				    PCIE_DEVCAP_ROLE_BASED_ERR_REP))
--- a/usr/src/uts/common/sys/pcifm.h	Sat Jan 13 16:24:00 2007 -0800
+++ b/usr/src/uts/common/sys/pcifm.h	Sun Jan 14 09:14:05 2007 -0800
@@ -19,7 +19,7 @@
  * CDDL HEADER END
  */
 /*
- * Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
+ * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
  */
 
@@ -44,6 +44,7 @@
 #define	PCIEX_ADV_DEV			0x10
 #define	PCIEX_RC_DEV			0x20
 #define	PCIEX_2PCI_DEV			0x40
+#define	PCIEX_SWITCH_DEV		0x80
 
 /*
  * PCI and PCI-X valid flags
--- a/usr/src/uts/i86pc/io/pciex/pcie_error.c	Sat Jan 13 16:24:00 2007 -0800
+++ b/usr/src/uts/i86pc/io/pciex/pcie_error.c	Sun Jan 14 09:14:05 2007 -0800
@@ -20,7 +20,7 @@
  */
 
 /*
- * Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
+ * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
  */
 
@@ -292,9 +292,12 @@
 	device_ctl |= pcie_device_ctrl_default;
 
 	/*
-	 * Disable UR for any non-RBER enabled leaf PCIe device or bridge
+	 * Disable UR for any non-RBER enabled leaf PCIe device,
+	 * bridge or switch devices.
 	 */
 	if ((dev_type == PCIE_PCIECAP_DEV_TYPE_PCIE_DEV ||
+	    dev_type == PCIE_PCIECAP_DEV_TYPE_UP ||
+	    dev_type == PCIE_PCIECAP_DEV_TYPE_DOWN ||
 	    dev_type == PCIE_PCIECAP_DEV_TYPE_PCIE2PCI) &&
 	    ((pci_config_get16(cfg_hdl, cap_ptr + PCIE_DEVCAP) &
 	    PCIE_DEVCAP_ROLE_BASED_ERR_REP) !=