[PATCH] serial: PL011: move interrupt clearing

Linus Walleij linus.walleij at linaro.org
Thu Mar 29 17:22:55 EDT 2012


On Thu, Mar 29, 2012 at 10:49 PM, Grant Likely
<grant.likely at secretlab.ca> wrote:

>> Commit 360f748b204275229f8398cb2f9f53955db1503b
>> "serial: PL011: clear pending interrupts"
>> attempts to clear interrupts by writing to a
>> yet-unassigned memory address. This fixes the issue.
>
> Ugh; the original patch is obviously broken.  How did it get applied
> without testing?

I've felt bad about that for a while, but to the best of my knowledge I did
test it. Either I did some manual slip with the boot images or there was
something else causing it to actually work as it looked... Chanho also
had it working IIRC.

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

Thanks.

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

pl011_dma_probe() basically just make logical setup so we do the
clear-out as the last step of setup.

Yours,
Linus Walleij



More information about the linux-arm-kernel mailing list