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 +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 +--- + 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 +