summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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 000000000..8345e2aba
--- /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
+