Hi everybody,
Inside a X306 IBM server, there are 2 UHCI-like and 1 EHCI USB controlers encapsulated in the Intel's 6300ESB chipset.
An HID-like peripheral is connected during the boot-up of the system.
Kernel is 2.4.26.
Behaviour :
When the peripheral is connected to the front connectors ( bus 2 ), enumeration works fine and the peripheral is claimed by hiddev.
When connected to the rear connectors ( bus 1 ), the set_address process fails, but only if the peripheral is already connected at boot time. If connected after start-up of the system, again, everything works fine.
Tests : I've put an USB bus analyzer and record the enumeration process. The set_address has a setup and handshake transactions.
When all works fine, you get : - setup -> data0 -> ack for the setup transaction and - in -> data1 -> ack for the handshake transaction. ( See set_address_ok.txt )
When not, you get :
- setup -> data0 for the setup transaction and... that's all folks ! ( See set_address_ko.txt )
As Debug is "on", here is the output :
URB [df5b2710] urbp [df8f71e0]
QH [df9b11e0]
td 0: [df8f6180]
1f8f6154 e0 LS Stalled CRC/Timeo Length=7 MaxLen=7 DT0 EndPt=0 Dev=0, PID=2d(SETUP) (buf=1f5fed40)
td 1: [df8f6150]
00000001 e3 LS IOC Active Length=0 MaxLen=7ff DT1 EndPt=0 Dev=0, PID=69(IN) (buf=00000000)
...endless looped.
It seems that the endpoint never send the ack packet in the setup transaction. That's probably why we get a STALL state. Due to the "e0", this is looped. Is this correct ?
USB spec. says that when the data is corrupted during the setup transaction, the endpoint sends no handshake. Could it be the reason of this behaviour ?
But why only at boot time and only on the rear connectors ? Has anybody ever been faced with such a behaviour ?
TIA, Patrick Agrain
********** Transfer Header ********** Transfer Number : 0 Transfer Type : Control Transfer Name : Set Address Speed : Low-Speed Port No : 1 Device Address : 0 New Dev. Addr : 2 ********** Transaction Header ********** Transaction Type : SetUp Transaction Number : 0 ********** Packet Fields ********** Packet Number : 0 PacketType : SETUP Start Time : -000.000 036 20 Duration Time : 21.167 Micro Second EOP Duration Time : 1.433 Micro Second PID(Bin) : 1101 Check(Bin) : 0010 Dev. Addr(Hex) : 00 EndP(Bin) : 0000 CRC5(Bin) : 01000 ********** Packet Fields ********** Packet Number : 1 PacketType : DATA0 Start Time : 000.000 000 00 Duration Time : 53.500 Micro Second EOP Duration Time : 1.450 Micro Second PID(Bin) : 0011 Check(Bin) : 1100 Data(Hex) : 0005020000000000 CRC16(Hex) : D768 ********** Packet Fields ********** Packet Number : 2 PacketType : ACK Start Time : 000.000 057 67 Duration Time : 10.500 Micro Second EOP Duration Time : 1.417 Micro Second PID(Bin) : 0010 Check(Bin) : 1101 ********** Transaction Header ********** Transaction Type : In Transaction Number : 1 ********** Packet Fields ********** Packet Number : 3 PacketType : TOKEN IN Start Time : 000.000 963 27 Duration Time : 21.167 Micro Second EOP Duration Time : 1.467 Micro Second PID(Bin) : 1001 Check(Bin) : 0110 Dev. Addr(Hex) : 00 EndP(Bin) : 0000 CRC5(Bin) : 01000 ********** Packet Fields ********** Packet Number : 4 PacketType : DATA1 Start Time : 000.000 988 47 Duration Time : 21.167 Micro Second EOP Duration Time : 1.417 Micro Second PID(Bin) : 1011 Check(Bin) : 0100 Data(Hex) : CRC16(Hex) : 0000 ********** Packet Fields ********** Packet Number : 5 PacketType : ACK Start Time : 000.001 015 93 Duration Time : 10.500 Micro Second EOP Duration Time : 1.367 Micro Second PID(Bin) : 0010 Check(Bin) : 1101
********** Transfer Header ********** Transfer Number : 0 Transfer Type : Control Transfer Name : Set Address Speed : Low-Speed Port No : 1 Device Address : 0 New Dev. Addr : 2 ********** Transaction Header ********** Transaction Type : SetUp Transaction Number : 0 ********** Packet Fields ********** Packet Number : 0 PacketType : SETUP Start Time : -000.000 036 20 Duration Time : 21.167 Micro Second EOP Duration Time : 1.400 Micro Second PID(Bin) : 1101 Check(Bin) : 0010 Dev. Addr(Hex) : 00 EndP(Bin) : 0000 CRC5(Bin) : 01000 ********** Packet Fields ********** Packet Number : 1 PacketType : DATA0 Start Time : 000.000 000 00 Duration Time : 53.500 Micro Second EOP Duration Time : 1.417 Micro Second PID(Bin) : 0011 Check(Bin) : 1100 Data(Hex) : 0005020000000000 CRC16(Hex) : D768