On 8/24/2012 7:01 PM, Pratyush Anand wrote:
On 8/24/2012 5:10 PM, Pratyush ANAND wrote:
If xfernotready is received and there is no request in request_list then
PENDING flag must be set, so that next request in ep queue is executed.


Although, I did not encounter PENDING in isoc testing. But, if somebody
hits it, then only this patch might not be sufficient. One might need
following along with it.

diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
index 8d3b2d5..c08aa39 100644
--- a/drivers/usb/dwc3/gadget.c
+++ b/drivers/usb/dwc3/gadget.c
@@ -1104,6 +1104,16 @@ static int __dwc3_gadget_ep_queue(struct dwc3_ep
*dep, struct dwc3_request *req)
         if (dep->flags & DWC3_EP_PENDING_REQUEST) {
                 int     ret;

+               /*
+                * If xfornotready is already elapsed and it is a case
+                * of isoc transfer, then issue END TRANSFER, so that
+                * you can receive xfernotready again and can have
+                * notion of current microframe.
+                */
+               if (usb_endpoint_xfer_isoc(dep->endpoint.desc)) {
+                       dwc3_stop_active_transfer(dwc, dep->number);
+                       return 0;
+               }
                 ret = __dwc3_gadget_kick_transfer(dep, 0, true);
                 if (ret && ret != -EBUSY) {
                         struct dwc3     *dwc = dep->dwc;


If you agree, then discard this patch only. I will send another one to
handle pending isoc request.


Discard 5/5. I will send another.

Regards
Pratyush
Signed-off-by: Pratyush Anand <pratyush.an...@st.com>
---
  drivers/usb/dwc3/gadget.c |    1 +
  1 files changed, 1 insertions(+), 0 deletions(-)

diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
index 5d41d74..8d3b2d5 100644
--- a/drivers/usb/dwc3/gadget.c
+++ b/drivers/usb/dwc3/gadget.c
@@ -1040,6 +1040,7 @@ static void __dwc3_gadget_start_isoc(struct dwc3
*dwc,
      if (list_empty(&dep->request_list)) {
          dev_vdbg(dwc->dev, "ISOC ep %s run out for requests.\n",
              dep->name);
+        dep->flags |= DWC3_EP_PENDING_REQUEST;
          return;
      }






--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to