Ubuntu fails to resume with error: device descriptor read/64, error -71

Asked by Haowen Liu

There is no external USB devices attached to the computer so it's most likely the built-in camera or card reader.
I have tried disabling autosuspend with usbcore as some of the older posts suggest. It's now disabled as in:

$ cat /sys/module/usbcore/parameters/autosuspend
-1

It doesn't solve the issue. And I'm not sure what logs to look into or provide here.

Question information

Language:
English Edit question
Status:
Solved
For:
Ubuntu Edit question
Assignee:
No assignee Edit question
Solved by:
actionparsnip
Solved:
Last query:
Last reply:
Revision history for this message
Haowen Liu (haowenl) said :
#1

Here are some logs that can be useful:

$ lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 006: ID 27c6:5395 Shenzhen Goodix Technology Co.,Ltd. Fingerprint Reader
Bus 001 Device 004: ID 8087:0029 Intel Corp. AX200 Bluetooth
Bus 001 Device 003: ID 046d:c548 Logitech, Inc. USB Receiver
Bus 001 Device 007: ID 0c45:671d Microdia Integrated_Webcam_HD
Bus 001 Device 002: ID 0483:5231 STMicroelectronics 87EC-XRGB
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

$ sudo dmesg | grep "usb"
...
[ 2.667605] usb 1-7: new full-speed USB device number 5 using xhci_hcd
[ 2.795717] usb 1-7: device descriptor read/64, error -71
[ 3.031701] usb 1-7: device descriptor read/64, error -71
[ 3.267565] usb 1-7: new full-speed USB device number 6 using xhci_hcd
[ 3.418251] usb 1-7: New USB device found, idVendor=27c6, idProduct=5395, bcdDevice= 1.00
[ 3.418264] usb 1-7: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 3.418269] usb 1-7: Product: Goodix Fingerprint Device
[ 3.418274] usb 1-7: Manufacturer: HTMicroelectronics
[ 3.418278] usb 1-7: SerialNumber: HTK32
...

Here it seems that it's not the webcam, nor the fingerprint reader. I guess it can be the SD card reader then because I definitely have it on my computer but it isn't listed. I don't use it tho. In that case, is it possible to disable it so that it doesn't interfere with resume? Or is it possible to make resume work despite this error (because it booted alright despite the error)?

Revision history for this message
actionparsnip (andrew-woodhead666) said :
#2

Possibly trythe boot option:

usbcore.autosuspend=-1

May help

Revision history for this message
Best actionparsnip (andrew-woodhead666) said :
#3

Could also try creating a file for udev like this:

sudo nano /etc/udev/rules.d/92-usb-input-no-powersave.rules

with the content of:

ACTION=="add", SUBSYSTEM=="input", TEST=="power/control", ATTR{power/control}="on"

Save the new file, then run:

sudo chown gdm:gdm /var/lib/gdm3/.config/92-usb-input-no-powersave.rules

Revision history for this message
Haowen Liu (haowenl) said :
#4

> usbcore.autosuspend=-1

Tried this with no luck. I also tried `usbcore.old_scheme_first=Y` with no luck.

> ACTION=="add", SUBSYSTEM=="input", TEST=="power/control", ATTR{power/control}="on"

I'll try this! But just curious, what does this do? Does this tell gdm to manage usb power control? Does it tell gdm to ignore usb power control errors? Maybe I'm just confused how gdm factors into this situation.

Also, another observation is that Linux 5.15.59 on Gentoo and Linux 5.19.10 on Fedora does not have this issue. Maybe Fedora did some extra configuration, but with my own Gentoo setup I'm pretty sure this works out of the box without any tweaking. I'll wait for Kinetic to see if everything just goes away with a newer kernel. If that's the case, maybe it's just one patch to backport.

Revision history for this message
actionparsnip (andrew-woodhead666) said :
#5

udev rules tells the kernel how to treat certain groups of hardware. It tells it to keep the power on rather than powering it down, in this case.

Revision history for this message
Haowen Liu (haowenl) said :
#6

I see. That makes a lot of sense! To build on that, if I can isolate which usb device is causing the problem, can do insert things like: ATTR{idVendor}=="xxxx", ATTR{idProduct}=="xxx", so that only one device is always powered on? Or is this a global kernel attribute that I can't isolate to just one device?

Revision history for this message
Haowen Liu (haowenl) said :
#7

Thanks actionparsnip, that solved my question.