[PATCH] serial: PL011: move interrupt clearing
From: Grant Likely <hidden>
Date: 2012-03-29 20:49:37
Also in:
linux-serial
On Wed, Mar 21, 2012 at 1:15 PM, Linus Walleij [off-list ref] wrote:
Commit 360f748b204275229f8398cb2f9f53955db1503b "serial: PL011: clear pending interrupts" attempts to clear interrupts by writing to a yet-unassigned memory address. This fixes the issue. The breaking patch is marked for stable so should be carried along with the other patch. Cc: Shreshtha Kumar Sahu <redacted> Cc: Russell King <redacted> Cc: stable <redacted> Reported-by: Viresh Kumar <redacted> Signed-off-by: Linus Walleij <redacted>
Ugh; the original patch is obviously broken. How did it get applied without testing? Greg, can you get this out to Linus ASAP please? I have one comment below, but I don't think it should block merging this patch. Tested-by: Grant Likely <redacted>
quoted hunk ↗ jump to hunk
--- ?drivers/tty/serial/amba-pl011.c | ? ?8 ++++---- ?1 files changed, 4 insertions(+), 4 deletions(-)diff --git a/drivers/tty/serial/amba-pl011.c b/drivers/tty/serial/amba-pl011.c index 7e01399..4ed35c5 100644 --- a/drivers/tty/serial/amba-pl011.c +++ b/drivers/tty/serial/amba-pl011.c@@ -1930,10 +1930,6 @@ static int pl011_probe(struct amba_device *dev, const struct amba_id *id)? ? ? ? ? ? ? ?goto unmap; ? ? ? ?} - ? ? ? /* Ensure interrupts from this UART are masked and cleared */ - ? ? ? writew(0, uap->port.membase + UART011_IMSC); - ? ? ? writew(0xffff, uap->port.membase + UART011_ICR); - ? ? ? ?uap->vendor = vendor; ? ? ? ?uap->lcrh_rx = vendor->lcrh_rx; ? ? ? ?uap->lcrh_tx = vendor->lcrh_tx;@@ -1951,6 +1947,10 @@ static int pl011_probe(struct amba_device *dev, const struct amba_id *id)? ? ? ?uap->port.line = i; ? ? ? ?pl011_dma_probe(uap); + ? ? ? /* Ensure interrupts from this UART are masked and cleared */ + ? ? ? writew(0, uap->port.membase + UART011_IMSC); + ? ? ? writew(0xffff, uap->port.membase + UART011_ICR); +
Is it correct to move the interrupt clearing below the pl011_dma_probe() call? I've tested the fix with the interrupt clearing both above and below the pl011_dma_probe() call and versatile qemu boots in both cases. g.