diff options
Diffstat (limited to 'freebsd/sys/dev/dwc/if_dwc.c')
-rw-r--r-- | freebsd/sys/dev/dwc/if_dwc.c | 29 |
1 files changed, 12 insertions, 17 deletions
diff --git a/freebsd/sys/dev/dwc/if_dwc.c b/freebsd/sys/dev/dwc/if_dwc.c index 98885edc..1d606977 100644 --- a/freebsd/sys/dev/dwc/if_dwc.c +++ b/freebsd/sys/dev/dwc/if_dwc.c @@ -893,27 +893,22 @@ dwc_intr(void *arg) READ4(sc, SGMII_RGMII_SMII_CTRL_STATUS); reg = READ4(sc, DMA_STATUS); - if (reg & DMA_STATUS_NIS) { - if (reg & DMA_STATUS_RI) - dwc_rxfinish_locked(sc); + WRITE4(sc, DMA_STATUS, reg & DMA_STATUS_INTR_MASK); - if (reg & DMA_STATUS_TI) { - dwc_txfinish_locked(sc); - dwc_txstart_locked(sc); - } - } + if (reg & (DMA_STATUS_RI | DMA_STATUS_RU)) + dwc_rxfinish_locked(sc); - if (reg & DMA_STATUS_AIS) { - if (reg & DMA_STATUS_FBI) { - /* Fatal bus error */ - device_printf(sc->dev, - "Ethernet DMA error, restarting controller.\n"); - dwc_stop_locked(sc); - dwc_init_locked(sc); - } + if (reg & DMA_STATUS_TI) + dwc_txfinish_locked(sc); + + if (reg & DMA_STATUS_FBI) { + /* Fatal bus error */ + device_printf(sc->dev, + "Ethernet DMA error, restarting controller.\n"); + dwc_stop_locked(sc); + dwc_init_locked(sc); } - WRITE4(sc, DMA_STATUS, reg & DMA_STATUS_INTR_MASK); DWC_UNLOCK(sc); } |