Commit dcad280056b656896a18c5955d8facc236a1bed7

Authored by Kuo-Jung Su
Committed by Marek Vasut
1 parent bd5e301d35

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>

Showing 1 changed file with 1 additions and 0 deletions Side-by-side Diff

drivers/usb/gadget/fotg210.c
... ... @@ -245,6 +245,7 @@
245 245 if (ep->id == 0) {
246 246 /* Wait until cx/ep0 fifo empty */
247 247 fotg210_cxwait(chip, CXFIFO_CXFIFOE);
  248 + udelay(1);
248 249 writel(DMAFIFO_CX, &regs->dma_fifo);
249 250 } else {
250 251 /* Wait until epx fifo empty */