Hello David
Please recall the issue that i reported wherein the host controller do not PING
when it should. The sequence of USB transactions as captured on the wire using
the catalyst is reproduced below.
1. 31 bytes OUT (NYET, PING, ACK),
2. 512 bytes OUT (ACK),
3. 13 bytes IN (ACK),
4. repeat 1-3.
The issue is that occasinally host controller do not send PING in sequence 1
for about 30 seconds causing reset of the device. Per your advise, i have
dumped the qh and qtds.
The qh and qtds before the issue triggers are given below.
# cat /sys/class/usb_host/usb1/async
qh/a10ef100 dev2 hs ep1 42002102 40000000 (80008c01 data1 nak4)
a10f0060 out len=512 02008c80 urb 81473200
/mnt/bin # cat /sys/class/usb_host/usb1/async
qh/a10ef100 dev2 hs ep1 42002102 40000000 (80008c01 data1 nak4)
a10f0060 out len=512 02008c80 urb 81473200
/mnt/bin # cat /sys/class/usb_host/usb1/async
qh/a10ef100 dev2 hs ep1 42002102 40000000 (80008c01 data1 nak4)
a10f0060 out len=512 02008c80 urb 81473200
To me the above log looks ok.
/mnt/bin # scsi 30 timer expired
I have added the "scsi 30 ..." printk in the scsi driver to know when timeout
of scsi 30 seconds timer.
The qh and qtd and registers contents after the 30 seconds timeout are given
below.
/mnt/bin # cat /sys/class/usb_host/usb1/async
qh/a10ef100 dev2 hs ep1 42002102 40000000 (801f8c81* data1 nak0)
a10f00c0*out len=31 001f8c80 urb 814733e0
/mnt/bin # cat /sys/class/usb_host/usb1/async
qh/a10ef100 dev2 hs ep1 42002102 40000000 (801f8c81* data1 nak0)
a10f00c0*out len=31 001f8c80 urb 814733e0
/mnt/bin # cat /sys/class/usb_host/usb1/async
qh/a10ef100 dev2 hs ep1 42002102 40000000 (801f8c81* data1 nak0)
a10f00c0*out len=31 001f8c80 urb 814733e0
/mnt/bin # cat /sys/class/usb_host/usb1/async
qh/a10ef100 dev2 hs ep1 42002102 40000000 (801f8c81* data1 nak3)
a10f00c0*out len=31 001f8c80 urb 814733e0
/mnt/bin # cat /sys/class/usb_host/usb1/async
qh/a10ef100 dev2 hs ep1 42002102 40000000 (801f8c81* data1 nak2)
a10f00c0*out len=31 001f8c80 urb 814733e0
The first thing that i notice is that the same qtd persists in the qh for quite
some time.
The value of token field of qtd is 0x801f8c81 which upon parsing indicates that
ping stat bit and active bits of the status fields are 1. In theory, the qtd
should be executed by the host controller since the active bit is on and the it
should generate ping packet because the ping state bit is 1. But appearently
the host controller is not generating the ping packet.
is the above the log confirm that this a hardware issue ?
Regards
Vivek
-----Original Message-----
From: David Brownell [mailto:[EMAIL PROTECTED]
Sent: Wednesday, June 07, 2006 4:03 PM
To: Vivek Dharmadhikari
Cc: Alan Stern; USB development list
Subject: Re: [linux-usb-devel] Usb hangs during small and large file
transfer
On Wednesday 07 June 2006 3:23 pm, Vivek Dharmadhikari wrote:
>
> How do i dump, QH and its associated QTDs ?
Try dbg_qh() and dbg_qtd() ... see ehci-dbg.c for examples
of scanning the qtd list.
> >I don't see this happening ... it's not supposed to, and I just looked
> >at how the bits affecting PING are managed in the EHCI driver to verify
> >that it seems to be coded right.
>
> Can you elaborate more on the above. I did not understand it.
See the EHCI spec and the ehci-q.c file ... the spec will show the
bits (search for PING) and the code will show how they're manipulated.
_______________________________________________
[email protected]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel