USB2.0 external hub and ehci question

From: Barry Bouwsma (freebsd-misuser_at_remove-NOSPAM-to-reply.NOSPAM.dyndns.dk)
Date: 09/30/03

  • Next message: Q: "nForce MCP network driver - working"
    Date: Tue, 30 Sep 2003 05:26:33 +0200 (CEST)
    To: FreeBSD Hacking Group <hackers@freebsd.org>
    
    

    [Drop hostname part of IPv6-only address above to obtain IPv4-capable e-mail,
     or just drop me from the recipients and I'll catch up from the archives]

    Hallo Hackers, I suppose I should post this to -current as the code in
    question is derived from there, but I'm running it on RELENG_4, so...

    I've ported the USB controller codes (uhci, ohci, and ehci) from -current
    to 4.9-PRERELEASE in order to try and add USB2.0 support to 4.x, and I see
    something that I also saw with the NetBSD ehci codes back last December;
    namely, that I can't attach an external hub, supposedly with USB2.0
    capability, and have it be recognized.

    First, I seem to have no problems building just the uhci and ohci codes
    into the usb.ko kernel module, and using them, though I haven't thoroughly
    crash-tested them.

    I've mixed all three controller codes, with the result that the hub is
    not seen. Nor is the external drive. Which I attribute to my own
    incompetence more than anything. So to make things easier, I ditched
    all but the ehci code and ignored the check for companion controllers,
    to limit testing to just that.

    With an external USB2.0 drive connected, I am able to see and mount it.
    When I connect the external hub in its place, I get the error that the
    port was disabled, STALLED -- just as I saw under old NetBSD.

    I haven't built -current, or a more recent NetBSD, to see if their
    behaviour is any different when faced with this hub. Is it possible
    I need some sort of quirks entry for this device, which I can use as
    a USB1.x device fine? Or do I not even get that far?

    Here's the dmesg with uhubdebug and ehcidebug set to 1, with a few
    comments... (I may have added a few additional debug printf()s too)

    ehci0: <NEC uPD 720100 USB 2.0 controller> mem 0xfdffdc00-0xfdffdcff irq 10 at device 8.2 on pci1
            using shared irq10.
    ehci_init: start
    usb0: EHCI version 0.95
    ehci_init: sparams=0x2395
    usb0: wrong number of companions (2 != 0)

        This here is the PCI card, along with my hack mentioned.
        [ snip ... ]

    usb0: <NEC uPD 720100 USB 2.0 controller> on ehci0
    usb0: USB revision 2.0
    usbd_new_device bus=0xc1728000 port=0 depth=0 speed=0
    ehci_open: pipe=0xc1727580, addr=0, endpt=0 (0)
    usbd_new_device: adding unit addr=1, rev=200, class=9, subclass=0, protocol=1, maxpacket=64, len=18, speed=0
    uhub0: NEC EHCI root hub, class 9/0, rev 2.00/1.00, addr 1
    uhub0: 5 ports with 5 removable, self powered
    ehci_open: pipe=0xc1727400, addr=1, endpt=129 (1)
    usb_init_port: turn on port 1 power
    usb_init_port: turn on port 2 power
    usb_init_port: turn on port 3 power
    usb_init_port: turn on port 4 power
    usb_init_port: turn on port 5 power
    ehci_pcd: change=0x02
    uhub_explore: port 1 status 0x0501 0x0001
    uhub_explore: status change hub=1 port=1
    ehci after reset, status=0x00001005
    ehci port 1 reset, status = 0x00001005
    uhub speed is 3
    usbd_new_device bus=0xc1728000 port=1 depth=1 speed=3
    ehci_open: pipe=0xc1727180, addr=0, endpt=0 (1)
    ehci_device_ctrl_close: pipe=0xc1727180
    ehci_intr1: door bell
    uhub_explore: usb_new_device failed, error=STALLED
    uhub0: device problem, disabling port 1

    I can provide a dmesg with a higher debug level, if it would be desired.

    This is the same regardless of which of two USB2.0 PCI cards that I have
    I am using.
    The external hub that causes problems is seen with the USB1.x codes as

    Sep 28 23:12:34 chubby /kernel: uhub2: Cypress Semiconductor product 0x6560, class 9/0, rev 2.00/0.07, addr 2
    Sep 28 23:12:34 chubby /kernel: uhub2: 4 ports with 4 removable, self powered

    And I can provide a patch I've used to usbdevs* to make this a bit more
    descriptive...

    Under NetBSD of last year, I could unplug and somewhat quickly re-plug
    the external hub after the ehci port was disabled, and after a few tries,
    I'd get it to be attached as a functioning USB1.x hub while ehci was
    snoozing or something. Of course, the ehci support was clearly marked
    as beta then.

    Oh heck, below I've attached an echidebug=3 dmesg, as it includes a few
    <ACTIVE> and <HALTED> for anyone who can make sense out of it, with a
    failed attempt at trying a random quirk. I'll see about downloading some
    USB utilities while I'm online to nab more useful info.

    Thanks,
    Barry Bouwsma

    uhub_explore: port 1 status 0x0501 0x0001
    uhub_explore: status change hub=1 port=1
    ehci after reset, status=0x00001005
    ehci port 1 reset, status = 0x00001005
    uhub speed is 3
    usbd_new_device bus=0xc1728000 port=1 depth=1 speed=3
    ehci_open: pipe=0xc1727180, addr=0, endpt=0 (1)
    ehci_alloc_sqtd: allocating chunk
    ehci_alloc_sqtd_chain: start len=8
    ehci_check_intr: ex=0xc1729400
    ehci_idone: ex=0xc1729400
    ehci_idone: xfer=0xc1729400, pipe=0xc1727180 ready
    ehci_idone: len=8, actlen=8, status=0x40
    ehci_idone: error, addr=0, endpt=0x00, status 0x40<HALTED>
    QH(0xc174af80) at 0x00fedf80:
      link=0x00fedfc2<QH>
      endp=0x80082000
        addr=0x00 inact=0 endpt=0 eps=2 dtc=0 hrecl=0
        mpl=0x8 ctl=0 nrl=8
      endphub=0x40000000
        smask=0x00 cmask=0x00 huba=0x00 port=0 mult=1
      curqtd=0x00f6ef80<>
    Overlay qTD:
      next=0x00000001<T> altnext=0x00000011<T>
      status=0x00008c40: toggle=0 bytes=0x0 ioc=1 c_page=0x0
        cerr=3 pid=0 stat=0x40<HALTED>
      buffer[0]=0x00000000
      buffer[1]=0x00000000
      buffer[2]=0x00000000
      buffer[3]=0x00000000
      buffer[4]=0x00000000
    QTD(0xc174bfc0) at 0x00f6efc0:
      next=0x00f6ef40<> altnext=0x00f6ef40<>
      status=0x80000e00: toggle=1 bytes=0x0 ioc=0 c_page=0x0
        cerr=3 pid=2 stat=0x0
      buffer[0]=0x045823a8
      buffer[1]=0x00000000
      buffer[2]=0x00000000
      buffer[3]=0x00000000
      buffer[4]=0x00000000
    QTD(0xc174bf40) at 0x00f6ef40:
      next=0x00f6ef80<> altnext=0x00f6ef80<>
      status=0x00008d00: toggle=0 bytes=0x0 ioc=1 c_page=0x0
        cerr=3 pid=1 stat=0x0
      buffer[0]=0x04582398
      buffer[1]=0x00000000
      buffer[2]=0x00000000
      buffer[3]=0x00000000
      buffer[4]=0x00000000
    QTD(0xc174bf80) at 0x00f6ef80:
      next=0x00000001<T> altnext=0x00000001<T>
      status=0x00008c40: toggle=0 bytes=0x0 ioc=1 c_page=0x0
        cerr=3 pid=0 stat=0x40<HALTED>
      buffer[0]=0x00000000
      buffer[1]=0x00000000
      buffer[2]=0x00000000
      buffer[3]=0x00000000
      buffer[4]=0x00000000
    ehci_idone: ex=0xc1729400 done
    ehci_alloc_sqtd_chain: start len=2
    ehci_check_intr: ex=0xc1729400
    ehci_idone: ex=0xc1729400
    ehci_idone: xfer=0xc1729400, pipe=0xc1727180 ready
    ehci_idone: len=2, actlen=0, status=0x40
    ehci_idone: error, addr=0, endpt=0x00, status 0x40<HALTED>
    QH(0xc174af80) at 0x00fedf80:
      link=0x00fedfc2<QH>
      endp=0x80082000
        addr=0x00 inact=0 endpt=0 eps=2 dtc=0 hrecl=0
        mpl=0x8 ctl=0 nrl=8
      endphub=0x40000000
        smask=0x00 cmask=0x00 huba=0x00 port=0 mult=1
      curqtd=0x00f6efc0<>
    Overlay qTD:
      next=0x00f6ef40<> altnext=0x00f6ef50<>
      status=0x80028d40: toggle=1 bytes=0x2 ioc=1 c_page=0x0
        cerr=3 pid=1 stat=0x40<HALTED>
      buffer[0]=0x04582390
      buffer[1]=0x00000000
      buffer[2]=0x00000000
      buffer[3]=0x00000000
      buffer[4]=0x00000000
    QTD(0xc174bf80) at 0x00f6ef80:
      next=0x00f6efc0<> altnext=0x00f6efc0<>
      status=0x80000e00: toggle=1 bytes=0x0 ioc=0 c_page=0x0
        cerr=3 pid=2 stat=0x0
      buffer[0]=0x045823a8
      buffer[1]=0x00000000
      buffer[2]=0x00000000
      buffer[3]=0x00000000
      buffer[4]=0x00000000
    QTD(0xc174bfc0) at 0x00f6efc0:
      next=0x00f6ef40<> altnext=0x00f6ef40<>
      status=0x80028d40: toggle=1 bytes=0x2 ioc=1 c_page=0x0
        cerr=3 pid=1 stat=0x40<HALTED>
      buffer[0]=0x04582390
      buffer[1]=0x00000000
      buffer[2]=0x00000000
      buffer[3]=0x00000000
      buffer[4]=0x00000000
    QTD(0xc174bf40) at 0x00f6ef40:
      next=0x00000001<T> altnext=0x00000001<T>
      status=0x00008c80: toggle=0 bytes=0x0 ioc=1 c_page=0x0
        cerr=3 pid=0 stat=0x80<ACTIVE>
      buffer[0]=0x00000000
      buffer[1]=0x00000000
      buffer[2]=0x00000000
      buffer[3]=0x00000000
      buffer[4]=0x00000000
    ehci_idone: ex=0xc1729400 done
    ehci_alloc_sqtd_chain: start len=8
    ehci_check_intr: ex=0xc1729400
    ehci_idone: ex=0xc1729400
    ehci_idone: xfer=0xc1729400, pipe=0xc1727180 ready
    ehci_idone: len=8, actlen=8, status=0x40
    ehci_idone: error, addr=0, endpt=0x00, status 0x40<HALTED>
    QH(0xc174af80) at 0x00fedf80:
      link=0x00fedfc2<QH>
      endp=0x80082000
        addr=0x00 inact=0 endpt=0 eps=2 dtc=0 hrecl=0
        mpl=0x8 ctl=0 nrl=8
      endphub=0x40000000
        smask=0x00 cmask=0x00 huba=0x00 port=0 mult=1
      curqtd=0x00f6efc0<>
    Overlay qTD:
      next=0x00000001<T> altnext=0x00000011<T>
      status=0x00008c40: toggle=0 bytes=0x0 ioc=1 c_page=0x0
        cerr=3 pid=0 stat=0x40<HALTED>
      buffer[0]=0x00000000
      buffer[1]=0x00000000
      buffer[2]=0x00000000
      buffer[3]=0x00000000
      buffer[4]=0x00000000
    QTD(0xc174bf40) at 0x00f6ef40:
      next=0x00f6ef80<> altnext=0x00f6ef80<>
      status=0x80000e00: toggle=1 bytes=0x0 ioc=0 c_page=0x0
        cerr=3 pid=2 stat=0x0
      buffer[0]=0x045823a8
      buffer[1]=0x00000000
      buffer[2]=0x00000000
      buffer[3]=0x00000000
      buffer[4]=0x00000000
    QTD(0xc174bf80) at 0x00f6ef80:
      next=0x00f6efc0<> altnext=0x00f6efc0<>
      status=0x00008d00: toggle=0 bytes=0x0 ioc=1 c_page=0x0
        cerr=3 pid=1 stat=0x0
      buffer[0]=0x04582398
      buffer[1]=0x00000000
      buffer[2]=0x00000000
      buffer[3]=0x00000000
      buffer[4]=0x00000000
    QTD(0xc174bfc0) at 0x00f6efc0:
      next=0x00000001<T> altnext=0x00000001<T>
      status=0x00008c40: toggle=0 bytes=0x0 ioc=1 c_page=0x0
        cerr=3 pid=0 stat=0x40<HALTED>
      buffer[0]=0x00000000
      buffer[1]=0x00000000
      buffer[2]=0x00000000
      buffer[3]=0x00000000
      buffer[4]=0x00000000
    ehci_idone: ex=0xc1729400 done
    ehci_alloc_sqtd_chain: start len=2
    ehci_check_intr: ex=0xc1729400
    ehci_idone: ex=0xc1729400
    ehci_idone: xfer=0xc1729400, pipe=0xc1727180 ready
    ehci_idone: len=2, actlen=0, status=0x40
    ehci_idone: error, addr=0, endpt=0x00, status 0x40<HALTED>
    QH(0xc174af80) at 0x00fedf80:
      link=0x00fedfc2<QH>
      endp=0x80082000
        addr=0x00 inact=0 endpt=0 eps=2 dtc=0 hrecl=0
        mpl=0x8 ctl=0 nrl=8
      endphub=0x40000000
        smask=0x00 cmask=0x00 huba=0x00 port=0 mult=1
      curqtd=0x00f6ef40<>
    Overlay qTD:
      next=0x00f6ef80<> altnext=0x00f6ef90<>
      status=0x80028d40: toggle=1 bytes=0x2 ioc=1 c_page=0x0
        cerr=3 pid=1 stat=0x40<HALTED>
      buffer[0]=0x04582390
      buffer[1]=0x00000000
      buffer[2]=0x00000000
      buffer[3]=0x00000000
      buffer[4]=0x00000000
    QTD(0xc174bfc0) at 0x00f6efc0:
      next=0x00f6ef40<> altnext=0x00f6ef40<>
      status=0x80000e00: toggle=1 bytes=0x0 ioc=0 c_page=0x0
        cerr=3 pid=2 stat=0x0
      buffer[0]=0x045823a8
      buffer[1]=0x00000000
      buffer[2]=0x00000000
      buffer[3]=0x00000000
      buffer[4]=0x00000000
    QTD(0xc174bf40) at 0x00f6ef40:
      next=0x00f6ef80<> altnext=0x00f6ef80<>
      status=0x80028d40: toggle=1 bytes=0x2 ioc=1 c_page=0x0
        cerr=3 pid=1 stat=0x40<HALTED>
      buffer[0]=0x04582390
      buffer[1]=0x00000000
      buffer[2]=0x00000000
      buffer[3]=0x00000000
      buffer[4]=0x00000000
    QTD(0xc174bf80) at 0x00f6ef80:
      next=0x00000001<T> altnext=0x00000001<T>
      status=0x00008c80: toggle=0 bytes=0x0 ioc=1 c_page=0x0
        cerr=3 pid=0 stat=0x80<ACTIVE>
      buffer[0]=0x00000000
      buffer[1]=0x00000000
      buffer[2]=0x00000000
      buffer[3]=0x00000000
      buffer[4]=0x00000000
    ehci_idone: ex=0xc1729400 done
    ehci_alloc_sqtd_chain: start len=8
    ehci_check_intr: ex=0xc1729400
    ehci_idone: ex=0xc1729400
    ehci_idone: xfer=0xc1729400, pipe=0xc1727180 ready
    ehci_idone: len=8, actlen=8, status=0x40
    ehci_idone: error, addr=0, endpt=0x00, status 0x40<HALTED>
    QH(0xc174af80) at 0x00fedf80:
      link=0x00fedfc2<QH>
      endp=0x80082000
        addr=0x00 inact=0 endpt=0 eps=2 dtc=0 hrecl=0
        mpl=0x8 ctl=0 nrl=8
      endphub=0x40000000
        smask=0x00 cmask=0x00 huba=0x00 port=0 mult=1
      curqtd=0x00f6ef40<>
    Overlay qTD:
      next=0x00000001<T> altnext=0x00000011<T>
      status=0x00008c40: toggle=0 bytes=0x0 ioc=1 c_page=0x0
        cerr=3 pid=0 stat=0x40<HALTED>
      buffer[0]=0x00000000
      buffer[1]=0x00000000
      buffer[2]=0x00000000
      buffer[3]=0x00000000
      buffer[4]=0x00000000
    QTD(0xc174bf80) at 0x00f6ef80:
      next=0x00f6efc0<> altnext=0x00f6efc0<>
      status=0x80000e00: toggle=1 bytes=0x0 ioc=0 c_page=0x0
        cerr=3 pid=2 stat=0x0
      buffer[0]=0x045823a8
      buffer[1]=0x00000000
      buffer[2]=0x00000000
      buffer[3]=0x00000000
      buffer[4]=0x00000000
    QTD(0xc174bfc0) at 0x00f6efc0:
      next=0x00f6ef40<> altnext=0x00f6ef40<>
      status=0x00008d00: toggle=0 bytes=0x0 ioc=1 c_page=0x0
        cerr=3 pid=1 stat=0x0
      buffer[0]=0x04582398
      buffer[1]=0x00000000
      buffer[2]=0x00000000
      buffer[3]=0x00000000
      buffer[4]=0x00000000
    QTD(0xc174bf40) at 0x00f6ef40:
      next=0x00000001<T> altnext=0x00000001<T>
      status=0x00008c40: toggle=0 bytes=0x0 ioc=1 c_page=0x0
        cerr=3 pid=0 stat=0x40<HALTED>
      buffer[0]=0x00000000
      buffer[1]=0x00000000
      buffer[2]=0x00000000
      buffer[3]=0x00000000
      buffer[4]=0x00000000
    ehci_idone: ex=0xc1729400 done
    ehci_alloc_sqtd_chain: start len=2
    ehci_check_intr: ex=0xc1729400
    ehci_idone: ex=0xc1729400
    ehci_idone: xfer=0xc1729400, pipe=0xc1727180 ready
    ehci_idone: len=2, actlen=0, status=0x40
    ehci_idone: error, addr=0, endpt=0x00, status 0x40<HALTED>
    QH(0xc174af80) at 0x00fedf80:
      link=0x00fedfc2<QH>
      endp=0x80082000
        addr=0x00 inact=0 endpt=0 eps=2 dtc=0 hrecl=0
        mpl=0x8 ctl=0 nrl=8
      endphub=0x40000000
        smask=0x00 cmask=0x00 huba=0x00 port=0 mult=1
      curqtd=0x00f6ef80<>
    Overlay qTD:
      next=0x00f6efc0<> altnext=0x00f6efd0<>
      status=0x80028d40: toggle=1 bytes=0x2 ioc=1 c_page=0x0
        cerr=3 pid=1 stat=0x40<HALTED>
      buffer[0]=0x04582390
      buffer[1]=0x00000000
      buffer[2]=0x00000000
      buffer[3]=0x00000000
      buffer[4]=0x00000000
    QTD(0xc174bf40) at 0x00f6ef40:
      next=0x00f6ef80<> altnext=0x00f6ef80<>
      status=0x80000e00: toggle=1 bytes=0x0 ioc=0 c_page=0x0
        cerr=3 pid=2 stat=0x0
      buffer[0]=0x045823a8
      buffer[1]=0x00000000
      buffer[2]=0x00000000
      buffer[3]=0x00000000
      buffer[4]=0x00000000
    QTD(0xc174bf80) at 0x00f6ef80:
      next=0x00f6efc0<> altnext=0x00f6efc0<>
      status=0x80028d40: toggle=1 bytes=0x2 ioc=1 c_page=0x0
        cerr=3 pid=1 stat=0x40<HALTED>
      buffer[0]=0x04582390
      buffer[1]=0x00000000
      buffer[2]=0x00000000
      buffer[3]=0x00000000
      buffer[4]=0x00000000
    QTD(0xc174bfc0) at 0x00f6efc0:
      next=0x00000001<T> altnext=0x00000001<T>
      status=0x00008c80: toggle=0 bytes=0x0 ioc=1 c_page=0x0
        cerr=3 pid=0 stat=0x80<ACTIVE>
      buffer[0]=0x00000000
      buffer[1]=0x00000000
      buffer[2]=0x00000000
      buffer[3]=0x00000000
      buffer[4]=0x00000000
    ehci_idone: ex=0xc1729400 done
    ehci_device_ctrl_close: pipe=0xc1727180
    ehci_sync_hc: enter
    ehci_sync_hc: cmd=0x00080061 sts=0x00008000
    ehci_intr1: door bell
    ehci_sync_hc: cmd=0x00080021 sts=0x00008000
    ehci_sync_hc: exit
    uhub_explore: usb_new_device failed, error=STALLED
    uhub0: device problem, disabling port 1
    uhub_explore: port 2 status 0x0500 0x0000
    uhub_explore: port 3 status 0x0500 0x0000
    uhub_explore: port 4 status 0x0500 0x0000
    uhub_explore: port 5 status 0x0500 0x0000

    _______________________________________________
    freebsd-hackers@freebsd.org mailing list
    http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
    To unsubscribe, send any mail to "freebsd-hackers-unsubscribe@freebsd.org"


  • Next message: Q: "nForce MCP network driver - working"

    Relevant Pages