Skip to content
Commit d1c93aa1 authored by Felipe Balbi's avatar Felipe Balbi Committed by Mayank Rana
Browse files

usb: dwc3: gadget: properly increment dequeue pointer on ep_dequeue



If request was already started, this means we had to
stop the transfer. With that we also need to ignore
all TRBs used by the request, however TRBs can only
be modified after completion of END_TRANSFER
command. So what we have to do here is wait for
END_TRANSFER completion and only after that jump
over TRBs by clearing HWO and incrementing dequeue
pointer.

Note that we have 2 possible types of transfers
here:

i) Linear buffer request
ii) SG-list based request

SG-list based requests will have r->num_pending_sgs
set to a valid number (> 0). Linear requests,
normally use a single TRB.

For each of these two cases, if r->unaligned flag is
set, one extra TRB has been used to align transfer
size to wMaxPacketSize.

All of these cases need to be taken into
consideration so we don't mess up our TRB ring
pointers.

Tested-by: default avatarJanusz Dziedzic <januszx.dziedzic@intel.com>
Signed-off-by: default avatarFelipe Balbi <felipe.balbi@linux.intel.com>
Change-Id: I729ae0390d69099a2a68f03c47c1636402fb98d0
Git-commit: cf3113d893d4427b166ec8695460efa7aa660923
Git-repo: git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git


[mrana@codeaurora.org: added only required code changes]
Signed-off-by: default avatarMayank Rana <mrana@codeaurora.org>
parent d0c491f1
Loading
Loading
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment