• Thinh Nguyen's avatar
    usb: dwc3: gadget: Check for prepared TRBs · 63c7bb29
    Thinh Nguyen authored
    There are cases where the endpoint needs to be restarted. For example,
    it may need to restart for NoStream rejection to reinitiate stream. If
    so, check and make sure we don't prepare beyond the current transfer
    when we restart the endpoint.
    
    DWC_usb32 internal burst transfer feature will look into TRBs beyond a
    transfer. Other controllers will stop on the last TRB, but not
    DWC_usb32. This may cause the controller to incorrectly process TRBs of
    a different transfer. Make sure to explicitly prevent preparing TRBs of
    a different transfer.
    
    This should only affect DWC_usb32 releases prior to v1.00a since it
    doesn't use SET_ENDPOINT_PRIME to reinitiate stream. However, it's
    better to be cautious in case users don't want to use SET_ENDPOINT_PRIME
    command. Also, it's possible other controller IPs may share the same
    features as DWC_usb32 in new releases.
    Signed-off-by: default avatarThinh Nguyen <thinhn@synopsys.com>
    Signed-off-by: default avatarFelipe Balbi <balbi@kernel.org>
    63c7bb29
gadget.c 95.7 KB