% sudo rmmod xhci_hcd
rmmod: ERROR: Module xhci_hcd is builtin.
Since there are similar issues in dom0, which is more close to bare metal than domUs, I suspect that those are issues would not be mitigated by calling standard suspend/resume scripts.
In dom0, I've created /usr/lib64/pm-utils/sleep.d/53usb file and registered it in /usr/lib/systemd/system/qubes-suspend.service . It seems to work for both USB2 and USB3. Maybe just the *_pci modules are needed to remove when sleeping.
In USBVM, I originally blacklisted on suspend just few modules, but it did not work with USB3. It works after extending the module list (i.e., /rw/config/suspend-module-blacklist):
xhci_pci
xhci_hcd
ehci_pci
ehci_hcd
vhci_hcd
usbip_core
It would be great to have USB working out-of-box. For reasons mentioned above, the blacklisting of modules might be way-to-go, despite I don't like it.
Unfortunately, I am not sure how much are my issues HW-specific. While I could create a pull request for those changes that fix it on my hardware, I am not sure if it does not break something it on other's HW.
Note that the module should be removed before suspend. When I skip this and reload it after resume, it sometimes works, but it also sometimes hangs, prevents sleeping or occasionally causes other issues like hanging with black screen.