mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-10 06:09:23 -04:00
usb: dwc3: gadget: Update chain bit correctly when using sg list
If scatter-gather operation is allowed, a large USB request is split into multiple TRBs. For preparing TRBs for sg list, driver iterates over the list and creates TRB for each sg and mark the chain bit to false for the last sg. The current IOMMU driver is clubbing the list of sgs which shares a page boundary into one and giving it to USB driver. With this the number of sgs mapped it not equal to the the number of sgs passed. Because of this USB driver is not marking the chain bit to false since it couldn't iterate to the last sg. This patch addresses this issue by marking the chain bit to false if it is the last mapped sg. Change-Id: Ie496234ebae6e04a3b4ea68a682cc32109663e44 Signed-off-by: Pratham Pratap <prathampratap@codeaurora.org>
This commit is contained in:
parent
0e0da9c48b
commit
55dd719983
1 changed files with 8 additions and 1 deletions
|
|
@ -1062,7 +1062,14 @@ static void dwc3_prepare_one_trb_sg(struct dwc3_ep *dep,
|
|||
unsigned int rem = length % maxp;
|
||||
unsigned chain = true;
|
||||
|
||||
if (sg_is_last(s))
|
||||
/*
|
||||
* IOMMU driver is clubbing the list of sgs which shares a page
|
||||
* boundary into one and giving it to USB driver. With this the
|
||||
* number of sgs mapped it not equal to the the number of sgs
|
||||
* passed. Mark the chain bit to false if it is the last mapped
|
||||
* sg.
|
||||
*/
|
||||
if (sg_is_last(s) || (i == remaining - 1))
|
||||
chain = false;
|
||||
|
||||
if (rem && usb_endpoint_dir_out(dep->endpoint.desc) && !chain) {
|
||||
|
|
|
|||
Loading…
Reference in a new issue