USB not working on 6.0-BETA2 on ICH7 [long]

From: Joe Marcus Clarke <marcus_at_marcuscom.com>
Date: Sun, 07 Aug 2005 02:53:20 -0400
I'm trying to get USB 2.0 working on my Dell Precision 380 that has a
USB ICH7 chipset.  FreeBSD detects the controllers, but they are all
halted when devices are detected.  Here is a verbose boot with USB_DEBUG
enabled: http://www.marcuscom.com/downloads/NEW-SHUMAI.dmesg.  Here is
what I get when I insert a device after the machine has booted:

usb0: host controller halted
usb0 regs: cmd=0000, sts=0020, intr=000f, frnum=0771, flbase=00000dc4, sof=0040, portsc1=0080, portsc2=0080
intrs=0
QH(0xc35e3f80) at 7d697f80: hlink=7d697fa2 elink=00000001
usb_new_device: set address 2 failed - trying a port reset
usb_new_device: set address 2 failed - trying a port reset
usb_new_device: set address 2 failed - trying a port reset
usb_new_device: set address 2 failed
uhub_explore: usb_new_device failed, error=SET_ADDR_FAILED
uhub3: device problem (SET_ADDR_FAILED), disabling port 2

If I build a kernel without ehci, I get working USB, but only if the
device is inserted prior to boot.  That is, usbd does not see any ATTACH
events.  If I have ehci compiled in, and a device is present during
boot, I get a panic:

usb3: host controller halted
usb3 regs: cmd=0000, sts=0020, intr=000f, frnum=0347, flbase=00000d1c, sof=0040, portsc1=01a5, portsc2=0093
intrs=0
QH(0xc3659f80) at 7d5edf80: hlink=7d5ecf62 elink=00000001
usbd_new_device: addr=2, getting first desc failed
uhub_explore: usb_new_device failed, error=IOERROR
uhub3: device problem (IOERROR), disabling port 1
panic: usbd_transfer: not done
cpuid = 0
KDB: enter: panic
[thread pid 0 tid 0 ]
Stopped at      kdb_enter+0x2b: nop
db> trace
Tracing pid 0 tid 0 td 0xc06f7840
kdb_enter(c069f83d) at kdb_enter+0x2b
panic(c069aa93,4,c35da43c,c35da400,0) at panic+0x127
usbd_transfer(c35da400,c0c20cd8,c04ca43d,c35da400,c36440b0) at usbd_transfer+0x13e
usbd_sync_transfer(c35da400,c36440b0,1,c0c20cec,d) at usbd_sync_transfer+0x11
usbd_do_request_flags_pipe(c3644200,c3644180,c0c20d30,c36440c4,0) at usbd_do_request_flags_pipe+0x5d
usbd_do_request_flags(c3644200,c0c20d30,c36440c4,0,0) at usbd_do_request_flags+0x20
usbd_do_request(c3644200,c0c20d30,c36440c4,a3,40002) at usbd_do_request+0x1a
usbd_get_port_status(c3644200,2,c36440c4) at usbd_get_port_status+0x39
uhub_explore(c3644200,c34b7904,c0c20d88,c04e4556,0) at uhub_explore+0x85
usb_cold_explore(0,c1ec00,c1e000,0,c0434245) at usb_cold_explore+0x4f
mi_startup() at mi_startup+0x96
begin() at begin+0x2c

(gdb) l *usbd_transfer+0x13e
0xc04c9b16 is in usbd_transfer (/usr/src/sys/dev/usb/usbdi.c:343).
338             if (err != USBD_IN_PROGRESS)
339                     return (err);
340             s = splusb();
341             if (!xfer->done) {
342                     if (pipe->device->bus->use_polling)
343                             panic("usbd_transfer: not done");
344                     tsleep(xfer, PRIBIO, "usbsyn", 0);
345             }
346             splx(s);
347             return (xfer->status);

Any help would be appreciated.  Thanks.

Joe

-- 
PGP Key : http://www.marcuscom.com/pgp.asc

Received on Sun Aug 07 2005 - 04:53:23 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:38:40 UTC