Skip to content

Commit

Permalink
staging: octeon-usb: never retry after xacterr
Browse files Browse the repository at this point in the history
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 <aaro.koskinen@iki.fi>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  • Loading branch information
Aaro Koskinen authored and Greg Kroah-Hartman committed Mar 24, 2015
1 parent d712648 commit 532edc9
Showing 1 changed file with 5 additions and 33 deletions.
38 changes: 5 additions & 33 deletions drivers/staging/octeon-usb/octeon-hcd.c
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down

0 comments on commit 532edc9

Please sign in to comment.