Kernel Cold-plug USB power issues, where to start looking

Hi there,

I’m new to debugging USB power issues in the Kernel, so I am looking for help in
understanding the sequence of events / where to continue looking:

My board is loosely based on the mangOH green, it is using Legato for wp76xx R12,
Linux kernel 3.18.122.

My issue is that on powering up the board, 2 devices directly connected to the HSIC host,
are not enumerated. The 2 devices are Ethernet (on HSIC) and an SD card reader.

I have 2 boards: one which exhibits the issue and one that does not.

The only differences that I can see from dmesg/logread are:

swi-mdm9x28-wp user.info kernel: [    1.141708] msm_hsic_host 7c00000.hsic_host: HSIC-USB in low power mode
swi-mdm9x28-wp user.info kernel: [    1.141916] msm_hsic_host 7c00000.hsic_host: HSIC-USB exited from low power mode
.
.
swi-mdm9x28-wp user.err kernel: [    6.530202] usb 1-1: device descriptor read/64, error -110

So with a bit of digging I see that msm_hsic_runtime_suspend() from ehci-msm-hsic.c is being called,
bu I know of no reason why msm_hsic_runtime_suspend(0 is getting called -
the USB controller or system should not be entering into suspend.

I suppose disabling USB sleep might help, but I still don’t understand why/how it’s being told to go to sleep.

Any pointers on where to look greatly received.

OK so after some more digging :
The system can put the USB into suspend/low power mode if it thinks that nothing is connected to it. So this is possibly connected to the read/64, error -110 error message though as that message appears over six seconds later this still begs the question(s)
“What is the initial cause ?” -
Where is the decision made to put the USB hub into low power made ?
Where in the code could the issue be seen first ?

So far half the remedies, that I have seen, for read/64, error -110 are to power down the board and disconnect the devices for a few minutes. Not really practical where everything in connected to tracks on a board, and I don’t know why solution should work.

The other half center on filters, shorter cables and using powered hubs which all tally with power/voltage drop issues.

At the moment I am still trying to rule out software/config issues.

Again, any hints on where in the code to look gratefully received(and may to stop my ramblings).

Thanks for your post. Please provide an update if you learn anything else. I’m not sure what the root cause of the descriptor read failures is.

Hi There,

Found out 1 thing. For GPIO6/Pin46 - EXTUIMSWITCHEN was enabled instead of Reset Out.

With it set to Reset Out or as a GPIO this error does not appear.

Now it looks like my next task is to stop the rest of the Kernel using Pin46/GPIO6 when I have it configured as a GPIO.

Hi David,

It looks like having EXTUIMSWITCHEN enabled was the cause of the read/64, error -110 error.

Best Regards,
Ian

1 Like