Re: [PATCH 5/5] usb/dwc3: fix no request in request_list when start isoc

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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.

Regards
Pratyush
Signed-off-by: Pratyush Anand <pratyush.anand@xxxxxx>
---
  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 majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux