This reverts a previously submitted patch where the slow retransmit was removed. Previously, the max3421 driver would immediately retry transmissions indefinitely upon receiving a NAK response, leading to potential stalls. This patch re-introduces a limit (`NAK_MAX_FAST_RETRANSMITS`) on how many times a request is retransmitted immediately. After reaching this limit, the driver falls back to a slower retransmit strategy using `max3421_slow_retransmit()`. This improves robustness when dealing with unresponsive USB devices. Signed-off-by: Matt Lee <matt@xxxxxxxxxx> --- drivers/usb/host/max3421-hcd.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/drivers/usb/host/max3421-hcd.c b/drivers/usb/host/max3421-hcd.c index 1234567..abcdef0 100644 --- a/drivers/usb/host/max3421-hcd.c +++ b/drivers/usb/host/max3421-hcd.c @@ -72,6 +72,12 @@ #define USB_MAX_FRAME_NUMBER 0x7ff #define USB_MAX_RETRIES 3 /* # of retries before error is reported */ +/* + * Max. # of times we're willing to retransmit a request immediately in + * response to a NAK. Afterwards, we fall back on trying once a frame. + */ +#define NAK_MAX_FAST_RETRANSMITS 2 + #define POWER_BUDGET 500 /* in mA; use 8 for low-power port testing */ /* Port-change mask: */ @@ -924,8 +930,11 @@ max3421_handle_error(struct usb_hcd *hcd * Device wasn't ready for data or has no data * available: retry the packet again. */ + if (max3421_ep->naks++ < NAK_MAX_FAST_RETRANSMITS) { max3421_next_transfer(hcd, 1); switch_sndfifo = 0; + } else + max3421_slow_retransmit(hcd); break; } if (switch_sndfifo) -- 2.34.1