diff options
author | Stuart Henderson <sthen@cvs.openbsd.org> | 2009-06-11 23:11:28 +0000 |
---|---|---|
committer | Stuart Henderson <sthen@cvs.openbsd.org> | 2009-06-11 23:11:28 +0000 |
commit | ab2ff2c44282dca04b8226bcd5a41762993ae8ba (patch) | |
tree | 986947593fc0d66e494bb8de9d89b23ebe64b980 /sys | |
parent | 2c691c7cb711929101fd0b0ba05f7c3d40351c1d (diff) |
Limit the BCM5701 B5 chipset to 32-bit mode as a workaround for a
bug which causes data corruption in combination with certain
bridges. Tested on BCM5701 B5 (0x105).
From FreeBSD via Brad. http://www.freebsd.org/cgi/query-pr.cgi?pr=128833
Diffstat (limited to 'sys')
-rw-r--r-- | sys/dev/pci/if_bge.c | 12 |
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. */ |