summaryrefslogtreecommitdiffstats
path: root/drivers/usb/gadget
diff options
context:
space:
mode:
authorKuo-Jung Su <dantesu@faraday-tech.com>2013-12-20 12:33:00 +0800
committerMarek Vasut <marex@denx.de>2014-01-13 12:15:13 +0100
commitdcad280056b656896a18c5955d8facc236a1bed7 (patch)
tree8bacb6f97146c51f587efb9885f19434b8733ebc /drivers/usb/gadget
parentbd5e301d35621f2b00e0ecd77464c6c0e967fdbb (diff)
downloadtalos-obmc-uboot-dcad280056b656896a18c5955d8facc236a1bed7.tar.gz
talos-obmc-uboot-dcad280056b656896a18c5955d8facc236a1bed7.zip
usb: gadget: fotg210: EP0 fifo empty indication is non-reliable
The fifo size of ep0 is 64 bytes, and if the packet size grater than 64 bytes, the driver would have to fill up the fifo multiple times, and before filling up the fifo, the driver should make sure the fifo is empty by checking fifo empty indication. However there is a hardware bug that the fifo empty indication is somehow a bit earlier than fifo reset. So if I don't add an extra delay here, the data might be corrupted. (i.e., 1 byte missing) After a couple of tests, it truns out that 1 usec is good enough. This workaround should be applied to all hardware revisions. Signed-off-by: Kuo-Jung Su <dantesu@faraday-tech.com> CC: Marek Vasut <marex@denx.de>
Diffstat (limited to 'drivers/usb/gadget')
-rw-r--r--drivers/usb/gadget/fotg210.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/drivers/usb/gadget/fotg210.c b/drivers/usb/gadget/fotg210.c
index cc5c507f87..3acf6a1f41 100644
--- a/drivers/usb/gadget/fotg210.c
+++ b/drivers/usb/gadget/fotg210.c
@@ -245,6 +245,7 @@ static int fotg210_dma(struct fotg210_ep *ep, struct fotg210_request *req)
if (ep->id == 0) {
/* Wait until cx/ep0 fifo empty */
fotg210_cxwait(chip, CXFIFO_CXFIFOE);
+ udelay(1);
writel(DMAFIFO_CX, &regs->dma_fifo);
} else {
/* Wait until epx fifo empty */
OpenPOWER on IntegriCloud