fixes dma bug in eth driver, that was caused under high net load. the dma ring was not initialized on time

SVN-Revision: 18149
This commit is contained in:
John Crispin 2009-10-25 14:34:55 +00:00
parent 6d7b5a7e62
commit 9126be5b6e

View File

@ -248,6 +248,8 @@ ramips_eth_irq(int irq, void *dev)
struct raeth_priv *priv = netdev_priv(dev); struct raeth_priv *priv = netdev_priv(dev);
unsigned long fe_int = ramips_fe_rr(RAMIPS_FE_INT_STATUS); unsigned long fe_int = ramips_fe_rr(RAMIPS_FE_INT_STATUS);
ramips_fe_wr(0xFFFFFFFF, RAMIPS_FE_INT_STATUS);
if(fe_int & RAMIPS_RX_DLY_INT) if(fe_int & RAMIPS_RX_DLY_INT)
{ {
ramips_fe_wr(ramips_fe_rr(RAMIPS_FE_INT_ENABLE) & ~(RAMIPS_RX_DLY_INT), ramips_fe_wr(ramips_fe_rr(RAMIPS_FE_INT_ENABLE) & ~(RAMIPS_RX_DLY_INT),
@ -255,8 +257,7 @@ ramips_eth_irq(int irq, void *dev)
tasklet_schedule(&priv->rx_tasklet); tasklet_schedule(&priv->rx_tasklet);
} }
if(fe_int & RAMIPS_TX_DLY_INT) if(fe_int & RAMIPS_TX_DLY_INT)
tasklet_schedule(&priv->tx_housekeeping_tasklet); ramips_eth_tx_housekeeping((unsigned long)dev);
ramips_fe_wr(0xFFFFFFFF, RAMIPS_FE_INT_STATUS);
return IRQ_HANDLED; return IRQ_HANDLED;
} }