5

I've got an issue with some hardware in a test lab that, when the device being tested has an issue, it seems to "crash" the USB controller, causing the port to not show devices connected...however it gets worse. If the Server the device is attached to is rebooted, then it hangs during POST because Dell's lifecycle controller tries to enumerate the USB ports, and they don't respond.

I've tried a number of things, such as:

  • using powertop to try changing the port status (does nothing)
  • echo 0 > /sys/bus/usb/devices/usb1/bConfigurationValue, which is supposed to issue a reset.
  • changing /sys/bus/usb/devices/usb1/power/wakeup to enabled and disabled, no change
  • rummaging around in docs on ipmitool to see if there was a way to do it.
  • using modprobe -r usbhid to remove the usbhid kernel module, then reinstall

I've also tried

root@least-nest:/sys/bus/pci/drivers/ehci-pci# echo -n '0000:00:14.0' > unbind root@least-nest:/sys/bus/pci/drivers/ehci-pci# echo -n '0000:00:14.0' > bind

but got a message saying

-bash: echo: write error: No such device

None of these changes anything. It seems that it's nearly impossible to actually "reset" or power down a USB root hub/port. The only solution that seems to allow the server to reboot successfully is to use racadm to first disable the internal USB ports, then reboot the machine, bypassing the USB enumeration during POST.

Since rebooting is a drastic measure, is there any other way to basically "refresh" or "reload" the USB controllers built into the motherboard? I'm working in parallel to see if there's something with the device attached that could be looked at as well (powering it down remotely, etc) but the focus at the moment is to see if we can get around rebooting the machine first.

I should mention the OS of choice is Ubuntu 18.04 on R630 dells.

Thanks!

2
  • 2
    Something like this switchable USB hub might do what you want, assuming that it can still be controlled when the other device freezes. Another similar option would be to build your own version of this using relays that is controlled from a different USB controller so that it can still be used when this one freezes.
    – Moshe Katz
    Commented Aug 5, 2022 at 0:36
  • @MosheKatz Thanks. We do have switchable hubs attached, I think there are two likely issues at hand. the device being tested has an issue, which in turn messes up the USB system somewhere. Leaving the device attached and rebooting doesn't seem to be enough, however not sure if power cycling both ends is enough either. an intermediate hub might work as it would move the USB failure outside of the chassis (we could use the pdu to switch it on and off). I'll check on this. Thanks!
    – Evan R.
    Commented Aug 5, 2022 at 16:07

3 Answers 3

1

Wrote a tool specifically for this. It can reset the device itself, the hub it's attached to or all usb ports of a machine.

Install with pip install usb_resetter

Usage:

usb_resetter -d 1234:5678 --reset-hub

Where 1234:5678 are the VID:PID data of your device. Those can be obtained via

usb_resetter --list

You may find more doc at https://github.com/netinvent/usb_resetter

2
  • On Debian 11: "Program failed with error Kernel path /sys/kernel/debug/usb/devices not found. Please run this script as root", prefixing with "sudo": "usb_resetter: command not found", ran under "$ su": "ModuleNotFoundError: No module named 'usb_resetter'"
    – 16851556
    Commented Jan 7 at 14:06
  • Yes, you generally install this as root. You can still install it as user, but you'll have to adapt to sudo /path/to/your/usr/local/python/bin/usb_resetter Commented Jan 7 at 15:49
1

Sorry for my english, it's lousy, so I use google translator haha. Well the command that you run is:

echo 0 > /sys/bus/usb/devices/usb1/bConfigurationValue

This makes a power off of the port, but then you have to perform an echo with a 1 to turn it back on and that would cause a kind of reset.

At least that worked for me I tell you that I am working on this on a Redhat 5.1, with kernel 2.6.18, which has very low control over usb, kernel 2.6.32 are already better for this, and the most modern versions of linux have many more controls over usb ports

I hope it helps you, I reply a little late, but maybe it will help another colleague Greetings from Argentina

1

When I had similar issues in a similar situation it turned out the the device was a power hog and the usb port on the computer and the hub could not supply it continuously.

I ended up getting an externally powered hub, and I havent had any freezes since then.

You can get devices online that measure the current and voltage of a USB port (in use). I would recommend you get one.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .