ODROID-C1/-C2 USB Detection only triggered by some devices dwc2

Martin Blumenstingl martin.blumenstingl at googlemail.com
Sun Jul 18 14:24:55 PDT 2021


Hi Alan,

sorry for being a bit slow to respond this time.

On Thu, Jul 15, 2021 at 3:44 AM Alan Stern <stern at rowland.harvard.edu> wrote:
[...]
> Martin, here's another test you can try, on both the Odroid and PC
> systems.  Boot with usb.autosuspend=-1 on the command line to disable
Please note that in my tests below I used usbcore.autosuspend=-1 (so
s/usb./usbcore./)
I am assuming that usb.autosuspend is a typo because it doesn't seem
to make a difference for me.
usbcore.autosuspend=-1 is the one you recommended earlier which did
work around the issue on Odroid-C1.

> default runtime suspend.  But then before plugging in the drive, start a
> usbmon trace and do:
>
>         echo 2 >/sys/bus/usb/devices/1-2/power/autosuspend
>
> to enable runtime suspend for the Genesys Logic hub.  (On the PC,
> replace the 1-2 with 1-5 or whatever the appropriate device path is for
> the GL hub.)
The steps on my PC are:
- boot with usbcore.autosuspend=-1 in the kernel cmdline (confirmed
using cat /proc/cmdline)
- start: cat /sys/kernel/debug/usb/usbmon/1u > 1u.mon-pc.out
- echo 2 > /sys/bus/usb/devices/1-7/power/autosuspend (which I chose
based on the lsusb output below)
- wait at least 5 seconds
- plug in my Corsair Voyager USB 3.0 flash drive
- wait one or two seconds until the device shows up in dmesg
- stop the cat command
- lsusb -vvt
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/10p, 480M
   ID 1d6b:0002 Linux Foundation 2.0 root hub
   /sys/bus/usb/devices/usb1  /dev/bus/usb/001/001
   [...]
    |__ Port 7: Dev 5, If 0, Class=Hub, Driver=hub/4p, 480M
       ID 05e3:0610 Genesys Logic, Inc. Hub
       /sys/bus/usb/devices/1-7  /dev/bus/usb/001/005
       |__ Port 3: Dev 10, If 0, Class=Mass Storage, Driver=usb-storage, 480M
           ID 1b1c:1a03 Corsair Voyager 3.0
           /sys/bus/usb/devices/1-7.3  /dev/bus/usb/001/010

Please note that virtually all USB2 devices are connected through hubs
on bus 01 port 01 on this motherboard.
So the 1u.mon-pc.out output probably contains information for other
devices than the ones which are relevant here as well.

Then on my Odroid-C1:
- boot with usbcore.autosuspend=-1 in the kernel cmdline (confirmed
using cat /proc/cmdline)
- start: cat /sys/kernel/debug/usb/usbmon/0u > 0u.mon-odroidc1.out
- echo 2 > /sys/bus/usb/devices/1-1/power/autosuspend (which I chose
based on the lsusb output below)
- wait at least 5 seconds
- plug in my Corsair Voyager USB 3.0 flash drive
- wait a few seconds, the device is *not* being detected (no sign on
life in dmesg)
- stop the cat command
- lsusb -vvt
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=dwc2/1p, 480M
   ID 1d6b:0002 Linux Foundation 2.0 root hub
   /sys/bus/usb/devices/usb1  /dev/bus/usb/001/001
   |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/4p, 480M
       ID 05e3:0610 Genesys Logic, Inc. Hub
       /sys/bus/usb/devices/1-1  /dev/bus/usb/001/002

>From what I can tell the outputs related to device 005 (on my PC) as
well as 002 (on my Odroid-C1) are identical up to the point where
Odroid-C1 is then just silent.
The first message to the USB bus is different between the two (001) in
both cases. If I had to guess then the difference comes to the device
number of the hub within the payload.

> Wait at least two seconds for the hub to go into runtime suspend before
> plugging in the Corsair drive and stopping the trace.  It might turn out
> that allowing the GL hub to suspend while keeping the DWC2 root hub
> active will make a difference.
>
> (The reason for doing this on the PC as well as on the Odroid is to make
> sure that the sequence of USB requests sent to the hub and responses
> received from it is exactly the same in both cases.)
If you want me to run any additional commands (either on my PC or
Odroid-C1) then please let me know.

In case it's of any help I attached the sysfs attributes for both
hubs. The only differences are:
- bcdDevice: 6060 (on my PC) vs 3298 (on Odroid-C1)
- urbnum: 72 (on my PC) vs 26 (on Odroid-C1)


As always: many thanks in advance, everyone's help on this is highly
appreciated!


Best regards,
Martin
-------------- next part --------------
authorized:1
avoid_reset_quirk:0
bcdDevice:6060
bConfigurationValue:1
bDeviceClass:09
bDeviceProtocol:02
bDeviceSubClass:00
bmAttributes:e0
bMaxPacketSize0:64
bMaxPower:100mA
bNumConfigurations:1
bNumInterfaces: 1
busnum:1
idProduct:0610
idVendor:05e3
ltm_capable:no
maxchild:4
product:USB2.0 Hub
quirks:0x0
removable:unknown
rx_lanes:1
speed:480
tx_lanes:1
urbnum:72
version: 2.00
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 1u.mon-pc.out
Type: application/octet-stream
Size: 91618 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-amlogic/attachments/20210718/43f40646/attachment.obj>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0u.mon-odroidc1.out
Type: application/octet-stream
Size: 639 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-amlogic/attachments/20210718/43f40646/attachment-0001.obj>
-------------- next part --------------
authorized:1
avoid_reset_quirk:0
bcdDevice:3298
bConfigurationValue:1
bDeviceClass:09
bDeviceProtocol:02
bDeviceSubClass:00
bmAttributes:e0
bMaxPacketSize0:64
bMaxPower:100mA
bNumConfigurations:1
bNumInterfaces: 1
busnum:1
idProduct:0610
idVendor:05e3
ltm_capable:no
maxchild:4
product:USB2.0 Hub
quirks:0x0
removable:unknown
rx_lanes:1
speed:480
tx_lanes:1
urbnum:26
version: 2.00


More information about the linux-amlogic mailing list