[U-Boot] [PATCH V4 10/17] usb: gadget: mv_udc: optimize bounce

Marek Vasut marex at denx.de
Mon Sep 23 02:02:34 CEST 2013


Dear Troy Kisky,

> On 9/20/2013 3:58 AM, Marek Vasut wrote:
> > Dear Troy Kisky,
> > 
> >> Only perform one copy, either in the bounce
> >> routine for IN transfers, or the debounce
> >> rtn for OUT transfer.
> >> 
> >> On out transfers, only copy the number
> >> of bytes received from the bounce buffer
> >> 
> >> Signed-off-by: Troy Kisky <troy.kisky at boundarydevices.com>
> >> 
> >> ---
> >> v4: no change
> > 
> > Just a question here. Are you sure we never Send AND Reserve the data in
> > one turn? Because that would need two copyings.
> 
>   ???   s/Reserve/Receive/
> 
> As far as I'm aware, a single buffer is only ever used to capture or
> provide data not both.
> But, if 2 transfers were queued, an OUT and then an IN using the same
> buffer, if it worked before
> this patch, it should work after as well.

How come? Before, it was doing flush before and inval after the transfer, right 
?

btw what does this part of the patch do/mean ? Why is it there?

@@ -387,10 +383,9 @@ static void handle_ep_complete(struct mv_ep *ep)
                       num, in ? "in" : "out", item->info, item->page0);
 
        len = (item->info >> 16) & 0x7fff;
-
-       mv_debounce(ep);
-
        ep->req.length -= len;
+       mv_debounce(ep, in);
+
        DBG("ept%d %s complete %x\n",
                        num, in ? "in" : "out", len);
        ep->req.complete(&ep->ep, &ep->req);

Best regards,
Marek Vasut


More information about the U-Boot mailing list