From 532edc93e23e656094ede793c92207a2c237740e Mon Sep 17 00:00:00 2001 From: Aaro Koskinen Date: Sun, 22 Mar 2015 17:37:52 +0200 Subject: [PATCH] staging: octeon-usb: never retry after xacterr Never retry after xacterr. The DMA engine cannot handle that properly and may result in wrong transfer count and hang. Signed-off-by: Aaro Koskinen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/octeon-usb/octeon-hcd.c | 38 ++++--------------------- 1 file changed, 5 insertions(+), 33 deletions(-) diff --git a/drivers/staging/octeon-usb/octeon-hcd.c b/drivers/staging/octeon-usb/octeon-hcd.c index a8c467ff4204..40e22e4bc75a 100644 --- a/drivers/staging/octeon-usb/octeon-hcd.c +++ b/drivers/staging/octeon-usb/octeon-hcd.c @@ -2685,40 +2685,12 @@ static int cvmx_usb_poll_channel(struct cvmx_usb_state *usb, int channel) CVMX_USB_COMPLETE_STALL); } else if (usbc_hcint.s.xacterr) { /* - * We know at least one packet worked if we get a ACK or NAK. - * Reset the retry counter + * XactErr as a response means the device signaled + * something wrong with the transfer. For example, PID + * toggle errors cause these. */ - if (usbc_hcint.s.nak || usbc_hcint.s.ack) - transaction->retries = 0; - transaction->retries++; - if (transaction->retries > MAX_RETRIES) { - /* - * XactErr as a response means the device signaled - * something wrong with the transfer. For example, PID - * toggle errors cause these - */ - cvmx_usb_perform_complete(usb, pipe, transaction, - CVMX_USB_COMPLETE_XACTERR); - } else { - /* - * If this was a split then clear our split in progress - * marker - */ - if (usb->active_split == transaction) - usb->active_split = NULL; - /* - * Rewind to the beginning of the transaction by anding - * off the split complete bit - */ - transaction->stage &= ~1; - pipe->split_sc_frame = -1; - pipe->next_tx_frame += pipe->interval; - if (pipe->next_tx_frame < usb->frame_number) - pipe->next_tx_frame = - usb->frame_number + pipe->interval - - (usb->frame_number - - pipe->next_tx_frame) % pipe->interval; - } + cvmx_usb_perform_complete(usb, pipe, transaction, + CVMX_USB_COMPLETE_XACTERR); } else if (usbc_hcint.s.bblerr) { /* Babble Error (BblErr) */ cvmx_usb_perform_complete(usb, pipe, transaction, -- 2.39.5