[PATCH] serial: PL011: move interrupt clearing

Grant Likely grant.likely at secretlab.ca
Thu Mar 29 16:49:37 EDT 2012


On Wed, Mar 21, 2012 at 1:15 PM, Linus Walleij <linus.walleij at linaro.org> 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 <shreshthakumar.sahu at stericsson.com>
> Cc: Russell King <linux at arm.linux.org.uk>
> Cc: stable <stable at vger.kernel.org>
> Reported-by: Viresh Kumar <viresh.kumar at st.com>
> Signed-off-by: Linus Walleij <linus.walleij at linaro.org>

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 <grant.likely at secretlab.ca>

> ---
>  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.



More information about the linux-arm-kernel mailing list