On Mon, 15 Mar 2004, Malcolm Blaney wrote:
> Alan Stern wrote:
> > I wonder if the USB hardware on that computer is faulty. I can't think of
> > any other reason why changing uhci->fsbr would make a difference.
>
> It could be, but we have the same problem on another board we have with
> the same specs, and Boser (the board maker) have also verified the
> problem running linux on a test computer with the same setup. (Though
> they haven't volunteered to look any further into it!). We also put BSD
> on the board, and that didn't have any problems with usb.
There's nothing obviously wrong here. You can try using the patch for
Linux 2.6.4 below, which will print out information to the system log when
certain key events occur. Also, you should make sure the log is echoed to
your console so you don't lose anything when the system hangs. Set the
console log level up very high.
Alan Stern
===== uhci-hcd.c 1.96 vs edited =====
--- 1.96/drivers/usb/host/uhci-hcd.c Mon Mar 8 07:11:22 2004
+++ edited/drivers/usb/host/uhci-hcd.c Wed Mar 17 10:22:47 2004
@@ -756,6 +756,7 @@
if ((!(urb->transfer_flags & URB_NO_FSBR)) && !urbp->fsbr) {
urbp->fsbr = 1;
if (!uhci->fsbr++ && !uhci->fsbrtimeout)
+ printk(KERN_INFO "uhci fsbr enabled\n");
uhci->skel_term_qh->link =
cpu_to_le32(uhci->skel_hs_control_qh->dma_handle) | UHCI_PTR_QH;
}
@@ -1449,6 +1450,7 @@
struct urb *eurb;
int bustime;
+ printk(KERN_INFO "uhci enqueue: %p\n", urb);
spin_lock_irqsave(&uhci->urb_list_lock, flags);
if (urb->status != -EINPROGRESS) /* URB already unlinked! */
@@ -1639,6 +1641,7 @@
unsigned long flags;
struct urb_priv *urbp;
+ printk(KERN_INFO "uhci dequeue: %p\n", urb);
spin_lock_irqsave(&uhci->urb_list_lock, flags);
urbp = urb->hcpriv;
if (!urbp) /* URB was never linked! */
@@ -1756,6 +1759,7 @@
if (!uhci->fsbr && uhci->fsbrtimeout && time_after_eq(jiffies,
uhci->fsbrtimeout)) {
uhci->fsbrtimeout = 0;
uhci->skel_term_qh->link = UHCI_PTR_TERM;
+ printk(KERN_INFO "uhci fsbr disabled\n");
}
/* Poll for and perform state transitions */
@@ -1874,6 +1878,7 @@
* "HC Halted" status bit is persistent: it is RO, not R/WC.
*/
status = inw(io_addr + USBSTS);
+ printk(KERN_INFO "uhci irq status: 0x%x\n", status);
if (!(status & ~USBSTS_HCH)) /* shared interrupt, not mine */
return IRQ_NONE;
outw(status, io_addr + USBSTS); /* Clear it */
-------------------------------------------------------
This SF.Net email is sponsored by: IBM Linux Tutorials
Free Linux tutorial presented by Daniel Robbins, President and CEO of
GenToo technologies. Learn everything from fundamentals to system
administration.http://ads.osdn.com/?ad_id=1470&alloc_id=3638&op=click
_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel