Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 9 Jul 2005 23:52:31 +0200
From:      Hans Petter Selasky <hselasky@c2i.net>
To:        Stefan Walter <sw@gegenunendlich.de>
Cc:        freebsd-usb@freebsd.org
Subject:   Re: usb/82660: EHCI: I/O stuck in state 'physrd'/panic
Message-ID:  <200507092352.33451.hselasky@c2i.net>
In-Reply-To: <20050709135329.GA855@kyuzo.dunkelkammer.void>
References:  <20050626091628.775DD3A1D@kyuzo.dunkelkammer.void> <200507091436.44489.hselasky@c2i.net> <20050709135329.GA855@kyuzo.dunkelkammer.void>

next in thread | previous in thread | raw e-mail | index | archive | help
On Saturday 09 July 2005 15:53, Stefan Walter wrote:
> Hans Petter Selasky, 09.07.05, 14:36h CEST:
> > > I don't think it's the USB stick, as the device works fine with ehci at
> > > my notebook (Intel chipset). Furthermore, I could now reproduce the
> > > problem with an external USB HD enclosure, too.
> >
> > Ok, lets have a look at the EHCI driver and see what is going on. I'm not
> > sure how to do this with the official USB driver, but if you could have
> > installed my USB driver again, and replace the function "ehci_timeout()"
> > in the file "/sys/dev/usb2/_ehci.c" with the following:
>
> [...]
>
> > And then compile a new kernel and/or modules.
> >
> > Your device was USB 2.0, right, else you have to do something similar
> > to /sys/dev/usb2/_uhci.c if the device is USB 1.X.
> >
> > Just leave all debugging flags off, and then try to reproduce the error
> > [one or more times] and post the dmsg that appears.
>
> OK, dmesg says the following:
>

> QTD(0xdeb321c0) at 0x1f3501c0:
>   next=0x00000001<T> altnext=0x00000001<T>
>   status=0x10008d80: toggle=0 bytes=0x1000 ioc=1 c_page=0x0
>     cerr=3 pid=1 stat=80<ACTIVE>
>   buffer[0]=0x1f34f0d0
>   buffer[1]=0x1f350000
>   buffer[2]=0x00000000
>   buffer[3]=0x00000000
>   buffer[4]=0x00000000
> _ehci_remove_qh: 0xdeb32400 from 0xdeb32400
>

This doesn't indicate any errors. The transfer is simply waiting for data and 
the USB device is not supplying any so the transfer does not finish. But I 
want to have a look at a parent structure too, to see if your EHCI controller 
is not writing back or updating the last QTD. In the 
file /sys/dev/usb2/_ehci.c in the function ehci_device_done():

Change this:
                        DPRINTF(("nexttog=%d; data after transfer:\n",
                                 xfer->pipe->toggle_next));
                        ehci_dump_sqtds(xfer->td_start);


Into this :
                        DPRINTF(("nexttog=%d; data after transfer:\n",
                                 xfer->pipe->toggle_next));
                        ehci_dump_sqtds(xfer->td_start);
                        ehci_dump_sqh(xfer->qh_start);

Recompile and reproduce the bug three or four times and post the dmsg.

--HPS



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200507092352.33451.hselasky>