RV1126 USB 控制器设备树时钟配置及启动失败排查

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: usb0usbdrd 是标签,供其他节点通过 &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 控制器应能顺利获取所有所需资源并完成初始化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值