This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

Linux/TUSB7340: USB2.0 and lower failure / Xilinx ZynqMP / PCIe root / xhci-hcd Linux driver

Part Number: TUSB7340
Other Parts Discussed in Thread: TUSB7320

Tool/software: Linux

Support Path: /Product/Development and troubleshooting/

Hello everyone,


I'm experiencing some problems with USB2.0 (and lower) peripherals attached to the TUSB7340 USB3.0 xHCI host controller ports. The hardware platform is a custom board based on Xilinx Zynq UltraScale+ MPSoC (7EV family) with PCIe root complex enabled within the Processing System (x1 link at 5 Gb/s). The USB3.0 devices (hub/storage) work just fine, but the slower ones are not enabled/present in the system. Linux kernel version is v4.9 (xilinx rel-2017.3) with xhci-hcd driver used for USB3.0 host (arm64/xilinx_zynqmp_defconfig). Output from lspci and lsusb tools is provided below:

00:00.0 PCI bridge: Xilinx Corporation Device 7012 (prog-if 00 [Normal decode])
    Flags: bus master, fast devsel, latency 0, IRQ 255
    Memory at e0100000 (32-bit, prefetchable) [size=8K]
    Bus: primary=00, secondary=01, subordinate=0c, sec-latency=0
    I/O behind bridge: 00000000-00000fff
    Memory behind bridge: e0000000-e00fffff
    Capabilities: [40] Power Management version 3
    Capabilities: [60] Express Root Port (Slot-), MSI 00
    Capabilities: [100] Device Serial Number 00-00-00-00-00-00-00-00
    Capabilities: [10c] Virtual Channel
    Capabilities: [128] Vendor Specific Information: ID=1234 Rev=1 Len=018 <?>

01:00.0 USB controller: Texas Instruments TUSB73x0 SuperSpeed USB 3.0 xHCI Host Controller (rev 02) (prog-if 30 [XHCI])
    Flags: bus master, fast devsel, latency 0, IRQ 54
    Memory at e0000000 (64-bit, non-prefetchable) [size=64K]
    Memory at e0010000 (64-bit, non-prefetchable) [size=8K]
    Capabilities: [40] Power Management version 3
    Capabilities: [48] MSI: Enable+ Count=1/8 Maskable- 64bit+
    Capabilities: [70] Express Endpoint, MSI 00
    Capabilities: [c0] MSI-X: Enable- Count=8 Masked-
    Capabilities: [100] Advanced Error Reporting
    Capabilities: [150] Device Serial Number 08-00-28-00-00-20-00-00
    Kernel driver in use: xhci_hcd

 

:~# lsusb -t
/:  Bus 02.Port 1: Dev 1, class="root_hub", Driver=xhci_hcd/4p, 5000M
/:  Bus 01.Port 1: Dev 1, class="root_hub", Driver=xhci_hcd/4p, 480M

There is completely no kernel messages produced when keyboard or mouse are attached, but in case of usb storage/hub I can see some kernel output attaching to 2 of 4 available ports like that:

[    3.440737] usb 1-2: new high-speed USB device number 2 using xhci_hcd
[    3.680735] usb 1-2: new high-speed USB device number 3 using xhci_hcd
[    4.115517] usb 1-2: new high-speed USB device number 4 using xhci_hcd
[    4.122036] usb 1-2: Device not responding to setup address.
[    4.332804] usb 1-2: Device not responding to setup address.
[    4.544763] usb 1-2: device not accepting address 4, error -71
[    4.668759] usb 1-2: new high-speed USB device number 5 using xhci_hcd
[    4.676095] usb 1-2: Device not responding to setup address.
[    4.888798] usb 1-2: Device not responding to setup address.
[    5.100758] usb 1-2: device not accepting address 5, error -71
[    5.111658] usb usb1-port2: unable to enumerate USB device

As reference, we have another one board with TUSB7320 host (yes, slightly different part with 2 ports only) based on Xilinx Zynq-7000 chip with PCIe root subsystem enabled in the FPGA fabric running on the same Linux kernel (built for armv7/xilinx_zynq_defconfig) with the same xhci-hcd driver used. And in this case no issues are reported: all kinds of USB peripherals work well. From system point of view, the only difference in USB3.0 design between these 2 boards lies in PCIe root complex implementation: "soft" IP for Zynq-7000 vs. "hardened" block for Zynq US+ MPSoC. The Linux drivers for these 2 PCIe hosts are also different: pcie-xilinx.c for soft PCIe host vs. pcie-xilinx-nwl.c for the integrated version in MPSoC chip. The configuration parameters for the both PCIe hosts are absolutely the same.


Do you have any thoughts on this?

Kind regards,
Igor

  • Hello Igor,

    Am I just wondering if you observed this problem using some specific devices? I mean it is failing with specific mouse/keyboard or it fails with any USB 2.0 device?

    We never observed this problem before could you please send us your platform schematic for a sanity check? please note TUSB7340 and TUSB7320 are exactly the same (except by the number of ports).

    Regards,
    Roberto
  • Hi Roberto,

    this problem is observed with all kinds of USB2.0 (and lower) devices. As I mentioned earlier, connecting some of them (USB2.0 hub or USB2.0 storage) results in kernel log errors (looks like a device enumeration issue), but complete silence is observed in case of USB keyboard/mouse attached.

    How can I PM you to share the schematics?

    Regards,
    Igor
  • Hello Igor,

    Could you please verify if you have the same problem using our evaluation board? if it's possible could you can verify using a Windows environment.

    Regards,
    Roberto
  • Hello Roberto,

    unfortunately, we don't have the evaluation board for TUSB7340. If you are still open to check the board schematics, please tell me the way I can share it with you. I'm not allowed to post it on the forum with public access.

    Kind regards,
    Igor
  • Update:

    the issue was caused by an inappropriate resistor (90,9k instead of 9,09k) placed between R1EXT and R1EXTRTN lines. Thank you, Roberto, for your support. The problem is solved.

    Regards,
    Igor