On Fri, 22 Aug 2003, Karsten Wiese wrote:

> the FIX is to initialise status in uhci_submit_bulk() like this:
> /* 3 errors if there is a timeout else 0;
>    UHCI Spec says: 0 == unlimited errors
>    VIA-chip 1106:3038 needs 0 for urbs that should not timeout!
>    */
> status = TD_CTRL_ACTIVE | ((urb->timeout ? 3 : 0) <<
> TD_CTRL_C_ERR_SHIFT);

I have seen these sort of errors when there was an EMI spike. I got this with 
a device which is self powered and has a connection to the ground of the 
power supply cable. The spike was induced in the ground loop of PC, device 
and USB cable. This spike maybe last 10 ms. If an USB transfer gets no NAK 
from the device due to the spike, the transfer is retried and the error count 
decremented. My VIA controller does all 3 retries very fast, back-to-back.
So the third try timed out before the spike was gone. 

I think it would be wise to add another level of retries on top of the 
controller timeout, in the HCD. If you have no HCD support for this sort of 
failure, you can try to use a kernel timer and retry the URB from within your 
driver. (Note that for this to work, the device must be able to resend the
information from the last transfer).

Greg, how about doing an additional retry in the HCD? It will make the whole
USB more reliable.

best regards

Wolfgang Mües



-------------------------------------------------------
This SF.net email is sponsored by: VM Ware
With VMware you can run multiple operating systems on a single machine.
WITHOUT REBOOTING! Mix Linux / Windows / Novell virtual machines
at the same time. Free trial click here:http://www.vmware.com/wl/offer/358/0
_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to