ODROID-C1/-C2 USB Detection only triggered by some devices dwc2
Alan Stern
stern at rowland.harvard.edu
Wed Jul 14 18:44:51 PDT 2021
On Thu, Jul 15, 2021 at 01:16:44AM +0200, Martin Blumenstingl wrote:
> Hi Minas,
>
> On Wed, Jul 14, 2021 at 5:27 PM Minas Harutyunyan
> <Minas.Harutyunyan at synopsys.com> wrote:
> >
> > Hi Martin,
> > Per our understanding this issue is because of power budget and
> > autosuspend functionality.
> Many thanks for doing this investigation!
>
> > Autosuspend. Please review this patch: "usb: core: hub: Disable
> > autosuspend for Cypress CY7C65632"
> >
> > https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git/commit/?h=usb-next&id=a7d8d1c7a7f73e780aa9ae74926ae5985b2f895f
> >
> > It's very similar to your case. Actually you already tested
> > usbcore.autosuspend=-1 and it's helped you.
> > Could you please develop same patch for your soldered hub and test it.
> I found that drivers/usb/core/hub.c already has an entry for Genesys
> Logic USB hubs.
> It uses HUB_QUIRK_CHECK_PORT_AUTOSUSPEND instead of
> HUB_QUIRK_DISABLE_AUTOSUSPEND though.
> So I wrote a patch to change that (I attached it to this mail for
> reference, I will submit it as a proper patch one I understand enough
> about this).
>
> With this patch applied all USB devices I have are auto-detected when
> hot-plugged.
Yeah, I suspect this patch will not be accepted. There are a _lot_ of
Genesys Logic hubs out there, and apparently none of them besides the
ones in your Odroid systems have trouble with runtime suspend.
> My doubt with this is that my desktop PC (using an ASUS B550-F
> motherboard) comes with a few of these USB hubs soldered down as well
> - and there the behavior is different.
> /: 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 3: Dev 2, If 0, Class=Hub, Driver=hub/4p, 480M
> ID 05e3:0610 Genesys Logic, Inc. Hub
> /sys/bus/usb/devices/1-3 /dev/bus/usb/001/002
> [...]
> |__ 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
>
> I plugged in the Corsair Voyager USB 3.0 drive which is not being
> detected on my Odroid-C1+ and instantly this shows up in my kernel
> log:
> usb 1-7.3: new high-speed USB device number 46 using xhci_hcd
> usb 1-7.3: New USB device found, idVendor=1b1c, idProduct=1a03,
> bcdDevice= a.00
> usb 1-7.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
> usb 1-7.3: Product: Voyager 3.0
> usb 1-7.3: Manufacturer: Corsair
>
> So I am wondering why it works there but not on my Odroid-C1, with the
> (only known) difference being the host controller (xhci_hcd vs dwc2)
> which is being used.
Indeed.
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
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.)
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.)
Alan Stern
More information about the linux-amlogic
mailing list