Pelo que entendi, os dispositivos conectados a diferentes controladores devem aparecer em diferentes barramentos USB. No entanto, quando conecto um teclado ao controlador xHCI, ele ainda está listado em um dos barramentos EHCI. Veja os >>>>
marcadores nas listagens:
$ lspci | grep -i usb
>>>> 00:14.0 USB controller: Intel Corporation 8 Series/C220 Series Chipset Family USB xHCI (rev 04)
00:1a.0 USB controller: Intel Corporation 8 Series/C220 Series Chipset Family USB EHCI #2 (rev 04)
00:1d.0 USB controller: Intel Corporation 8 Series/C220 Series Chipset Family USB EHCI #1 (rev 04)
$ lspci -vs 00:14.0
00:14.0 USB controller: Intel Corporation 8 Series/C220 Series Chipset Family USB xHCI (rev 04) (prog-if 30 [XHCI])
Subsystem: ASUSTeK Computer Inc. 8 Series/C220 Series Chipset Family USB xHCI
Flags: bus master, medium devsel, latency 0, IRQ 27
Memory at ef920000 (64-bit, non-prefetchable) [size=64K]
Capabilities: [70] Power Management version 2
Capabilities: [80] MSI: Enable+ Count=1/8 Maskable- 64bit+
Kernel driver in use: xhci_hcd
Então, eu realmente tenho um controlador xHCI. É uma porta física separada na placa-mãe.
$lsusb
Bus 002 Device 002: ID 8087:8000 Intel Corp.
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 8087:8008 Intel Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
>>>> Bus 004 Device 002: ID 174c:3074 ASMedia Technology Inc. ASM1074 SuperSpeed hub
>>>> Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 014: ID 046d:c03d Logitech, Inc. M-BT96a Pilot Optical Mouse
Bus 003 Device 015: ID 195d:2030 Itron Technology iONE
Bus 003 Device 013: ID 05e3:0608 Genesys Logic, Inc. Hub
Bus 003 Device 012: ID 0424:2228 Standard Microsystems Corp. 9-in-2 Card Reader
Bus 003 Device 011: ID 0424:2602 Standard Microsystems Corp. USB 2.0 Hub
Bus 003 Device 010: ID 0424:2512 Standard Microsystems Corp. USB 2.0 Hub
Bus 003 Device 003: ID 174c:2074 ASMedia Technology Inc. ASM1074 High-Speed hub
>>>> Bus 003 Device 016: ID 03f0:0024 Hewlett-Packard KU-0316 Keyboard
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
O hub 3.0 "superspeed" no barramento 004 deve ser o controlador xHCI. O teclado, no entanto, está conectado ao barramento 003:
$lsusb -t
/: Bus 04.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/6p, 5000M
|__ Port 3: Dev 2, If 0, Class=Hub, Driver=hub/4p, 5000M
/: Bus 03.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/14p, 480M
>>>>|__ Port 1: Dev 16, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M
|__ Port 3: Dev 3, If 0, Class=Hub, Driver=hub/4p, 480M
|__ Port 2: Dev 10, If 0, Class=Hub, Driver=hub/2p, 480M
|__ Port 1: Dev 11, If 0, Class=Hub, Driver=hub/4p, 480M
|__ Port 1: Dev 12, If 0, Class=Mass Storage, Driver=usb-storage, 480M
|__ Port 3: Dev 13, If 0, Class=Hub, Driver=hub/4p, 480M
|__ Port 2: Dev 15, If 0, Class=Human Interface Device, Driver=usbhid, 12M
|__ Port 2: Dev 15, If 1, Class=Human Interface Device, Driver=usbhid, 12M
|__ Port 2: Dev 15, If 2, Class=Human Interface Device, Driver=usbhid, 12M
|__ Port 4: Dev 14, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M
/: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/2p, 480M
|__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/8p, 480M
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/2p, 480M
|__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/6p, 480M
Na verdade, não importa como eu conecto dispositivos a controladores físicos, eles sempre aparecem no mesmo barramento. Alguém tem alguma ideia do que pode estar acontecendo?
Sistema
Processor: Intel(R) Core(TM) i7-4771 CPU @ 3.50GHz
OS: Debian GNU/Linux testing (buster) with ACS patch, IOMMU enabled.
Kernel: Linux 4.10.0-acs+ (x86_64)
Version: #3 SMP PREEMPT Sun Feb 26 00:03:48 CET 2017
Processor: Intel(R) Core(TM) i7-4771 CPU @ 3.50GHz : 3900.00 MHz
Board: Asus Z87-PRO
BIOS: AMI version 1707, VT-d/x enabled
O controlador xHCI tem na verdade dois barramentos em um. O ônibus superveloz:
... e o USB2 tradicional:
Observe que ambos estão usando o
xhci_hcd
driver.Provavelmente, isso é para minimizar a interferência de dispositivos mais antigos e lentos nos dispositivos USB3+ muito mais rápidos em todas as camadas da implementação USB.
O USB 3.0 no modo 5G não é compatível com USB 2.0 ou anterior, portanto, a maneira como eles implementaram a compatibilidade é usar um par de pinos na mesma posição do USB 2.0 para dispositivos legados e dois novos pares de pinos para USB 3.0 "real" dispositivos, como você pode ver, por exemplo, na pinagem na Wikipedia.
Portanto, seu
00:14.0
controlador xHCI é realmente dois controladores em um: um controlador legado USB 2.0 para o par "antigo" em cada conector, que aparece como barramento 3 (com 14 portas) e um controlador USB 3.0 "real" para os dois " new" em cada conector, que aparece como barramento 4 (com 6 portas).Alguns de seus conectores USB serão marcados em azul no seu PC e estão conectados a ambos os controladores. Se você conectar um dispositivo USB 2.0, ele se conectará fisicamente ao barramento 3, enquanto se você conectar um USB 3.0 "real", ele se conectará fisicamente ao barramento 4. É por isso que diferentes dispositivos conectados ao mesmo conector podem aparecer em um ou outro ônibus.
Observe também que o controlador legado tem muito mais portas e também está conectado a alguns hubs. Não sei se você conectou algum hub externo e quantos, mas também há hubs internos na placa-mãe.
Portanto, é totalmente possível que todos os seus conectores pertençam apenas ao controlador xHCI e os outros dois controladores EHCI que
lspci
mostram não estarem realmente conectados a nada (ou possivelmente aos conectores na placa-mãe).A maneira de descobrir é conectar um dispositivo USB 2.0 a cada conector por vez, anotar em qual barramento e em qual porta (e porta de hubs) ele aparece. Em seguida, repita o mesmo exercício com um dispositivo USB 3.0 "real" e você deve saber como os conectores USB são configurados.