lkml.org 
[lkml]   [2012]   [Feb]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[48/89] usb: dwc3: ep0: tidy up Pending Request handling
    3.2-stable review patch.  If anyone has any objections, please let me know.

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

    From: Felipe Balbi <balbi@ti.com>

    commit 68d8a781575d7be490f97eb2c403fb13b083da6a upstream.

    The way our code was written, we should never have
    a DWC3_EP_PENDING_REQUEST flag set out of a Data Phase
    and the code in __dwc3_gadget_ep0_queue() did not
    reflect that situation properly.

    Tidy up that case to avoid any possible mistakes
    when starting requests for IRQs which are long
    gone.

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

    ---
    drivers/usb/dwc3/ep0.c | 14 ++++----------
    1 file changed, 4 insertions(+), 10 deletions(-)

    --- a/drivers/usb/dwc3/ep0.c
    +++ b/drivers/usb/dwc3/ep0.c
    @@ -149,20 +149,14 @@ static int __dwc3_gadget_ep0_queue(struc

    direction = !!(dep->flags & DWC3_EP0_DIR_IN);

    - if (dwc->ep0state == EP0_STATUS_PHASE) {
    - type = dwc->three_stage_setup
    - ? DWC3_TRBCTL_CONTROL_STATUS3
    - : DWC3_TRBCTL_CONTROL_STATUS2;
    - } else if (dwc->ep0state == EP0_DATA_PHASE) {
    - type = DWC3_TRBCTL_CONTROL_DATA;
    - } else {
    - /* should never happen */
    - WARN_ON(1);
    + if (dwc->ep0state != EP0_DATA_PHASE) {
    + dev_WARN(dwc->dev, "Unexpected pending request\n");
    return 0;
    }

    ret = dwc3_ep0_start_trans(dwc, direction,
    - req->request.dma, req->request.length, type);
    + req->request.dma, req->request.length,
    + DWC3_TRBCTL_CONTROL_DATA);
    dep->flags &= ~(DWC3_EP_PENDING_REQUEST |
    DWC3_EP0_DIR_IN);
    }



    \
     
     \ /
      Last update: 2012-02-01 22:19    [W:0.020 / U:7.708 seconds]
    ©2003-2017 Jasper Spaans. hosted at Digital OceanAdvertise on this site