]> git.karo-electronics.de Git - linux-beck.git/commitdiff
ARM: 5966/1: at91_udc HW glitch
authorHarro Haan <hrhaan@gmail.com>
Mon, 1 Mar 2010 16:54:55 +0000 (17:54 +0100)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Wed, 5 May 2010 08:15:05 +0000 (09:15 +0100)
Add some delay to avoid reading CSR TXCOUNT too early after
updating it.

For more info about this HW glitch see:
http://lists.arm.linux.org.uk/lurker/message/20090325.150843.f515c02f.en.html
http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20100129/10ba0f8b/attachment.el
http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20100203/09cdb3b4/attachment.el
http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20100203/08b5b249/attachment.el

First applied: "Fix soft lockup in at91 udc driver"
http://www.arm.linux.org.uk/developer/patches/viewpatch.php?id=5965

Signed-off-by: Anti Sullin <anti.sullin@artecdesign.ee>
Signed-off-by: Harro Haan <hrhaan@gmail.com>
Acked-by: Remy Bohmer <linux@bohmer.net>
Acked-by: Andrew Victor <linux@maxim.org.za>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
drivers/usb/gadget/at91_udc.c

index 12ac9cd32a07562ec665f04636b75a263f68d9a8..b3bd22ef82ba5716e4cc54ecf0ff91c1cc4e191e 100644 (file)
@@ -366,6 +366,13 @@ rescan:
        if (is_done)
                done(ep, req, 0);
        else if (ep->is_pingpong) {
+               /*
+                * One dummy read to delay the code because of a HW glitch:
+                * CSR returns bad RXCOUNT when read too soon after updating
+                * RX_DATA_BK flags.
+                */
+               csr = __raw_readl(creg);
+
                bufferspace -= count;
                buf += count;
                goto rescan;