- don't disable "park" feature (faster). - cut'n'paste should have morphed "||" to "&&" - initialize qh as "live" (as now expected)
The "&&" was the most troublesome bug. It could make all kinds of things misbehave, not just those vt6202 issues some folks report.
The interesting bit about the "park" feature (NForce2 has it, maybe a few others) is that it made one disk run 18% faster (according to hdparm).
Please apply to your latest BK tree (with ehci-0516). It should also work with ehci24-0416 and 2.4.21-ac1.
- Dave
--- 1.51/drivers/usb/host/ehci-hcd.c Sat Jun 14 01:15:27 2003 +++ edited/drivers/usb/host/ehci-hcd.c Mon Jun 16 18:00:43 2003 @@ -431,7 +431,7 @@ pci_set_mwi (ehci->hcd.pdev); /* clear interrupt enables, set irq latency */ - temp = readl (&ehci->regs->command) & 0xff; + temp = readl (&ehci->regs->command) & 0x0fff; if (log2_irq_thresh < 0 || log2_irq_thresh > 6) log2_irq_thresh = 0; temp |= 1 << (16 + log2_irq_thresh); --- 1.49/drivers/usb/host/ehci-q.c Sat Jun 14 01:14:30 2003 +++ edited/drivers/usb/host/ehci-q.c Mon Jun 16 18:00:43 2003 @@ -293,7 +293,7 @@ /* stop scanning when we reach qtds the hc is using */ } else if (likely (!stopped - || HCD_IS_RUNNING (ehci->hcd.state))) { + && HCD_IS_RUNNING (ehci->hcd.state))) { break; } else { @@ -690,12 +690,11 @@ /* NOTE: if (PIPE_INTERRUPT) { scheduler sets s-mask } */ - /* init as halted, toggle clear, advance to dummy */ + /* init as live, toggle clear, advance to dummy */ qh->qh_state = QH_STATE_IDLE; qh->hw_info1 = cpu_to_le32 (info1); qh->hw_info2 = cpu_to_le32 (info2); qh_update (ehci, qh, qh->dummy); - qh->hw_token = cpu_to_le32 (QTD_STS_HALT); usb_settoggle (urb->dev, usb_pipeendpoint (urb->pipe), !is_input, 1); return qh; }