Bug#918800: PROBLEM: USB 3.0 NIC operates only at USB 2.0 speed on Odroid HC1
Hi,
The Odroid HC1 ARM board contains a JMicron JMS578 USB 3.0 to SATA
Bridge and a Realtek Gbps Ethernet device connected to an USB 3.0 host.
The SATA bridge works correctly at USB 3.0 speed, but the Ethernet
controller operates only at USB 2.0 speed. I tracked this behaviour down
to the CONFIG_USB_XHCI_PLATFORM kernel configuration.
The r8152 driver operates only at 480M when using
CONFIG_USB_XHCI_PLATFORM=m:
root@odroid:~# lsusb -t
/: Bus 06.Port 1: Dev 1, Class=root_hub, Driver=xhci-hcd/1p, 5000M
/: Bus 05.Port 1: Dev 1, Class=root_hub, Driver=xhci-hcd/1p, 480M
|__ Port 1: Dev 2, If 0, Class=Vendor Specific Class, Driver=r8152, 480M
/: Bus 04.Port 1: Dev 1, Class=root_hub, Driver=xhci-hcd/1p, 5000M
|__ Port 1: Dev 2, If 0, Class=Mass Storage, Driver=uas, 5000M
/: Bus 03.Port 1: Dev 1, Class=root_hub, Driver=xhci-hcd/1p, 480M
/: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=exynos-ohci/3p, 12M
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=exynos-ehci/3p, 480M
root@odroid:~# dmesg | grep 'usb \?[56]\|dwc3'
[ 3.538934] exynos-dwc3 soc:usb3-0: Linked as a consumer to regulator.9
[ 3.544589] exynos-dwc3 soc:usb3-0: Linked as a consumer to regulator.11
[ 3.551085] dwc3 12000000.dwc3: Failed to get clk 'ref': -2
[ 3.557547] exynos-dwc3 soc:usb3-1: Linked as a consumer to regulator.9
[ 3.563377] exynos-dwc3 soc:usb3-1: Linked as a consumer to regulator.11
[ 3.569830] dwc3 12400000.dwc3: Failed to get clk 'ref': -2
[ 4.518245] usb usb5: New USB device found, idVendor=1d6b, idProduct=0002, bcdDevice= 5.00
[ 4.526207] usb usb5: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[ 4.533316] usb usb5: Product: xHCI Host Controller
[ 4.538166] usb usb5: Manufacturer: Linux 5.0.0-rc4 xhci-hcd
[ 4.543807] usb usb5: SerialNumber: xhci-hcd.1.auto
[ 4.576021] usb usb6: We don't know the algorithms for LPM for this host, disabling LPM.
[ 4.584112] usb usb6: New USB device found, idVendor=1d6b, idProduct=0003, bcdDevice= 5.00
[ 4.592349] usb usb6: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[ 4.599430] usb usb6: Product: xHCI Host Controller
[ 4.604286] usb usb6: Manufacturer: Linux 5.0.0-rc4 xhci-hcd
[ 4.609917] usb usb6: SerialNumber: xhci-hcd.1.auto
[ 5.103725] usb 5-1: new high-speed USB device number 2 using xhci-hcd
[ 5.256710] usb 5-1: New USB device found, idVendor=0bda, idProduct=8153, bcdDevice=30.00
[ 5.263420] usb 5-1: New USB device strings: Mfr=1, Product=2, SerialNumber=6
[ 5.270526] usb 5-1: Product: USB 10/100/1000 LAN
[ 5.275203] usb 5-1: Manufacturer: Realtek
[ 5.279274] usb 5-1: SerialNumber: 000001000000
[ 5.504131] usb 5-1: reset high-speed USB device number 2 using xhci-hcd
When changing to CONFIG_USB_XHCI_PLATFORM=y, it works as expected:
root@odroid:~# lsusb -t
/: Bus 06.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 05.Port 1: Dev 1, Class=root_hub, Driver=xhci-hcd/1p, 480M
/: Bus 04.Port 1: Dev 1, Class=root_hub, Driver=xhci-hcd/1p, 5000M
|__ Port 1: Dev 2, If 0, Class=Mass Storage, Driver=uas, 5000M
/: Bus 03.Port 1: Dev 1, Class=root_hub, Driver=xhci-hcd/1p, 480M
/: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=exynos-ohci/3p, 12M
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=exynos-ehci/3p, 480M
root@odroid:~# dmesg | grep 'usb \?[56]\|dwc3'
[ 3.572120] exynos-dwc3 soc:usb3-0: Linked as a consumer to regulator.9
[ 3.577802] exynos-dwc3 soc:usb3-0: Linked as a consumer to regulator.11
[ 3.584308] dwc3 12000000.dwc3: Failed to get clk 'ref': -2
[ 3.723387] exynos-dwc3 soc:usb3-1: Linked as a consumer to regulator.9
[ 3.729518] exynos-dwc3 soc:usb3-1: Linked as a consumer to regulator.11
[ 3.735952] dwc3 12400000.dwc3: Failed to get clk 'ref': -2
[ 3.769931] usb usb5: New USB device found, idVendor=1d6b, idProduct=0002, bcdDevice= 5.00
[ 3.777877] usb usb5: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[ 3.785068] usb usb5: Product: xHCI Host Controller
[ 3.789919] usb usb5: Manufacturer: Linux 5.0.0-rc4 xhci-hcd
[ 3.795551] usb usb5: SerialNumber: xhci-hcd.1.auto
[ 3.827760] usb usb6: We don't know the algorithms for LPM for this host, disabling LPM.
[ 3.835868] usb usb6: New USB device found, idVendor=1d6b, idProduct=0003, bcdDevice= 5.00
[ 3.843995] usb usb6: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[ 3.851185] usb usb6: Product: xHCI Host Controller
[ 3.856036] usb usb6: Manufacturer: Linux 5.0.0-rc4 xhci-hcd
[ 3.861669] usb usb6: SerialNumber: xhci-hcd.1.auto
[ 5.024304] usb 6-1: new SuperSpeed Gen 1 USB device number 2 using xhci-hcd
[ 5.049333] usb 6-1: New USB device found, idVendor=0bda, idProduct=8153, bcdDevice=30.00
[ 5.056049] usb 6-1: New USB device strings: Mfr=1, Product=2, SerialNumber=6
[ 5.063154] usb 6-1: Product: USB 10/100/1000 LAN
[ 5.067829] usb 6-1: Manufacturer: Realtek
[ 5.071901] usb 6-1: SerialNumber: 000001000000
[ 5.299971] usb 6-1: reset SuperSpeed Gen 1 USB device number 2 using xhci-hcd
root@odroid:~# uname -a
Linux odroid 5.0.0-rc4 #44 SMP PREEMPT Sun Jan 27 13:46:17 UTC 2019 armv7l GNU/Linux
I reproduced this behaviour with kernel 5.0-rc4, 4.20, 4.19 (from
Debian), and 4.14. You can probably pick any kernel config as basis. I
used odroidxu4_defconfig (from Hardkernel's linux repository) and the
config from Debian testing.
I initially reported this issue in Debian: h
ttps://bugs.debian.org/918800
Let me know if you need more information or if I can help
debugging/testing.
Cheers,
Benjamin
Reply to: