[PATCH v3 3/3] dt-bindings: display/msm: Require DSI graph endpoint

From: Krzysztof Kozlowski

Date: Thu Nov 12 2026 - 10:25:00 EST


Technically, DSI controllers do not need OF graphs with endpoint to the
panel and could rely directly on their child node (when panel is the
child of DSI).

However Linux Qualcomm MSM DRM DSI driver never implemented such
approach and it requires a valid graph endpoint pointing to the panel.
If it is missing, the drivers will silently accept such DTS in
dsi_host_parse_dt(), but later fail on dsi_host_attach() because number
of lanes is not initialized. The number of lanes is initialized to safe
default only when there is a valid endpoint which is missing data-lanes.

Extend the bindings to validate existing DTS to match expected ABI.

Reviewed-by: Rob Herring (Arm) <robh@xxxxxxxxxx>
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@xxxxxxxxxxxxxxxx>
Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@xxxxxxxxxxxxxxxx>
---
Please apply after Qualcomm Soc takes DTS changes to next.
---
.../devicetree/bindings/display/msm/dsi-controller-main.yaml | 6 ++++++
.../devicetree/bindings/display/msm/qcom,milos-mdss.yaml | 1 +
.../devicetree/bindings/display/msm/qcom,msm8998-mdss.yaml | 2 ++
.../devicetree/bindings/display/msm/qcom,qcm2290-mdss.yaml | 1 +
.../devicetree/bindings/display/msm/qcom,qcs8300-mdss.yaml | 4 +++-
.../devicetree/bindings/display/msm/qcom,sa8775p-mdss.yaml | 8 ++++++--
.../devicetree/bindings/display/msm/qcom,sar2130p-mdss.yaml | 2 ++
.../devicetree/bindings/display/msm/qcom,sc7180-mdss.yaml | 1 +
.../devicetree/bindings/display/msm/qcom,sc7280-mdss.yaml | 1 +
.../devicetree/bindings/display/msm/qcom,sc8180x-mdss.yaml | 2 ++
.../devicetree/bindings/display/msm/qcom,sdm670-mdss.yaml | 2 ++
.../devicetree/bindings/display/msm/qcom,sdm845-mdss.yaml | 2 ++
.../devicetree/bindings/display/msm/qcom,sm6115-mdss.yaml | 1 +
.../devicetree/bindings/display/msm/qcom,sm6125-mdss.yaml | 1 +
.../devicetree/bindings/display/msm/qcom,sm6150-mdss.yaml | 1 +
.../devicetree/bindings/display/msm/qcom,sm6350-mdss.yaml | 1 +
.../devicetree/bindings/display/msm/qcom,sm6375-mdss.yaml | 1 +
.../devicetree/bindings/display/msm/qcom,sm7150-mdss.yaml | 2 ++
.../devicetree/bindings/display/msm/qcom,sm8150-mdss.yaml | 2 ++
.../devicetree/bindings/display/msm/qcom,sm8250-mdss.yaml | 2 ++
.../devicetree/bindings/display/msm/qcom,sm8350-mdss.yaml | 1 +
.../devicetree/bindings/display/msm/qcom,sm8450-mdss.yaml | 2 ++
.../devicetree/bindings/display/msm/qcom,sm8550-mdss.yaml | 2 ++
.../devicetree/bindings/display/msm/qcom,sm8650-mdss.yaml | 2 ++
.../devicetree/bindings/display/msm/qcom,sm8750-mdss.yaml | 1 +
25 files changed, 48 insertions(+), 3 deletions(-)

diff --git a/Documentation/devicetree/bindings/display/msm/dsi-controller-main.yaml b/Documentation/devicetree/bindings/display/msm/dsi-controller-main.yaml
index e4fd1cbbd4e0..e9446a333fa1 100644
--- a/Documentation/devicetree/bindings/display/msm/dsi-controller-main.yaml
+++ b/Documentation/devicetree/bindings/display/msm/dsi-controller-main.yaml
@@ -201,6 +201,12 @@ properties:
- timer3
- timer4

+ required:
+ - remote-endpoint
+
+ required:
+ - endpoint
+
required:
- port@0
- port@1
diff --git a/Documentation/devicetree/bindings/display/msm/qcom,milos-mdss.yaml b/Documentation/devicetree/bindings/display/msm/qcom,milos-mdss.yaml
index 7010ffa0ae35..8b9f54f189e8 100644
--- a/Documentation/devicetree/bindings/display/msm/qcom,milos-mdss.yaml
+++ b/Documentation/devicetree/bindings/display/msm/qcom,milos-mdss.yaml
@@ -241,6 +241,7 @@ examples:
reg = <1>;

mdss_dsi0_out: endpoint {
+ remote-endpoint = <&panel0_in>;
};
};
};
diff --git a/Documentation/devicetree/bindings/display/msm/qcom,msm8998-mdss.yaml b/Documentation/devicetree/bindings/display/msm/qcom,msm8998-mdss.yaml
index 2d9edab5a30d..dafe5c5d4b75 100644
--- a/Documentation/devicetree/bindings/display/msm/qcom,msm8998-mdss.yaml
+++ b/Documentation/devicetree/bindings/display/msm/qcom,msm8998-mdss.yaml
@@ -181,6 +181,7 @@ examples:
port@1 {
reg = <1>;
dsi0_out: endpoint {
+ remote-endpoint = <&panel0_in>;
};
};
};
@@ -251,6 +252,7 @@ examples:
port@1 {
reg = <1>;
dsi1_out: endpoint {
+ remote-endpoint = <&panel1_in>;
};
};
};
diff --git a/Documentation/devicetree/bindings/display/msm/qcom,qcm2290-mdss.yaml b/Documentation/devicetree/bindings/display/msm/qcom,qcm2290-mdss.yaml
index 49a7b5c4c678..60ba466382b8 100644
--- a/Documentation/devicetree/bindings/display/msm/qcom,qcm2290-mdss.yaml
+++ b/Documentation/devicetree/bindings/display/msm/qcom,qcm2290-mdss.yaml
@@ -194,6 +194,7 @@ examples:
port@1 {
reg = <1>;
dsi0_out: endpoint {
+ remote-endpoint = <&panel0_in>;
};
};
};
diff --git a/Documentation/devicetree/bindings/display/msm/qcom,qcs8300-mdss.yaml b/Documentation/devicetree/bindings/display/msm/qcom,qcs8300-mdss.yaml
index 287cce4dbddc..c00c4d5dd918 100644
--- a/Documentation/devicetree/bindings/display/msm/qcom,qcs8300-mdss.yaml
+++ b/Documentation/devicetree/bindings/display/msm/qcom,qcs8300-mdss.yaml
@@ -235,7 +235,9 @@ examples:

port@1 {
reg = <1>;
- mdss0_dsi0_out: endpoint { };
+ mdss0_dsi0_out: endpoint {
+ remote-endpoint = <&panel0_in>;
+ };
};
};

diff --git a/Documentation/devicetree/bindings/display/msm/qcom,sa8775p-mdss.yaml b/Documentation/devicetree/bindings/display/msm/qcom,sa8775p-mdss.yaml
index b68e7efbc189..48dd897d5d5b 100644
--- a/Documentation/devicetree/bindings/display/msm/qcom,sa8775p-mdss.yaml
+++ b/Documentation/devicetree/bindings/display/msm/qcom,sa8775p-mdss.yaml
@@ -258,7 +258,9 @@ examples:

port@1 {
reg = <1>;
- mdss0_dsi0_out: endpoint { };
+ mdss0_dsi0_out: endpoint {
+ remote-endpoint = <&panel0_in>;
+ };
};
};

@@ -335,7 +337,9 @@ examples:

port@1 {
reg = <1>;
- mdss0_dsi1_out: endpoint { };
+ mdss0_dsi1_out: endpoint {
+ remote-endpoint = <&panel1_in>;
+ };
};
};

diff --git a/Documentation/devicetree/bindings/display/msm/qcom,sar2130p-mdss.yaml b/Documentation/devicetree/bindings/display/msm/qcom,sar2130p-mdss.yaml
index fb3d24bbac7d..3e4a25a217cc 100644
--- a/Documentation/devicetree/bindings/display/msm/qcom,sar2130p-mdss.yaml
+++ b/Documentation/devicetree/bindings/display/msm/qcom,sar2130p-mdss.yaml
@@ -326,6 +326,7 @@ examples:
reg = <1>;

mdss_dsi0_out: endpoint {
+ remote-endpoint = <&panel0_in>;
};
};
};
@@ -418,6 +419,7 @@ examples:
reg = <1>;

mdss_dsi1_out: endpoint {
+ remote-endpoint = <&panel1_in>;
};
};
};
diff --git a/Documentation/devicetree/bindings/display/msm/qcom,sc7180-mdss.yaml b/Documentation/devicetree/bindings/display/msm/qcom,sc7180-mdss.yaml
index 7a0555b15ddf..16ebd5d701d0 100644
--- a/Documentation/devicetree/bindings/display/msm/qcom,sc7180-mdss.yaml
+++ b/Documentation/devicetree/bindings/display/msm/qcom,sc7180-mdss.yaml
@@ -206,6 +206,7 @@ examples:
port@1 {
reg = <1>;
dsi0_out: endpoint {
+ remote-endpoint = <&panel0_in>;
};
};
};
diff --git a/Documentation/devicetree/bindings/display/msm/qcom,sc7280-mdss.yaml b/Documentation/devicetree/bindings/display/msm/qcom,sc7280-mdss.yaml
index b643d3adf669..9f84ba248a83 100644
--- a/Documentation/devicetree/bindings/display/msm/qcom,sc7280-mdss.yaml
+++ b/Documentation/devicetree/bindings/display/msm/qcom,sc7280-mdss.yaml
@@ -230,6 +230,7 @@ examples:
port@1 {
reg = <1>;
dsi0_out: endpoint {
+ remote-endpoint = <&panel0_in>;
};
};
};
diff --git a/Documentation/devicetree/bindings/display/msm/qcom,sc8180x-mdss.yaml b/Documentation/devicetree/bindings/display/msm/qcom,sc8180x-mdss.yaml
index 00e82bdbbcc7..7e653552fdfe 100644
--- a/Documentation/devicetree/bindings/display/msm/qcom,sc8180x-mdss.yaml
+++ b/Documentation/devicetree/bindings/display/msm/qcom,sc8180x-mdss.yaml
@@ -242,6 +242,7 @@ examples:
port@1 {
reg = <1>;
dsi0_out: endpoint {
+ remote-endpoint = <&panel0_in>;
};
};
};
@@ -333,6 +334,7 @@ examples:
port@1 {
reg = <1>;
dsi1_out: endpoint {
+ remote-endpoint = <&panel1_in>;
};
};
};
diff --git a/Documentation/devicetree/bindings/display/msm/qcom,sdm670-mdss.yaml b/Documentation/devicetree/bindings/display/msm/qcom,sdm670-mdss.yaml
index 7dc269322b8e..4430baecfd99 100644
--- a/Documentation/devicetree/bindings/display/msm/qcom,sdm670-mdss.yaml
+++ b/Documentation/devicetree/bindings/display/msm/qcom,sdm670-mdss.yaml
@@ -196,6 +196,7 @@ examples:
port@1 {
reg = <1>;
mdss_dsi0_out: endpoint {
+ remote-endpoint = <&panel0_in>;
};
};
};
@@ -266,6 +267,7 @@ examples:
port@1 {
reg = <1>;
mdss_dsi1_out: endpoint {
+ remote-endpoint = <&panel1_in>;
};
};
};
diff --git a/Documentation/devicetree/bindings/display/msm/qcom,sdm845-mdss.yaml b/Documentation/devicetree/bindings/display/msm/qcom,sdm845-mdss.yaml
index 6e8b69e5ec62..1330a5f80e3b 100644
--- a/Documentation/devicetree/bindings/display/msm/qcom,sdm845-mdss.yaml
+++ b/Documentation/devicetree/bindings/display/msm/qcom,sdm845-mdss.yaml
@@ -192,6 +192,7 @@ examples:
port@1 {
reg = <1>;
dsi0_out: endpoint {
+ remote-endpoint = <&panel0_in>;
};
};
};
@@ -262,6 +263,7 @@ examples:
port@1 {
reg = <1>;
dsi1_out: endpoint {
+ remote-endpoint = <&panel1_in>;
};
};
};
diff --git a/Documentation/devicetree/bindings/display/msm/qcom,sm6115-mdss.yaml b/Documentation/devicetree/bindings/display/msm/qcom,sm6115-mdss.yaml
index 309de1953c88..2993fc1eafe6 100644
--- a/Documentation/devicetree/bindings/display/msm/qcom,sm6115-mdss.yaml
+++ b/Documentation/devicetree/bindings/display/msm/qcom,sm6115-mdss.yaml
@@ -179,6 +179,7 @@ examples:
port@1 {
reg = <1>;
dsi0_out: endpoint {
+ remote-endpoint = <&panel0_in>;
};
};
};
diff --git a/Documentation/devicetree/bindings/display/msm/qcom,sm6125-mdss.yaml b/Documentation/devicetree/bindings/display/msm/qcom,sm6125-mdss.yaml
index 3deb9dc81c9c..a942a479a440 100644
--- a/Documentation/devicetree/bindings/display/msm/qcom,sm6125-mdss.yaml
+++ b/Documentation/devicetree/bindings/display/msm/qcom,sm6125-mdss.yaml
@@ -194,6 +194,7 @@ examples:
port@1 {
reg = <1>;
mdss_dsi0_out: endpoint {
+ remote-endpoint = <&panel0_in>;
};
};
};
diff --git a/Documentation/devicetree/bindings/display/msm/qcom,sm6150-mdss.yaml b/Documentation/devicetree/bindings/display/msm/qcom,sm6150-mdss.yaml
index 46e9335f849f..62920c8fba0c 100644
--- a/Documentation/devicetree/bindings/display/msm/qcom,sm6150-mdss.yaml
+++ b/Documentation/devicetree/bindings/display/msm/qcom,sm6150-mdss.yaml
@@ -221,6 +221,7 @@ examples:
port@1 {
reg = <1>;
mdss_dsi0_out: endpoint {
+ remote-endpoint = <&panel0_in>;
};
};
};
diff --git a/Documentation/devicetree/bindings/display/msm/qcom,sm6350-mdss.yaml b/Documentation/devicetree/bindings/display/msm/qcom,sm6350-mdss.yaml
index bba666bdffe5..faafc451633c 100644
--- a/Documentation/devicetree/bindings/display/msm/qcom,sm6350-mdss.yaml
+++ b/Documentation/devicetree/bindings/display/msm/qcom,sm6350-mdss.yaml
@@ -201,6 +201,7 @@ examples:
port@1 {
reg = <1>;
dsi0_out: endpoint {
+ remote-endpoint = <&panel0_in>;
};
};
};
diff --git a/Documentation/devicetree/bindings/display/msm/qcom,sm6375-mdss.yaml b/Documentation/devicetree/bindings/display/msm/qcom,sm6375-mdss.yaml
index e22b4c433fd0..46a8539308c8 100644
--- a/Documentation/devicetree/bindings/display/msm/qcom,sm6375-mdss.yaml
+++ b/Documentation/devicetree/bindings/display/msm/qcom,sm6375-mdss.yaml
@@ -193,6 +193,7 @@ examples:
port@1 {
reg = <1>;
dsi0_out: endpoint {
+ remote-endpoint = <&panel0_in>;
};
};
};
diff --git a/Documentation/devicetree/bindings/display/msm/qcom,sm7150-mdss.yaml b/Documentation/devicetree/bindings/display/msm/qcom,sm7150-mdss.yaml
index 9b0621d88d50..5ae181bc4fbf 100644
--- a/Documentation/devicetree/bindings/display/msm/qcom,sm7150-mdss.yaml
+++ b/Documentation/devicetree/bindings/display/msm/qcom,sm7150-mdss.yaml
@@ -263,6 +263,7 @@ examples:
port@1 {
reg = <1>;
mdss_dsi0_out: endpoint {
+ remote-endpoint = <&panel0_in>;
};
};
};
@@ -355,6 +356,7 @@ examples:
port@1 {
reg = <1>;
mdss_dsi1_out: endpoint {
+ remote-endpoint = <&panel1_in>;
};
};
};
diff --git a/Documentation/devicetree/bindings/display/msm/qcom,sm8150-mdss.yaml b/Documentation/devicetree/bindings/display/msm/qcom,sm8150-mdss.yaml
index e6dc5494baee..7edf4ee9e52d 100644
--- a/Documentation/devicetree/bindings/display/msm/qcom,sm8150-mdss.yaml
+++ b/Documentation/devicetree/bindings/display/msm/qcom,sm8150-mdss.yaml
@@ -231,6 +231,7 @@ examples:
port@1 {
reg = <1>;
dsi0_out: endpoint {
+ remote-endpoint = <&panel0_in>;
};
};
};
@@ -321,6 +322,7 @@ examples:
port@1 {
reg = <1>;
dsi1_out: endpoint {
+ remote-endpoint = <&panel1_in>;
};
};
};
diff --git a/Documentation/devicetree/bindings/display/msm/qcom,sm8250-mdss.yaml b/Documentation/devicetree/bindings/display/msm/qcom,sm8250-mdss.yaml
index 51368cda7b2f..bce5ab069324 100644
--- a/Documentation/devicetree/bindings/display/msm/qcom,sm8250-mdss.yaml
+++ b/Documentation/devicetree/bindings/display/msm/qcom,sm8250-mdss.yaml
@@ -234,6 +234,7 @@ examples:
port@1 {
reg = <1>;
dsi0_out: endpoint {
+ remote-endpoint = <&panel0_in>;
};
};
};
@@ -324,6 +325,7 @@ examples:
port@1 {
reg = <1>;
dsi1_out: endpoint {
+ remote-endpoint = <&panel1_in>;
};
};
};
diff --git a/Documentation/devicetree/bindings/display/msm/qcom,sm8350-mdss.yaml b/Documentation/devicetree/bindings/display/msm/qcom,sm8350-mdss.yaml
index f5acf528d0e4..b9087a06198c 100644
--- a/Documentation/devicetree/bindings/display/msm/qcom,sm8350-mdss.yaml
+++ b/Documentation/devicetree/bindings/display/msm/qcom,sm8350-mdss.yaml
@@ -236,6 +236,7 @@ examples:
port@1 {
reg = <1>;
dsi0_out: endpoint {
+ remote-endpoint = <&panel0_in>;
};
};
};
diff --git a/Documentation/devicetree/bindings/display/msm/qcom,sm8450-mdss.yaml b/Documentation/devicetree/bindings/display/msm/qcom,sm8450-mdss.yaml
index 747a2e9665f4..800144f1c7e2 100644
--- a/Documentation/devicetree/bindings/display/msm/qcom,sm8450-mdss.yaml
+++ b/Documentation/devicetree/bindings/display/msm/qcom,sm8450-mdss.yaml
@@ -243,6 +243,7 @@ examples:
port@1 {
reg = <1>;
dsi0_out: endpoint {
+ remote-endpoint = <&panel0_in>;
};
};
};
@@ -338,6 +339,7 @@ examples:
port@1 {
reg = <1>;
dsi1_out: endpoint {
+ remote-endpoint = <&panel1_in>;
};
};
};
diff --git a/Documentation/devicetree/bindings/display/msm/qcom,sm8550-mdss.yaml b/Documentation/devicetree/bindings/display/msm/qcom,sm8550-mdss.yaml
index 59192c59ddb9..977c2fb1595c 100644
--- a/Documentation/devicetree/bindings/display/msm/qcom,sm8550-mdss.yaml
+++ b/Documentation/devicetree/bindings/display/msm/qcom,sm8550-mdss.yaml
@@ -239,6 +239,7 @@ examples:
port@1 {
reg = <1>;
dsi0_out: endpoint {
+ remote-endpoint = <&panel0_in>;
};
};
};
@@ -328,6 +329,7 @@ examples:
port@1 {
reg = <1>;
dsi1_out: endpoint {
+ remote-endpoint = <&panel1_in>;
};
};
};
diff --git a/Documentation/devicetree/bindings/display/msm/qcom,sm8650-mdss.yaml b/Documentation/devicetree/bindings/display/msm/qcom,sm8650-mdss.yaml
index 0f7f79527748..05cc2f9753ce 100644
--- a/Documentation/devicetree/bindings/display/msm/qcom,sm8650-mdss.yaml
+++ b/Documentation/devicetree/bindings/display/msm/qcom,sm8650-mdss.yaml
@@ -227,6 +227,7 @@ examples:
port@1 {
reg = <1>;
dsi0_out: endpoint {
+ remote-endpoint = <&panel0_in>;
};
};
};
@@ -316,6 +317,7 @@ examples:
port@1 {
reg = <1>;
dsi1_out: endpoint {
+ remote-endpoint = <&panel1_in>;
};
};
};
diff --git a/Documentation/devicetree/bindings/display/msm/qcom,sm8750-mdss.yaml b/Documentation/devicetree/bindings/display/msm/qcom,sm8750-mdss.yaml
index 46dc0d28da29..0a8010f4d9d5 100644
--- a/Documentation/devicetree/bindings/display/msm/qcom,sm8750-mdss.yaml
+++ b/Documentation/devicetree/bindings/display/msm/qcom,sm8750-mdss.yaml
@@ -364,6 +364,7 @@ examples:
reg = <1>;

mdss_dsi1_out: endpoint {
+ remote-endpoint = <&panel1_in>;
};
};
};

--
2.53.0