summaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
Diffstat (limited to 'sys')
-rw-r--r--sys/dev/pci/if_bge.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/sys/dev/pci/if_bge.c b/sys/dev/pci/if_bge.c
index d3d7ce8db6a..d7177f3af99 100644
--- a/sys/dev/pci/if_bge.c
+++ b/sys/dev/pci/if_bge.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: if_bge.c,v 1.274 2009/06/11 22:44:14 sthen Exp $ */
+/* $OpenBSD: if_bge.c,v 1.275 2009/06/11 23:11:27 sthen Exp $ */
/*
* Copyright (c) 2001 Wind River Systems
@@ -1276,6 +1276,16 @@ bge_chipinit(struct bge_softc *sc)
BGE_MODECTL_TX_NO_PHDR_CSUM);
/*
+ * 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.
*/