Changeset c07da01 in rtems-libbsd


Ignore:
Timestamp:
Sep 7, 2015, 6:34:34 AM (4 years ago)
Author:
Sebastian Huber <sebastian.huber@…>
Branches:
c1e05b9ea378b2971e3d7704779112b4bc4296da, 4a77611a223ea883fb548679b516d326a020d447
Children:
f8ed8cd
Parents:
051b634
git-author:
Sebastian Huber <sebastian.huber@…> (09/07/15 06:34:34)
git-committer:
Sebastian Huber <sebastian.huber@…> (01/10/17 08:53:33)
Message:

if_dwc: Fix a possible interrupt starvation

Location:
freebsd/sys/dev/dwc
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • freebsd/sys/dev/dwc/if_dwc.c

    r051b634 rc07da01  
    894894
    895895        reg = READ4(sc, DMA_STATUS);
    896         if (reg & DMA_STATUS_NIS) {
    897                 if (reg & DMA_STATUS_RI)
    898                         dwc_rxfinish_locked(sc);
    899 
    900                 if (reg & DMA_STATUS_TI) {
    901                         dwc_txfinish_locked(sc);
    902                         dwc_txstart_locked(sc);
    903                 }
    904         }
    905 
    906         if (reg & DMA_STATUS_AIS) {
    907                 if (reg & DMA_STATUS_FBI) {
    908                         /* Fatal bus error */
    909                         device_printf(sc->dev,
    910                             "Ethernet DMA error, restarting controller.\n");
    911                         dwc_stop_locked(sc);
    912                         dwc_init_locked(sc);
    913                 }
    914         }
    915 
    916896        WRITE4(sc, DMA_STATUS, reg & DMA_STATUS_INTR_MASK);
     897
     898        if (reg & (DMA_STATUS_RI | DMA_STATUS_RU))
     899                dwc_rxfinish_locked(sc);
     900
     901        if (reg & DMA_STATUS_TI)
     902                dwc_txfinish_locked(sc);
     903
     904        if (reg & DMA_STATUS_FBI) {
     905                /* Fatal bus error */
     906                device_printf(sc->dev,
     907                    "Ethernet DMA error, restarting controller.\n");
     908                dwc_stop_locked(sc);
     909                dwc_init_locked(sc);
     910        }
     911
    917912        DWC_UNLOCK(sc);
    918913}
  • freebsd/sys/dev/dwc/if_dwc.h

    r051b634 rc07da01  
    232232#define  DMA_STATUS_AIS         (1 << 15)
    233233#define  DMA_STATUS_FBI         (1 << 13)
     234#define  DMA_STATUS_RU          (1 << 7)
    234235#define  DMA_STATUS_RI          (1 << 6)
    235236#define  DMA_STATUS_TI          (1 << 0)
Note: See TracChangeset for help on using the changeset viewer.