如何引用设备树中的端口?

如何引用设备树中的端口?

编辑:这是关于使用 phandle 引用端口的一般问题,我发布的示例即我的特定情况并不那么相关,因为同时我观察到其他节点的相同行为。

我想引用设备树包含 (dtsi) 中的现有端口节点并向其添加端点。该现有节点称为 mipi_in,并被定义为另一个节点 (mipi_dsi) 内的端口:

mipi_dsi: mipi@ff960000 {
compatible = "rockchip,rk3399-mipi-dsi", "snps,dw-mipi-dsi";
reg = <0x0 0xff960000 0x0 0x8000>;
interrupts = <GIC_SPI 45 IRQ_TYPE_LEVEL_HIGH 0>;
clocks = <&cru SCLK_DPHY_PLL>, <&cru PCLK_MIPI_DSI0>,
   <&cru SCLK_DPHY_TX0_CFG>, <&cru PCLK_VIO_GRF>;
clock-names = "ref", "pclk", "phy_cfg", "grf";
power-domains = <&power RK3399_PD_VIO>;
resets = <&cru SRST_P_MIPI_DSI0>;
reset-names = "apb";
rockchip,grf = <&grf>;
#address-cells = <1>;
#size-cells = <0>;
status = "disabled";

ports {
  #address-cells = <1>;
  #size-cells = <0>;

  mipi_in: port@0 {
    reg = <0>;
    #address-cells = <1>;
    #size-cells = <0>;
    ...

由于我只需要向端口节点添加一些内容,因此我在设备树中引用了它,如下所示:

&mipi_in {
  mipi_in_ep: endpoint {
    data-lanes = <1 2>;
    link-frequencies = /bits/ 64 <720000000>;
    remote-endpoint = <&device_ep>;
  };
};

但编译器抱怨并指出端点必须包含在端口节点中。但根据mipi_in的定义,它已经是一个端口了!如果我再次定义端口节点,编译器不会再抱怨:

&mipi_in {
  port {
    mipi_in_ep: endpoint {
      data-lanes = <1 2>;
      link-frequencies = /bits/ 64 <720000000>;
      remote-endpoint = <&device_ep>;
    };
  };
};

但通过这种黑客攻击,硬件停止正常工作,所以我想知道警告是否只是编译器中的错误,或者是否有更干净的方法来引用端口。

谢谢并致以诚挚的问候。

答案1

尽管 dtc 没有报告任何错误,但为什么以下内容不起作用?

&mipi_in {
  port {
    mipi_in_ep: endpoint {
      data-lanes = <1 2>;
      link-frequencies = /bits/ 64 <720000000>;
      remote-endpoint = <&device_ep>;
    };
  };
};

端点路径现在类似于

<>/mipi@ff960000/ports/port@0/port/endpoint

但如果你参考原始树,它是

<>/mipi@ff960000/ports/port@0/endpoint

所以,司机一定没有正确理解。

不确定为什么设备树编译器在您引用端口时报告错误(很可能 dtc 版本不支持它),但您可以尝试像

&mipi_dsi {
    status = "okay";
    ports {
        mipi_in: port@0 {
            mipi_in_ep: endpoint {
                :
            };
        };
    };
};

相关内容