From 35b635f677ccfdbc095e9f8038fe253f777a8d00 Mon Sep 17 00:00:00 2001 From: Sepherosa Ziehau Date: Mon, 2 Jul 2012 15:49:22 +0800 Subject: [PATCH] bge: Enable hardware patch for TX MAC lockup on BCM5755+ and BCM5906 Obtained-from: FreeBSD 214216 --- sys/dev/netif/bge/if_bge.c | 7 ++++++- sys/dev/netif/bge/if_bgereg.h | 1 + 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/sys/dev/netif/bge/if_bge.c b/sys/dev/netif/bge/if_bge.c index 8bc47ccc10..e3183dfb84 100644 --- a/sys/dev/netif/bge/if_bge.c +++ b/sys/dev/netif/bge/if_bge.c @@ -3244,6 +3244,7 @@ bge_init(void *xsc) struct bge_softc *sc = xsc; struct ifnet *ifp = &sc->arpcom.ac_if; uint16_t *m; + uint32_t mode; ASSERT_SERIALIZED(ifp->if_serializer); @@ -3316,8 +3317,12 @@ bge_init(void *xsc) /* Init TX ring. */ bge_init_tx_ring(sc); + /* Enable TX MAC state machine lockup fix. */ + mode = CSR_READ_4(sc, BGE_TX_MODE); + if (BGE_IS_5755_PLUS(sc) || sc->bge_asicrev == BGE_ASICREV_BCM5906) + mode |= BGE_TXMODE_MBUF_LOCKUP_FIX; /* Turn on transmitter */ - BGE_SETBIT(sc, BGE_TX_MODE, BGE_TXMODE_ENABLE); + CSR_WRITE_4(sc, BGE_TX_MODE, mode | BGE_TXMODE_ENABLE); /* Turn on receiver */ BGE_SETBIT(sc, BGE_RX_MODE, BGE_RXMODE_ENABLE); diff --git a/sys/dev/netif/bge/if_bgereg.h b/sys/dev/netif/bge/if_bgereg.h index c18d5b8b0c..f3c8c20267 100644 --- a/sys/dev/netif/bge/if_bgereg.h +++ b/sys/dev/netif/bge/if_bgereg.h @@ -695,6 +695,7 @@ #define BGE_TXMODE_FLOWCTL_ENABLE 0x00000010 #define BGE_TXMODE_BIGBACKOFF_ENABLE 0x00000020 #define BGE_TXMODE_LONGPAUSE_ENABLE 0x00000040 +#define BGE_TXMODE_MBUF_LOCKUP_FIX 0x00000100 /* Transmit MAC status register */ #define BGE_TXSTAT_RX_XOFFED 0x00000001 -- 2.41.0