aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohn Crispin <blogic@openwrt.org>2009-10-25 14:34:55 +0000
committerJohn Crispin <blogic@openwrt.org>2009-10-25 14:34:55 +0000
commitcaede0a0ac4fe01dc405209ec84b6358e06e72a5 (patch)
treedd5c7617b61ec79f4658d4bdf5107120d1f9806c
parent1347b7f5dc21b84a11922b0d5e883729157f675a (diff)
downloadupstream-caede0a0ac4fe01dc405209ec84b6358e06e72a5.tar.gz
upstream-caede0a0ac4fe01dc405209ec84b6358e06e72a5.tar.bz2
upstream-caede0a0ac4fe01dc405209ec84b6358e06e72a5.zip
[ramips] fixes dma bug in eth driver, that was caused under high net load. the dma ring was not initialized on time
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@18149 3c298f89-4303-0410-b956-a3cf2f4a3e73
-rw-r--r--target/linux/ramips/files/drivers/net/ramips.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/target/linux/ramips/files/drivers/net/ramips.c b/target/linux/ramips/files/drivers/net/ramips.c
index 1689f0a18f..e634453bf5 100644
--- a/target/linux/ramips/files/drivers/net/ramips.c
+++ b/target/linux/ramips/files/drivers/net/ramips.c
@@ -248,6 +248,8 @@ ramips_eth_irq(int irq, void *dev)
struct raeth_priv *priv = netdev_priv(dev);
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)
{
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);
}
if(fe_int & RAMIPS_TX_DLY_INT)
- tasklet_schedule(&priv->tx_housekeeping_tasklet);
- ramips_fe_wr(0xFFFFFFFF, RAMIPS_FE_INT_STATUS);
+ ramips_eth_tx_housekeeping((unsigned long)dev);
return IRQ_HANDLED;
}