summaryrefslogtreecommitdiffstats
path: root/target/linux/rb532/patches-2.6.28/012-korina_do_tx_at_right_position.patch
diff options
context:
space:
mode:
authorflorian <florian@3c298f89-4303-0410-b956-a3cf2f4a3e73>2009-03-15 12:56:39 +0000
committerflorian <florian@3c298f89-4303-0410-b956-a3cf2f4a3e73>2009-03-15 12:56:39 +0000
commit47fedb5947414d3b46786a94186b123295ba0f48 (patch)
tree66f5f78c1b6ca8383418b4cd3f5444c4f4716459 /target/linux/rb532/patches-2.6.28/012-korina_do_tx_at_right_position.patch
parent474e65cbab6cad7dbf74b7cb62acb02aa12403a3 (diff)
[rb532] add 2.6.28 patches and kernel config
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@14884 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'target/linux/rb532/patches-2.6.28/012-korina_do_tx_at_right_position.patch')
-rw-r--r--target/linux/rb532/patches-2.6.28/012-korina_do_tx_at_right_position.patch40
1 files changed, 40 insertions, 0 deletions
diff --git a/target/linux/rb532/patches-2.6.28/012-korina_do_tx_at_right_position.patch b/target/linux/rb532/patches-2.6.28/012-korina_do_tx_at_right_position.patch
new file mode 100644
index 000000000..101e869d0
--- /dev/null
+++ b/target/linux/rb532/patches-2.6.28/012-korina_do_tx_at_right_position.patch
@@ -0,0 +1,40 @@
+Triggering TX before the write to the DMA status mask register leads to
+transferring packets with maximum payload no matter what the actual
+packet size is.
+While here, also trigger RX scheduling after writing the DMA status mask
+register, like it was in the original driver before it was sent
+upstream.
+
+Signed-off-by: Phil Sutter <n0-1@freewrt.org>
+---
+--- a/drivers/net/korina.c 2009-01-19 23:27:41.000000000 +0100
++++ b/drivers/net/korina.c 2009-01-19 23:29:08.000000000 +0100
+@@ -330,12 +330,12 @@
+
+ dmas = readl(&lp->rx_dma_regs->dmas);
+ if (dmas & (DMA_STAT_DONE | DMA_STAT_HALT | DMA_STAT_ERR)) {
+- netif_rx_schedule(dev, &lp->napi);
+-
+ dmasm = readl(&lp->rx_dma_regs->dmasm);
+ writel(dmasm | (DMA_STAT_DONE |
+ DMA_STAT_HALT | DMA_STAT_ERR),
+ &lp->rx_dma_regs->dmasm);
++
++ netif_rx_schedule(dev, &lp->napi);
+
+ if (dmas & DMA_STAT_ERR)
+ printk(KERN_ERR DRV_NAME "%s: DMA error\n", dev->name);
+@@ -621,11 +621,11 @@
+ dmas = readl(&lp->tx_dma_regs->dmas);
+
+ if (dmas & (DMA_STAT_FINI | DMA_STAT_ERR)) {
+- korina_tx(dev);
+-
+ dmasm = readl(&lp->tx_dma_regs->dmasm);
+ writel(dmasm | (DMA_STAT_FINI | DMA_STAT_ERR),
+ &lp->tx_dma_regs->dmasm);
++
++ korina_tx(dev);
+
+ if (lp->tx_chain_status == desc_filled &&
+ (readl(&(lp->tx_dma_regs->dmandptr)) == 0)) {