I've had some of these diffs sitting around for awhile so I might as well
post them..


Limit the BCM5701 B5 chipset to 32-bit mode as a workaround for a bug which
causes data corruption in combination with certain bridges.

http://www.freebsd.org/cgi/query-pr.cgi?pr=128833

>From FreeBSD


Index: if_bge.c
===================================================================
RCS file: /cvs/src/sys/dev/pci/if_bge.c,v
retrieving revision 1.258
diff -u -p -r1.258 if_bge.c
--- if_bge.c    3 Dec 2008 23:51:52 -0000       1.258
+++ if_bge.c    15 Dec 2008 21:18:08 -0000
@@ -1329,6 +1232,16 @@ bge_chipinit(struct bge_softc *sc)
 #endif
 
        /*
+        * BCM5701 B5 have a bug causing data corruption when using
+        * 64-bit DMA reads, which can be terminated early and then
+        * completed later as 32-bit accesses, in combination with
+        * certain bridges.
+        */
+       if (BGE_ASICREV(sc->bge_chipid) == BGE_ASICREV_BCM5701 &&
+           sc->bge_chipid == BGE_CHIPID_BCM5701_B5)
+               BGE_SETBIT(sc, BGE_MODE_CTL, BGE_MODECTL_FORCE_PCI32);
+
+       /*
         * Disable memory write invalidate.  Apparently it is not supported
         * properly by these devices.
         */

-- 
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.

Reply via email to