Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 23 Oct 2010 21:25:50 +0000 (UTC)
From:      Pyun YongHyeon <yongari@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r214251 - head/sys/dev/bge
Message-ID:  <201010232125.o9NLPoJ7002490@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: yongari
Date: Sat Oct 23 21:25:50 2010
New Revision: 214251
URL: http://svn.freebsd.org/changeset/base/214251

Log:
  Apply the same workaround for SDI flow control used on BCM5906 A1
  to BCM6906 A0/A2. This should fix a long standing BCM5906 A2 lockup
  issues. Data sheet explicitly mentions BCM5906 A0, A1 and A2 use
  de-pipelined mode on these revisions.
  Special thanks to Buganini who tried all combinations of
  experimental patches for more than 10 days.
  
  Tested by:	Buganini <buganini <> gmail dot com >

Modified:
  head/sys/dev/bge/if_bge.c
  head/sys/dev/bge/if_bgereg.h

Modified: head/sys/dev/bge/if_bge.c
==============================================================================
--- head/sys/dev/bge/if_bge.c	Sat Oct 23 20:35:40 2010	(r214250)
+++ head/sys/dev/bge/if_bge.c	Sat Oct 23 21:25:50 2010	(r214251)
@@ -1693,11 +1693,14 @@ bge_blockinit(struct bge_softc *sc)
 		bge_writembx(sc, BGE_MBX_RX_MINI_PROD_LO, 0);
 	}
 
-	/* Choose de-pipeline mode for BCM5906 A1. */
-	if (sc->bge_asicrev == BGE_ASICREV_BCM5906 &&
-	    sc->bge_chiprev == BGE_CHIPID_BCM5906_A1)
-		CSR_WRITE_4(sc, BGE_ISO_PKT_TX,
-		    (CSR_READ_4(sc, BGE_ISO_PKT_TX) & ~3) | 2);
+	/* Choose de-pipeline mode for BCM5906 A0, A1 and A2. */
+	if (sc->bge_asicrev == BGE_ASICREV_BCM5906) {
+		if (sc->bge_chiprev == BGE_CHIPID_BCM5906_A0 ||
+		    sc->bge_chiprev == BGE_CHIPID_BCM5906_A1 ||
+		    sc->bge_chiprev == BGE_CHIPID_BCM5906_A2)
+			CSR_WRITE_4(sc, BGE_ISO_PKT_TX,
+			    (CSR_READ_4(sc, BGE_ISO_PKT_TX) & ~3) | 2);
+	}
 	/*
 	 * The BD ring replenish thresholds control how often the
 	 * hardware fetches new BD's from the producer rings in host

Modified: head/sys/dev/bge/if_bgereg.h
==============================================================================
--- head/sys/dev/bge/if_bgereg.h	Sat Oct 23 20:35:40 2010	(r214250)
+++ head/sys/dev/bge/if_bgereg.h	Sat Oct 23 21:25:50 2010	(r214251)
@@ -306,6 +306,7 @@
 #define	BGE_CHIPID_BCM5787_A0		0xb000
 #define	BGE_CHIPID_BCM5787_A1		0xb001
 #define	BGE_CHIPID_BCM5787_A2		0xb002
+#define	BGE_CHIPID_BCM5906_A0		0xc000
 #define	BGE_CHIPID_BCM5906_A1		0xc001
 #define	BGE_CHIPID_BCM5906_A2		0xc002
 #define	BGE_CHIPID_BCM57780_A0		0x57780000



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201010232125.o9NLPoJ7002490>