I have a requirement where I would like to connect many USB devices to the system using USB hubs. Currently, I have 2 20 ports USB hub with 40 USB devices connected this way. When I am trying to add more devices by adding another USB hub but I am hitting the limits of xHCI. Please note that both USB hub and USB devices are USB 2.0.
> dmesg
[33358.689138] xhci_hcd 0000:00:14.0: Error while assigning device slot ID
[33358.691346] xhci_hcd 0000:00:14.0: Max number of devices this xHCI host supports is 64.
[33358.693245] usb 1-7-port5: couldn't allocate usb_device
According to my findings, Adding a PCIE card for more USB ports should solve the issue as it will add a new host controller. But I believe, currently, my motherboard itself has an unused host controller.
> lsusb -t
/: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/8p, 20000M/x2
|__ Port 8: Dev 2, If 0, Class=Hub, Driver=hub/4p, 5000M
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/16p, 480M
|__ Port 2: Dev 2, If 0, Class=Wireless, Driver=btusb, 12M
|__ Port 2: Dev 2, If 1, Class=Wireless, Driver=btusb, 12M
|__ Port 4: Dev 3, If 2, Class=Human Interface Device, Driver=usbhid, 12M
|__ Port 4: Dev 3, If 0, Class=Vendor Specific Class, Driver=, 12M
|__ Port 10: Dev 5, If 0, Class=Hub, Driver=hub/4p, 480M
|__ Port 4: Dev 95, If 0, Class=Hub, Driver=hub/7p, 480M
|__ Port 3: Dev 98, If 0, Class=Hub, Driver=hub/4p, 480M
|__ Port 3: Dev 79, If 2, Class=Mass Storage, Driver=usb-storage, 480M
|__ Port 3: Dev 79, If 0, Class=Communications, Driver=cdc_ether, 480M
|__ Port 3: Dev 79, If 1, Class=CDC Data, Driver=cdc_ether, 480M
|__ Port 4: Dev 81, If 1, Class=CDC Data, Driver=cdc_ether, 480M
|__ Port 4: Dev 81, If 2, Class=Mass Storage, Driver=usb-storage, 480M
|__ Port 4: Dev 81, If 0, Class=Communications, Driver=cdc_ether, 480M
|__ Port 2: Dev 10, If 2, Class=Mass Storage, Driver=usb-storage, 480M
|__ Port 2: Dev 10, If 0, Class=Communications, Driver=cdc_ether, 480M
|__ Port 2: Dev 10, If 1, Class=CDC Data, Driver=cdc_ether, 480M
|__ Port 1: Dev 96, If 0, Class=Hub, Driver=hub/4p, 480M
|__ Port 4: Dev 73, If 2, Class=Mass Storage, Driver=usb-storage, 480M
|__ Port 4: Dev 73, If 0, Class=Communications, Driver=cdc_ether, 480M
|__ Port 4: Dev 73, If 1, Class=CDC Data, Driver=cdc_ether, 480M
|__ Port 2: Dev 127, If 1, Class=CDC Data, Driver=cdc_ether, 480M
|__ Port 2: Dev 127, If 2, Class=Mass Storage, Driver=usb-storage, 480M
|__ Port 2: Dev 127, If 0, Class=Communications, Driver=cdc_ether, 480M
|__ Port 3: Dev 42, If 1, Class=CDC Data, Driver=cdc_ether, 480M
|__ Port 3: Dev 42, If 2, Class=Mass Storage, Driver=usb-storage, 480M
|__ Port 3: Dev 42, If 0, Class=Communications, Driver=cdc_ether, 480M
|__ Port 1: Dev 18, If 2, Class=Mass Storage, Driver=usb-storage, 480M
|__ Port 1: Dev 18, If 0, Class=Communications, Driver=cdc_ether, 480M
|__ Port 1: Dev 18, If 1, Class=CDC Data, Driver=cdc_ether, 480M
|__ Port 6: Dev 101, If 0, Class=Hub, Driver=hub/4p, 480M
|__ Port 1: Dev 29, If 1, Class=CDC Data, Driver=cdc_ether, 480M
|__ Port 1: Dev 29, If 2, Class=Mass Storage, Driver=usb-storage, 480M
|__ Port 1: Dev 29, If 0, Class=Communications, Driver=cdc_ether, 480M
|__ Port 4: Dev 69, If 1, Class=CDC Data, Driver=cdc_ether, 480M
|__ Port 4: Dev 69, If 2, Class=Mass Storage, Driver=usb-storage, 480M
|__ Port 4: Dev 69, If 0, Class=Communications, Driver=cdc_ether, 480M
|__ Port 2: Dev 41, If 0, Class=Communications, Driver=cdc_ether, 480M
|__ Port 2: Dev 41, If 1, Class=CDC Data, Driver=cdc_ether, 480M
|__ Port 2: Dev 41, If 2, Class=Mass Storage, Driver=usb-storage, 480M
|__ Port 4: Dev 100, If 0, Class=Hub, Driver=hub/4p, 480M
|__ Port 1: Dev 83, If 2, Class=Mass Storage, Driver=usb-storage, 480M
|__ Port 1: Dev 83, If 0, Class=Communications, Driver=cdc_ether, 480M
|__ Port 1: Dev 83, If 1, Class=CDC Data, Driver=cdc_ether, 480M
|__ Port 4: Dev 67, If 0, Class=Communications, Driver=cdc_ether, 480M
|__ Port 4: Dev 67, If 1, Class=CDC Data, Driver=cdc_ether, 480M
|__ Port 4: Dev 67, If 2, Class=Mass Storage, Driver=usb-storage, 480M
|__ Port 2: Dev 85, If 2, Class=Mass Storage, Driver=usb-storage, 480M
|__ Port 2: Dev 85, If 0, Class=Communications, Driver=cdc_ether, 480M
|__ Port 2: Dev 85, If 1, Class=CDC Data, Driver=cdc_ether, 480M
|__ Port 3: Dev 65, If 1, Class=CDC Data, Driver=cdc_ether, 480M
|__ Port 3: Dev 65, If 2, Class=Mass Storage, Driver=usb-storage, 480M
|__ Port 3: Dev 65, If 0, Class=Communications, Driver=cdc_ether, 480M
|__ Port 2: Dev 97, If 0, Class=Hub, Driver=hub/4p, 480M
|__ Port 4: Dev 27, If 2, Class=Mass Storage, Driver=usb-storage, 480M
|__ Port 4: Dev 27, If 0, Class=Communications, Driver=cdc_ether, 480M
|__ Port 4: Dev 27, If 1, Class=CDC Data, Driver=cdc_ether, 480M
|__ Port 2: Dev 39, If 1, Class=CDC Data, Driver=cdc_ether, 480M
|__ Port 2: Dev 39, If 2, Class=Mass Storage, Driver=usb-storage, 480M
|__ Port 2: Dev 39, If 0, Class=Communications, Driver=cdc_ether, 480M
|__ Port 3: Dev 71, If 2, Class=Mass Storage, Driver=usb-storage, 480M
|__ Port 3: Dev 71, If 0, Class=Communications, Driver=cdc_ether, 480M
|__ Port 3: Dev 71, If 1, Class=CDC Data, Driver=cdc_ether, 480M
|__ Port 7: Dev 103, If 0, Class=Hub, Driver=hub/4p, 480M
|__ Port 3: Dev 77, If 1, Class=CDC Data, Driver=cdc_ether, 480M
|__ Port 3: Dev 77, If 2, Class=Mass Storage, Driver=usb-storage, 480M
|__ Port 3: Dev 77, If 0, Class=Communications, Driver=cdc_ether, 480M
|__ Port 1: Dev 8, If 2, Class=Mass Storage, Driver=usb-storage, 480M
|__ Port 1: Dev 8, If 0, Class=Communications, Driver=cdc_ether, 480M
|__ Port 1: Dev 8, If 1, Class=CDC Data, Driver=cdc_ether, 480M
|__ Port 2: Dev 75, If 2, Class=Mass Storage, Driver=usb-storage, 480M
|__ Port 2: Dev 75, If 0, Class=Communications, Driver=cdc_ether, 480M
|__ Port 2: Dev 75, If 1, Class=CDC Data, Driver=cdc_ether, 480M
|__ Port 3: Dev 99, If 0, Class=Hub, Driver=hub/7p, 480M
|__ Port 7: Dev 108, If 0, Class=Hub, Driver=hub/4p, 480M
|__ Port 2: Dev 117, If 1, Class=CDC Data, Driver=cdc_ether, 480M
|__ Port 2: Dev 117, If 2, Class=Mass Storage, Driver=usb-storage, 480M
|__ Port 2: Dev 117, If 0, Class=Communications, Driver=cdc_ether, 480M
|__ Port 3: Dev 119, If 0, Class=Communications, Driver=cdc_ether, 480M
|__ Port 3: Dev 119, If 1, Class=CDC Data, Driver=cdc_ether, 480M
|__ Port 3: Dev 119, If 2, Class=Mass Storage, Driver=usb-storage, 480M
|__ Port 1: Dev 36, If 2, Class=Mass Storage, Driver=usb-storage, 480M
|__ Port 1: Dev 36, If 0, Class=Communications, Driver=cdc_ether, 480M
|__ Port 1: Dev 36, If 1, Class=CDC Data, Driver=cdc_ether, 480M
|__ Port 3: Dev 105, If 0, Class=Hub, Driver=hub/4p, 480M
|__ Port 3: Dev 43, If 1, Class=CDC Data, Driver=cdc_ether, 480M
|__ Port 3: Dev 43, If 2, Class=Mass Storage, Driver=usb-storage, 480M
|__ Port 3: Dev 43, If 0, Class=Communications, Driver=cdc_ether, 480M
|__ Port 4: Dev 55, If 2, Class=Mass Storage, Driver=usb-storage, 480M
|__ Port 4: Dev 55, If 0, Class=Communications, Driver=cdc_ether, 480M
|__ Port 4: Dev 55, If 1, Class=CDC Data, Driver=cdc_ether, 480M
|__ Port 2: Dev 31, If 1, Class=CDC Data, Driver=cdc_ether, 480M
|__ Port 2: Dev 31, If 2, Class=Mass Storage, Driver=usb-storage, 480M
|__ Port 2: Dev 31, If 0, Class=Communications, Driver=cdc_ether, 480M
|__ Port 1: Dev 102, If 0, Class=Hub, Driver=hub/4p, 480M
|__ Port 4: Dev 53, If 1, Class=CDC Data, Driver=cdc_ether, 480M
|__ Port 4: Dev 53, If 2, Class=Mass Storage, Driver=usb-storage, 480M
|__ Port 4: Dev 53, If 0, Class=Communications, Driver=cdc_ether, 480M
|__ Port 2: Dev 109, If 2, Class=Mass Storage, Driver=usb-storage, 480M
|__ Port 2: Dev 109, If 0, Class=Communications, Driver=cdc_ether, 480M
|__ Port 2: Dev 109, If 1, Class=CDC Data, Driver=cdc_ether, 480M
|__ Port 3: Dev 111, If 2, Class=Mass Storage, Driver=usb-storage, 480M
|__ Port 3: Dev 111, If 0, Class=Communications, Driver=cdc_ether, 480M
|__ Port 3: Dev 111, If 1, Class=CDC Data, Driver=cdc_ether, 480M
|__ Port 1: Dev 14, If 1, Class=CDC Data, Driver=cdc_ether, 480M
|__ Port 1: Dev 14, If 2, Class=Mass Storage, Driver=usb-storage, 480M
|__ Port 1: Dev 14, If 0, Class=Communications, Driver=cdc_ether, 480M
|__ Port 6: Dev 107, If 0, Class=Hub, Driver=hub/4p, 480M
|__ Port 1: Dev 12, If 2, Class=Mass Storage, Driver=usb-storage, 480M
|__ Port 1: Dev 12, If 0, Class=Communications, Driver=cdc_ether, 480M
|__ Port 1: Dev 12, If 1, Class=CDC Data, Driver=cdc_ether, 480M
|__ Port 4: Dev 89, If 0, Class=Communications, Driver=cdc_ether, 480M
|__ Port 4: Dev 89, If 1, Class=CDC Data, Driver=cdc_ether, 480M
|__ Port 4: Dev 89, If 2, Class=Mass Storage, Driver=usb-storage, 480M
|__ Port 2: Dev 87, If 2, Class=Mass Storage, Driver=usb-storage, 480M
|__ Port 2: Dev 87, If 0, Class=Communications, Driver=cdc_ether, 480M
|__ Port 2: Dev 87, If 1, Class=CDC Data, Driver=cdc_ether, 480M
|__ Port 4: Dev 106, If 0, Class=Hub, Driver=hub/4p, 480M
|__ Port 4: Dev 66, If 2, Class=Mass Storage, Driver=usb-storage, 480M
|__ Port 4: Dev 66, If 0, Class=Communications, Driver=cdc_ether, 480M
|__ Port 4: Dev 66, If 1, Class=CDC Data, Driver=cdc_ether, 480M
|__ Port 2: Dev 123, If 1, Class=CDC Data, Driver=cdc_ether, 480M
|__ Port 2: Dev 123, If 2, Class=Mass Storage, Driver=usb-storage, 480M
|__ Port 2: Dev 123, If 0, Class=Communications, Driver=cdc_ether, 480M
|__ Port 3: Dev 125, If 2, Class=Mass Storage, Driver=usb-storage, 480M
|__ Port 3: Dev 125, If 0, Class=Communications, Driver=cdc_ether, 480M
|__ Port 3: Dev 125, If 1, Class=CDC Data, Driver=cdc_ether, 480M
|__ Port 1: Dev 121, If 1, Class=CDC Data, Driver=cdc_ether, 480M
|__ Port 1: Dev 121, If 2, Class=Mass Storage, Driver=usb-storage, 480M
|__ Port 1: Dev 121, If 0, Class=Communications, Driver=cdc_ether, 480M
|__ Port 2: Dev 104, If 0, Class=Hub, Driver=hub/4p, 480M
|__ Port 3: Dev 37, If 1, Class=CDC Data, Driver=cdc_ether, 480M
|__ Port 3: Dev 37, If 2, Class=Mass Storage, Driver=usb-storage, 480M
|__ Port 3: Dev 37, If 0, Class=Communications, Driver=cdc_ether, 480M
|__ Port 4: Dev 93, If 1, Class=CDC Data, Driver=cdc_ether, 480M
|__ Port 4: Dev 93, If 2, Class=Mass Storage, Driver=usb-storage, 480M
|__ Port 4: Dev 93, If 0, Class=Communications, Driver=cdc_ether, 480M
|__ Port 2: Dev 91, If 2, Class=Mass Storage, Driver=usb-storage, 480M
|__ Port 2: Dev 91, If 0, Class=Communications, Driver=cdc_ether, 480M
|__ Port 2: Dev 91, If 1, Class=CDC Data, Driver=cdc_ether, 480M
|__ Port 13: Dev 6, If 0, Class=Hub, Driver=hub/4p, 480M
|__ Port 14: Dev 7, If 0, Class=Audio, Driver=snd-usb-audio, 480M
|__ Port 14: Dev 7, If 1, Class=Audio, Driver=snd-usb-audio, 480M
|__ Port 14: Dev 7, If 2, Class=Audio, Driver=snd-usb-audio, 480M
|__ Port 14: Dev 7, If 3, Class=Audio, Driver=snd-usb-audio, 480M
|__ Port 14: Dev 7, If 4, Class=Audio, Driver=snd-usb-audio, 480M
|__ Port 14: Dev 7, If 5, Class=Audio, Driver=snd-usb-audio, 480M
|__ Port 14: Dev 7, If 6, Class=Audio, Driver=snd-usb-audio, 480M
|__ Port 14: Dev 7, If 7, Class=Human Interface Device, Driver=usbhid, 480M
this one
/: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/8p, 20000M/x2
|__ Port 8: Dev 2, If 0, Class=Hub, Driver=hub/4p, 5000M
If my assumption is correct, how can I access ports associated with Port 8: Dev 2, If 0, Class=Hub, Driver=hub/4p, 5000M
?
The motherboard also has 2 USB C ports. I tried to use them using C type extender I had lying around for my MacBook but I'm not sure if that's the correct way to test, as the extender has 2xHDMI, 1xETH, 1xAUX, 4xUSB 3.0, 1xUSB C and more..
I did this though and I again got the same error, but this time a hub got added to the root controller in question, but not to Port 8: Dev 2, If 0, Class=Hub, Driver=hub/4p, 5000M
Here are all the logs after connecting that extender:
> dmesg
[34744.523932] usb 2-5: new SuperSpeed USB device number 12 using xhci_hcd
[34744.545939] usb 2-5: New USB device found, idVendor=2109, idProduct=0817, bcdDevice= 4.73
[34744.545951] usb 2-5: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[34744.545955] usb 2-5: Product: USB3.0 Hub
[34744.545959] usb 2-5: Manufacturer: VIA Labs, Inc.
[34744.551886] hub 2-5:1.0: USB hub found
[34744.552205] hub 2-5:1.0: 4 ports detected
[34744.671720] usb 1-7: new high-speed USB device number 54 using xhci_hcd
[34744.821952] usb 1-7: New USB device found, idVendor=2109, idProduct=2817, bcdDevice= 4.73
[34744.821964] usb 1-7: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[34744.821968] usb 1-7: Product: USB2.0 Hub
[34744.821972] usb 1-7: Manufacturer: VIA Labs, Inc.
[34744.827068] hub 1-7:1.0: USB hub found
[34744.827418] hub 1-7:1.0: 5 ports detected
[34745.139969] usb 2-5.1: new SuperSpeed USB device number 13 using xhci_hcd
[34745.161857] usb 2-5.1: New USB device found, idVendor=2109, idProduct=0817, bcdDevice= 4.73
[34745.161870] usb 2-5.1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[34745.161875] usb 2-5.1: Product: USB3.0 Hub
[34745.161878] usb 2-5.1: Manufacturer: VIA Labs, Inc.
[34745.168740] hub 2-5.1:1.0: USB hub found
[34745.169074] hub 2-5.1:1.0: 4 ports detected
[34745.256248] usb 2-5.4: new SuperSpeed USB device number 14 using xhci_hcd
[34745.285690] usb 2-5.4: New USB device found, idVendor=05e3, idProduct=0749, bcdDevice=15.39
[34745.285703] usb 2-5.4: New USB device strings: Mfr=3, Product=4, SerialNumber=2
[34745.285708] usb 2-5.4: Product: USB3.0 Card Reader
[34745.285711] usb 2-5.4: Manufacturer: Generic
[34745.285714] usb 2-5.4: SerialNumber: 000000001539
[34745.300233] usb-storage 2-5.4:1.0: USB Mass Storage device detected
[34745.300810] scsi host46: usb-storage 2-5.4:1.0
[34745.420338] xhci_hcd 0000:00:14.0: Error while assigning device slot ID
[34745.422924] xhci_hcd 0000:00:14.0: Max number of devices this xHCI host supports is 64.
[34745.426402] usb 1-7-port1: couldn't allocate usb_device
[34745.428601] xhci_hcd 0000:00:14.0: Error while assigning device slot ID
[34745.431287] xhci_hcd 0000:00:14.0: Max number of devices this xHCI host supports is 64.
[34745.434990] usb 1-7-port2: couldn't allocate usb_device
[34746.310845] scsi 46:0:0:0: Direct-Access Generic MassStorageClass 1539 PQ: 0 ANSI: 6
[34746.312157] scsi 46:0:0:1: Direct-Access Generic MassStorageClass 1539 PQ: 0 ANSI: 6
[34746.312762] sd 46:0:0:0: Attached scsi generic sg41 type 0
[34746.313107] sd 46:0:0:1: Attached scsi generic sg42 type 0
[34746.516474] sd 46:0:0:0: [sdap] Media removed, stopped polling
[34746.720153] sd 46:0:0:1: [sdaq] Media removed, stopped polling
[34746.722839] sd 46:0:0:0: [sdap] Attached SCSI removable disk
[34746.727157] sd 46:0:0:1: [sdaq] Attached SCSI removable disk
[34749.455215] xhci_hcd 0000:00:14.0: Error while assigning device slot ID
[34749.458569] xhci_hcd 0000:00:14.0: Max number of devices this xHCI host supports is 64.
[34749.460521] usb 1-7-port1: couldn't allocate usb_device
[34749.461979] xhci_hcd 0000:00:14.0: Error while assigning device slot ID
[34749.463156] xhci_hcd 0000:00:14.0: Max number of devices this xHCI host supports is 64.
[34749.466159] usb 1-7-port2: couldn't allocate usb_device
[34749.469438] xhci_hcd 0000:00:14.0: Error while assigning device slot ID
[34749.471022] xhci_hcd 0000:00:14.0: Max number of devices this xHCI host supports is 64.
[34749.472421] usb 1-7-port5: couldn't allocate usb_device
> lsusb -t
/: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/8p, 20000M/x2
|__ Port 5: Dev 12, If 0, Class=Hub, Driver=hub/4p, 5000M
|__ Port 1: Dev 13, If 0, Class=Hub, Driver=hub/4p, 5000M
|__ Port 4: Dev 14, If 0, Class=Mass Storage, Driver=usb-storage, 5000M
|__ Port 8: Dev 2, If 0, Class=Hub, Driver=hub/4p, 5000M
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/16p, 480M
|__ Port 2: Dev 2, If 0, Class=Wireless, Driver=btusb, 12M
|__ Port 2: Dev 2, If 1, Class=Wireless, Driver=btusb, 12M
|__ Port 4: Dev 3, If 2, Class=Human Interface Device, Driver=usbhid, 12M
|__ Port 4: Dev 3, If 0, Class=Vendor Specific Class, Driver=, 12M
|__ Port 7: Dev 54, If 0, Class=Hub, Driver=hub/5p, 480M
...
...
- Motherboard: ASUS ROG Strix Z590-E Gaming
- OS: Ubuntu 22.04.1 LTS
- HUB: UHPPOTE Sipolar Industrial Grade 20 Port Usb2.0 Hub
- USB Device: E3372H Modem
Summary:
- Is it possible to add more USB devices to the existing motherboard?
- Is that really an unused root_hub?
- If it is then can we connect more USB devices to it?
- How can I connect more USB devices to the system if it's possible?
- If it is not possible to add to the existing system then what are other ways for getting more devices added? PCIE Card? Any recommendations?