Jump to content

USB3 port on ROCK64 is not functional since Linux 5.15


Recommended Posts

Since Linux 5.15, the USB3 port on ROCK64 does not work anymore with Armbian. The following kernel errors are shown:

usb 5-1: USB disconnect, device number 2
usb usb5-port1: Cannot enable. Maybe the USB cable is bad?

This has been reported by multiple users with multiple drives and cables, also disabling UAS does not help. lsusb shows the drive/device, but lsblk does not.


I know the ROCK64 is not currently supported by Armbian/has no maintainer, so I'm not expecting anything, just posting this as information and probably someone with more insights into the rockchip64 kernel build has an idea or workaround.

Link to comment
Share on other sites

v21.08.2 (Linux 5.10) is the latest which works. U-boot seems irrelevant since only updating the kernel breaks it and updating/flashing U-boot doesn't solve it.


It works on NanoPi NEO3 (same SoC), which probably indicates an issue with the device tree, if the USB3 host is the same?

Link to comment
Share on other sites

I'll take a look momentarily, the same patch enabled the usb3 for both the Rock64 and the Renegade, and it looks like mainline has that enabled by default but the patch still exists.  May or may not be a cause, I would hope redundant entries simply got ignored...

Link to comment
Share on other sites

So far no luck.  We do have a redundant patch adding the nodes, but that isn't the culprit.  The driver complains it doesn't have the host-drv pin defined, but it's shared with the USB2 (same situation between Renegade and Rock64)


EDIT:  A PHY driver was added back in the dark days before USB3 support by the kernel.  It is only used by the Rock64 and Renegade, (and apparently also the RK3328 Station M-whatever).  I've removed the entries and USB3 is working again now that mainline supports it without said special case driver.  I will open a PR tonight with the fixes.

Link to comment
Share on other sites

The only way I found to get it work was unbind the device and rebind it again:


# printf 'ff600000.dwc3' > /sys/bus/platform/drivers/dwc3/unbind
printf 'ff600000.usb' > /sys/bus/platform/drivers/dwc3/unbind
sleep 5
# printf 'ff600000.dwc3' > /sys/bus/platform/drivers/dwc3/bind
printf 'ff600000.usb' > /sys/bus/platform/drivers/dwc3/bind

If it is already working, I recommend syncing and powering off the device before (sync /dev/sdx; udisksctl power-off --block-device /dev/sdx), unbind it (if you want to do it for testing purposes).

Link to comment
Share on other sites

  • Igor locked this topic
This topic is now closed to further replies.
  • Create New...

Important Information

Terms of Use - Privacy Policy - Guidelines