Skip to content

Commit

Permalink
serial: clear proper MPSC interrupt cause bits
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Jay Lubomirski authored and Linus Torvalds committed Jun 28, 2007
1 parent ddc80bd commit 2f4d4da
Showing 1 changed file with 2 additions and 1 deletion.
3 changes: 2 additions & 1 deletion drivers/serial/mpsc.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}

Expand Down

0 comments on commit 2f4d4da

Please sign in to comment.