Hi, On Tue, May 15, 2012 at 07:45:29PM +0530, Pratyush Anand wrote: > Hi Balbi, > > > Currently in case of isoc, interrupt is programmed after each > TRB_NUM/4 ie 8th TRB. A TRB is programmed against each submitted > request from gadget. If we do not want to limit the minimum number of > necessary request to be submitted from gadget then we must receive > interrupt on each TRB submission. There can be such situation with a > gadget working with ping-pong buffer. > > Would it be fine if we implement something like following. > > If a gadget does not want to receive interrupt after each request > completion then it may set no_interrupt flag. > > diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c > index 86f3933..ccf92f3 100644 > --- a/drivers/usb/dwc3/gadget.c > +++ b/drivers/usb/dwc3/gadget.c > @@ -740,8 +740,11 @@ static void dwc3_prepare_one_trb(struct dwc3_ep *dep, > case USB_ENDPOINT_XFER_ISOC: > trb->ctrl = DWC3_TRBCTL_ISOCHRONOUS_FIRST; > > - /* IOC every DWC3_TRB_NUM / 4 so we can refill */ > - if (!(cur_slot % (DWC3_TRB_NUM / 4))) > + /* > + * FIXME: Forcing interrupt to be received at every req, > + * untill gadget sets no_interrupt flag > + */ > + if (!req->request.no_interrupt) > trb->ctrl |= DWC3_TRB_CTRL_IOC; in fact, using the gadget framework's flags is far better than doing it ourselves. I'm planning to do a big rework of the request and TRB allocation and this would be part of it. Please send it as a formal patch and I will queue it for v3.6 merge window after v3.5-rc1 is tagged. This can wait until v3.6 so to give us time to test this properly. PS: remove the unnecessary FIXME comment. -- balbi
Attachment:
signature.asc
Description: Digital signature