From 3927098f93ea42816a3c7887d468190e5f94d863 Mon Sep 17 00:00:00 2001 From: Paul Saab Date: Sun, 4 May 2003 00:07:21 +0000 Subject: [PATCH] Implement the write twice to send producer index workaround for BCM5700 chips as described in the Broadcom Errata documents. Obtained from: NetBSD and Broadcom Errata documentation --- sys/dev/bge/if_bge.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/sys/dev/bge/if_bge.c b/sys/dev/bge/if_bge.c index d7888fead632..0d0c7acb6e05 100644 --- a/sys/dev/bge/if_bge.c +++ b/sys/dev/bge/if_bge.c @@ -934,8 +934,16 @@ bge_init_tx_ring(sc) { sc->bge_txcnt = 0; sc->bge_tx_saved_considx = 0; + CSR_WRITE_4(sc, BGE_MBX_TX_HOST_PROD0_LO, 0); + /* 5700 b2 errata */ + if (BGE_ASICREV(sc->bge_asicrev) == BGE_ASICREV_BCM5700) + CSR_WRITE_4(sc, BGE_MBX_TX_HOST_PROD0_LO, 0); + CSR_WRITE_4(sc, BGE_MBX_TX_NIC_PROD0_LO, 0); + /* 5700 b2 errata */ + if (BGE_ASICREV(sc->bge_asicrev) == BGE_ASICREV_BCM5700) + CSR_WRITE_4(sc, BGE_MBX_TX_NIC_PROD0_LO, 0); return(0); } @@ -2344,6 +2352,9 @@ bge_start(ifp) /* Transmit */ CSR_WRITE_4(sc, BGE_MBX_TX_HOST_PROD0_LO, prodidx); + /* 5700 b2 errata */ + if (BGE_ASICREV(sc->bge_asicrev) == BGE_ASICREV_BCM5700) + CSR_WRITE_4(sc, BGE_MBX_TX_HOST_PROD0_LO, prodidx); /* * Set a timeout in case the chip goes out to lunch.