lkml.org 
[lkml]   [2012]   [Mar]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[ 018/175] usb: dwc3: gadget: dont wrap around the TRB poll on non-ISOC
    3.3-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Paul Zimmerman <paulz@synopsys.com>

    commit 8d62cd65d74d0e241b3a152f7347bb66126b705b upstream.

    If we have a non-ISOC endpoint, we will not have a Link TRB
    pointing to the beginning of the TRB pool. On such endpoints,
    we don't want to let the driver wrap around the TRB pool
    otherwise controller will hang waiting for a valid TRB.

    Signed-off-by: Paul Zimmerman <paulz@synopsys.com>
    Signed-off-by: Felipe Balbi <balbi@ti.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/usb/dwc3/gadget.c | 8 ++++++++
    1 file changed, 8 insertions(+)

    --- a/drivers/usb/dwc3/gadget.c
    +++ b/drivers/usb/dwc3/gadget.c
    @@ -667,6 +667,7 @@ static void dwc3_prepare_trbs(struct dwc
    {
    struct dwc3_request *req, *n;
    u32 trbs_left;
    + u32 max;
    unsigned int last_one = 0;

    BUILD_BUG_ON_NOT_POWER_OF_2(DWC3_TRB_NUM);
    @@ -674,6 +675,13 @@ static void dwc3_prepare_trbs(struct dwc
    /* the first request must not be queued */
    trbs_left = (dep->busy_slot - dep->free_slot) & DWC3_TRB_MASK;

    + /* Can't wrap around on a non-isoc EP since there's no link TRB */
    + if (!usb_endpoint_xfer_isoc(dep->desc)) {
    + max = DWC3_TRB_NUM - (dep->free_slot & DWC3_TRB_MASK);
    + if (trbs_left > max)
    + trbs_left = max;
    + }
    +
    /*
    * if busy & slot are equal than it is either full or empty. If we are
    * starting to proceed requests then we are empty. Otherwise we ar



    \
     
     \ /
      Last update: 2012-03-31 00:03    [W:0.021 / U:0.072 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site