Hi,

I am working on porting the Lothar's isp1362 driver to
support isp1160. The driver can communicate with devices
under 2.6.9-rc3 (sets device address and gets descriptors).
I have tested it with mice, keyboards, and memory sticks,
but with all of these, the configuration process fails.
Configuration for each device fails always the same way,
though for different devices it happens differently. All
these devices work perfectly with ohci on x86.

A failure scenario is that the usb system requests info
about a device descriptor, learns its length, requests the
descriptor of strictly that length and gets less bytes from
the device than requested. The question is: may this be a HC
hardware/configuration problem? Help would be much
appreciated.

Here is an example failure with the following
keyboard (line from lsusb under x86):
Bus 003 Device 006: ID 04f2:0110 Chicony Electronics Co., Ltd KU-2971 Keyboard

[skipped info about attachment]

set-address (OK)
MPS=8 FA=0 DIR=0 EP=0 SPD=1 LEN=8
--out-> 00 05 02 00 00 00 00 00
MPS=8 FA=0 DIR=2 EP=0 SPD=1 LEN=0   # status

Get 8 bytes of the device descriptor (OK)
MPS=8 FA=2 DIR=0 EP=0 SPD=1 LEN=8
--out-> 80 06 00 01 00 00 08 00
MPS=8 FA=2 DIR=2 EP=0 SPD=1 LEN=8 COUNT=8
<--in-- 12 01 10 01 00 00 00 08
MPS=8 FA=2 DIR=1 EP=0 SPD=1 LEN=0

Get full device descriptor (OK)
MPS=8 FA=2 DIR=0 EP=0 SPD=1 LEN=8
--out-> 80 06 00 01 00 00 12 00
MPS=8 FA=2 DIR=2 EP=0 SPD=1 LEN=18 COUNT=18
<--in-- 12 01 10 01 00 00 00 08 f2 04 10 01 00 01 04 14 00 01
MPS=8 FA=2 DIR=1 EP=0 SPD=1 LEN=0

Get configuration (OK. Note that the device reports the
length of the configuration to be 34 (0x0022; bytes 2,3 in
the arrived data))
MPS=8 FA=2 DIR=0 EP=0 SPD=1 LEN=8
--out-> 80 06 00 02 00 00 09 00
MPS=8 FA=2 DIR=2 EP=0 SPD=1 LEN=9 COUNT=9
<--in-- 09 02 22 00 01 01 00 a0 32
MPS=8 FA=2 DIR=1 EP=0 SPD=1 LEN=0

Get configuration (Fails. For some reason, we get only 32
bytes back instead of 34.)
MPS=8 FA=2 DIR=0 EP=0 SPD=1 LEN=8
--out-> 80 06 00 02 00 00 22 00
MPS=8 FA=2 DIR=2 EP=0 SPD=1 LEN=34 COUNT=32
<--in-- 09 02 22 00 01 01 00 a0 32
09 04 00 00 01 03 01 01 00
09 21 10 01 00 01 22 41 00
07 05 81 03 08 00 00

No status transaction follows, as the buffer rounding bit in
the TD is clear. (Lothar, I added the buffer rounding bit
handling to update_td_status()).

Then timeout follows:
usb 1-1: unable to read config index 0 descriptor/all
usb 1-1: can't read configurations, error -110

and the usb system starts over again with set-address.

With one device, I have seen another type of weirdness. The
device is Trendnet's TMR-61U2 card reader (which, again,
works perfectly if attached to my x86 box). For that device,
the failure seems to be that HC just does not send off the
IN transaction. Like here:

set address (OK)
MPS=8 FA=0 DIR=0 EP=0 SPD=0 LEN=8
--out-> 00 05 02 00 00 00 00 00
MPS=8 FA=0 DIR=2 EP=0 SPD=0 LEN=0

get device descriptor (Fails, IN transaction not performed)
MPS=8 FA=2 DIR=0 EP=0 SPD=0 LEN=8
--out-> 80 06 00 01 00 00 08 00
MPS=8 FA=2 DIR=2 EP=0 SPD=0 LEN=8 COUNT=0

The Philips transfer descriptor for this last IN
transaction, read back from the device AFTER HC has reported
via ATLInt that the buffer is processed and ready, is the
following:

fc00 0808 0808 0002

where the leftmost nibble f shows that the HC has not even
tried to perform the IN transaction. I put here the register
dump obtained after writing the last IN transaction header
and data to HC:

HCREVISION  [00]: 00000010
HCCONTROL   [01]: 00000080
HCCMDSTAT   [02]: 00000000
HCINTSTAT   [03]: 00000084
HCINTENB    [04]: 8000001c
HCFMINTVL   [0d]: 27782edf
HCFMREM     [0e]: 00000ddc
HCFMNUM     [0f]: 0000044b
HCLSTHRESH  [11]: 00000628
HCRHDESCA   [12]: 05000202
HCRHDESCB   [13]: 00000000
HCRHSTATUS  [14]: 00008000
HCRHPORT2   [16]: 00000100
HCHWCFG     [20]:     1029
HCDMACFG    [21]:     0022
HCXFERCTR   [22]:     0010
HCuPINT     [24]:     0017   # ATLInt is asserted
HCuPINTENB  [25]:     0033
HCCHIPID    [27]:     6122
HCSCRATCH   [28]:     1ad5
HCITLBUFLEN [2a]:     0000
HCATLBUFLEN [2b]:     07e0
HCBUFSTAT   [2c]:     0024   # ATL buffer is done
HCRDITL0LEN [2d]:     0000
HCRDITL1LEN [2e]:     0000

Has anyone an idea, what is wrong?
Thank you in advance,
Olav



-------------------------------------------------------
This SF.Net email is sponsored by:
Sybase ASE Linux Express Edition - download now for FREE
LinuxWorld Reader's Choice Award Winner for best database on Linux.
http://ads.osdn.com/?ad_id=5588&alloc_id=12065&op=click
_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to