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 >
This commit is contained in:
parent
4a85b5e2ea
commit
ca4f898699
@ -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
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user