DTS(设备树)调试心得

调试外部设备的dts的思路是这样的:

1. 逻辑节点

  • 有一个逻辑节点,表示开发者可以控制的那个逻辑设备(例如usb)的全部(一般逻辑节点也在被写在板级或产品级的dtsi里面);

2. 控制器节点

3. phy节点

  • 控制器节点里会有phy节点,而如果是usb3.0的话,会有两个phy,一个提供usb2.0,一个提供usb3.0的模式支持。
    • 这是因为usb协议是向前兼容的(即usb3.0接口能够支持usb2.0设备接入),因此,usb3.0就要提供2.0的phy来支持才能做到“向前兼容”

4. 产品级dtsi里全部打开

  • 要把相应的逻辑节点/控制器节点/phy节点全部打开,而且配置到正确的模式

备注

  1. 以上这是基于soc vendor给的dts上操作的办法,而且硬件上并没有做出太大的改动。
  2. 参考硬件数据流pipeline,这里面谈到了常用的硬件的数据流模型,对于调试dts非常有帮助,能让自己知道现在工作在哪一个component。
  3. 重要的两类节点-usb dts
    • 有些是只能做host的,一般dts叫做usbhost30
    • 有些是可以做host/device的,也就是otg,一般在dts里,叫做usbdrd30

How-to如何从代码中判断出控制器(controller)节点是哪一个?

  • 有中断,它可以通知cpu(interrupts)
  • 拥有PHY(phys, phy-names)
  • 与驱动程序绑定(有compatible)
  • 拥有大量的寄存器空间(reg = <0x0 0xfcc00000 0x0 0x400000>)
  • 拥有复杂的时钟和复位逻辑()
  • 拥有高层的模式配置(例如dr_mode=“otg”)