diff options
Diffstat (limited to 'drivers/usb/dwc3/gadget.c')
| -rw-r--r-- | drivers/usb/dwc3/gadget.c | 9 | 
1 files changed, 8 insertions, 1 deletions
| diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c index 1b7d2f9cb673..1e00bf2d65a2 100644 --- a/drivers/usb/dwc3/gadget.c +++ b/drivers/usb/dwc3/gadget.c @@ -1071,7 +1071,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 coalescing the list of sgs which shares a +		 * page boundary into one and giving it to USB driver. With +		 * this the number of sgs mapped is not equal to the number of +		 * sgs passed. So mark the chain bit to false if it isthe last +		 * mapped sg. +		 */ +		if (i == remaining - 1)  			chain = false;  		if (rem && usb_endpoint_dir_out(dep->endpoint.desc) && !chain) { |