From mboxrd@z Thu Jan 1 00:00:00 1970 From: Marek Vasut Date: Thu, 19 Dec 2013 02:54:59 +0100 Subject: [U-Boot] [PATCH 2/2] usb: gadget: fotg210: EP0 fifo empty indication is non-reliable In-Reply-To: References: <1387351489-2008-1-git-send-email-dantesu@gmail.com> <201312181555.47125.marex@denx.de> Message-ID: <201312190254.59978.marex@denx.de> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de On Thursday, December 19, 2013 at 01:50:55 AM, Kuo-Jung Su wrote: > 2013/12/18 Marek Vasut : > > On Wednesday, December 18, 2013 at 08:24:49 AM, Kuo-Jung Su wrote: > >> From: Kuo-Jung Su > >> > >> Because the EP0 fifo empty indication is non-reliable, > >> an extra delay is necessary to avoid data corruption while > >> handling packets with size greater than 64 bytes. > >> > >> This workaround should be applied to all hardware revisions. > >> > >> Signed-off-by: Kuo-Jung Su > >> CC: Marek Vasut > >> --- > >> > >> drivers/usb/gadget/fotg210.c | 1 + > >> 1 file changed, 1 insertion(+) > >> > >> diff --git a/drivers/usb/gadget/fotg210.c b/drivers/usb/gadget/fotg210.c > >> index e3a61cc..14bfec6 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_masked(1); > > > > Why don't you use regular udelay() here please ? Also, how exactly does > > the delay help solving the unreliability problem please? > > 1. No specific reason at all, I'll use regular udelay() in next version. :) > > 2. The fifo size of ep0 is 64 bytes, and my driver is supposed to make > sure the fifo empty > before filling up the fifo. 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.) > And after a couple of tests, it looks like that 1 usec is good > enough for this. Ick, but I guess you guys know the IP blocks' sourcecode. Best regards, Marek Vasut