On 12/18/2024 9:21 PM, Alan Stern wrote: > On Wed, Dec 18, 2024 at 03:51:50PM +0530, Selvarasu Ganesan wrote: >> The issue arises during the second time the "f_midi_bind" function is >> called. The problem lies in the fact that the size of >> "bulk_in_desc.wMaxPacketSize" is set to 1024 during the first call, >> which exceeds the hardware capability of the dwc3 TX/RX FIFO >> (ep->maxpacket_limit = 512). > Is this gadget supposed to be able to run at SuperSpeed? I thought the > dwc3 controller supported SuperSpeed operation. > > The USB-3 spec requires that all SuperSpeed bulk endpoints must have a > wMaxPacketSize of 1024 (see Table 9-24 on p.9-25 of the USB-3.1 > specification). > > Alan Stern > Hi Alan, No, In our platform, the DWC3 controller supports up to HighSpeed. While DWC3 is capable of SuperSpeed operation, it is not necessary to operate at the same speed. Moreover, even in our SoC, the DWC3 IP is limited to supporting only USB 2.0 mode (HighSpeed) at the hardware design level. As previously mentioned, there is no need to set the wMaxPacketSize based on the current speed support before claiming the endpoint (before calling usb_ep_autoconfig), as usb_ep_autoconfig treats endpoint descriptors as if they were full-speed by default. For reference, let's see the usb_ep_autoconfig code where the wMaxPacketSize is set to 64 bytes if the ep->maxpacket_limit is greater than 64. As i mentioned earlier in our specific failure scenarios, the code does not reach this point because the wMaxPacketSize is greater than the ep->maxpacket_limit. struct usb_ep *usb_ep_autoconfig() { … … … /* report (variable) full speed bulk maxpacket */ if (type == USB_ENDPOINT_XFER_BULK) { int size = ep->maxpacket_limit; if (size > 64) size = 64; desc->wMaxPacketSize = cpu_to_le16(size); } return ep; } Thanks, Selva