Index: sys/external/bsd/dwc2/dist/dwc2_hcdintr.c =================================================================== RCS file: /cvsroot/src/sys/external/bsd/dwc2/dist/dwc2_hcdintr.c,v retrieving revision 1.8 diff -u -p -r1.8 dwc2_hcdintr.c --- sys/external/bsd/dwc2/dist/dwc2_hcdintr.c 3 Apr 2014 06:34:58 -0000 1.8 +++ sys/external/bsd/dwc2/dist/dwc2_hcdintr.c 29 May 2014 15:50:30 -0000 @@ -1891,12 +1899,21 @@ static void dwc2_hc_chhltd_intr_dma(stru "hcint 0x%08x, intsts 0x%08x\n", chan->hcint, DWC2_READ_4(hsotg, GINTSTS)); + goto error; } } } else { dev_info(hsotg->dev, "NYET/NAK/ACK/other in non-error case, 0x%08x\n", 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); } }