HCD、Root Hub 与 xHCI/EHCI/OHCI

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
2
3
4
5
6
7
usb_create_hcd
-> map MMIO/request IRQ
-> usb_add_hcd
-> register usb_bus
-> create virtual root hub
-> start controller
-> hub thread枚举ports

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
2
3
lsusb -t
cat /sys/kernel/debug/usb/xhci/* 2>/dev/null
dmesg | grep -Ei 'xhci|ehci|ohci|HC died|reset'

HC died通常意味着controller/clock/power/IRQ问题,而非单个class driver。

文章互动

阅读 --

留言

0 条留言

正在加载留言…