[U-Boot] [PATCH 0/3] usb: xhci: Add interrupt transfer support

Stefan Roese sr at denx.de
Thu Jun 29 06:13:41 UTC 2017


Hi Bin,

On 29.06.2017 07:39, Bin Meng wrote:
> Hi Stefan,
> 
> On Wed, Jun 28, 2017 at 8:47 PM, Stefan Roese <sr at denx.de> wrote:
>> Hi Bin,
>>
>> On 28.06.2017 14:11, Bin Meng wrote:
>>> On Wed, Jun 28, 2017 at 7:00 PM, Stefan Roese <sr at denx.de> wrote:
>>>> Hi Bin,
>>>>
>>>> On 26.06.2017 13:05, Bin Meng wrote:
>>>>> This series is the final series of the xHCI driver update.
>>>>>
>>>>> This adds the missing interrupt transfer support to xHCI driver, so
>>>>> that devices like USB keyboard that uses interrupt transfer when
>>>>> CONFIG_SYS_USB_EVENT_POLL is defined can work.
>>>>>
>>>>> Previous two series:
>>>>> [1]: usb: xhci: Fix USB xHCI support on Intel platform
>>>>> https://lists.denx.de/pipermail/u-boot/2017-June/296166.html
>>>>> [2]: usb: hub: Support USB 3.0 hubs
>>>>> https://lists.denx.de/pipermail/u-boot/2017-June/296284.html
>>>>>
>>>>> This series is available at u-boot-x86/xhci-working3 for testing.
>>>>
>>>> I'm using this git branch to test all your xHCI related patches
>>>> now. On my BayTrail platform I get these messages upon "usb reset"
>>>> scanning:
>>>>
>>>> => usb reset
>>>> resetting USB...
>>>> USB0:   Register 7000820 NbrPorts 7
>>>> Starting the controller
>>>> USB XHCI 1.00
>>>> scanning bus 0 for devices... cannot reset port 1!?
>>>> USB device descriptor short read (expected 18, got 8)
>>>> 5 USB Device(s) found
>>>>          scanning usb for storage devices... 1 Storage Device(s) found
>>>>
>>>> On the 2nd scan, the "cannot reset port 1" line is gone:
>>>>
>>>> => usb reset
>>>> resetting USB...
>>>> USB0:   Register 7000820 NbrPorts 7
>>>> Starting the controller
>>>> USB XHCI 1.00
>>>> scanning bus 0 for devices... USB device descriptor short read (expected 18, got 8)
>>>> 5 USB Device(s) found
>>>>          scanning usb for storage devices... 1 Storage Device(s) found
>>>>
>>>> All USB devices seem to be detected correctly though. Here the
>>>> logs:
>>>>
>>>> => usb tree
>>>> USB device tree:
>>>>     1  Hub (5 Gb/s, 0mA)
>>>>     |  U-Boot XHCI Host Controller
>>>>     |
>>>>     +-2  Hub (480 Mb/s, 100mA)
>>>>     |
>>>>     +-3  Hub (480 Mb/s, 2mA)
>>>>     | |
>>>>     | +-5  Mass Storage (480 Mb/s, 200mA)
>>>>     |      JetFlash Mass Storage Device 3281440601
>>>>     |
>>>>     +-4  Vendor specific (5 Gb/s, 64mA)
>>>>          Realtek USB 10/100/1000 LAN 000002000000
>>>>
>>>> => usb info
>>>> 1: Hub,  USB Revision 3.0
>>>>    - U-Boot XHCI Host Controller
>>>>    - Class: Hub
>>>>    - PacketSize: 512  Configurations: 1
>>>>    - Vendor: 0x0000  Product 0x0000 Version 1.0
>>>>      Configuration: 1
>>>>      - Interfaces: 1 Self Powered 0mA
>>>>        Interface: 0
>>>>        - Alternate Setting 0, Endpoints: 1
>>>>        - Class Hub
>>>>        - Endpoint 1 In Interrupt MaxPacket 8 Interval 255ms
>>>>
>>>> 2: Hub,  USB Revision 2.0
>>>>    - Class: Hub
>>>>    - PacketSize: 64  Configurations: 1
>>>>    - Vendor: 0x0409  Product 0x005a Version 1.0
>>>>      Configuration: 1
>>>>      - Interfaces: 1 Self Powered Remote Wakeup 100mA
>>>>        Interface: 0
>>>>        - Alternate Setting 0, Endpoints: 1
>>>>        - Class Hub
>>>>        - Endpoint 1 In Interrupt MaxPacket 1 Interval 12ms
>>>>
>>>> 3: Hub,  USB Revision 2.1
>>>>    - Class: Hub
>>>>    - PacketSize: 64  Configurations: 1
>>>>    - Vendor: 0x0424  Product 0x4604 Version 1.131
>>>>      Configuration: 1
>>>>      - Interfaces: 1 Self Powered Remote Wakeup 2mA
>>>>        Interface: 0
>>>>        - Alternate Setting 0, Endpoints: 1
>>>>        - Class Hub
>>>>        - Endpoint 1 In Interrupt MaxPacket 1 Interval 12ms
>>>>        - Endpoint 1 In Interrupt MaxPacket 1 Interval 12ms
>>>>
>>>> 5: Mass Storage,  USB Revision 2.10
>>>>    - JetFlash Mass Storage Device 3281440601
>>>>    - Class: (from Interface) Mass Storage
>>>>    - PacketSize: 64  Configurations: 1
>>>>    - Vendor: 0x8564  Product 0x1000 Version 16.117
>>>>      Configuration: 1
>>>>      - Interfaces: 1 Bus Powered 200mA
>>>>        Interface: 0
>>>>        - Alternate Setting 0, Endpoints: 2
>>>>        - Class Mass Storage, Transp. SCSI, Bulk only
>>>>        - Endpoint 2 Out Bulk MaxPacket 512
>>>>        - Endpoint 1 In Bulk MaxPacket 512
>>>>
>>>> 4: Vendor specific,  USB Revision 3.0
>>>>    - Realtek USB 10/100/1000 LAN 000002000000
>>>>    - Class: (from Interface) Vendor specific
>>>>    - PacketSize: 512  Configurations: 2
>>>>    - Vendor: 0x0bda  Product 0x8153 Version 48.0
>>>>      Configuration: 1
>>>>      - Interfaces: 1 Bus Powered Remote Wakeup 64mA
>>>>        Interface: 0
>>>>        - Alternate Setting 0, Endpoints: 3
>>>>        - Class Vendor specific
>>>>        - Endpoint 1 In Bulk MaxPacket 1024
>>>>        - Endpoint 2 Out Bulk MaxPacket 1024
>>>>        - Endpoint 3 In Interrupt MaxPacket 2 Interval 8ms
>>>>
>>>> Do you have any ideas about the scanning logs that I've noticed
>>>> above? Would it help if I provided some debug logs (-DDEBUG)
>>>> for this?
>>>
>>> "cannot reset port 1" message is annoying, but that may happen
>>> sometimes due to unstable power supply. I will see if we can mute it
>>> if it's not the final round of reset try.
>>
>> That would be good, thanks.
>>
>>> I am more concerned about
>>> the "USB device descriptor short read (expected 18, got 8)". This
>>> message indicates U-Boot cannot get the device descriptor during set
>>> configuration process. So did you manage to get all USB devices that
>>> are connected on your board enumerated?
>>
>> Might be that I'm missing some keyboard / mouse, which I'm not
>> using and not really aware of. One USB port is connected to a
>> KVM switch, enumberating such devices. Here the log from U-Boot
>> and Linux again:
>>
>> => usb reset
>> resetting USB...
>> USB0:   Register 7000820 NbrPorts 7
>> Starting the controller
>> USB XHCI 1.00
>> scanning bus 0 for devices... cannot reset port 1!?
>> USB device descriptor short read (expected 18, got 8)
>> 6 USB Device(s) found
>>         scanning usb for storage devices... 2 Storage Device(s) found
>> => usb tree
>> USB device tree:
>>    1  Hub (5 Gb/s, 0mA)
>>    |  U-Boot XHCI Host Controller
>>    |
>>    +-2  Hub (480 Mb/s, 100mA)
>>    |
>>    +-3  Mass Storage (480 Mb/s, 98mA)
>>    |    USBest Technology USB Mass Storage Device 09092207fbf0c4
>>    |
>>    +-4  Hub (480 Mb/s, 2mA)
>>    | |
>>    | +-6  Mass Storage (480 Mb/s, 200mA)
>>    |      JetFlash Mass Storage Device 3281440601
>>    |
>>    +-5  Vendor specific (5 Gb/s, 64mA)
>>         Realtek USB 10/100/1000 LAN 000002000000
>>
>>
>> $ lsusb -t
>> /:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/1p, 5000M
>>      |__ Port 1: Dev 2, If 0, Class=Vendor Specific Class, Driver=r8152, 5000M
>> /:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/6p, 480M
>>      |__ Port 2: Dev 2, If 0, Class=Hub, Driver=hub/4p, 480M
>>          |__ Port 4: Dev 4, If 0, Class=Hub, Driver=hub/4p, 12M
>>              |__ Port 1: Dev 6, If 1, Class=Human Interface Device, Driver=usbhid, 12M
>>              |__ Port 1: Dev 6, If 2, Class=Human Interface Device, Driver=usbhid, 12M
>>              |__ Port 1: Dev 6, If 0, Class=Human Interface Device, Driver=usbhid, 12M
>>      |__ Port 4: Dev 3, If 0, Class=Mass Storage, Driver=usb-storage, 480M
>>      |__ Port 5: Dev 5, If 0, Class=Hub, Driver=hub/4p, 480M
>>          |__ Port 1: Dev 7, If 0, Class=Mass Storage, Driver=usb-storage, 480M
>>
>>
>> Which event polling Kconfig option do I need to enable?
>>
> 
> The default one CONFIG_SYS_USB_EVENT_POLL should be OK. By comparing
> your U-Boot log and Linux one, I found the following devices were
> enumerated by Linux but not by U-Boot:
> 
>              |__ Port 1: Dev 6, If 1, Class=Human Interface Device,
> Driver=usbhid, 12M
>              |__ Port 1: Dev 6, If 2, Class=Human Interface Device,
> Driver=usbhid, 12M
>              |__ Port 1: Dev 6, If 0, Class=Human Interface Device,
> Driver=usbhid, 12M
> 
> These devices are full speed devices. I believe the reason is that
> U-Boot encounters "USB device descriptor short read (expected 18, got
> 8)" so it does  not continue the enumeration. As to why these full
> speed devices only return 8 bytes descriptors, this needs to be
> investigated. Which devices are they?

This is my KVM switch with its USB keyboard and mouse. When I unplug
this USB cable, this message does not appear while running "usb reset".

This also happen, when I only plug a USB mouse to this same USB
port:

=> usb reset
resetting USB...
USB0:   Register 7000820 NbrPorts 7
Starting the controller
USB XHCI 1.00
scanning bus 0 for devices... USB device descriptor short read (expected 18, got 8)
5 USB Device(s) found
       scanning usb for storage devices... 2 Storage Device(s) found
=> usb tree
USB device tree:
  1  Hub (5 Gb/s, 0mA)
  |  U-Boot XHCI Host Controller 
  |
  +-2  Mass Storage (480 Mb/s, 98mA)
  |    USBest Technology USB Mass Storage Device 09092207fbf0c4
  |  
  +-3  Hub (480 Mb/s, 2mA)
  | |
  | +-5  Mass Storage (480 Mb/s, 200mA)
  |      JetFlash Mass Storage Device 3281440601
  |    
  +-4  Vendor specific (5 Gb/s, 64mA)
       Realtek USB 10/100/1000 LAN 000002000000


$ lsusb -t
/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/1p, 5000M
    |__ Port 1: Dev 2, If 0, Class=Vendor Specific Class, Driver=r8152, 5000M
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/6p, 480M
    |__ Port 2: Dev 2, If 0, Class=Human Interface Device, Driver=usbhid, 12M
    |__ Port 2: Dev 2, If 1, Class=Human Interface Device, Driver=usbhid, 12M
    |__ Port 4: Dev 3, If 0, Class=Mass Storage, Driver=usb-storage, 480M
    |__ Port 5: Dev 4, If 0, Class=Hub, Driver=hub/4p, 480M
        |__ Port 1: Dev 5, If 0, Class=Mass Storage, Driver=usb-storage, 480M


Can you reproduce this on your MinnowMax? Would it help, if I
would enable some traces (-DDEBUG)?

Thanks,
Stefan


More information about the U-Boot mailing list