usb@fc400000 依赖关系图
概述
本文档详细描述了 OrangePi 5 Plus (RK3588) 上 usb@fc400000 节点的完整依赖关系。该节点对应 USBDRD3_1 控制器,即第二个 USB3.0 Dual-Role Device 控制器。
节点基本信息
- 节点路径:
/usbdrd3_1/usb@fc400000 - 物理地址:
0xfc400000 - 寄存器大小:
0x400000(4MB) - 兼容字符串:
snps,dwc3 - 工作模式: Host (主机模式)
- 支持速度: USB 3.0 SuperSpeed, USB 2.0 HighSpeed
- 中断: IRQ 221 (0xdd)
整体架构
usb@fc400000 是一个 DWC3 (DesignWare USB3) 控制器,支持 USB 3.0 和 USB 2.0。它依赖多个硬件子系统:
- 物理层 (PHY): USB2 PHY 和 USB3/DP PHY
- 电源管理: Power Domain 和 VBUS 电源
- 时钟和复位: CRU (Clock and Reset Unit)
- 系统控制: GRF (General Register Files)
- GPIO 控制: VBUS 使能信号
Mermaid 依赖关系流程图
详细节点表格
第一层:USB 主控制 器
| 节点名称 | 物理地址 | phandle | 驱动文件 | Compatible | 功能描述 |
|---|---|---|---|---|---|
| usb@fc400000 | 0xfc400000 | 0x484 | drivers/usb/host/xhci-dwc3.c | snps,dwc3 | DWC3 USB3 主控制器,支持 USB 3.0/2.0,工作在 Host 模式 |
关键 DTS 属性:
usb@fc400000 {
compatible = "snps,dwc3";
reg = <0x00 0xfc400000 0x00 0x400000>;
interrupts = <0x00 0xdd 0x04>;
power-domains = <0x61 0x1f>;
resets = <0x02 0x2a7>;
reset-names = "usb3-otg";
dr_mode = "host";
phys = <0x1aa 0x1ab>;
phy-names = "usb2-phy\0usb3-phy";
phy_type = "utmi_wide";
snps,dis_enblslpm_quirk;
snps,dis-u1-entry-quirk;
snps,dis-u2-entry-quirk;
snps,dis-u2-freeclk-exists-quirk;
snps,dis-del-phy-power-chg-quirk;
snps,dis-tx-ipgap-linecheck-quirk;
snps,parkmode-disable-hs-quirk;
snps,parkmode-disable-ss-quirk;
}
第二层:PHY 和电源管理
| 节点名称 | 物理地址 | phandle | 驱动文件 | Compatible | 功能描述 |
|---|---|---|---|---|---|
| u2phy1 (usb2-phy@4000) | 0xfd5d4000 | 0x1ce | drivers/phy/phy-rockchip-naneng-usb2.c | rockchip,rk3588-usb2phy | USB2.0 PHY 控制器,支持 480Mbps |
| usbdp_phy1 (phy@fed90000) | 0xfed90000 | 0x495 | drivers/phy/phy-rockchip-usbdp.c | rockchip,rk3588-usbdp-phy | USB3.0/DP Combo PHY,支持 5Gbps |
| vcc5v0-host | - | 0x76 | drivers/power/regulator/fixed.c | regulator-fixed | 5V VBUS 电源调节器 |
USB2 PHY 详细属性:
syscon@fd5d4000 {
compatible = "rockchip,rk3588-usb2phy-grf\0syscon\0simple-mfd";
reg = <0x00 0xfd5d4000 0x00 0x4000>;
usb2-phy@4000 {
compatible = "rockchip,rk3588-usb2phy";
reg = <0x4000 0x10>;
interrupts = <0x00 0x18a 0x04>;
resets = <0x02 0xc0048 0x02 0x489>; // phy, apb
reset-names = "phy\0apb";
clocks = <0x02 0x2b5>; // phyclk
clock-names = "phyclk";
clock-output-names = "usb480m_phy1";
#clock-cells = <0x00>;
rockchip,usbctrl-grf = <0x75>; // USB GRF
otg-port {
#phy-cells = <0x00>;
phy-supply = <0x76>; // vcc5v0-host
phandle = <0x1aa>;
};
}
}
USB3 PHY 详细属性:
phy@fed90000 {
compatible = "rockchip,rk3588-usbdp-phy";
reg = <0x00 0xfed90000 0x00 0x10000>;
// GRF 引用
rockchip,u2phy-grf = <0x1cc>; // USB2 PHY GRF
rockchip,usb-grf = <0x75>; // USB GRF
rockchip,usbdpphy-grf = <0x1cd>; // USBDP PHY GRF
rockchip,vo-grf = <0xfc>; // VO GRF
// 时钟引用
clocks = <0x02 0x2b6 // refclk
0x02 0x280 // immortal
0x02 0x26a // pclk
0x1ce>; // utmi
clock-names = "refclk\0immortal\0pclk\0utmi";
// 复位引用
resets = <0x02 0x2f // init
0x02 0x30 // cmn
0x02 0x31 // lane
0x02 0x32 // pcs_apb
0x02 0x484>; // pma_apb
reset-names = "init\0cmn\0lane\0pcs_apb\0pma_apb";
// DP lane 配置
rockchip,dp-lane-mux = <0x02 0x03>; // 使用 lane 2,3
u3-port {
#phy-cells = <0x00>;
phandle = <0x1ab>;
};
}
第三层:系统控制寄存器
| 节点名称 | 物理地址 | phandle | 驱动文件 | Compatible | 功能描述 |
|---|---|---|---|---|---|
| usb_grf | 0xfd5ac000 | 0x75 | drivers/core/syscon-uclass.c | rockchip,rk3588-usb-grf\0syscon | USB 控制寄存器,包含 USB3OTG 配置 |
| usb2phy_grf | 0xfd5d4000 | 0x1cc | drivers/core/syscon-uclass.c | rockchip,rk3588-usb2phy-grf\0syscon | USB2 PHY 寄存器 |
| usbdpphy_grf | 0xfd5cc000 | 0x1cd | drivers/core/syscon-uclass.c | rockchip,rk3588-usbdpphy-grf\0syscon | USBDP PHY 寄存器 |
| vo_grf | 0xfd5a6000 | 0xfc | drivers/core/syscon-uclass.c | rockchip,rk3588-vo-grf\0syscon | 视频/显示输出 GRF,用于 DP lane 选择 |
| php_grf | 0xfd5b0000 | 0x77 | drivers/core/syscon-uclass.c | rockchip,rk3588-php-grf\0syscon | PHP (Power/Performance/Hub) GRF |
| gpio4 | 0xfec40000 | 0x10e | drivers/gpio/rk_gpio.c | rockchip,gpio-bank | GPIO4 控制器,PB0 用于 VBUS 使能 |
GPIO4 详细属性:
gpio4@fec40000 {
compatible = "rockchip,gpio-bank";
reg = <0x00 0xfec40000 0x00 0x100>;
interrupts = <0x00 0xa3 0x04>;
clocks = <0x02 0x81 0x02 0x82>; // pclk, clk_gates
gpio-controller;
#gpio-cells = <0x02>;
interrupt-controller;
#interrupt-cells = <0x02>;
phandle = <0x10e>;
}
第四层:基础框架
| 节点名称 | 物理地址 | phandle | 驱动文件 | Compatible | 功能描述 |
|---|---|---|---|---|---|
| cru | 0xfd7c0000 | 0x02 | drivers/clk/rockchip/clk_rk3588.c | rockchip,rk3588-cru | 时钟和复位单元 |
| power-controller | 0xfd8d8000 | 0x61 | drivers/power/domain/rockchip/pm-domain.c | rockchip,rk3588-power-controller | 电源域控制器 |
| syscon 框架 | - | - | drivers/core/syscon-uclass.c | syscon | 系统控制器基础框架 |
CRU 详细属性:
cru: clock-controller@fd7c0000 {
compatible = "rockchip,rk3588-cru";
reg = <0x00 0xfd7c0000 0x00 0x2000>;
rockchip,grf = <0x77>; // PHP GRF
#clock-cells = <0x01>;
#reset-cells = <0x01>;
phandle = <0x02>;
}
驱动详细说明
1. DWC3 USB3 主控制器驱动
驱动文件: drivers/usb/host/xhci-dwc3.c
Compatible 字符串: snps,dwc3
主要功能:
- DWC3 控制器的核心驱动
- 支持 USB 3.0 SuperSpeed (5Gbps) 和 USB 2.0 HighSpeed (480Mbps)
- 实现 xHCI (eXtensible Host Controller Interface) 规范
- 支持主机模式和设备模式
关键代码片段:
/* DWC3 控制器初始化 */
static int dwc3_init(struct dwc3 *dwc)
{
/* 获取时钟 */
ret = clk_get_by_index(dev, 0, &dwc->clk);
if (ret)
return ret;
/* 使能时钟 */
ret = clk_enable(&dwc->clk);
if (ret)
return ret;
/* 获取复位信号 */
ret = reset_get_by_index(dev, 0, &dwc->rsts);
if (ret)
return ret;
/* 复位解除断言 */
ret = reset_deassert(&dwc->rsts);
if (ret)
return ret;
/* 初始化 DWC3 核心 */
dwc3_core_init(dwc);
return 0;
}
重要寄存器地址:
- GBUSBAR: 0xc100 - xHCI 寄存器基地址
- GCTL: 0xc110 - 全局控制寄存器
- Bit 12: PRTCAPDIR (端口能力方向)
- 0 = Device
- 1 = Host
- 2 = OTG
- Bit 12: PRTCAPDIR (端口能力方向)
- GUSB2PHYCFG: 0xc200 - USB2 PHY 配置寄存器
- Bit 6: SUSPHY (Suspend PHY)
- Bit 8-9: PHYIF (UTMI 接口宽度)
- Bit 10-19: USBTRDTIM (UTMI 转发延迟)
- GUSB3PIPECTL: 0xc230 - USB3 PHY 管道控制寄存器
- Bit 15: PIPE_ENABLE
- Bit 12: PHY_DISABLE
- Bit 8: U3_PORT_DISABLE