Thread (10 messages) 10 messages, 5 authors, 2012-04-03
STALE5168d REVIEWED: 1 (0M)

[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.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help