USB 3 issues

Hans Petter Selasky hselasky at c2i.net
Tue Nov 15 20:43:06 UTC 2011


On Tuesday 15 November 2011 14:14:20 Jan Henrik Sylvester wrote:
> On 11/05/2011 13:15, Hans Petter Selasky wrote:
> > On Friday 04 November 2011 12:33:53 Jan Henrik Sylvester wrote:
> >> On 11/04/2011 10:18, Hans Petter Selasky wrote:
> >>> On Thursday 03 November 2011 22:04:44 Xin LI wrote:
> >>>> Xin LI
> >>> 
> >>> Please try the following patch:
> >>> 
> >>> http://svn.freebsd.org/changeset/base/227075
> >>> 
> >>> Then send me the XHCI attach error.
> >>> 
> >>> Probably something which we can fix.
> >> 
> >> Ok, I have found a minute to test 9.0-RC1 + 227075:
> >> 
> >> xhci0:<XHCI (generic) USB 3.0 controller>  mem 0xf1f00000-0xf1f0ffff irq
> >> 19 at device 0.0 on pci5
> >> xhci0: 32 byte context size.
> >> xhci0: Controller reset timeout.
> >> xhci0: XHCI halt/start/probe failed err=18
> >> WARNING: A USB process has been left suspended
> >> device_attach: xhci0 attach returned 6
> >> 
> >> BTW: I think it is this device from "pciconf -l":
> >> xhci0 at pci0:5:0:0:       class=0x0c0330 card=0x10001d5c chip=0x10001b73
> >> rev=0x01 hdr=0x00
> > 
> > In sys/dev/usb/controller/xhci.c
> > 
> > Try to increase the usb_pause_mtx() from hz/1000 to hz/100.
> > 
> > If that doesn't work try to continue, even if the HC is not clearing the
> > HCRST bit. Also print "temp" at the end of the loop.
> > 
> > 	/* Reset controller */
> > 	XWRITE4(sc, oper, XHCI_USBCMD, XHCI_CMD_HCRST);
> > 	
> > 	for (i = 0; i != 100; i++) {
> > 	
> > 		usb_pause_mtx(NULL, hz / 1000);
> > 		temp = XREAD4(sc, oper, XHCI_USBCMD)&
> > 		(XHCI_CMD_HCRST | XHCI_STS_CNR);
> > 		if (!temp)
> > 		
> > 			break;
> > 	
> > 	}
> > 	
> > 	if (temp) {
> > 	
> > 		device_printf(sc->sc_bus.parent, "Controller "
> > 		
> > 		    "reset timeout.\n");
> > 		
> > 		return (USB_ERR_IOERROR);
> > 	
> > 	}
> 
> I have put hz/100 in all four places of usb_pause_mtx(), replacing
> hz/1000 three times and hz/250 once. temp is never != 0 in that loop now
> and the controller attaches:
> 
> xhci0: <XHCI (generic) USB 3.0 controller> mem 0xf1f00000-0xf1f0ffff irq
> 19 at d
> evice 0.0 on pci5
> xhci0: 32 byte context size.
> usbus1 on xhci0
> 
> Anyhow, trying to attach an umass device fails:
> 
> xhci_do_command: Command timeout!
> xhci_do_command: Command timeout!
> xhci_do_command: Command timeout!
> ugen1.2: <FUJITSU> at usbus1
> umass0: <FUJITSU MB86C311, class 0/0, rev 3.00/0.01, addr 1> on usbus1
> umass0:  SCSI over Bulk-Only; quirks = 0x0000
> xhci_do_command: Command timeout!
> xhci_do_command: Command timeout!
> umass0: Get Max Lun not supported (USB_ERR_TIMEOUT)
> umass0:5:0:-1: Attached to scbus5
> xhci_do_command: Command timeout!
> 

Hi,

> And many more "Command timeout!" after that.

Can you compile the kernel with "options USB_DEBUG" in the kernel 
configuration file and set hw.usb.xhci.debug=15 during bootup?

I will get those delay changes into the mainline code.

--HPS


More information about the freebsd-usb mailing list