This is a note to let you know that I've just added the patch titled

    usb: dwc3: gadget: fix skip LINK_TRB on ISOC

to my usb git tree which can be found at
    git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git
in the usb-next branch.

The patch will show up in the next release of the linux-next tree
(usually sometime within the next 24 hours during the week.)

The patch will also be merged in the next major kernel release
during the merge window.

If you have any questions about this process, please let me know.


>From 915e202aeeb59e272992a6364c910aaef3073544 Mon Sep 17 00:00:00 2001
From: Pratyush Anand <[email protected]>
Date: Mon, 14 Jan 2013 15:59:35 +0530
Subject: usb: dwc3: gadget: fix skip LINK_TRB on ISOC

When we reach to link trb, we just need to increase free_slot and then
calculate TRB. Return is not correct, as it will cause wrong TRB DMA
address to fetch in case of update transfer.

Cc: <[email protected]>
Signed-off-by: Pratyush Anand <[email protected]>
Signed-off-by: Felipe Balbi <[email protected]>
---
 drivers/usb/dwc3/gadget.c | 13 +++++--------
 1 file changed, 5 insertions(+), 8 deletions(-)

diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
index e60e72c..da8d57c 100644
--- a/drivers/usb/dwc3/gadget.c
+++ b/drivers/usb/dwc3/gadget.c
@@ -754,21 +754,18 @@ static void dwc3_prepare_one_trb(struct dwc3_ep *dep,
        struct dwc3             *dwc = dep->dwc;
        struct dwc3_trb         *trb;
 
-       unsigned int            cur_slot;
-
        dev_vdbg(dwc->dev, "%s: req %p dma %08llx length %d%s%s\n",
                        dep->name, req, (unsigned long long) dma,
                        length, last ? " last" : "",
                        chain ? " chain" : "");
 
-       trb = &dep->trb_pool[dep->free_slot & DWC3_TRB_MASK];
-       cur_slot = dep->free_slot;
-       dep->free_slot++;
-
        /* Skip the LINK-TRB on ISOC */
-       if (((cur_slot & DWC3_TRB_MASK) == DWC3_TRB_NUM - 1) &&
+       if (((dep->free_slot & DWC3_TRB_MASK) == DWC3_TRB_NUM - 1) &&
                        usb_endpoint_xfer_isoc(dep->endpoint.desc))
-               return;
+               dep->free_slot++;
+
+       trb = &dep->trb_pool[dep->free_slot & DWC3_TRB_MASK];
+       dep->free_slot++;
 
        if (!req->trb) {
                dwc3_gadget_move_request_queued(req);
-- 
1.8.1.rc1.5.g7e0651a


--
To unsubscribe from this list: send the line "unsubscribe stable" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to