HCD、Root Hub 与 xHCI/EHCI/OHCI
1. HCD抽象
usb_hcd代表控制器实例;hc_driver提供:
- reset/start/stop;
- urb_enqueue/dequeue;
- endpoint_disable/reset;
- get_frame;
- hub_status_data/hub_control;
- bus suspend/resume;
- bandwidth和stream操作。
2. 注册
1 | usb_create_hcd |
Root hub不是外部USB设备,Hub class请求由HCD回调模拟。
3. xHCI
xHCI管理USB2和USB3两套logical root hubs:
- device slots;
- endpoint contexts;
- command ring;
- transfer rings/TRBs;
- event ring;
-interrupters;
-streams;
-port protocol capabilities。
DWC3 host模式创建 xhci-hcd platform子设备,把低地址xHCI寄存器窗口交给标准xHCI driver。
4. EHCI
EHCI服务USB2 High-Speed,使用QH/qTD和periodic schedule。FS/LS通过外部/根Hub Transaction Translator,或交给companion OHCI。
5. OHCI
OHCI服务USB1.1 FS/LS,使用ED/TD/HCCA。RK3588两组EHCI节点通过companion关联OHCI。
6. RK3588组合
- DWC3 host:xHCI同时覆盖其USB2/USB3 PHY;
usb_host0_ehci/ohci:u2phy2;usb_host1_ehci/ohci:u2phy3;- RK3588额外DRD1在host配置下也创建xHCI。
7. IRQ与Giveback
HCD IRQ收割完成项,先从controller queue移除,再由usbcore giveback。HCD必须避免在持有内部spinlock时调用可能重新submit的driver callback。
8. Bandwidth
Periodic endpoint在configuration/altsetting时检查带宽。xHCI计算endpoint context/ESIT payload;EHCI维护periodic schedule。
9. Root hub PM
Port suspend、remote wake、controller runtime suspend和PHY power必须协调。Root hub power/control是控制器autosuspend的重要入口。
10. 故障
1 | lsusb -t |
HC died通常意味着controller/clock/power/IRQ问题,而非单个class driver。
正在加载留言…