RE: [PATCH v2] usb: gadget: f_midi: Fixing wMaxPacketSize exceeded issue during MIDI bind retries

From: Alim Akhtar
Date: Tue Feb 04 2025 - 09:06:13 EST


Hello Selvarasu,

> -----Original Message-----
> From: Selvarasu Ganesan <selvarasu.g@xxxxxxxxxxx>
> Sent: Saturday, January 18, 2025 11:32 AM
> To: gregkh@xxxxxxxxxxxxxxxxxxx; m.grzeschik@xxxxxxxxxxxxxx;
> kees@xxxxxxxxxx; abdul.rahim@xxxxxxxxxxx; quic_jjohnson@xxxxxxxxxxx;
> quic_linyyuan@xxxxxxxxxxx; linux-usb@xxxxxxxxxxxxxxx; linux-
> kernel@xxxxxxxxxxxxxxx
> Cc: alim.akhtar@xxxxxxxxxxx; thiagu.r@xxxxxxxxxxx;
> jh0801.jung@xxxxxxxxxxx; dh10.jung@xxxxxxxxxxx;
> naushad@xxxxxxxxxxx; akash.m5@xxxxxxxxxxx;
> rc93.raju@xxxxxxxxxxx; taehyun.cho@xxxxxxxxxxx;
> hongpooh.kim@xxxxxxxxxxx; eomji.oh@xxxxxxxxxxx;
> shijie.cai@xxxxxxxxxxx; Selvarasu Ganesan <selvarasu.g@xxxxxxxxxxx>;
> stable@xxxxxxxxxxxxxxx
> Subject: [PATCH v2] usb: gadget: f_midi: Fixing wMaxPacketSize exceeded
> issue during MIDI bind retries
>
> The current implementation sets the wMaxPacketSize of bulk in/out
> endpoints to 1024 bytes at the end of the f_midi_bind function. However, in
> cases where there is a failure in the first midi bind attempt, consider
> rebinding. This scenario may encounter an f_midi_bind issue due to the
> previous bind setting the bulk endpoint's wMaxPacketSize to 1024 bytes,
> which exceeds the ep->maxpacket_limit where configured dwc3 TX/RX
> FIFO's maxpacket size of 512 bytes for IN/OUT endpoints in support HS
> speed only.
>
> Here the term "rebind" in this context refers to attempting to bind the MIDI
> function a second time in certain scenarios. The situations where rebinding is
> considered include:
>
> * When there is a failure in the first UDC write attempt, which may be
> caused by other functions bind along with MIDI.
> * Runtime composition change : Example : MIDI,ADB to MIDI. Or MIDI to
> MIDI,ADB.
>
> This commit addresses this issue by resetting the wMaxPacketSize before
> endpoint claim. And here there is no need to reset all values in the usb
> endpoint descriptor structure, as all members except wMaxPacketSize and
> bEndpointAddress have predefined values.
>
> This ensures that restores the endpoint to its expected configuration, and
> preventing conflicts with value of ep->maxpacket_limit. It also aligns with the
> approach used in other function drivers, which treat endpoint descriptors as
> if they were full speed before endpoint claim.
>
> Fixes: 46decc82ffd5 ("usb: gadget: unconditionally allocate hs/ss descriptor in
> bind operation")
> Cc: stable@xxxxxxxxxxxxxxx
> Signed-off-by: Selvarasu Ganesan <selvarasu.g@xxxxxxxxxxx>
> ---
Reviewed-by: Alim Akhtar <alim.akhtar@xxxxxxxxxxx>

[Snip]
> 2.17.1