RV1126 USB 控制器设备树时钟配置及启动失败排查
在基于 Rockchip RV1126 平台进行 USB 模块开发时,设备树(Device Tree)的正确配置对于硬件初始化和驱动加载至关重要。本文将结合一段实际案例,系统梳理 RV1126 中 USB 控制器(DWC3)在设备树中的配置方式,并重点解析启动过程中常见的时钟相关报错及排查方法。
1. 设备树片段分析
以下是 RV1126 平台中 USB 相关设备树配置的简要片段:
usbdrd: usb0 {
compatible = "rockchip,rv1126-dwc3", "rockchip,rk3399-dwc3";
#address-cells = <1>;
#size-cells = <1>;
ranges;
clocks = <&cru CLK_USBOTG_REF>, <&cru ACLK_USBOTG>, <&cru HCLK_PDUSB>;
clock-names = "ref_clk", "bus_clk", "hclk";
status = "disabled";
usbdrd_dwc3: dwc3@ffd00000 {
compatible = "snps,dwc3";
reg = <0xffd00000 0x100000>;
interrupts = <GIC_SPI 85 IRQ_TYPE_LEVEL_HIGH>;
dr_mode = "otg";
maximum-speed = "high-speed";
phys = <&u2phy_otg>;
phy-names = "usb2-phy";
phy_type = "utmi_wide";
power-domains = <&power RV1126_PD_USB>;
resets = <&cru SRST_USBOTG_A>;
reset-names = "usb3-otg";
snps,dis_enblslpm_quirk;
snps,dis-u2-freeclk-exists-quirk;
status = "disabled";
};
};
2. 内核启动时的错误信息
在系统启动过程中,如果出现如下内核报错:
[ 0.346453] dwc3 ffd00000.dwc3: Failed to get clk 'ref': -2
这说明 USB 控制器尝试获取名为 ref 的时钟失败了。错误码 -2 实际上是 -ENOENT,表示资源不存在。
3. 可能原因分析
3.1 时钟未注册或未定义
检查 cru(Clock and Reset Unit)节点是否定义了 CLK_USBOTG_REF,并且是否在 assigned-clocks 中进行了设置:
cru: clock-controller@ff490000 {
compatible = "rockchip,rv1126-cru";
reg = <0xff490000 0x1000>;
rockchip,grf = <&grf>;
#clock-cells = <1>;
#reset-cells = <1>;
assigned-clocks =
<&cru CLK_USBOTG_REF>, ... ;
assigned-clock-rates =
<24000000>, ... ;
};
3.2 时钟名称不匹配
检查 dwc3 节点中 clock-names 是否为 ref_clk,必须与父节点 clocks 中顺序和名称一一对应。
3.3 节点未启用
status = "disabled" 会导致内核不加载该节点,必要时修改为 status = "okay":
status = "okay";
3.4 父时钟未指定或无效
确保 CLK_USBOTG_REF 有一个有效的父时钟,例如:
assigned-clock-parents = <&pmucru CLK_OSC0_DIV32K>;
4. 标签与引用机制补充
设备树中有用的语法说明:
usbdrd: usb0中usbdrd是标签,供其他节点通过&usbdrd引用。&cru CLK_USBOTG_REF中的&cru是引用时钟控制器节点。<0 RK_PA2 RK_FUNC_GPIO &pcfg_pull_none>中的&pcfg_pull_none表示使用预定义的引脚电气属性配置。
5. 总结
内核启动时遇到 Failed to get clk 'ref': -2 类报错,核心是设备树中时钟配置不当或未生效。应重点排查以下几点:
- 时钟源是否定义且正确绑定到控制器。
- 时钟名称是否一致。
- 是否为相关模块启用了
status = "okay"。 - 时钟频率和父时钟是否配置齐全。
正确配置设备树后,USB 控制器应能顺利获取所有所需资源并完成初始化。
980

被折叠的 条评论
为什么被折叠?



