lkml.org 
[lkml]   [2018]   [Sep]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v3 7/8] usb: dwc3: Check for IOC/LST bit in both event->status and TRB->ctrl fields
    Date
    The present code in dwc3_gadget_ep_reclaim_completed_trb() will check
    for IOC/LST bit in the event->status and returns if IOC/LST bit is
    set. This logic doesn't work if multiple TRBs are queued per
    request and the IOC/LST bit is set on the last TRB of that request.
    Consider an example where a queued request has multiple queued TRBs
    and IOC/LST bit is set only for the last TRB. In this case, the Core
    generates XferComplete/XferInProgress events only for the last TRB
    (since IOC/LST are set only for the last TRB). As per the logic in
    dwc3_gadget_ep_reclaim_completed_trb() event->status is checked for
    IOC/LST bit and returns on the first TRB. This makes the remaining
    TRBs left unhandled.
    To aviod this, changed the code to check for IOC/LST bits in both
    event->status & TRB->ctrl. This patch does the same.

    Signed-off-by: Anurag Kumar Vulisha <anurag.kumar.vulisha@xilinx.com>
    Reviewed-by: Thinh Nguyen <thinhn@synopsys.com>
    ---
    Changes in v3:
    1. None

    Changes in v2:
    1. None
    ---
    drivers/usb/dwc3/gadget.c | 7 ++++++-
    1 file changed, 6 insertions(+), 1 deletion(-)

    diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
    index e9901cc..e1d4b73 100644
    --- a/drivers/usb/dwc3/gadget.c
    +++ b/drivers/usb/dwc3/gadget.c
    @@ -2290,7 +2290,12 @@ static int dwc3_gadget_ep_reclaim_completed_trb(struct dwc3_ep *dep,
    if (event->status & DEPEVT_STATUS_SHORT && !chain)
    return 1;

    - if (event->status & (DEPEVT_STATUS_IOC | DEPEVT_STATUS_LST))
    + if ((event->status & DEPEVT_STATUS_IOC) &&
    + (trb->ctrl & DWC3_TRB_CTRL_IOC))
    + return 1;
    +
    + if ((event->status & DEPEVT_STATUS_LST) &&
    + (trb->ctrl & DWC3_TRB_CTRL_LST))
    return 1;

    return 0;
    --
    2.1.1
    \
     
     \ /
      Last update: 2018-09-07 15:15    [W:2.152 / U:0.148 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site