Commit 151d0cbd authored by Nick Hudson's avatar Nick Hudson Committed by Greg Kroah-Hartman

usb: dwc2: make the scheduler handle excessive NAKs better

I'm seeing problems with a d-link dwcl-g122 wifi dongle that
someone sent me. There are reports of other wifi dongles with the
same/similar problem. The devices appear to be NAKing to the point
of confusing the dwc2 driver completely.

The attached patch helps with my d-link dwl-g122 - it's adapted
from the Raspberry Pi dwc_otg driver, which is a modified version
of the Synopsys vendor driver. The error recovery is still valid
after the patch, I think.

Cc: Dom Cobley <popcornmix@gmail.com>
Signed-off-by: default avatarNick Hudson <skrll@netbsd.org>
Signed-off-by: default avatarPaul Zimmerman <paulz@synopsys.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 87df8ac3
...@@ -1890,12 +1890,20 @@ static void dwc2_hc_chhltd_intr_dma(struct dwc2_hsotg *hsotg, ...@@ -1890,12 +1890,20 @@ static void dwc2_hc_chhltd_intr_dma(struct dwc2_hsotg *hsotg,
"hcint 0x%08x, intsts 0x%08x\n", "hcint 0x%08x, intsts 0x%08x\n",
chan->hcint, chan->hcint,
readl(hsotg->regs + GINTSTS)); readl(hsotg->regs + GINTSTS));
goto error;
} }
} }
} else { } else {
dev_info(hsotg->dev, dev_info(hsotg->dev,
"NYET/NAK/ACK/other in non-error case, 0x%08x\n", "NYET/NAK/ACK/other in non-error case, 0x%08x\n",
chan->hcint); chan->hcint);
error:
/* Failthrough: use 3-strikes rule */
qtd->error_count++;
dwc2_update_urb_state_abn(hsotg, chan, chnum, qtd->urb,
qtd, DWC2_HC_XFER_XACT_ERR);
dwc2_hcd_save_data_toggle(hsotg, chan, chnum, qtd);
dwc2_halt_channel(hsotg, chan, qtd, DWC2_HC_XFER_XACT_ERR);
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment