diff --git a/sys/dev/eqos/if_eqos.c b/sys/dev/eqos/if_eqos.c --- a/sys/dev/eqos/if_eqos.c +++ b/sys/dev/eqos/if_eqos.c @@ -627,7 +627,7 @@ { if_t ifp = sc->ifp; uint32_t val; - int retry; + int retry, i; EQOS_LOCK(sc); @@ -668,6 +668,16 @@ val &= ~GMAC_MAC_CONFIGURATION_TE; WR4(sc, GMAC_MAC_CONFIGURATION, val); + /* Renitialize TX ring descriptors */ + sc->tx.head = sc->tx.tail = 0; + + /* Reclaim TX descriptors */ + for (i = 0; i < TX_DESC_COUNT; i++) + eqos_setup_txdesc(sc, i, EQOS_TDES3_OWN, 0, 0, 0); + + /* Reinitialize RX ring descriptors */ + sc->rx.head = sc->rx.tail = 0; + eqos_disable_intr(sc); EQOS_UNLOCK(sc);