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.
