Re: [PATCH] amba-pl011: clear previous interrupts before request_irq
From: Russell King <hidden>
Date: 2012-01-18 10:16:12
Also in:
lkml
On Wed, Jan 18, 2012 at 03:34:11PM +0530, Shreshtha Kumar SAHU wrote:
quoted
From 0742fc49405b2a6f562981f61d93198e1595f30d Mon Sep 17 00:00:00 2001From: Shreshtha Kumar Sahu <redacted> Date: Tue, 17 Jan 2012 12:23:19 +0530 Subject: [PATCH v2] amba-pl011: clear previous interrupts before request_irq All previous interrupts should be cleared before installing interrupt handler i.e. before request_irq. pl011_shutdown clears the interrupt register but there may be case where bootloader transfers control to kernel and there are some pending interrupts. In this case interrupt handler will get called even before interrupt mask is enabled. Acked-by: Linus Walleij <redacted>
No sign-off, and I don't understand the problem being aluded to in the description above - particularly the last sentence. In theory, we should be prepared for the interrupt handler to be called immediately after request_irq() returns, and not have the driver misbehave because of that. Maybe a better solution would be to move request_irq() a bit later? But first, having a clearer description of the problem you're seeing would be beneficial.
quoted hunk ↗ jump to hunk
--- drivers/tty/serial/amba-pl011.c | 9 +++++++++ 1 files changed, 9 insertions(+), 0 deletions(-)diff --git a/drivers/tty/serial/amba-pl011.c b/drivers/tty/serial/amba-pl011.c index 6958594..6dafaa2 100644 --- a/drivers/tty/serial/amba-pl011.c +++ b/drivers/tty/serial/amba-pl011.c@@ -1381,6 +1381,15 @@ static int pl011_startup(struct uart_port *port) uap->port.uartclk = clk_get_rate(uap->clk); /* + * Clear previous interrupts before installing interrupt handler + */ + spin_lock_irq(&uap->port.lock); + uap->im = 0; + writew(uap->im, uap->port.membase + UART011_IMSC); + writew(0xffff, uap->port.membase + UART011_ICR); + spin_unlock_irq(&uap->port.lock); + + /* * Allocate the IRQ */ retval = request_irq(uap->port.irq, pl011_int, 0, "uart-pl011", uap);-- 1.7.4.3
-- Russell King Linux kernel 2.6 ARM Linux - http://www.arm.linux.org.uk/ maintainer of: