Commit 2f4d4da8 authored by Jay Lubomirski's avatar Jay Lubomirski Committed by Linus Torvalds

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: default avatarJay Lubomirski <jaylubo@motorola.com>
Acked-by: default avatarMark A. Greer <mgreer@mvista.com>
Cc: <stable@kernel.org>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent ddc80bd7
...@@ -503,7 +503,8 @@ mpsc_sdma_intr_ack(struct mpsc_port_info *pi) ...@@ -503,7 +503,8 @@ mpsc_sdma_intr_ack(struct mpsc_port_info *pi)
if (pi->mirror_regs) if (pi->mirror_regs)
pi->shared_regs->SDMA_INTR_CAUSE_m = 0; 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; return;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment