summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJay Lubomirski <jaylubo@motorola.com>2007-06-27 14:10:09 -0700
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-06-28 11:38:29 -0700
commit2f4d4da8f82c2598b8713f4a01f360f3751d90be (patch)
treeafd7b8a15aa6b9bccc728ffe61e1d9d587bc5b6c
parentddc80bd781590ef6eb8ce30a0f3ac88c5599e41c (diff)
downloadop-kernel-dev-2f4d4da8f82c2598b8713f4a01f360f3751d90be.zip
op-kernel-dev-2f4d4da8f82c2598b8713f4a01f360f3751d90be.tar.gz
serial: clear proper MPSC interrupt cause bits
The interrupt clearing code in mpsc_sdma_intr_ack() mistakenly clears the interrupt for both controllers instead of just the one its supposed to. This can result in the other controller appearing to hang because its interrupt was effectively lost. So, don't clear the interrupt cause bits for both MPSC controllers when clearing the interrupt for one of them. Just clear the one that is supposed to be cleared. Signed-off-by: Jay Lubomirski <jaylubo@motorola.com> Acked-by: Mark A. Greer <mgreer@mvista.com> Cc: <stable@kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r--drivers/serial/mpsc.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/drivers/serial/mpsc.c b/drivers/serial/mpsc.c
index d09f209..00924fe 100644
--- a/drivers/serial/mpsc.c
+++ b/drivers/serial/mpsc.c
@@ -503,7 +503,8 @@ mpsc_sdma_intr_ack(struct mpsc_port_info *pi)
if (pi->mirror_regs)
pi->shared_regs->SDMA_INTR_CAUSE_m = 0;
- writel(0, pi->shared_regs->sdma_intr_base + SDMA_INTR_CAUSE);
+ writeb(0x00, pi->shared_regs->sdma_intr_base + SDMA_INTR_CAUSE +
+ pi->port.line);
return;
}
OpenPOWER on IntegriCloud