Subject: NVIDIA ehci(4) USB problem
To: None <current-users@NetBSD.org>
From: Izumi Tsutsui <tsutsui@ceres.dti.ne.jp>
List: port-i386
Date: 06/21/2007 23:26:22
Does anyone use umass(4) devices on ehci(4) of NVIDIA chipset
on -current?

I'm using ASRock AM2NF3-VSTA board which has NVIDIA nForce3 250
chipset and its ehci is attached as the following:
---
ehci0 at pci0 dev 2 function 2: NVIDIA nForce3 250 USB2 Host Controller (rev. 0xa2)
LUS2: Picked IRQ 22 with weight 0
ehci0: interrupting at ioapic0 pin 22 (irq 3)
ehci0: BIOS has given up ownership
ehci0: EHCI version 1.0
ehci0: companion controllers, 4 ports each: ohci0 ohci1
usb2 at ehci0: USB revision 2.0
uhub2 at usb2
uhub2: NVIDIA EHCI root hub, class 9/0, rev 2.00/1.00, addr 1
uhub2: 8 ports with 8 removable, self powered
---

When I plug a USB flash memory to USB port, the device is properly
attached and I can mount it. But after some file read/write accesses
it just hangs in syscall and put the following errors:

---
umass0 at uhub2 port 3 configuration 1 interface 0
umass0: BUFFALO USB Flash Disk, rev 2.00/1.00, addr 2
umass0: using SCSI over Bulk-Only
scsibus0 at umass0: 2 targets, 1 lun per target
sd0 at scsibus0 target 0 lun 0: <BUFFALO, USB Flash Disk, 3.00> disk removable
sd0: 246 MB, 984 cyl, 16 head, 32 sec, 512 bytes/sect x 503808 sectors

 :

umass0: BBB reset failed, TIMEOUT
umass0: BBB bulk-in clear stall failed, TIMEOUT
---

I unplug the device during the hang, then I get the following panic:
(taken from dmesg after panic)

---
umass0: at uhub2 port 4 (addr 2) disconnected
sd0(umass0:0:0:0): generic HBA error
sd0(umass0:0:0:0): generic HBA error
sd0 detached
scsibus0 detached
usbd_free_xfer: timout_handle pendingehci_freex: xfer=0xc2cbdb00 not busy, 0x0000009e
ehci_freex: !isdone
umass0 detached
usb_transfer_complete: xfer=0xc2cbdb00 not busy 0x00000046
usb_transfer_complete: xfer=0xc2cbdc00 not busy 0x00000046
usb_transfer_complete: xfer=0xc2cbdd00 not busy 0x00000046
uvm_fault(0xc06a7f40, 0, 1) -> 0xe
----

The same device connected via a USB 1.1 hub (and NVIDIA's ohci(4))
works fine. Also it works on NEC's ehci and VIA's ehci.

Adding EHCIF_DROPPED_INTR_WORKAROUND quirk for VIA variants
in ehci_pci.c doesn't help.

Should I send-pr about this?
---
Izumi Tsutsui