[U-Boot] [PATCH 0/3] usb: xhci: Add interrupt transfer support
Stefan Roese
sr at denx.de
Thu Jun 29 09:03:17 UTC 2017
Hi Bin,
On 29.06.2017 11:01, Bin Meng wrote:
> Hi Stefan,
>
> On Thu, Jun 29, 2017 at 4:20 PM, Stefan Roese <sr at denx.de> wrote:
>> Hi Bin,
>>
>>
>> On 29.06.2017 10:09, Stefan Roese wrote:
>>>
>>> Hi Bin,
>>>
>>> On 29.06.2017 08:51, Bin Meng wrote:
>>>>
>>>> Hi Stefan,
>>>>
>>>> On Thu, Jun 29, 2017 at 2:13 PM, Stefan Roese <sr at denx.de> wrote:
>>>>>
>>>>> 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)?
>>>>
>>>>
>>>> I cannot reproduce this on MinnowMax. Is the KVM switch a USB 2.0 or
>>>> 3.0 hub?
>>>
>>>
>>> USB 2.0, its a pretty old device. But the example above is without the
>>> KVM and only with the USB mouse.
>>>
>>>> Is it possible to switch BayTrail SoC to EHCI and do the same
>>>> testing?
>>>
>>>
>>> Sure. After disabling CONFIG_USB_XHCI_HC I now get this error:
>>>
>>> => usb reset
>>> resetting USB...
>>> USB0: USB EHCI 1.00
>>> scanning bus 0 for devices... Divide Error
>>> EIP: 0010:[<7b587862>] EFLAGS: 00010246
>>> Original EIP :[<fff33862>]
>>> EAX: 00000040 EBX: 7b35db00 ECX: 00000380 EDX: 00000000
>>> ESI: 7b33af40 EDI: 7b33aa00 EBP: 7b35a640 ESP: 7b33a990
>>> DS: 0018 ES: 0018 FS: 0020 GS: 0018 SS: 0018
>>> CR0: 00000033 CR2: 00000000 CR3: 00000000 CR4: 00000600
>>> DR0: 00000000 DR1: 00000000 DR2: 00000000 DR3: 00000000
>>> DR6: ffff0ff0 DR7: 00000400
>>> Stack:
>>> 0x7b33a9d0 : 0x7b35dac0
>>> 0x7b33a9cc : 0x7b33af40
>>> 0x7b33a9c8 : 0x00000100
>>> 0x7b33a9c4 : 0x7b33ac80
>>> 0x7b33a9c0 : 0x00000001
>>> 0x7b33a9bc : 0x7b33ac80
>>> 0x7b33a9b8 : 0x7b35a680
>>> 0x7b33a9b4 : 0x00000000
>>> 0x7b33a9b0 : 0x00000040
>>> 0x7b33a9ac : 0x80000080
>>> 0x7b33a9a8 : 0x7b35db00
>>> 0x7b33a9a4 : 0x00000040
>>> 0x7b33a9a0 : 0x00000002
>>> 0x7b33a99c : 0x7b35dac0
>>> 0x7b33a998 : 0x1616cae2
>>> 0x7b33a994 : 0xc8159ec7
>>> --->0x7b33a990 : 0xc1b7c2b0
>>> 0x7b33a98c : 0x00010246
>>> 0x7b33a988 : 0x00000010
>>> 0x7b33a984 : 0x7b587862
>>> ### ERROR ### Please RESET the board ###
>>>
>>> EHCI worked before just fine. Does this (EHCI) work on your
>>> MinnoxMax?
>>
>>
>> I just installed an earlier version with EHCI still working. Here the
>> USB mouse is detected:
>>
>> => usb reset
>> resetting USB...
>> USB0: USB EHCI 1.00
>> scanning bus 0 for devices... 5 USB Device(s) found
>> => usb tree
>> USB device tree:
>> 1 Hub (480 Mb/s, 0mA)
>> | u-boot EHCI Host Controller
>> |
>> +-2 Hub (480 Mb/s, 0mA)
>> |
>> +-3 Vendor specific (480 Mb/s, 180mA)
>> | Realtek USB 10/100/1000 LAN 000002000000
>> |
>> +-5 Mass Storage (480 Mb/s, 98mA)
>> | USBest Technology USB Mass Storage Device 09092207fbf0c4
>> |
>> +-4 Human Interface (12 Mb/s, 98mA)
>> Logitech USB Receiver
>>
>> => usb info
>> 1: Hub, USB Revision 2.0
>> - u-boot EHCI Host Controller
>> - Class: Hub
>> - PacketSize: 64 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: 0x8087 Product 0x07e6 Version 0.23
>> Configuration: 1
>> - Interfaces: 1 Self Powered Remote Wakeup 0mA
>> Interface: 0
>> - Alternate Setting 0, Endpoints: 1
>> - Class Hub
>> - Endpoint 1 In Interrupt MaxPacket 1 Interval 12ms
>>
>> 3: Vendor specific, USB Revision 2.10
>> - Realtek USB 10/100/1000 LAN 000002000000
>> - Class: (from Interface) Vendor specific
>> - PacketSize: 64 Configurations: 2
>> - Vendor: 0x0bda Product 0x8153 Version 48.0
>> Configuration: 1
>> - Interfaces: 1 Bus Powered Remote Wakeup 180mA
>> Interface: 0
>> - Alternate Setting 0, Endpoints: 3
>> - Class Vendor specific
>> - Endpoint 1 In Bulk MaxPacket 512
>> - Endpoint 2 Out Bulk MaxPacket 512
>> - Endpoint 3 In Interrupt MaxPacket 2 Interval 8ms
>>
>> 5: Mass Storage, USB Revision 2.0
>> - USBest Technology USB Mass Storage Device 09092207fbf0c4
>> - Class: (from Interface) Mass Storage
>> - PacketSize: 64 Configurations: 1
>> - Vendor: 0x1307 Product 0x0165 Version 1.0
>> Configuration: 1
>> - Interfaces: 1 Bus Powered 98mA
>> Interface: 0
>> - Alternate Setting 0, Endpoints: 3
>> - Class Mass Storage, Transp. SCSI, Bulk only
>> - Endpoint 1 Out Bulk MaxPacket 512
>> - Endpoint 2 In Bulk MaxPacket 512
>> - Endpoint 3 In Interrupt MaxPacket 64 Interval 8ms
>>
>> 4: Human Interface, USB Revision 2.0
>> - Logitech USB Receiver
>> - Class: (from Interface) Human Interface
>> - PacketSize: 8 Configurations: 1
>> - Vendor: 0x046d Product 0xc52f Version 34.0
>> Configuration: 1
>> - Interfaces: 2 Bus Powered Remote Wakeup 98mA
>> - String: "RQR22.00_B0005"
>> Interface: 0
>> - Alternate Setting 0, Endpoints: 1
>> - Class Human Interface, Subclass: Boot Mouse
>> - Endpoint 1 In Interrupt MaxPacket 8 Interval 2ms
>> Interface: 1
>> - Alternate Setting 0, Endpoints: 1
>> - Class Human Interface, Subclass: None
>> - Endpoint 2 In Interrupt MaxPacket 20 Interval 2ms
>>
>
> Thank you very much for the information. This is very helpful. Looks
> your USB mouse is Logitech which is a full speed device. My testing
> was using a DELL mouse and keyboard which are both low speed devices.
> It's possible that xHCI driver still has some issues somewhere that
> does not handle LS/FS very well. After my patches it only works for my
> mouse and keyboard. I may have some clue, but since I don't have the
> device so I will rely on you to test that :)
Sure. I will gladly do some further tests.
BTW: The mouse is a Logitech M305, in case you might want to know. ;)
Thanks,
Stefan
More information about the U-Boot
mailing list