Ignore:
Timestamp:
2011-09-11T23:36:33+02:00 (5 years ago)
Author:
nbd
Message:

ar71xx: add missing ethernet driver fix backport (fixes #10089)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/backfire/target/linux/ar71xx/files/drivers/net/ag71xx/ag71xx_main.c

    r27974 r28215  
    807807} 
    808808 
     809static bool ag71xx_check_dma_stuck(struct ag71xx *ag, unsigned long timestamp) 
     810{ 
     811        u32 rx_sm, tx_sm, rx_fd; 
     812 
     813        if (likely(time_before(jiffies, timestamp + HZ/10))) 
     814                return false; 
     815 
     816        if (!netif_carrier_ok(ag->dev)) 
     817                return false; 
     818 
     819        rx_sm = ag71xx_rr(ag, AG71XX_REG_RX_SM); 
     820        if ((rx_sm & 0x7) == 0x3 && ((rx_sm >> 4) & 0x7) == 0x6) 
     821                return true; 
     822 
     823        tx_sm = ag71xx_rr(ag, AG71XX_REG_TX_SM); 
     824        rx_fd = ag71xx_rr(ag, AG71XX_REG_FIFO_DEPTH); 
     825        if (((tx_sm >> 4) & 0x7) == 0 && ((rx_sm & 0x7) == 0) && 
     826            ((rx_sm >> 4) & 0x7) == 0 && rx_fd == 0) 
     827                return true; 
     828 
     829        return false; 
     830} 
     831 
    809832static int ag71xx_tx_packets(struct ag71xx *ag) 
    810833{ 
    811834        struct ag71xx_ring *ring = &ag->tx_ring; 
     835        struct ag71xx_platform_data *pdata = ag71xx_get_pdata(ag); 
    812836        int sent; 
    813837 
     
    820844                struct sk_buff *skb = ring->buf[i].skb; 
    821845 
    822                 if (!ag71xx_desc_empty(desc)) 
     846                if (!ag71xx_desc_empty(desc)) { 
     847                        if (pdata->is_ar7240 && 
     848                            ag71xx_check_dma_stuck(ag, ring->buf[i].timestamp)) 
     849                                schedule_work(&ag->restart_work); 
    823850                        break; 
     851                } 
    824852 
    825853                ag71xx_wr(ag, AG71XX_REG_TX_STATUS, TX_STATUS_PS); 
Note: See TracChangeset for help on using the changeset viewer.