I read datasheet & our kernel source again and found that there is a control
in our ochi controller.It was set to perform endian swap.So I cleared it to
deny endian swap by ohci controller.When some usb device connect to 2-port hub,
What data does that swap though? OHCI should be reading and writing all its data in little endian format; and its registers, accessed through PCI BAR 0 by word reads, will always appear in host byte order.
2-port hub can read correct hub port status.But when usb_set_address was called, there is a oops. ..
...
???; 800f9ab0 <dl_done_list+7c/2a4> <=====
...
I digged more and found that there is a urb point to 0 in function dl_done_list().
...
while (td_list) {
td_list_next = td_list->next_dl_td;
urb = td_list->urb; ----> urb is 0;
urb_priv = urb->hcpriv;
...
If I enable endian swap by ohci controller,urb is correct value.
I think that some urb is freed but didn't unlink from td_list.
But why endian cause such problem?
That's a fine question. Do you know for a fact that the controller is only writing the fields (in TD and ED) that the OHCI spec says it's allowed to write? And that DMA into those structures is cache-coherent? It might need to use uncached memory ...
The TD (and ED) structures have two parts. The first part is what's specified in the OHCI spec -- hardware reads it, and writes some fields; always little-endian. The second part is just for the driver; always in host byte-order. If for some reason your controller is confused and is overwriting the software's part, that could be trouble.
You can try using a later kernel.Sorry,I can't update kernel now because there are many modification & porting for our board based on this version.
A 2.4.17 kernel IS quite old. You might even just try grabbing the usb-ohci code from 2.4.27-pre ... it's had bugfixes since then, though none that I think should affect that. There's a backport of the ohci-hcd driver available too, but it won't run on anything that old.
- Dave
------------------------------------------------------- This SF.Net email is sponsored by: SourceForge.net Broadband Sign-up now for SourceForge Broadband and get the fastest 6.0/768 connection for only $19.95/mo for the first 3 months! http://ads.osdn.com/?ad_id=2562&alloc_id=6184&op=click _______________________________________________ [EMAIL PROTECTED] To unsubscribe, use the last form field at: https://lists.sourceforge.net/lists/listinfo/linux-usb-devel