diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c index e065c5aeb3..e3c46b2574 100644 --- a/drivers/usb/dwc3/gadget.c +++ b/drivers/usb/dwc3/gadget.c @@ -1481,7 +1481,7 @@ static int dwc3_gadget_start(struct usb_gadget *g, if (dwc->revision < DWC3_REVISION_220A) { reg |= DWC3_DCFG_SUPERSPEED; } else { - switch (dwc->maximum_speed) { + switch (dwc->gadget.max_speed) { case USB_SPEED_LOW: reg |= DWC3_DSTS_LOWSPEED; break; @@ -1605,7 +1605,12 @@ static int dwc3_gadget_init_hw_endpoints(struct dwc3 *dwc, } else { int ret; - usb_ep_set_maxpacket_limit(&dep->endpoint, 512); + if (dwc->maximum_speed >= USB_SPEED_SUPER) + usb_ep_set_maxpacket_limit(&dep->endpoint, + 1024); + else + usb_ep_set_maxpacket_limit(&dep->endpoint, + 512); dep->endpoint.max_streams = 15; dep->endpoint.ops = &dwc3_gadget_ep_ops; list_add_tail(&dep->endpoint.ep_list, @@ -2591,7 +2596,7 @@ int dwc3_gadget_init(struct dwc3 *dwc) } dwc->gadget.ops = &dwc3_gadget_ops; - dwc->gadget.max_speed = USB_SPEED_SUPER; + dwc->gadget.max_speed = dwc->maximum_speed; dwc->gadget.speed = USB_SPEED_UNKNOWN; dwc->gadget.name = "dwc3-gadget";