rk3588(CM3588) USB issues

Michael Zimmermann sigmaepsilon92 at gmail.com
Thu Aug 1 12:05:03 PDT 2024


Hi,

I have a friendlyelec CM3588 and USB doesn't quite seem to work. I
started with 6.8 but am now mostly testing with 6.11-rc1 since it
fixed the typec ports and pcie bifurcation and both of them seem to
have issues. I'm using fedora coreOS 40 with a self compiled
mainline-mcuboot which simply adds a config and dtb for that board. I
tried many different situations and I'll list a few but here are the
symptoms that can happen when a device is already connected before
powering on the SoC:

1) The system dies after these log lines:
[    6.446287] hub 1-0:1.0: USB hub found
[    6.446713] hub 1-0:1.0: 1 port detected
No watchdog will trigger, the power button doesn't work.

2) The watchdog complains after the same lines as in 1, but the system
is still stuck:
[   36.025461] Modules linked in: dw_mmc(+) phy_rockchip_usbdp(+)
nvme_core rockchip_saradc phy_rockchip_naneng_combphy
phy_rockchip_snps_pcie3 industrialio_triggered_buffer
nvmem_rockchip_otp rtc_hym8563(+) rockchip_dfi typec pl330 kfifo_buf
dw_wdt nvme_auth dwc3 phy_rockchip_inno_usb2 ohci_platform udc_core
adc_keys pwm_rockchip industrialio ohci_hcd ehci_platform ulpi
cpufreq_dt be2iscsi bnx2i cnic uio cxgb4i cxgb4 tls cxgb3i cxgb3 mdio
libcxgbi libcxgb qla4xxx iscsi_boot_sysfs iscsi_tcp libiscsi_tcp
libiscsi scsi_transport_iscsi scsi_dh_rdac scsi_dh_emc scsi_dh_alua
ip6_tables ip_tables fuse dm_multipath

3) The system boots fine but USB doesn't work and the system is
spammed with these logs:
[   29.439659] usb usb6-port1: Cannot enable. Maybe the USB cable is bad?
[   30.583618] usb usb6-port1: Cannot enable. Maybe the USB cable is bad?
[   31.727508] usb usb6-port1: Cannot enable. Maybe the USB cable is bad?

Things I have tried: using an unpowered USB3-hub, using a powered
USB3-hub. Connecting USB3 devices to the USB2 port and vice-versa.
Below only list test results which were done through a powered hub to
exclude skewed results due to power issues.

Keep in mind that the CM3588 has 4 USB ports:
- typeC(which I am not testing)
- USB2
- USB3A
- USB3A connected to the SoCs second typeC port. In the results below
I'll call this USB3AC

I also don't have any low-power usb3 dongles or usb3 drives whose
controllers are expensive enough that I trust them for these tests, So
I'm mostly testing with my Pixel8.

Some test results:

1) Boot with Pixel8 connected to USB3AC. The behavior is random.
Sometimes I have this:
...
[    6.237348] ohci-platform fc840000.usb: Generic Platform OHCI controller
[    6.238187] ohci-platform fc840000.usb: new USB bus registered,
assigned bus number 1
[    6.239009] ohci-platform fc840000.usb: irq 42, io mem 0xfc840000
[    6.242667] ehci-platform fc800000.usb: EHCI Host Controller
[    6.244480] ehci-platform fc800000.usb: new USB bus registered,
assigned bus number 2
[    6.245294] ehci-platform fc800000.usb: irq 44, io mem 0xfc800000
[    6.251160] ehci-platform fc880000.usb: EHCI Host Controller
[    6.251694] ohci-platform fc8c0000.usb: Generic Platform OHCI controller
[    6.252503] ohci-platform fc8c0000.usb: new USB bus registered,
assigned bus number 3
[    6.253271] ohci-platform fc8c0000.usb: irq 46, io mem 0xfc8c0000
[    6.253643] ehci-platform fc800000.usb: USB 2.0 started, EHCI 1.00
[    6.253850] ehci-platform fc880000.usb: new USB bus registered,
assigned bus number 4
[    6.254502] usb usb2: New USB device found, idVendor=1d6b,
idProduct=0002, bcdDevice= 6.11
[    6.255121] ehci-platform fc880000.usb: irq 47, io mem 0xfc880000
[    6.255777] usb usb2: New USB device strings: Mfr=3, Product=2,
SerialNumber=1
[    6.256967] usb usb2: Product: EHCI Host Controller
[    6.257407] usb usb2: Manufacturer: Linux
6.11.0-0.rc1.20240729gitdc1c8034e31b.16.fc41.aarch64 ehci_hcd
[    6.258231] usb usb2: SerialNumber: fc800000.usb
[    6.259129] hub 2-0:1.0: USB hub found
[    6.259521] hub 2-0:1.0: 1 port detected
[    6.263349] ehci-platform fc880000.usb: USB 2.0 started, EHCI 1.00
[    6.264046] usb usb4: New USB device found, idVendor=1d6b,
idProduct=0002, bcdDevice= 6.11
[    6.264794] usb usb4: New USB device strings: Mfr=3, Product=2,
SerialNumber=1
[    6.265436] usb usb4: Product: EHCI Host Controller
[    6.265867] usb usb4: Manufacturer: Linux
6.11.0-0.rc1.20240729gitdc1c8034e31b.16.fc41.aarch64 ehci_hcd
[    6.266695] usb usb4: SerialNumber: fc880000.usb
[    6.268464] hub 4-0:1.0: USB hub found
[    6.268876] hub 4-0:1.0: 1 port detected
[    6.297227] usb usb1: New USB device found, idVendor=1d6b,
idProduct=0001, bcdDevice= 6.11
[    6.297982] usb usb1: New USB device strings: Mfr=3, Product=2,
SerialNumber=1
[    6.298627] usb usb1: Product: Generic Platform OHCI controller
[    6.299148] usb usb1: Manufacturer: Linux
6.11.0-0.rc1.20240729gitdc1c8034e31b.16.fc41.aarch64 ohci_hcd
[    6.299976] usb usb1: SerialNumber: fc840000.usb
[    6.301706] hub 1-0:1.0: USB hub found
[    6.302069] hub 1-0:1.0: 1 port detected
[    6.311456] usb usb3: New USB device found, idVendor=1d6b,
idProduct=0001, bcdDevice= 6.11
[    6.312198] usb usb3: New USB device strings: Mfr=3, Product=2,
SerialNumber=1
[    6.312845] usb usb3: Product: Generic Platform OHCI controller
[    6.313371] usb usb3: Manufacturer: Linux
6.11.0-0.rc1.20240729gitdc1c8034e31b.16.fc41.aarch64 ohci_hcd
[    6.314206] usb usb3: SerialNumber: fc8c0000.usb
[    6.315073] hub 3-0:1.0: USB hub found
[    6.315457] hub 3-0:1.0: 1 port detected
[    6.316795] sdhci: Secure Digital Host Controller Interface driver
[    6.317390] sdhci: Copyright(c) Pierre Ossman
[    6.325998] Synopsys Designware Multimedia Card Interface Driver
[    6.335776] dma-pl330 fea10000.dma-controller: Loaded driver for
PL330 DMAC-241330
[    6.336514] dma-pl330 fea10000.dma-controller:
DBUFF-128x8bytes Num_Chans-8 Num_Peri-32 Num_Events-16
[    6.366285] sdhci-pltfm: SDHCI platform and OF driver helper
[   36.026322] watchdog: Watchdog detected hard LOCKUP on cpu 5
[   36.026837] Modules linked in: phy_rockchip_usbdp(+) typec
phy_rockchip_naneng_combphy(+) sdhci_pltfm phy_rockchip_snps_pcie3
dw_mmc_rockchip nvme_core(+) rockchip_saradc rockchip_dfi dw_mmc_pltfm
industrialio_triggered_buffer cqhci pl330(+) dw_mmc kfifo_buf sdhci
dwc3 nvme_auth ehci_platform phy_rockchip_inno_usb2 pwm_rockchip
adc_keys cpufreq_dt udc_core industrialio ulpi ohci_platform ohci_hcd
be2iscsi bnx2i cnic uio cxgb4i cxgb4 tls cxgb3i cxgb3 mdio libcxgbi
libcxgb qla4xxx iscsi_boot_sysfs iscsi_tcp libiscsi_tcp libiscsi
scsi_transport_iscsi scsi_dh_rdac scsi_dh_emc scsi_dh_alua ip6_tables
ip_tables fuse dm_multipath
[   36.029321] watchdog: Watchdog detected hard LOCKUP on cpu 0
[   36.031733] Sending NMI from CPU 4 to CPUs 5:
[   36.032228] Modules linked in: phy_rockchip_usbdp(+) typec
phy_rockchip_naneng_combphy(+) sdhci_pltfm phy_rockchip_snps_pcie3
dw_mmc_rockchip nvme_core(+) rockchip_saradc rockchip_dfi dw_mmc_pltfm
industrialio_triggered_buffer cqhci pl330(+) dw_mmc kfifo_buf sdhci
dwc3 nvme_auth ehci_platform phy_rockchip_inno_usb2 pwm_rockchip
adc_keys cpufreq_dt udc_core industrialio ulpi ohci_platform ohci_hcd
be2iscsi bnx2i cnic uio cxgb4i cxgb4 tls cxgb3i cxgb3 mdio libcxgbi
libcxgb qla4xxx iscsi_boot_sysfs iscsi_tcp libiscsi_tcp libiscsi
scsi_transport_iscsi scsi_dh_rdac scsi_dh_emc scsi_dh_alua ip6_tables
ip_tables fuse dm_multipath
[   66.371321] rcu: INFO: rcu_preempt detected stalls on CPUs/tasks:
[   66.371862] rcu:     0-...!: (0 ticks this GP) idle=47c0/0/0x0
softirq=1091/1091 fqs=0 (false positive?)
[   66.372678] rcu:     6-...!: (1 GPs behind)
idle=7b84/1/0x4000000000000000 softirq=1557/1558 fqs=0
[   66.373447] rcu:     (detected by 4, t=60004 jiffies, g=1689, q=29 ncpus=8)
[   66.374039] Sending NMI from CPU 4 to CPUs 0:
[   76.375676] Sending NMI from CPU 4 to CPUs 6:
[   86.377312] rcu: rcu_preempt kthread timer wakeup didn't happen for
80004 jiffies! g1689 f0x0 RCU_GP_WAIT_FQS(5) ->state=0x402
[   86.378313] rcu:     Possible timer handling issue on cpu=5 timer-softirq=315
[   86.378917] rcu: rcu_preempt kthread starved for 80009 jiffies!
g1689 f0x0 RCU_GP_WAIT_FQS(5) ->state=0x402 ->cpu=5
[   86.379834] rcu:     Unless rcu_preempt kthread gets sufficient CPU
time, OOM is now expected behavior.
[   86.380633] rcu: RCU grace-period kthread stack dump:
[   86.381077] task:rcu_preempt     state:I stack:0     pid:18
tgid:18    ppid:2      flags:0x00000008
[   86.381899] Call trace:
[   86.382119]  __switch_to+0xc4/0xe8
[   86.382432]  __schedule+0x2a0/0x798
[   86.382747]  schedule+0x3c/0xe0
[   86.383031]  schedule_timeout+0x9c/0x1a8
[   86.383382]  rcu_gp_fqs_loop+0x124/0x580
[   86.383733]  rcu_gp_kthread+0x180/0x200
[   86.384075]  kthread+0xf4/0x110
[   86.384359]  ret_from_fork+0x10/0x20
[   86.384681] rcu: Stack dump where RCU GP kthread last ran:
[   86.385163] Sending NMI from CPU 4 to CPUs 5:
...
and then it hangs. And sometimes it boots, doesn't detect a devices
and keeps spamming the log with "usb usb6-port1: Cannot enable. Maybe
the USB cable is bad?".

2) Boot without anything connected, then connect Pixel8 to USB3A: No
device detected, logs spammed with "usb usb6-port1: Cannot enable.
Maybe the USB cable is bad?".

3) Boot with Pixel8 connected to USB3AC: works just fine. Also works
when I connect it at runtime.

4) Boot with Pixel 8 connected to USB2 port:
...
[    6.331359] hub 4-0:1.0: USB hub found
[    6.331439] input: gpio-keys as /devices/platform/gpio-keys/input/input0
[    6.331756] hub 4-0:1.0: 1 port detected
[    6.334789] usb usb3: New USB device found, idVendor=1d6b,
idProduct=0001, bcdDevice= 6.11
[    6.335530] usb usb3: New USB device strings: Mfr=3, Product=2,
SerialNumber=1
[    6.336176] usb usb3: Product: Generic Platform OHCI controller
[    6.336698] usb usb3: Manufacturer: Linux
6.11.0-0.rc1.20240729gitdc1c8034e31b.16.fc41.aarch64 ohci_hcd
[    6.337526] usb usb3: SerialNumber: fc8c0000.usb
[   36.022707] watchdog: Watchdog detected hard LOCKUP on cpu 2
[   36.023240] Modules linked in: rtc_hym8563(+) tcpm dw_mmc gpio_keys
pwm_fan phy_rockchip_usbdp nvme_core phy_rockchip_snps_pcie3
phy_rockchip_naneng_combphy typec cqhci dw_wdt nvmem_rockchip_otp
pl330(+) spi_rockchip sdhci kfifo_buf rockchip_dfi nvme_auth dwc3
phy_rockchip_inno_usb2 pwm_rockchip ohci_platform adc_keys udc_core
ohci_hcd industrialio ehci_platform ulpi cpufreq_dt be2iscsi bnx2i
cnic uio cxgb4i cxgb4 tls cxgb3i cxgb3 mdio libcxgbi libcxgb qla4xxx
iscsi_boot_sysfs iscsi_tcp libiscsi_tcp libiscsi scsi_transport_iscsi
scsi_dh_rdac scsi_dh_emc scsi_dh_alua ip6_tables ip_tables fuse
dm_multipath
[   36.024708] watchdog: Watchdog detected hard LOCKUP on cpu 4
[   36.028171] Sending NMI from CPU 1 to CPUs 2:
[   36.028669] Modules linked in: rtc_hym8563(+) tcpm dw_mmc gpio_keys
pwm_fan phy_rockchip_usbdp nvme_core phy_rockchip_snps_pcie3
phy_rockchip_naneng_combphy typec cqhci dw_wdt nvmem_rockchip_otp
pl330(+) spi_rockchip sdhci kfifo_buf rockchip_dfi nvme_auth dwc3
phy_rockchip_inno_usb2 pwm_rockchip ohci_platform adc_keys udc_core
ohci_hcd industrialio ehci_platform ulpi cpufreq_dt be2iscsi bnx2i
cnic uio cxgb4i cxgb4 tls cxgb3i cxgb3 mdio libcxgbi libcxgb qla4xxx
iscsi_boot_sysfs iscsi_tcp libiscsi_tcp libiscsi scsi_transport_iscsi
scsi_dh_rdac scsi_dh_emc scsi_dh_alua ip6_tables ip_tables fuse
dm_multipath
[   66.336708] rcu: INFO: rcu_preempt detected stalls on CPUs/tasks:
[   66.337272] rcu:     4-...0: (1 GPs behind)
idle=afbc/1/0x4000000000000000 softirq=1897/1898 fqs=6846
[   66.338089] rcu:     (detected by 1, t=60005 jiffies, g=1757, q=91 ncpus=8)
[   66.338699] Sending NMI from CPU 1 to CPUs 4:
[   76.340352] rcu: rcu_preempt kthread timer wakeup didn't happen for
17792 jiffies! g1757 f0x0 RCU_GP_WAIT_FQS(5) ->state=0x402
[   76.341374] rcu:     Possible timer handling issue on cpu=3
timer-softirq=6205
[   76.342000] rcu: rcu_preempt kthread starved for 17795 jiffies!
g1757 f0x0 RCU_GP_WAIT_FQS(5) ->state=0x402 ->cpu=3
[   76.342937] rcu:     Unless rcu_preempt kthread gets sufficient CPU
time, OOM is now expected behavior.
[   76.343754] rcu: RCU grace-period kthread stack dump:
[   76.344211] task:rcu_preempt     state:I stack:0     pid:18
tgid:18    ppid:2      flags:0x00000008
[   76.345056] Call trace:
[   76.345287]  __switch_to+0xc4/0xe8
[   76.345617]  __schedule+0x2a0/0x798
[   76.345948]  schedule+0x3c/0xe0
[   76.346247]  schedule_timeout+0x9c/0x1a8
[   76.346613]  rcu_gp_fqs_loop+0x124/0x580
[   76.346979]  rcu_gp_kthread+0x180/0x200
[   76.347337]  kthread+0xf4/0x110
[   76.347637]  ret_from_fork+0x10/0x20
[   76.347975] rcu: Stack dump where RCU GP kthread last ran:
[   76.348470] Sending NMI from CPU 1 to CPUs 3:
...
And then it hangs. It works if I connect it after booting.

5) USB2 stick works on all ports when connected at runtime.

6) Booting with USB2 stick connected to USB3A port: works
7) Booting with USB2 stick connected to USB3AC port: hangs after:
[    6.423500] hub 4-0:1.0: USB hub found
[    6.423870] hub 4-0:1.0: 1 port detected
[    6.602224] rtc-hym8563 6-0051: registered as rtc0
[    6.610981] rtc-hym8563 6-0051: setting system clock to
2024-08-01T18:56:52 UTC (1722538612)

8) Booting with USB2 stick connected to USB2 port: hangs after:
[    6.337067] hub 3-0:1.0: USB hub found
[    6.337494] hub 3-0:1.0: 1 port detected
[    6.338460] rtc-hym8563 6-0051: registered as rtc0
[    6.339744] rtc-hym8563 6-0051: setting system clock to
2024-08-01T18:59:56 UTC (1722538796)
[    6.372577] usb usb2: New USB device found, idVendor=1d6b,
idProduct=0001, bcdDevice= 6.11
[    6.373361] usb usb2: New USB device strings: Mfr=3, Product=2,
SerialNumber=1
[    6.374018] usb usb2: Product: Generic Platform OHCI controller
[    6.374573] usb usb2: Manufacturer: Linux
6.11.0-0.rc1.20240729gitdc1c8034e31b.16.fc41.aarch64 ohci_hcd
[    6.375431] usb usb2: SerialNumber: fc8c0000.usb

9) Boot with ch341-uart connected to USB2: works.

I hope that this is enough information for you to start investigating
the issue. I also hope this is reproducible on your side.

Thanks
Michael



More information about the linux-arm-kernel mailing list