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: Janusz Dziedzic <januszx.dziedzic@intel.com> Signed-off-by: Felipe 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: Mayank Rana <mrana@codeaurora.org>
Loading
Please register or sign in to comment