|
|
@@ -820,6 +820,11 @@ static void dwc3_ep0_complete_data(struct dwc3 *dwc,
|
|
|
unsigned maxp = ep0->endpoint.maxpacket;
|
|
|
|
|
|
transfer_size += (maxp - (transfer_size % maxp));
|
|
|
+
|
|
|
+ /* Maximum of DWC3_EP0_BOUNCE_SIZE can only be received */
|
|
|
+ if (transfer_size > DWC3_EP0_BOUNCE_SIZE)
|
|
|
+ transfer_size = DWC3_EP0_BOUNCE_SIZE;
|
|
|
+
|
|
|
transferred = min_t(u32, ur->length,
|
|
|
transfer_size - length);
|
|
|
memcpy(ur->buf, dwc->ep0_bounce, transferred);
|
|
|
@@ -941,11 +946,14 @@ static void __dwc3_ep0_do_control_data(struct dwc3 *dwc,
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- WARN_ON(req->request.length > DWC3_EP0_BOUNCE_SIZE);
|
|
|
-
|
|
|
maxpacket = dep->endpoint.maxpacket;
|
|
|
transfer_size = roundup(req->request.length, maxpacket);
|
|
|
|
|
|
+ if (transfer_size > DWC3_EP0_BOUNCE_SIZE) {
|
|
|
+ dev_WARN(dwc->dev, "bounce buf can't handle req len\n");
|
|
|
+ transfer_size = DWC3_EP0_BOUNCE_SIZE;
|
|
|
+ }
|
|
|
+
|
|
|
dwc->ep0_bounced = true;
|
|
|
|
|
|
/*
|