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.



_______________________________________________
linux-usb-devel@lists.sourceforge.net
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to