summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2008-05-18 17:31:35 +0000
committerFelix Fietkau <nbd@openwrt.org>2008-05-18 17:31:35 +0000
commit4db60563fc106eaf97fb4ab101590bdb9282670f (patch)
tree827c78bd1cb6db6bbc67d9e9984461689a95a07a
parentca851edf100bd3fd2b74d723b80822c8c2ff5559 (diff)
downloadmtk-20170518-4db60563fc106eaf97fb4ab101590bdb9282670f.zip
mtk-20170518-4db60563fc106eaf97fb4ab101590bdb9282670f.tar.gz
mtk-20170518-4db60563fc106eaf97fb4ab101590bdb9282670f.tar.bz2
bcm963xx: fix uart isr
The ISR ended up in an endless loop because the TX ISR never got used or masked. This patch basically makes the TX ISR mask the the TX interrupt when it encounters it, because it doesn't even use the TX interrupt. Signed-off-by: Axel Gembe <ago@bastart.eu.org> SVN-Revision: 11179
-rw-r--r--target/linux/brcm63xx/patches-2.6.25/070-bcm963xx_fix_uart_isr.patch36
1 files changed, 36 insertions, 0 deletions
diff --git a/target/linux/brcm63xx/patches-2.6.25/070-bcm963xx_fix_uart_isr.patch b/target/linux/brcm63xx/patches-2.6.25/070-bcm963xx_fix_uart_isr.patch
new file mode 100644
index 0000000..8345e2a
--- /dev/null
+++ b/target/linux/brcm63xx/patches-2.6.25/070-bcm963xx_fix_uart_isr.patch
@@ -0,0 +1,36 @@
+From 7bc3950017d2c54883591367723b7fd84cc65d6f Mon Sep 17 00:00:00 2001
+From: Axel Gembe <ago@bastart.eu.org>
+Date: Sun, 18 May 2008 12:09:14 +0200
+Subject: [PATCH] bcm963xx: fix uart isr
+
+The ISR ended up in an endless loop because the TX ISR never got used or masked.
+This patch basically makes the TX ISR mask the the TX interrupt when it
+encounters it, because it doesn't even use the TX interrupt.
+
+Signed-off-by: Axel Gembe <ago@bastart.eu.org>
+---
+ drivers/serial/bcm63xx_cons.c | 6 ++++++
+ 1 files changed, 6 insertions(+), 0 deletions(-)
+
+diff --git a/drivers/serial/bcm63xx_cons.c b/drivers/serial/bcm63xx_cons.c
+index 2302ea6..c60b8f0 100644
+--- a/drivers/serial/bcm63xx_cons.c
++++ b/drivers/serial/bcm63xx_cons.c
+@@ -258,8 +258,14 @@ static void bcm_interrupt(int irq, void *dev, struct pt_regs *regs)
+ while (intStat) {
+ if (intStat & RXINT)
+ receive_chars(info);
++
++#if 0 /* This code is total bullshit, TXINT doesn't get masked anywhere, so this will give an endless loop */
++
+ else if (intStat & TXINT)
+ info->port->intStatus = TXINT;
++
++#endif /* 0 */
++
+ else /* don't know what it was, so let's mask it */
+ info->port->intMask &= ~intStat;
+
+--
+1.5.5.1
+