Module Name:    src
Committed By:   msaitoh
Date:           Thu Apr 13 04:27:46 UTC 2017

Modified Files:
        src/sys/dev/pci: if_bge.c if_bgereg.h

Log Message:
- Read chip ID correctly on BCM57782 and BCM57786.
- Add BXCM57766 A0 string.
- Add comment for BCM5776[56]'s workaround.


To generate a diff of this commit:
cvs rdiff -u -r1.304 -r1.305 src/sys/dev/pci/if_bge.c
cvs rdiff -u -r1.92 -r1.93 src/sys/dev/pci/if_bgereg.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/dev/pci/if_bge.c
diff -u src/sys/dev/pci/if_bge.c:1.304 src/sys/dev/pci/if_bge.c:1.305
--- src/sys/dev/pci/if_bge.c:1.304	Wed Apr 12 06:22:16 2017
+++ src/sys/dev/pci/if_bge.c	Thu Apr 13 04:27:46 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_bge.c,v 1.304 2017/04/12 06:22:16 msaitoh Exp $	*/
+/*	$NetBSD: if_bge.c,v 1.305 2017/04/13 04:27:46 msaitoh Exp $	*/
 
 /*
  * Copyright (c) 2001 Wind River Systems
@@ -79,7 +79,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_bge.c,v 1.304 2017/04/12 06:22:16 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_bge.c,v 1.305 2017/04/13 04:27:46 msaitoh Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -743,6 +743,7 @@ static const struct bge_revision {
 	{ BGE_CHIPID_BCM5906_A2, "BCM5906 A2" },
 	{ BGE_CHIPID_BCM57765_A0, "BCM57765 A0" },
 	{ BGE_CHIPID_BCM57765_B0, "BCM57765 B0" },
+	{ BGE_CHIPID_BCM57766_A0, "BCM57766 A0" },
 	{ BGE_CHIPID_BCM57780_A0, "BCM57780 A0" },
 	{ BGE_CHIPID_BCM57780_A1, "BCM57780 A1" },
 
@@ -2319,6 +2320,11 @@ bge_chipinit(struct bge_softc *sc)
 			CSR_WRITE_4(sc, BGE_MODE_CTL, mode_ctl);
 		}
 		if (BGE_CHIPREV(sc->bge_chipid) != BGE_CHIPREV_57765_AX) {
+			/*
+			 * For the 57766 and non Ax versions of 57765, bootcode
+			 * needs to setup the PCIE Fast Training Sequence (FTS)
+			 * value to prevent transmit hangs.
+			 */
 			reg = CSR_READ_4(sc, BGE_CPMU_PADRNG_CTL);
 			CSR_WRITE_4(sc, BGE_CPMU_PADRNG_CTL,
 			    reg | BGE_CPMU_PADRNG_CTL_RDIV2);
@@ -3266,7 +3272,9 @@ bge_chipid(const struct pci_attach_args 
 		case PCI_PRODUCT_BROADCOM_BCM57765:
 		case PCI_PRODUCT_BROADCOM_BCM57766:
 		case PCI_PRODUCT_BROADCOM_BCM57781:
+		case PCI_PRODUCT_BROADCOM_BCM57782:
 		case PCI_PRODUCT_BROADCOM_BCM57785:
+		case PCI_PRODUCT_BROADCOM_BCM57786:
 		case PCI_PRODUCT_BROADCOM_BCM57791:
 		case PCI_PRODUCT_BROADCOM_BCM57795:
 			id = pci_conf_read(pa->pa_pc, pa->pa_tag,
@@ -5518,6 +5526,8 @@ bge_init(struct ifnet *ifp)
 	}
 
 	if (BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM57780) {
+		pcireg_t aercap;
+
 		reg = CSR_READ_4(sc, BGE_PCIE_PWRMNG_THRESH);
 		reg = (reg & ~BGE_PCIE_PWRMNG_L1THRESH_MASK)
 		    | BGE_PCIE_PWRMNG_L1THRESH_4MS
@@ -5529,7 +5539,11 @@ bge_init(struct ifnet *ifp)
 		    | BGE_PCIE_EIDLE_DELAY_13CLK;
 		CSR_WRITE_4(sc, BGE_PCIE_EIDLE_DELAY, reg);
 
-		/* XXX clear correctable error count */
+		/* Clear correctable error */
+		if (pci_get_ext_capability(sc->sc_pc, sc->sc_pcitag,
+		    PCI_EXTCAP_AER, &aercap, NULL) != 0)
+			pci_conf_write(sc->sc_pc, sc->sc_pcitag,
+			    aercap + PCI_AER_COR_STATUS, 0xffffffff);
 
 		reg = CSR_READ_4(sc, BGE_PCIE_LINKCTL);
 		reg = (reg & ~BGE_PCIE_LINKCTL_L1_PLL_PDEN)

Index: src/sys/dev/pci/if_bgereg.h
diff -u src/sys/dev/pci/if_bgereg.h:1.92 src/sys/dev/pci/if_bgereg.h:1.93
--- src/sys/dev/pci/if_bgereg.h:1.92	Wed Apr 12 06:22:16 2017
+++ src/sys/dev/pci/if_bgereg.h	Thu Apr 13 04:27:46 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_bgereg.h,v 1.92 2017/04/12 06:22:16 msaitoh Exp $	*/
+/*	$NetBSD: if_bgereg.h,v 1.93 2017/04/13 04:27:46 msaitoh Exp $	*/
 /*
  * Copyright (c) 2001 Wind River Systems
  * Copyright (c) 1997, 1998, 1999, 2001
@@ -349,6 +349,7 @@
 #define	BGE_CHIPID_BCM5720_A0		0x05720000
 #define	BGE_CHIPID_BCM57765_A0		0x57785000
 #define	BGE_CHIPID_BCM57765_B0		0x57785100
+#define	BGE_CHIPID_BCM57766_A0		0x57766000
 
 /* shorthand one */
 #define BGE_ASICREV(x)			((x) >> 12)

Reply via email to