When operating early (from BIOS) with the EHCI host controller (Intel chipset) and USB thumb drives, data from thumb drive is not correct, but neither the device or EHCI controller detects any error. Every single value in the CSW status is 100% valid with no errors at all. The EHCI controller status flags no error and the entire transfer descriptor chain are 100% executed and error free.
If I do a warm reset on the CPU, the same data is read without any errors. If I exercise the BIOS virtual drives from DOS everything works fine. It's just when booting this problem occur.
We are specialized on fast booting BIOS, having developed our own. This is a real bad problem, as how can you build a workaround when the errors are not detected by the hardware? In our implementation we have a complete state machine for every phase catching any error that occurs. But as no error occurs, how can we fix that?
The USB devices are very slow devices. For example, some of them need more than two seconds to change their D+/D- signal letting the BIOS know that they are connected. What kind of firmware need so long time to signal their presence? It's okay to be slow and not ready for more than 2 seconds, but that is a real problems for a fast boot BIOS. I mean, if we have passed the USB detection code and the device is not there, how would we know that we need to wait for it?
I think that Windows and Linux with their work around for bad USB devices encourages USB vendors to keep their badly implemented devices. If they didn't use their 1000+ engineering staff to implement work arounds for faulty devices, the vendor will either go out of market or fix the firmware. It's a joke at the moment and crazy.
The following should be standardized:
1) Quick signal the device presence
2) If not ready, have a working way to determine how long you need to wait.
3) Mass storage device classes should have the sequence of SCSI commands documented, so a driver will know how to make the device operational.
4) USB device vendors should adhere to the standard to 100% and the one that do not follow the standard should be banished.
B-O