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
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to