장치 트리에서 포트를 어떻게 참조합니까?

장치 트리에서 포트를 어떻게 참조합니까?

편집하다:이것은 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 {
                :
            };
        };
    };
};

관련 정보