* [PATCH 01/17] dt-bindings: phy: qcom,edp-phy: Document Nord eDP PHY
2026-09-11 15:36 [PATCH 00/17] Add Qualcomm Nord display and eDP PHY support Nabige Aala
@ 2026-09-11 15:36 ` Nabige Aala
2026-09-13 23:29 ` Dmitry Baryshkov
2026-09-11 15:36 ` [PATCH 02/17] dt-bindings: display/msm: dp-controller: Document Nord DP Nabige Aala
` (15 subsequent siblings)
16 siblings, 1 reply; 36+ messages in thread
From: Nabige Aala @ 2026-09-11 15:36 UTC (permalink / raw)
To: Vinod Koul, Neil Armstrong, Manivannan Sadhasivam, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson, Rob Clark,
Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang, Sean Paul,
Marijn Suijten, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Kuogee Hsieh
Cc: linux-arm-msm, linux-phy, devicetree, linux-kernel, dri-devel,
freedreno, Ritesh Kumar, Mahadevan P, Nabige Aala
From: Mahadevan P <mahadevan.p@oss.qualcomm.com>
Add the compatible for the eDP PHY found on the Qualcomm Nord SoC.
Signed-off-by: Mahadevan P <mahadevan.p@oss.qualcomm.com>
Signed-off-by: Nabige Aala <nabige.aala@oss.qualcomm.com>
---
Documentation/devicetree/bindings/phy/qcom,edp-phy.yaml | 1 +
1 file changed, 1 insertion(+)
diff --git a/Documentation/devicetree/bindings/phy/qcom,edp-phy.yaml b/Documentation/devicetree/bindings/phy/qcom,edp-phy.yaml
index 0bf8bf4f66ac..91d7a5c8e19a 100644
--- a/Documentation/devicetree/bindings/phy/qcom,edp-phy.yaml
+++ b/Documentation/devicetree/bindings/phy/qcom,edp-phy.yaml
@@ -19,6 +19,7 @@ properties:
oneOf:
- enum:
- qcom,glymur-dp-phy
+ - qcom,nord-dp-phy
- qcom,sa8775p-edp-phy
- qcom,sc7280-edp-phy
- qcom,sc8180x-edp-phy
--
2.34.1
^ permalink raw reply [flat|nested] 36+ messages in thread* Re: [PATCH 01/17] dt-bindings: phy: qcom,edp-phy: Document Nord eDP PHY
2026-09-11 15:36 ` [PATCH 01/17] dt-bindings: phy: qcom,edp-phy: Document Nord eDP PHY Nabige Aala
@ 2026-09-13 23:29 ` Dmitry Baryshkov
0 siblings, 0 replies; 36+ messages in thread
From: Dmitry Baryshkov @ 2026-09-13 23:29 UTC (permalink / raw)
To: Nabige Aala
Cc: Vinod Koul, Neil Armstrong, Manivannan Sadhasivam, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson, Rob Clark,
Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang, Sean Paul,
Marijn Suijten, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Kuogee Hsieh,
linux-arm-msm, linux-phy, devicetree, linux-kernel, dri-devel,
freedreno, Ritesh Kumar, Mahadevan P
On Fri, Sep 11, 2026 at 09:06:32PM +0530, Nabige Aala wrote:
> From: Mahadevan P <mahadevan.p@oss.qualcomm.com>
>
> Add the compatible for the eDP PHY found on the Qualcomm Nord SoC.
>
> Signed-off-by: Mahadevan P <mahadevan.p@oss.qualcomm.com>
> Signed-off-by: Nabige Aala <nabige.aala@oss.qualcomm.com>
> ---
> Documentation/devicetree/bindings/phy/qcom,edp-phy.yaml | 1 +
> 1 file changed, 1 insertion(+)
Does it use ref clock?
>
> diff --git a/Documentation/devicetree/bindings/phy/qcom,edp-phy.yaml b/Documentation/devicetree/bindings/phy/qcom,edp-phy.yaml
> index 0bf8bf4f66ac..91d7a5c8e19a 100644
> --- a/Documentation/devicetree/bindings/phy/qcom,edp-phy.yaml
> +++ b/Documentation/devicetree/bindings/phy/qcom,edp-phy.yaml
> @@ -19,6 +19,7 @@ properties:
> oneOf:
> - enum:
> - qcom,glymur-dp-phy
> + - qcom,nord-dp-phy
> - qcom,sa8775p-edp-phy
> - qcom,sc7280-edp-phy
> - qcom,sc8180x-edp-phy
>
> --
> 2.34.1
>
--
With best wishes
Dmitry
^ permalink raw reply [flat|nested] 36+ messages in thread
* [PATCH 02/17] dt-bindings: display/msm: dp-controller: Document Nord DP
2026-09-11 15:36 [PATCH 00/17] Add Qualcomm Nord display and eDP PHY support Nabige Aala
2026-09-11 15:36 ` [PATCH 01/17] dt-bindings: phy: qcom,edp-phy: Document Nord eDP PHY Nabige Aala
@ 2026-09-11 15:36 ` Nabige Aala
2026-09-13 7:51 ` Krzysztof Kozlowski
2026-09-13 23:30 ` Dmitry Baryshkov
2026-09-11 15:36 ` [PATCH 03/17] dt-bindings: display/msm: Document Nord MDSS Nabige Aala
` (14 subsequent siblings)
16 siblings, 2 replies; 36+ messages in thread
From: Nabige Aala @ 2026-09-11 15:36 UTC (permalink / raw)
To: Vinod Koul, Neil Armstrong, Manivannan Sadhasivam, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson, Rob Clark,
Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang, Sean Paul,
Marijn Suijten, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Kuogee Hsieh
Cc: linux-arm-msm, linux-phy, devicetree, linux-kernel, dri-devel,
freedreno, Ritesh Kumar, Mahadevan P, Nabige Aala
From: Mahadevan P <mahadevan.p@oss.qualcomm.com>
Add the compatible for the DisplayPort controller found on the
Qualcomm Nord SoC.
Signed-off-by: Mahadevan P <mahadevan.p@oss.qualcomm.com>
Signed-off-by: Nabige Aala <nabige.aala@oss.qualcomm.com>
---
Documentation/devicetree/bindings/display/msm/dp-controller.yaml | 1 +
1 file changed, 1 insertion(+)
diff --git a/Documentation/devicetree/bindings/display/msm/dp-controller.yaml b/Documentation/devicetree/bindings/display/msm/dp-controller.yaml
index 094a6383bb77..8d980acb1a16 100644
--- a/Documentation/devicetree/bindings/display/msm/dp-controller.yaml
+++ b/Documentation/devicetree/bindings/display/msm/dp-controller.yaml
@@ -19,6 +19,7 @@ properties:
oneOf:
- enum:
- qcom,glymur-dp
+ - qcom,nord-dp
- qcom,sa8775p-dp
- qcom,sc7180-dp
- qcom,sc7280-dp
--
2.34.1
^ permalink raw reply [flat|nested] 36+ messages in thread* Re: [PATCH 02/17] dt-bindings: display/msm: dp-controller: Document Nord DP
2026-09-11 15:36 ` [PATCH 02/17] dt-bindings: display/msm: dp-controller: Document Nord DP Nabige Aala
@ 2026-09-13 7:51 ` Krzysztof Kozlowski
2026-09-13 23:30 ` Dmitry Baryshkov
1 sibling, 0 replies; 36+ messages in thread
From: Krzysztof Kozlowski @ 2026-09-13 7:51 UTC (permalink / raw)
To: Nabige Aala
Cc: Vinod Koul, Neil Armstrong, Manivannan Sadhasivam, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson, Rob Clark,
Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang, Sean Paul,
Marijn Suijten, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Kuogee Hsieh,
linux-arm-msm, linux-phy, devicetree, linux-kernel, dri-devel,
freedreno, Ritesh Kumar, Mahadevan P
On Fri, Sep 11, 2026 at 09:06:33PM +0530, Nabige Aala wrote:
> From: Mahadevan P <mahadevan.p@oss.qualcomm.com>
>
> Add the compatible for the DisplayPort controller found on the
> Qualcomm Nord SoC.
Same comment to other Qualcomm patches... say something useful instead.
See also writing bindings.
>
> Signed-off-by: Mahadevan P <mahadevan.p@oss.qualcomm.com>
> Signed-off-by: Nabige Aala <nabige.aala@oss.qualcomm.com>
> ---
> Documentation/devicetree/bindings/display/msm/dp-controller.yaml | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/Documentation/devicetree/bindings/display/msm/dp-controller.yaml b/Documentation/devicetree/bindings/display/msm/dp-controller.yaml
> index 094a6383bb77..8d980acb1a16 100644
> --- a/Documentation/devicetree/bindings/display/msm/dp-controller.yaml
> +++ b/Documentation/devicetree/bindings/display/msm/dp-controller.yaml
> @@ -19,6 +19,7 @@ properties:
> oneOf:
> - enum:
> - qcom,glymur-dp
> + - qcom,nord-dp
> - qcom,sa8775p-dp
> - qcom,sc7180-dp
> - qcom,sc7280-dp
Not complete.
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 36+ messages in thread
* Re: [PATCH 02/17] dt-bindings: display/msm: dp-controller: Document Nord DP
2026-09-11 15:36 ` [PATCH 02/17] dt-bindings: display/msm: dp-controller: Document Nord DP Nabige Aala
2026-09-13 7:51 ` Krzysztof Kozlowski
@ 2026-09-13 23:30 ` Dmitry Baryshkov
1 sibling, 0 replies; 36+ messages in thread
From: Dmitry Baryshkov @ 2026-09-13 23:30 UTC (permalink / raw)
To: Nabige Aala
Cc: Vinod Koul, Neil Armstrong, Manivannan Sadhasivam, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson, Rob Clark,
Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang, Sean Paul,
Marijn Suijten, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Kuogee Hsieh,
linux-arm-msm, linux-phy, devicetree, linux-kernel, dri-devel,
freedreno, Ritesh Kumar, Mahadevan P
On Fri, Sep 11, 2026 at 09:06:33PM +0530, Nabige Aala wrote:
> From: Mahadevan P <mahadevan.p@oss.qualcomm.com>
>
> Add the compatible for the DisplayPort controller found on the
> Qualcomm Nord SoC.
>
> Signed-off-by: Mahadevan P <mahadevan.p@oss.qualcomm.com>
> Signed-off-by: Nabige Aala <nabige.aala@oss.qualcomm.com>
> ---
> Documentation/devicetree/bindings/display/msm/dp-controller.yaml | 1 +
> 1 file changed, 1 insertion(+)
Incomplete bindings. Check the conditions in the second part of the file
>
> diff --git a/Documentation/devicetree/bindings/display/msm/dp-controller.yaml b/Documentation/devicetree/bindings/display/msm/dp-controller.yaml
> index 094a6383bb77..8d980acb1a16 100644
> --- a/Documentation/devicetree/bindings/display/msm/dp-controller.yaml
> +++ b/Documentation/devicetree/bindings/display/msm/dp-controller.yaml
> @@ -19,6 +19,7 @@ properties:
> oneOf:
> - enum:
> - qcom,glymur-dp
> + - qcom,nord-dp
> - qcom,sa8775p-dp
> - qcom,sc7180-dp
> - qcom,sc7280-dp
>
> --
> 2.34.1
>
--
With best wishes
Dmitry
^ permalink raw reply [flat|nested] 36+ messages in thread
* [PATCH 03/17] dt-bindings: display/msm: Document Nord MDSS
2026-09-11 15:36 [PATCH 00/17] Add Qualcomm Nord display and eDP PHY support Nabige Aala
2026-09-11 15:36 ` [PATCH 01/17] dt-bindings: phy: qcom,edp-phy: Document Nord eDP PHY Nabige Aala
2026-09-11 15:36 ` [PATCH 02/17] dt-bindings: display/msm: dp-controller: Document Nord DP Nabige Aala
@ 2026-09-11 15:36 ` Nabige Aala
2026-09-13 7:50 ` Krzysztof Kozlowski
2026-09-13 23:31 ` Dmitry Baryshkov
2026-09-11 15:36 ` [PATCH 04/17] drm/msm/dpu: Add support for DPU 12.1 on Nord Nabige Aala
` (13 subsequent siblings)
16 siblings, 2 replies; 36+ messages in thread
From: Nabige Aala @ 2026-09-11 15:36 UTC (permalink / raw)
To: Vinod Koul, Neil Armstrong, Manivannan Sadhasivam, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson, Rob Clark,
Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang, Sean Paul,
Marijn Suijten, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Kuogee Hsieh
Cc: linux-arm-msm, linux-phy, devicetree, linux-kernel, dri-devel,
freedreno, Ritesh Kumar, Mahadevan P, Nabige Aala
From: Mahadevan P <mahadevan.p@oss.qualcomm.com>
Add the binding for the display subsystem (MDSS) found on the Qualcomm
Nord SoC. Nord is MDSS 12.1, DP-only (no DSI), with two independent DP
controllers.
Signed-off-by: Mahadevan P <mahadevan.p@oss.qualcomm.com>
Signed-off-by: Nabige Aala <nabige.aala@oss.qualcomm.com>
---
.../bindings/display/msm/qcom,nord-mdss.yaml | 98 ++++++++++++++++++++++
1 file changed, 98 insertions(+)
diff --git a/Documentation/devicetree/bindings/display/msm/qcom,nord-mdss.yaml b/Documentation/devicetree/bindings/display/msm/qcom,nord-mdss.yaml
new file mode 100644
index 000000000000..0b0cacdca9db
--- /dev/null
+++ b/Documentation/devicetree/bindings/display/msm/qcom,nord-mdss.yaml
@@ -0,0 +1,98 @@
+# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/display/msm/qcom,nord-mdss.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Qualcomm Nord display subsystem (MDSS)
+
+maintainers:
+ - Mahadevan P <mahadevan.p@oss.qualcomm.com>
+
+description:
+ Nord display subsystem consists of MDSS (display controller), DPU 1499A
+ (display processing unit), and display interface controllers (DP only, no DSI).
+ This is MDSS 12.1, DP-only, with 2 independent DP controllers.
+
+$ref: /schemas/display/msm/mdss-common.yaml#
+
+properties:
+ compatible:
+ const: qcom,nord-mdss
+
+ clocks:
+ items:
+ - description: Display AHB
+ - description: Display hf AXI
+ - description: Display core
+
+ clock-names:
+ items:
+ - const: iface
+ - const: bus
+ - const: core
+
+ iommus:
+ maxItems: 1
+
+ interconnects:
+ items:
+ - description: Interconnect path from mdp0 port to the data bus
+ - description: Interconnect path from CPU to the reg bus
+
+ interconnect-names:
+ items:
+ - const: mdp0-mem
+ - const: cpu-cfg
+
+patternProperties:
+ "^display-controller@[0-9a-f]+$":
+ type: object
+ additionalProperties: true
+ properties:
+ compatible:
+ const: qcom,nord-dpu
+
+ "^displayport-controller@[0-9a-f]+$":
+ type: object
+ additionalProperties: true
+ properties:
+ compatible:
+ const: qcom,nord-dp
+
+ "^phy@[0-9a-f]+$":
+ type: object
+ additionalProperties: true
+ properties:
+ compatible:
+ const: qcom,nord-dp-phy
+
+required:
+ - compatible
+
+unevaluatedProperties: false
+
+examples:
+ - |
+ #include <dt-bindings/clock/qcom,dispcc-nord.h>
+ #include <dt-bindings/interrupt-controller/arm-gic.h>
+ #include <dt-bindings/power/qcom,rpmhpd.h>
+
+ display-subsystem@ae00000 {
+ compatible = "qcom,nord-mdss";
+ reg = <0x0ae00000 0x1000>;
+ reg-names = "mdss";
+ power-domains = <&dispcc_gdsc>;
+ clocks = <&dispcc DISPCC_MDSS_AHB_CLK>,
+ <&gcc GCC_DISP_HF_AXI_CLK>,
+ <&dispcc DISPCC_MDSS_MDP_CLK>;
+ clock-names = "iface", "bus", "core";
+ resets = <&dispcc DISP_CC_MDSS_CORE_BCR>;
+ interrupts = <GIC_SPI 83 IRQ_TYPE_LEVEL_HIGH>;
+ interrupt-controller;
+ #interrupt-cells = <1>;
+ iommus = <&apps_smmu 0x800 0x420>;
+ #address-cells = <1>;
+ #size-cells = <1>;
+ ranges;
+ };
--
2.34.1
^ permalink raw reply [flat|nested] 36+ messages in thread* Re: [PATCH 03/17] dt-bindings: display/msm: Document Nord MDSS
2026-09-11 15:36 ` [PATCH 03/17] dt-bindings: display/msm: Document Nord MDSS Nabige Aala
@ 2026-09-13 7:50 ` Krzysztof Kozlowski
2026-09-13 23:31 ` Dmitry Baryshkov
1 sibling, 0 replies; 36+ messages in thread
From: Krzysztof Kozlowski @ 2026-09-13 7:50 UTC (permalink / raw)
To: Nabige Aala
Cc: Vinod Koul, Neil Armstrong, Manivannan Sadhasivam, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson, Rob Clark,
Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang, Sean Paul,
Marijn Suijten, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Kuogee Hsieh,
linux-arm-msm, linux-phy, devicetree, linux-kernel, dri-devel,
freedreno, Ritesh Kumar, Mahadevan P
On Fri, Sep 11, 2026 at 09:06:34PM +0530, Nabige Aala wrote:
> + display-subsystem@ae00000 {
> + compatible = "qcom,nord-mdss";
> + reg = <0x0ae00000 0x1000>;
> + reg-names = "mdss";
> + power-domains = <&dispcc_gdsc>;
> + clocks = <&dispcc DISPCC_MDSS_AHB_CLK>,
> + <&gcc GCC_DISP_HF_AXI_CLK>,
> + <&dispcc DISPCC_MDSS_MDP_CLK>;
> + clock-names = "iface", "bus", "core";
> + resets = <&dispcc DISP_CC_MDSS_CORE_BCR>;
> + interrupts = <GIC_SPI 83 IRQ_TYPE_LEVEL_HIGH>;
> + interrupt-controller;
> + #interrupt-cells = <1>;
> + iommus = <&apps_smmu 0x800 0x420>;
> + #address-cells = <1>;
> + #size-cells = <1>;
> + ranges;
Make the example complete here.
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 36+ messages in thread* Re: [PATCH 03/17] dt-bindings: display/msm: Document Nord MDSS
2026-09-11 15:36 ` [PATCH 03/17] dt-bindings: display/msm: Document Nord MDSS Nabige Aala
2026-09-13 7:50 ` Krzysztof Kozlowski
@ 2026-09-13 23:31 ` Dmitry Baryshkov
1 sibling, 0 replies; 36+ messages in thread
From: Dmitry Baryshkov @ 2026-09-13 23:31 UTC (permalink / raw)
To: Nabige Aala
Cc: Vinod Koul, Neil Armstrong, Manivannan Sadhasivam, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson, Rob Clark,
Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang, Sean Paul,
Marijn Suijten, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Kuogee Hsieh,
linux-arm-msm, linux-phy, devicetree, linux-kernel, dri-devel,
freedreno, Ritesh Kumar, Mahadevan P
On Fri, Sep 11, 2026 at 09:06:34PM +0530, Nabige Aala wrote:
> From: Mahadevan P <mahadevan.p@oss.qualcomm.com>
>
> Add the binding for the display subsystem (MDSS) found on the Qualcomm
> Nord SoC. Nord is MDSS 12.1, DP-only (no DSI), with two independent DP
> controllers.
>
> Signed-off-by: Mahadevan P <mahadevan.p@oss.qualcomm.com>
> Signed-off-by: Nabige Aala <nabige.aala@oss.qualcomm.com>
> ---
> .../bindings/display/msm/qcom,nord-mdss.yaml | 98 ++++++++++++++++++++++
> 1 file changed, 98 insertions(+)
>
> diff --git a/Documentation/devicetree/bindings/display/msm/qcom,nord-mdss.yaml b/Documentation/devicetree/bindings/display/msm/qcom,nord-mdss.yaml
> new file mode 100644
> index 000000000000..0b0cacdca9db
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/display/msm/qcom,nord-mdss.yaml
> @@ -0,0 +1,98 @@
> +# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/display/msm/qcom,nord-mdss.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: Qualcomm Nord display subsystem (MDSS)
> +
> +maintainers:
> + - Mahadevan P <mahadevan.p@oss.qualcomm.com>
> +
> +description:
> + Nord display subsystem consists of MDSS (display controller), DPU 1499A
> + (display processing unit), and display interface controllers (DP only, no DSI).
> + This is MDSS 12.1, DP-only, with 2 independent DP controllers.
> +
> +$ref: /schemas/display/msm/mdss-common.yaml#
> +
> +properties:
> + compatible:
> + const: qcom,nord-mdss
> +
> + clocks:
> + items:
> + - description: Display AHB
> + - description: Display hf AXI
> + - description: Display core
> +
> + clock-names:
> + items:
> + - const: iface
> + - const: bus
> + - const: core
> +
> + iommus:
> + maxItems: 1
> +
> + interconnects:
> + items:
> + - description: Interconnect path from mdp0 port to the data bus
> + - description: Interconnect path from CPU to the reg bus
> +
> + interconnect-names:
> + items:
> + - const: mdp0-mem
> + - const: cpu-cfg
> +
> +patternProperties:
> + "^display-controller@[0-9a-f]+$":
> + type: object
> + additionalProperties: true
> + properties:
> + compatible:
> + const: qcom,nord-dpu
> +
> + "^displayport-controller@[0-9a-f]+$":
> + type: object
> + additionalProperties: true
> + properties:
> + compatible:
> + const: qcom,nord-dp
> +
> + "^phy@[0-9a-f]+$":
> + type: object
> + additionalProperties: true
> + properties:
> + compatible:
> + const: qcom,nord-dp-phy
> +
> +required:
> + - compatible
> +
> +unevaluatedProperties: false
> +
> +examples:
> + - |
> + #include <dt-bindings/clock/qcom,dispcc-nord.h>
> + #include <dt-bindings/interrupt-controller/arm-gic.h>
> + #include <dt-bindings/power/qcom,rpmhpd.h>
> +
> + display-subsystem@ae00000 {
> + compatible = "qcom,nord-mdss";
> + reg = <0x0ae00000 0x1000>;
> + reg-names = "mdss";
> + power-domains = <&dispcc_gdsc>;
> + clocks = <&dispcc DISPCC_MDSS_AHB_CLK>,
> + <&gcc GCC_DISP_HF_AXI_CLK>,
> + <&dispcc DISPCC_MDSS_MDP_CLK>;
> + clock-names = "iface", "bus", "core";
> + resets = <&dispcc DISP_CC_MDSS_CORE_BCR>;
> + interrupts = <GIC_SPI 83 IRQ_TYPE_LEVEL_HIGH>;
> + interrupt-controller;
> + #interrupt-cells = <1>;
> + iommus = <&apps_smmu 0x800 0x420>;
> + #address-cells = <1>;
> + #size-cells = <1>;
> + ranges;
No subdevices? Not even a DPU?
> + };
>
> --
> 2.34.1
>
--
With best wishes
Dmitry
^ permalink raw reply [flat|nested] 36+ messages in thread
* [PATCH 04/17] drm/msm/dpu: Add support for DPU 12.1 on Nord
2026-09-11 15:36 [PATCH 00/17] Add Qualcomm Nord display and eDP PHY support Nabige Aala
` (2 preceding siblings ...)
2026-09-11 15:36 ` [PATCH 03/17] dt-bindings: display/msm: Document Nord MDSS Nabige Aala
@ 2026-09-11 15:36 ` Nabige Aala
2026-09-13 23:45 ` Dmitry Baryshkov
2026-09-14 8:06 ` Konrad Dybcio
2026-09-11 15:36 ` [PATCH 05/17] drm/msm: mdss: Add support for MDSS " Nabige Aala
` (12 subsequent siblings)
16 siblings, 2 replies; 36+ messages in thread
From: Nabige Aala @ 2026-09-11 15:36 UTC (permalink / raw)
To: Vinod Koul, Neil Armstrong, Manivannan Sadhasivam, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson, Rob Clark,
Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang, Sean Paul,
Marijn Suijten, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Kuogee Hsieh
Cc: linux-arm-msm, linux-phy, devicetree, linux-kernel, dri-devel,
freedreno, Ritesh Kumar, Mahadevan P, Nabige Aala
From: Mahadevan P <mahadevan.p@oss.qualcomm.com>
Add the DPU catalog entry for the Qualcomm Nord SoC (MDSS 12.1, DPU
1499A). Nord is DP-only with no DSI, and provides 8 DSPP blocks, 2
writeback blocks, 8 interfaces and 2 DP controllers.
Extend enum dpu_intf with INTF_9 and INTF_10, which Nord is the first
platform to use.
Note: register addresses and xin_id values in the catalog are borrowed
from sm8750 and precedent platforms and are marked with FIXME(REG_ADDR)
and FIXME(XIU_MAP); they need verification against a real Nord register
map before production use.
Signed-off-by: Mahadevan P <mahadevan.p@oss.qualcomm.com>
Signed-off-by: Nabige Aala <nabige.aala@oss.qualcomm.com>
---
.../gpu/drm/msm/disp/dpu1/catalog/dpu_12_1_nord.h | 588 +++++++++++++++++++++
drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c | 1 +
drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h | 1 +
drivers/gpu/drm/msm/disp/dpu1/dpu_hw_mdss.h | 2 +
drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c | 1 +
5 files changed, 593 insertions(+)
diff --git a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_12_1_nord.h b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_12_1_nord.h
new file mode 100644
index 000000000000..8eb18752f3c4
--- /dev/null
+++ b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_12_1_nord.h
@@ -0,0 +1,588 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * Copyright (c) 2025 Qualcomm Innovation Center, Inc. All rights reserved.
+ * Copyright (c) 2015-2018, 2020 The Linux Foundation. All rights reserved.
+ */
+
+#ifndef _DPU_12_1_NORD_H
+#define _DPU_12_1_NORD_H
+
+/*
+ * NORD DPU 12.1 catalog header. Generated from hardware summary YAML for
+ * MDSS 12.1 - DPU 1499A (Nordschleife). This is a DP-only chip with no DSI.
+ *
+ * All register addresses and xin_id values below are borrowed from the
+ * reference chip (sm8750, MDSS 12.0) and precedent chips (Lemans, Glymur).
+ * Nord's YAML provides only block counts and feature statements, not addresses.
+ * See FIXME(REG_ADDR) markers throughout for borrowed values requiring
+ * verification against a real Nord register map before production use.
+ *
+ * Key differences vs sm8750:
+ * - 8 DSPP blocks (4 full + 4 lite) vs sm8750's 4
+ * - 2 writeback blocks (WB1, WB2) vs sm8750's 1 (WB2)
+ * - 8 interfaces (INTF_0,3,4,6,7,8,9,10) vs sm8750's 4 (INTF_0,1,2,3)
+ * - 2 DP controllers (DP0, DP1) vs sm8750's 1 (DP0 only)
+ * - No DSI (removed entirely)
+ */
+
+static const struct dpu_caps nord_dpu_caps = {
+ .max_mixer_width = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
+ .max_mixer_blendstages = 0xb,
+ .has_src_split = true,
+ .has_dim_layer = true,
+ .has_idle_pc = true,
+ .has_3d_merge = true,
+ .max_linewidth = 8192,
+ .pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE,
+};
+
+static const struct dpu_mdp_cfg nord_mdp = {
+ .name = "top_0",
+ .base = 0, .len = 0x494,
+ .clk_ctrls = {
+ [DPU_CLK_CTRL_REG_DMA] = { .reg_off = 0x2bc, .bit_off = 20 },
+ },
+};
+
+static const struct dpu_ctl_cfg nord_ctl[] = {
+ {
+ .name = "ctl_0", .id = CTL_0,
+ .base = 0x15000, .len = 0x1000,
+ .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 9),
+ }, {
+ .name = "ctl_1", .id = CTL_1,
+ .base = 0x16000, .len = 0x1000,
+ .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 10),
+ }, {
+ .name = "ctl_2", .id = CTL_2,
+ .base = 0x17000, .len = 0x1000,
+ .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 11),
+ }, {
+ .name = "ctl_3", .id = CTL_3,
+ .base = 0x18000, .len = 0x1000,
+ .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 12),
+ }, {
+ .name = "ctl_4", .id = CTL_4,
+ .base = 0x19000, .len = 0x1000,
+ .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 13),
+ }, {
+ .name = "ctl_5", .id = CTL_5,
+ .base = 0x1a000, .len = 0x1000,
+ .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 23),
+ },
+};
+
+static const struct dpu_sspp_cfg nord_sspp[] = {
+ {
+ .name = "sspp_0", .id = SSPP_VIG0,
+ .base = 0x4000, .len = 0x344,
+ .features = VIG_SDM845_MASK_SDMA,
+ .sblk = &dpu_vig_sblk_qseed3_3_4,
+ .xin_id = 0,
+ .type = SSPP_TYPE_VIG,
+ }, {
+ .name = "sspp_1", .id = SSPP_VIG1,
+ .base = 0x6000, .len = 0x344,
+ .features = VIG_SDM845_MASK_SDMA,
+ .sblk = &dpu_vig_sblk_qseed3_3_4,
+ .xin_id = 4,
+ .type = SSPP_TYPE_VIG,
+ }, {
+ .name = "sspp_2", .id = SSPP_VIG2,
+ .base = 0x8000, .len = 0x344,
+ .features = VIG_SDM845_MASK_SDMA,
+ .sblk = &dpu_vig_sblk_qseed3_3_4,
+ .xin_id = 8,
+ .type = SSPP_TYPE_VIG,
+ }, {
+ .name = "sspp_3", .id = SSPP_VIG3,
+ .base = 0xa000, .len = 0x344,
+ .features = VIG_SDM845_MASK_SDMA,
+ .sblk = &dpu_vig_sblk_qseed3_3_4,
+ .xin_id = 12,
+ .type = SSPP_TYPE_VIG,
+ }, {
+ .name = "sspp_8", .id = SSPP_DMA0,
+ .base = 0x24000, .len = 0x344,
+ .features = DMA_SDM845_MASK_SDMA,
+ .sblk = &dpu_dma_sblk,
+ .xin_id = 1,
+ .type = SSPP_TYPE_DMA,
+ }, {
+ .name = "sspp_9", .id = SSPP_DMA1,
+ .base = 0x26000, .len = 0x344,
+ .features = DMA_SDM845_MASK_SDMA,
+ .sblk = &dpu_dma_sblk,
+ .xin_id = 5,
+ .type = SSPP_TYPE_DMA,
+ }, {
+ .name = "sspp_10", .id = SSPP_DMA2,
+ .base = 0x28000, .len = 0x344,
+ .features = DMA_SDM845_MASK_SDMA,
+ .sblk = &dpu_dma_sblk,
+ .xin_id = 9,
+ .type = SSPP_TYPE_DMA,
+ }, {
+ .name = "sspp_11", .id = SSPP_DMA3,
+ .base = 0x2a000, .len = 0x344,
+ .features = DMA_SDM845_MASK_SDMA,
+ .sblk = &dpu_dma_sblk,
+ .xin_id = 13,
+ .type = SSPP_TYPE_DMA,
+ }, {
+ .name = "sspp_12", .id = SSPP_DMA4,
+ .base = 0x2c000, .len = 0x344,
+ .features = DMA_CURSOR_SDM845_MASK_SDMA,
+ .sblk = &dpu_dma_sblk,
+ .xin_id = 14,
+ .type = SSPP_TYPE_DMA,
+ }, {
+ .name = "sspp_13", .id = SSPP_DMA5,
+ .base = 0x2e000, .len = 0x344,
+ .features = DMA_CURSOR_SDM845_MASK_SDMA,
+ .sblk = &dpu_dma_sblk,
+ .xin_id = 15,
+ .type = SSPP_TYPE_DMA,
+ },
+};
+
+static const struct dpu_lm_cfg nord_lm[] = {
+ {
+ .name = "lm_0", .id = LM_0,
+ .base = 0x44000, .len = 0x400,
+ .features = MIXER_MSM8998_MASK,
+ .sblk = &sm8750_lm_sblk,
+ .lm_pair = LM_1,
+ .pingpong = PINGPONG_0,
+ .dspp = DSPP_0,
+ }, {
+ .name = "lm_1", .id = LM_1,
+ .base = 0x45000, .len = 0x400,
+ .features = MIXER_MSM8998_MASK,
+ .sblk = &sm8750_lm_sblk,
+ .lm_pair = LM_0,
+ .pingpong = PINGPONG_1,
+ .dspp = DSPP_1,
+ }, {
+ .name = "lm_2", .id = LM_2,
+ .base = 0x46000, .len = 0x400,
+ .features = MIXER_MSM8998_MASK,
+ .sblk = &sm8750_lm_sblk,
+ .lm_pair = LM_3,
+ .pingpong = PINGPONG_2,
+ .dspp = DSPP_2,
+ }, {
+ .name = "lm_3", .id = LM_3,
+ .base = 0x47000, .len = 0x400,
+ .features = MIXER_MSM8998_MASK,
+ .sblk = &sm8750_lm_sblk,
+ .lm_pair = LM_2,
+ .pingpong = PINGPONG_3,
+ .dspp = DSPP_3,
+ }, {
+ .name = "lm_4", .id = LM_4,
+ .base = 0x48000, .len = 0x400,
+ .features = MIXER_MSM8998_MASK,
+ .sblk = &sm8750_lm_sblk,
+ .lm_pair = LM_5,
+ .pingpong = PINGPONG_4,
+ }, {
+ .name = "lm_5", .id = LM_5,
+ .base = 0x49000, .len = 0x400,
+ .features = MIXER_MSM8998_MASK,
+ .sblk = &sm8750_lm_sblk,
+ .lm_pair = LM_4,
+ .pingpong = PINGPONG_5,
+ }, {
+ .name = "lm_6", .id = LM_6,
+ .base = 0x4a000, .len = 0x400,
+ .features = MIXER_MSM8998_MASK,
+ .sblk = &sm8750_lm_sblk,
+ .lm_pair = LM_7,
+ .pingpong = PINGPONG_6,
+ }, {
+ .name = "lm_7", .id = LM_7,
+ .base = 0x4b000, .len = 0x400,
+ .features = MIXER_MSM8998_MASK,
+ .sblk = &sm8750_lm_sblk,
+ .lm_pair = LM_6,
+ .pingpong = PINGPONG_7,
+ },
+};
+
+/*
+ * Nord has 8 DSPP blocks: 4 full-featured (DSPP0-3) and 4 lite variants
+ * (DSPP4-7). The driver has no separate lite-DSPP struct, so all 8 are
+ * modeled with the same dpu_dspp_cfg/dpu_dspp_sblk structure. Lite variants
+ * have reduced features, but this is handled at runtime via feature flags,
+ * not via separate catalog entries.
+ * FIXME(REG_ADDR): DSPP4-7 base addresses extended via 0x2000 stride from
+ * sm8750's DSPP3 base (0x5a000). Verify against real Nord register map.
+ */
+static const struct dpu_dspp_cfg nord_dspp[] = {
+ {
+ .name = "dspp_0", .id = DSPP_0,
+ .base = 0x54000, .len = 0x1800,
+ .sblk = &sm8750_dspp_sblk,
+ }, {
+ .name = "dspp_1", .id = DSPP_1,
+ .base = 0x56000, .len = 0x1800,
+ .sblk = &sm8750_dspp_sblk,
+ }, {
+ .name = "dspp_2", .id = DSPP_2,
+ .base = 0x58000, .len = 0x1800,
+ .sblk = &sm8750_dspp_sblk,
+ }, {
+ .name = "dspp_3", .id = DSPP_3,
+ .base = 0x5a000, .len = 0x1800,
+ .sblk = &sm8750_dspp_sblk,
+ }, {
+ .name = "dspp_4", .id = DSPP_4,
+ .base = 0x5c000, .len = 0x1800, /* FIXME(REG_ADDR): lite variant */
+ .sblk = &sm8750_dspp_sblk,
+ }, {
+ .name = "dspp_5", .id = DSPP_5,
+ .base = 0x5e000, .len = 0x1800, /* FIXME(REG_ADDR): lite variant */
+ .sblk = &sm8750_dspp_sblk,
+ }, {
+ .name = "dspp_6", .id = DSPP_6,
+ .base = 0x60000, .len = 0x1800, /* FIXME(REG_ADDR): lite variant */
+ .sblk = &sm8750_dspp_sblk,
+ }, {
+ .name = "dspp_7", .id = DSPP_7,
+ .base = 0x62000, .len = 0x1800, /* FIXME(REG_ADDR): lite variant */
+ .sblk = &sm8750_dspp_sblk,
+ },
+};
+
+static const struct dpu_pingpong_cfg nord_pp[] = {
+ {
+ .name = "pingpong_0", .id = PINGPONG_0,
+ .base = 0x69000, .len = 0,
+ .sblk = &sc7280_pp_sblk,
+ .merge_3d = MERGE_3D_0,
+ .intr_done = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 8),
+ }, {
+ .name = "pingpong_1", .id = PINGPONG_1,
+ .base = 0x6a000, .len = 0,
+ .sblk = &sc7280_pp_sblk,
+ .merge_3d = MERGE_3D_0,
+ .intr_done = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 9),
+ }, {
+ .name = "pingpong_2", .id = PINGPONG_2,
+ .base = 0x6b000, .len = 0,
+ .sblk = &sc7280_pp_sblk,
+ .merge_3d = MERGE_3D_1,
+ .intr_done = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 10),
+ }, {
+ .name = "pingpong_3", .id = PINGPONG_3,
+ .base = 0x6c000, .len = 0,
+ .sblk = &sc7280_pp_sblk,
+ .merge_3d = MERGE_3D_1,
+ .intr_done = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 11),
+ }, {
+ .name = "pingpong_4", .id = PINGPONG_4,
+ .base = 0x6d000, .len = 0,
+ .sblk = &sc7280_pp_sblk,
+ .merge_3d = MERGE_3D_2,
+ .intr_done = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 30),
+ }, {
+ .name = "pingpong_5", .id = PINGPONG_5,
+ .base = 0x6e000, .len = 0,
+ .sblk = &sc7280_pp_sblk,
+ .merge_3d = MERGE_3D_2,
+ .intr_done = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 31),
+ }, {
+ .name = "pingpong_6", .id = PINGPONG_6,
+ .base = 0x6f000, .len = 0,
+ .sblk = &sc7280_pp_sblk,
+ .merge_3d = MERGE_3D_3,
+ .intr_done = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 20),
+ }, {
+ .name = "pingpong_7", .id = PINGPONG_7,
+ .base = 0x70000, .len = 0,
+ .sblk = &sc7280_pp_sblk,
+ .merge_3d = MERGE_3D_3,
+ .intr_done = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 21),
+ }, {
+ .name = "pingpong_cwb_0", .id = PINGPONG_CWB_0,
+ .base = 0x66000, .len = 0,
+ .sblk = &sc7280_pp_sblk,
+ .merge_3d = MERGE_3D_4,
+ }, {
+ .name = "pingpong_cwb_1", .id = PINGPONG_CWB_1,
+ .base = 0x66400, .len = 0,
+ .sblk = &sc7280_pp_sblk,
+ .merge_3d = MERGE_3D_4,
+ }, {
+ .name = "pingpong_cwb_2", .id = PINGPONG_CWB_2,
+ .base = 0x7e000, .len = 0,
+ .sblk = &sc7280_pp_sblk,
+ .merge_3d = MERGE_3D_5,
+ }, {
+ .name = "pingpong_cwb_3", .id = PINGPONG_CWB_3,
+ .base = 0x7e400, .len = 0,
+ .sblk = &sc7280_pp_sblk,
+ .merge_3d = MERGE_3D_5,
+ },
+};
+
+static const struct dpu_merge_3d_cfg nord_merge_3d[] = {
+ {
+ .name = "merge_3d_0", .id = MERGE_3D_0,
+ .base = 0x4e000, .len = 0x1c,
+ }, {
+ .name = "merge_3d_1", .id = MERGE_3D_1,
+ .base = 0x4f000, .len = 0x1c,
+ }, {
+ .name = "merge_3d_2", .id = MERGE_3D_2,
+ .base = 0x50000, .len = 0x1c,
+ }, {
+ .name = "merge_3d_3", .id = MERGE_3D_3,
+ .base = 0x51000, .len = 0x1c,
+ }, {
+ .name = "merge_3d_4", .id = MERGE_3D_4,
+ .base = 0x66700, .len = 0x1c,
+ }, {
+ .name = "merge_3d_5", .id = MERGE_3D_5,
+ .base = 0x7e700, .len = 0x1c,
+ },
+};
+
+/*
+ * NOTE: Each display compression engine (DCE) contains dual hard
+ * slice DSC encoders so both share same base address but with
+ * its own different sub block address. Nord retains sm8750's
+ * topology of 8 DSC instances (2 per DCE × 4).
+ */
+static const struct dpu_dsc_cfg nord_dsc[] = {
+ {
+ .name = "dce_0_0", .id = DSC_0,
+ .base = 0x80000, .len = 0x8,
+ .features = BIT(DPU_DSC_NATIVE_42x_EN),
+ .sblk = &sm8750_dsc_sblk_0,
+ }, {
+ .name = "dce_0_1", .id = DSC_1,
+ .base = 0x80000, .len = 0x8,
+ .features = BIT(DPU_DSC_NATIVE_42x_EN),
+ .sblk = &sm8750_dsc_sblk_1,
+ }, {
+ .name = "dce_1_0", .id = DSC_2,
+ .base = 0x81000, .len = 0x8,
+ .features = BIT(DPU_DSC_NATIVE_42x_EN),
+ .sblk = &sm8750_dsc_sblk_0,
+ }, {
+ .name = "dce_1_1", .id = DSC_3,
+ .base = 0x81000, .len = 0x8,
+ .features = BIT(DPU_DSC_NATIVE_42x_EN),
+ .sblk = &sm8750_dsc_sblk_1,
+ }, {
+ .name = "dce_2_0", .id = DSC_4,
+ .base = 0x82000, .len = 0x8,
+ .features = BIT(DPU_DSC_NATIVE_42x_EN),
+ .sblk = &sm8750_dsc_sblk_0,
+ }, {
+ .name = "dce_2_1", .id = DSC_5,
+ .base = 0x82000, .len = 0x8,
+ .features = BIT(DPU_DSC_NATIVE_42x_EN),
+ .sblk = &sm8750_dsc_sblk_1,
+ }, {
+ .name = "dce_3_0", .id = DSC_6,
+ .base = 0x83000, .len = 0x8,
+ .features = BIT(DPU_DSC_NATIVE_42x_EN),
+ .sblk = &sm8750_dsc_sblk_0,
+ }, {
+ .name = "dce_3_1", .id = DSC_7,
+ .base = 0x83000, .len = 0x8,
+ .features = BIT(DPU_DSC_NATIVE_42x_EN),
+ .sblk = &sm8750_dsc_sblk_1,
+ },
+};
+
+/*
+ * Nord has 2 writeback blocks: WB2 (matches sm8750) and WB1 (new).
+ * WB1 base and xin_id are inferred via stride from existing WB pattern.
+ * FIXME(REG_ADDR): WB1 base address inferred as 0x65000 - 0x2c8 stride.
+ * FIXME(XIU_MAP): WB1 xin_id set to 7; verify against real hardware map.
+ */
+static const struct dpu_wb_cfg nord_wb[] = {
+ {
+ .name = "wb_1", .id = WB_1,
+ .base = 0x64800, .len = 0x2c8, /* FIXME(REG_ADDR): inferred */
+ .features = WB_SDM845_MASK,
+ .format_list = wb2_formats_rgb_yuv,
+ .num_formats = ARRAY_SIZE(wb2_formats_rgb_yuv),
+ .xin_id = 7, /* FIXME(XIU_MAP): inferred */
+ .maxlinewidth = 4096,
+ .intr_wb_done = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 3),
+ }, {
+ .name = "wb_2", .id = WB_2,
+ .base = 0x65000, .len = 0x2c8,
+ .features = WB_SDM845_MASK,
+ .format_list = wb2_formats_rgb_yuv,
+ .num_formats = ARRAY_SIZE(wb2_formats_rgb_yuv),
+ .xin_id = 6,
+ .maxlinewidth = 4096,
+ .intr_wb_done = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 4),
+ },
+};
+
+static const struct dpu_cwb_cfg nord_cwb[] = {
+ {
+ .name = "cwb_0", .id = CWB_0,
+ .base = 0x66200, .len = 0x20,
+ },
+ {
+ .name = "cwb_1", .id = CWB_1,
+ .base = 0x66600, .len = 0x20,
+ },
+ {
+ .name = "cwb_2", .id = CWB_2,
+ .base = 0x7e200, .len = 0x20,
+ },
+ {
+ .name = "cwb_3", .id = CWB_3,
+ .base = 0x7e600, .len = 0x20,
+ },
+};
+
+/*
+ * Nord has 8 active interfaces (INTF_0,3,4,6,7,8,9,10) with no DSI.
+ * DP0 connects to INTF_0, INTF_3, INTF_6, INTF_7 (4 ports for MST).
+ * DP1 connects to INTF_4, INTF_8, INTF_9, INTF_10 (4 ports for MST).
+ * Interfaces 1, 2, 5 are skipped (removed from sm8750).
+ * All interface base addresses extend the stride from sm8750.
+ * FIXME(REG_ADDR): INTF_4,6,7,8,9,10 addresses inferred via 0x1000 stride.
+ */
+static const struct dpu_intf_cfg nord_intf[] = {
+ {
+ .name = "intf_0", .id = INTF_0,
+ .base = 0x34000, .len = 0x4bc,
+ .type = INTF_DP,
+ .controller_id = MSM_DP_CONTROLLER_0,
+ .prog_fetch_lines_worst_case = 24,
+ .intr_underrun = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 24),
+ .intr_vsync = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 25),
+ }, {
+ .name = "intf_3", .id = INTF_3,
+ .base = 0x37000, .len = 0x4bc,
+ .type = INTF_DP,
+ .controller_id = MSM_DP_CONTROLLER_0, /* pair with intf_0 for DP MST */
+ .prog_fetch_lines_worst_case = 24,
+ .intr_underrun = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 30),
+ .intr_vsync = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 31),
+ }, {
+ .name = "intf_4", .id = INTF_4,
+ .base = 0x38000, .len = 0x4bc, /* FIXME(REG_ADDR): new, stride +0x1000 */
+ .type = INTF_DP,
+ .controller_id = MSM_DP_CONTROLLER_1,
+ .prog_fetch_lines_worst_case = 24,
+ .intr_underrun = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 20),
+ .intr_vsync = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 21),
+ }, {
+ .name = "intf_6", .id = INTF_6,
+ .base = 0x3a000, .len = 0x4bc, /* FIXME(REG_ADDR): new, stride +0x3000 */
+ .type = INTF_DP,
+ .controller_id = MSM_DP_CONTROLLER_0, /* second pair for DP0 MST */
+ .prog_fetch_lines_worst_case = 24,
+ .intr_underrun = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 22),
+ .intr_vsync = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 23),
+ }, {
+ .name = "intf_7", .id = INTF_7,
+ .base = 0x3b000, .len = 0x4bc, /* FIXME(REG_ADDR): new, stride +0x4000 */
+ .type = INTF_DP,
+ .controller_id = MSM_DP_CONTROLLER_0, /* third pair for DP0 MST */
+ .prog_fetch_lines_worst_case = 24,
+ .intr_underrun = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 0),
+ .intr_vsync = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 1),
+ }, {
+ .name = "intf_8", .id = INTF_8,
+ .base = 0x3c000, .len = 0x4bc, /* FIXME(REG_ADDR): new, stride +0x5000 */
+ .type = INTF_DP,
+ .controller_id = MSM_DP_CONTROLLER_1, /* second pair for DP1 MST */
+ .prog_fetch_lines_worst_case = 24,
+ .intr_underrun = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 2),
+ .intr_vsync = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 3),
+ }, {
+ .name = "intf_9", .id = INTF_9,
+ .base = 0x3d000, .len = 0x4bc, /* FIXME(REG_ADDR): new, stride +0x6000 */
+ .type = INTF_DP,
+ .controller_id = MSM_DP_CONTROLLER_1, /* third pair for DP1 MST */
+ .prog_fetch_lines_worst_case = 24,
+ .intr_underrun = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 4),
+ .intr_vsync = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 5),
+ }, {
+ .name = "intf_10", .id = INTF_10,
+ .base = 0x3e000, .len = 0x4bc, /* FIXME(REG_ADDR): new, stride +0x7000 */
+ .type = INTF_DP,
+ .controller_id = MSM_DP_CONTROLLER_1, /* fourth pair for DP1 MST */
+ .prog_fetch_lines_worst_case = 24,
+ .intr_underrun = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 6),
+ .intr_vsync = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 7),
+ },
+};
+
+static const struct dpu_perf_cfg nord_perf_data = {
+ .max_bw_low = 18900000,
+ .max_bw_high = 28500000,
+ .min_core_ib = 2500000,
+ .min_llcc_ib = 0,
+ .min_dram_ib = 800000,
+ .min_prefill_lines = 35,
+ .danger_lut_tbl = {0x3ffff, 0x3ffff, 0x0},
+ .safe_lut_tbl = {0xfe00, 0xfe00, 0xffff},
+ .qos_lut_tbl = {
+ {.nentry = ARRAY_SIZE(sc7180_qos_linear),
+ .entries = sc7180_qos_linear
+ },
+ {.nentry = ARRAY_SIZE(sc7180_qos_macrotile),
+ .entries = sc7180_qos_macrotile
+ },
+ {.nentry = ARRAY_SIZE(sc7180_qos_nrt),
+ .entries = sc7180_qos_nrt
+ },
+ /* TODO: macrotile-qseed is different from macrotile */
+ },
+ .cdp_cfg = {
+ {.rd_enable = 1, .wr_enable = 1},
+ {.rd_enable = 1, .wr_enable = 0}
+ },
+ .clk_inefficiency_factor = 105,
+ .bw_inefficiency_factor = 120,
+};
+
+static const struct dpu_mdss_version nord_mdss_ver = {
+ .core_major_ver = 12,
+ .core_minor_ver = 1,
+};
+
+const struct dpu_mdss_cfg dpu_nord_cfg = {
+ .mdss_ver = &nord_mdss_ver,
+ .caps = &nord_dpu_caps,
+ .mdp = &nord_mdp,
+ .cdm = &dpu_cdm_5_x,
+ .ctl_count = ARRAY_SIZE(nord_ctl),
+ .ctl = nord_ctl,
+ .sspp_count = ARRAY_SIZE(nord_sspp),
+ .sspp = nord_sspp,
+ .mixer_count = ARRAY_SIZE(nord_lm),
+ .mixer = nord_lm,
+ .dspp_count = ARRAY_SIZE(nord_dspp),
+ .dspp = nord_dspp,
+ .pingpong_count = ARRAY_SIZE(nord_pp),
+ .pingpong = nord_pp,
+ .dsc_count = ARRAY_SIZE(nord_dsc),
+ .dsc = nord_dsc,
+ .merge_3d_count = ARRAY_SIZE(nord_merge_3d),
+ .merge_3d = nord_merge_3d,
+ .wb_count = ARRAY_SIZE(nord_wb),
+ .wb = nord_wb,
+ .cwb_count = ARRAY_SIZE(nord_cwb),
+ .cwb = nord_cwb,
+ .intf_count = ARRAY_SIZE(nord_intf),
+ .intf = nord_intf,
+ .vbif = &sm8650_vbif,
+ .perf = &nord_perf_data,
+};
+
+#endif
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
index 9a993cdfab85..63f3029d09fa 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
@@ -796,6 +796,7 @@ static const struct dpu_qos_lut_entry sc7180_qos_nrt[] = {
#include "catalog/dpu_10_2_milos.h"
#include "catalog/dpu_12_0_sm8750.h"
+#include "catalog/dpu_12_1_nord.h"
#include "catalog/dpu_12_2_glymur.h"
#include "catalog/dpu_12_4_eliza.h"
#include "catalog/dpu_13_0_kaanapali.h"
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h
index f45faf87333e..bfbc8207ad9a 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h
@@ -772,6 +772,7 @@ extern const struct dpu_mdss_cfg dpu_msm8937_cfg;
extern const struct dpu_mdss_cfg dpu_msm8953_cfg;
extern const struct dpu_mdss_cfg dpu_msm8996_cfg;
extern const struct dpu_mdss_cfg dpu_msm8998_cfg;
+extern const struct dpu_mdss_cfg dpu_nord_cfg;
extern const struct dpu_mdss_cfg dpu_sar2130p_cfg;
extern const struct dpu_mdss_cfg dpu_sdm630_cfg;
extern const struct dpu_mdss_cfg dpu_sdm660_cfg;
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_mdss.h b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_mdss.h
index 0e65bf5ddc4a..7eccb4d2c65e 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_mdss.h
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_mdss.h
@@ -226,6 +226,8 @@ enum dpu_intf {
INTF_6,
INTF_7,
INTF_8,
+ INTF_9,
+ INTF_10,
INTF_MAX
};
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
index da3556eb6ecc..a91d4a1af94e 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
@@ -1489,6 +1489,7 @@ static const struct of_device_id dpu_dt_match[] = {
{ .compatible = "qcom,msm8953-mdp5", .data = &dpu_msm8953_cfg, },
{ .compatible = "qcom,msm8996-mdp5", .data = &dpu_msm8996_cfg, },
{ .compatible = "qcom,msm8998-dpu", .data = &dpu_msm8998_cfg, },
+ { .compatible = "qcom,nord-dpu", .data = &dpu_nord_cfg, },
{ .compatible = "qcom,qcm2290-dpu", .data = &dpu_qcm2290_cfg, },
{ .compatible = "qcom,sa8775p-dpu", .data = &dpu_sa8775p_cfg, },
{ .compatible = "qcom,sar2130p-dpu", .data = &dpu_sar2130p_cfg, },
--
2.34.1
^ permalink raw reply [flat|nested] 36+ messages in thread* Re: [PATCH 04/17] drm/msm/dpu: Add support for DPU 12.1 on Nord
2026-09-11 15:36 ` [PATCH 04/17] drm/msm/dpu: Add support for DPU 12.1 on Nord Nabige Aala
@ 2026-09-13 23:45 ` Dmitry Baryshkov
2026-09-14 8:06 ` Konrad Dybcio
1 sibling, 0 replies; 36+ messages in thread
From: Dmitry Baryshkov @ 2026-09-13 23:45 UTC (permalink / raw)
To: Nabige Aala
Cc: Vinod Koul, Neil Armstrong, Manivannan Sadhasivam, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson, Rob Clark,
Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang, Sean Paul,
Marijn Suijten, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Kuogee Hsieh,
linux-arm-msm, linux-phy, devicetree, linux-kernel, dri-devel,
freedreno, Ritesh Kumar, Mahadevan P
On Fri, Sep 11, 2026 at 09:06:35PM +0530, Nabige Aala wrote:
> From: Mahadevan P <mahadevan.p@oss.qualcomm.com>
>
> Add the DPU catalog entry for the Qualcomm Nord SoC (MDSS 12.1, DPU
> 1499A). Nord is DP-only with no DSI, and provides 8 DSPP blocks, 2
> writeback blocks, 8 interfaces and 2 DP controllers.
>
> Extend enum dpu_intf with INTF_9 and INTF_10, which Nord is the first
> platform to use.
>
> Note: register addresses and xin_id values in the catalog are borrowed
> from sm8750 and precedent platforms and are marked with FIXME(REG_ADDR)
> and FIXME(XIU_MAP); they need verification against a real Nord register
> map before production use.
>
> Signed-off-by: Mahadevan P <mahadevan.p@oss.qualcomm.com>
> Signed-off-by: Nabige Aala <nabige.aala@oss.qualcomm.com>
> ---
> .../gpu/drm/msm/disp/dpu1/catalog/dpu_12_1_nord.h | 588 +++++++++++++++++++++
> drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c | 1 +
> drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h | 1 +
> drivers/gpu/drm/msm/disp/dpu1/dpu_hw_mdss.h | 2 +
> drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c | 1 +
> 5 files changed, 593 insertions(+)
>
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_12_1_nord.h b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_12_1_nord.h
> new file mode 100644
> index 000000000000..8eb18752f3c4
> --- /dev/null
> +++ b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_12_1_nord.h
> @@ -0,0 +1,588 @@
> +/* SPDX-License-Identifier: GPL-2.0-only */
> +/*
> + * Copyright (c) 2025 Qualcomm Innovation Center, Inc. All rights reserved.
Follow the guidelines please.
> + * Copyright (c) 2015-2018, 2020 The Linux Foundation. All rights reserved.
Oh, really?
> + */
> +
> +#ifndef _DPU_12_1_NORD_H
> +#define _DPU_12_1_NORD_H
> +
> +/*
> + * NORD DPU 12.1 catalog header. Generated from hardware summary YAML for
> + * MDSS 12.1 - DPU 1499A (Nordschleife). This is a DP-only chip with no DSI.
You already said that in the commit message.
> + *
> + * All register addresses and xin_id values below are borrowed from the
> + * reference chip (sm8750, MDSS 12.0) and precedent chips (Lemans, Glymur).
> + * Nord's YAML provides only block counts and feature statements, not addresses.
> + * See FIXME(REG_ADDR) markers throughout for borrowed values requiring
> + * verification against a real Nord register map before production use.
What? You work at Qualcomm and you can't verify this against the memory
map? Please cross-check it and also the number of blocks, hardware
capabilities, etc.
> + *
> + * Key differences vs sm8750:
> + * - 8 DSPP blocks (4 full + 4 lite) vs sm8750's 4
> + * - 2 writeback blocks (WB1, WB2) vs sm8750's 1 (WB2)
> + * - 8 interfaces (INTF_0,3,4,6,7,8,9,10) vs sm8750's 4 (INTF_0,1,2,3)
> + * - 2 DP controllers (DP0, DP1) vs sm8750's 1 (DP0 only)
> + * - No DSI (removed entirely)
No need to. If you want, put it into the commit message.
> + */
> +
> +
> +static const struct dpu_lm_cfg nord_lm[] = {
> + {
> + .name = "lm_0", .id = LM_0,
> + .base = 0x44000, .len = 0x400,
> + .features = MIXER_MSM8998_MASK,
> + .sblk = &sm8750_lm_sblk,
> + .lm_pair = LM_1,
> + .pingpong = PINGPONG_0,
> + .dspp = DSPP_0,
> + }, {
> + .name = "lm_1", .id = LM_1,
> + .base = 0x45000, .len = 0x400,
> + .features = MIXER_MSM8998_MASK,
> + .sblk = &sm8750_lm_sblk,
> + .lm_pair = LM_0,
> + .pingpong = PINGPONG_1,
> + .dspp = DSPP_1,
> + }, {
> + .name = "lm_2", .id = LM_2,
> + .base = 0x46000, .len = 0x400,
> + .features = MIXER_MSM8998_MASK,
> + .sblk = &sm8750_lm_sblk,
> + .lm_pair = LM_3,
> + .pingpong = PINGPONG_2,
> + .dspp = DSPP_2,
> + }, {
> + .name = "lm_3", .id = LM_3,
> + .base = 0x47000, .len = 0x400,
> + .features = MIXER_MSM8998_MASK,
> + .sblk = &sm8750_lm_sblk,
> + .lm_pair = LM_2,
> + .pingpong = PINGPONG_3,
> + .dspp = DSPP_3,
> + }, {
> + .name = "lm_4", .id = LM_4,
> + .base = 0x48000, .len = 0x400,
> + .features = MIXER_MSM8998_MASK,
> + .sblk = &sm8750_lm_sblk,
> + .lm_pair = LM_5,
> + .pingpong = PINGPONG_4,
No DSPP's?
> + }, {
> + .name = "lm_5", .id = LM_5,
> + .base = 0x49000, .len = 0x400,
> + .features = MIXER_MSM8998_MASK,
> + .sblk = &sm8750_lm_sblk,
> + .lm_pair = LM_4,
> + .pingpong = PINGPONG_5,
> + }, {
> + .name = "lm_6", .id = LM_6,
> + .base = 0x4a000, .len = 0x400,
> + .features = MIXER_MSM8998_MASK,
> + .sblk = &sm8750_lm_sblk,
> + .lm_pair = LM_7,
> + .pingpong = PINGPONG_6,
> + }, {
> + .name = "lm_7", .id = LM_7,
> + .base = 0x4b000, .len = 0x400,
> + .features = MIXER_MSM8998_MASK,
> + .sblk = &sm8750_lm_sblk,
> + .lm_pair = LM_6,
> + .pingpong = PINGPONG_7,
> + },
> +};
> +
> +/*
> + * Nord has 8 DSPP blocks: 4 full-featured (DSPP0-3) and 4 lite variants
> + * (DSPP4-7). The driver has no separate lite-DSPP struct, so all 8 are
> + * modeled with the same dpu_dspp_cfg/dpu_dspp_sblk structure. Lite variants
> + * have reduced features, but this is handled at runtime via feature flags,
> + * not via separate catalog entries.
Is it really handled? I don't see it.
> + * FIXME(REG_ADDR): DSPP4-7 base addresses extended via 0x2000 stride from
> + * sm8750's DSPP3 base (0x5a000). Verify against real Nord register map.
ROFL. Who is going to verify those?
> + */
> +static const struct dpu_dspp_cfg nord_dspp[] = {
> + {
> + .name = "dspp_0", .id = DSPP_0,
> + .base = 0x54000, .len = 0x1800,
> + .sblk = &sm8750_dspp_sblk,
> + }, {
> + .name = "dspp_1", .id = DSPP_1,
> + .base = 0x56000, .len = 0x1800,
> + .sblk = &sm8750_dspp_sblk,
> + }, {
> + .name = "dspp_2", .id = DSPP_2,
> + .base = 0x58000, .len = 0x1800,
> + .sblk = &sm8750_dspp_sblk,
> + }, {
> + .name = "dspp_3", .id = DSPP_3,
> + .base = 0x5a000, .len = 0x1800,
> + .sblk = &sm8750_dspp_sblk,
> + }, {
> + .name = "dspp_4", .id = DSPP_4,
> + .base = 0x5c000, .len = 0x1800, /* FIXME(REG_ADDR): lite variant */
> + .sblk = &sm8750_dspp_sblk,
> + }, {
> + .name = "dspp_5", .id = DSPP_5,
> + .base = 0x5e000, .len = 0x1800, /* FIXME(REG_ADDR): lite variant */
> + .sblk = &sm8750_dspp_sblk,
> + }, {
> + .name = "dspp_6", .id = DSPP_6,
> + .base = 0x60000, .len = 0x1800, /* FIXME(REG_ADDR): lite variant */
> + .sblk = &sm8750_dspp_sblk,
> + }, {
> + .name = "dspp_7", .id = DSPP_7,
> + .base = 0x62000, .len = 0x1800, /* FIXME(REG_ADDR): lite variant */
> + .sblk = &sm8750_dspp_sblk,
> + },
> +};
> +
[...]
> +
> +/*
> + * NOTE: Each display compression engine (DCE) contains dual hard
> + * slice DSC encoders so both share same base address but with
> + * its own different sub block address. Nord retains sm8750's
> + * topology of 8 DSC instances (2 per DCE × 4).
Tell your AI to stop adding useless comments.
> + */
> +static const struct dpu_dsc_cfg nord_dsc[] = {
> + {
> + .name = "dce_0_0", .id = DSC_0,
> + .base = 0x80000, .len = 0x8,
> + .features = BIT(DPU_DSC_NATIVE_42x_EN),
> + .sblk = &sm8750_dsc_sblk_0,
> + }, {
> + .name = "dce_0_1", .id = DSC_1,
> + .base = 0x80000, .len = 0x8,
> + .features = BIT(DPU_DSC_NATIVE_42x_EN),
> + .sblk = &sm8750_dsc_sblk_1,
> + }, {
> + .name = "dce_1_0", .id = DSC_2,
> + .base = 0x81000, .len = 0x8,
> + .features = BIT(DPU_DSC_NATIVE_42x_EN),
> + .sblk = &sm8750_dsc_sblk_0,
> + }, {
> + .name = "dce_1_1", .id = DSC_3,
> + .base = 0x81000, .len = 0x8,
> + .features = BIT(DPU_DSC_NATIVE_42x_EN),
> + .sblk = &sm8750_dsc_sblk_1,
> + }, {
> + .name = "dce_2_0", .id = DSC_4,
> + .base = 0x82000, .len = 0x8,
> + .features = BIT(DPU_DSC_NATIVE_42x_EN),
> + .sblk = &sm8750_dsc_sblk_0,
> + }, {
> + .name = "dce_2_1", .id = DSC_5,
> + .base = 0x82000, .len = 0x8,
> + .features = BIT(DPU_DSC_NATIVE_42x_EN),
> + .sblk = &sm8750_dsc_sblk_1,
> + }, {
> + .name = "dce_3_0", .id = DSC_6,
> + .base = 0x83000, .len = 0x8,
> + .features = BIT(DPU_DSC_NATIVE_42x_EN),
> + .sblk = &sm8750_dsc_sblk_0,
> + }, {
> + .name = "dce_3_1", .id = DSC_7,
> + .base = 0x83000, .len = 0x8,
> + .features = BIT(DPU_DSC_NATIVE_42x_EN),
> + .sblk = &sm8750_dsc_sblk_1,
> + },
> +};
> +
> +/*
> + * Nord has 2 writeback blocks: WB2 (matches sm8750) and WB1 (new).
> + * WB1 base and xin_id are inferred via stride from existing WB pattern.
> + * FIXME(REG_ADDR): WB1 base address inferred as 0x65000 - 0x2c8 stride.
> + * FIXME(XIU_MAP): WB1 xin_id set to 7; verify against real hardware map.
ROFL
> + */
> +static const struct dpu_wb_cfg nord_wb[] = {
> + {
> + .name = "wb_1", .id = WB_1,
> + .base = 0x64800, .len = 0x2c8, /* FIXME(REG_ADDR): inferred */
> + .features = WB_SDM845_MASK,
> + .format_list = wb2_formats_rgb_yuv,
> + .num_formats = ARRAY_SIZE(wb2_formats_rgb_yuv),
> + .xin_id = 7, /* FIXME(XIU_MAP): inferred */
> + .maxlinewidth = 4096,
> + .intr_wb_done = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 3),
> + }, {
> + .name = "wb_2", .id = WB_2,
> + .base = 0x65000, .len = 0x2c8,
> + .features = WB_SDM845_MASK,
> + .format_list = wb2_formats_rgb_yuv,
> + .num_formats = ARRAY_SIZE(wb2_formats_rgb_yuv),
> + .xin_id = 6,
> + .maxlinewidth = 4096,
> + .intr_wb_done = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 4),
> + },
> +};
> +
> +/*
> + * Nord has 8 active interfaces (INTF_0,3,4,6,7,8,9,10) with no DSI.
> + * DP0 connects to INTF_0, INTF_3, INTF_6, INTF_7 (4 ports for MST).
> + * DP1 connects to INTF_4, INTF_8, INTF_9, INTF_10 (4 ports for MST).
> + * Interfaces 1, 2, 5 are skipped (removed from sm8750).
> + * All interface base addresses extend the stride from sm8750.
> + * FIXME(REG_ADDR): INTF_4,6,7,8,9,10 addresses inferred via 0x1000 stride.
Same ROFL. No. Do your job, please.
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_mdss.h b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_mdss.h
> index 0e65bf5ddc4a..7eccb4d2c65e 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_mdss.h
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_mdss.h
> @@ -226,6 +226,8 @@ enum dpu_intf {
> INTF_6,
> INTF_7,
> INTF_8,
> + INTF_9,
> + INTF_10,
This just broke DSI tearing support. See enum dpu_hw_intr_reg
> INTF_MAX
> };
>
--
With best wishes
Dmitry
^ permalink raw reply [flat|nested] 36+ messages in thread* Re: [PATCH 04/17] drm/msm/dpu: Add support for DPU 12.1 on Nord
2026-09-11 15:36 ` [PATCH 04/17] drm/msm/dpu: Add support for DPU 12.1 on Nord Nabige Aala
2026-09-13 23:45 ` Dmitry Baryshkov
@ 2026-09-14 8:06 ` Konrad Dybcio
1 sibling, 0 replies; 36+ messages in thread
From: Konrad Dybcio @ 2026-09-14 8:06 UTC (permalink / raw)
To: Nabige Aala, Vinod Koul, Neil Armstrong, Manivannan Sadhasivam,
Rob Herring, Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson,
Rob Clark, Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang,
Sean Paul, Marijn Suijten, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Kuogee Hsieh
Cc: linux-arm-msm, linux-phy, devicetree, linux-kernel, dri-devel,
freedreno, Ritesh Kumar, Mahadevan P
On 9/11/26 5:36 PM, Nabige Aala wrote:
> From: Mahadevan P <mahadevan.p@oss.qualcomm.com>
>
> Add the DPU catalog entry for the Qualcomm Nord SoC (MDSS 12.1, DPU
> 1499A). Nord is DP-only with no DSI, and provides 8 DSPP blocks, 2
> writeback blocks, 8 interfaces and 2 DP controllers.
>
> Extend enum dpu_intf with INTF_9 and INTF_10, which Nord is the first
> platform to use.
>
> Note: register addresses and xin_id values in the catalog are borrowed
> from sm8750 and precedent platforms and are marked with FIXME(REG_ADDR)
> and FIXME(XIU_MAP); they need verification against a real Nord register
> map before production use.
>
> Signed-off-by: Mahadevan P <mahadevan.p@oss.qualcomm.com>
> Signed-off-by: Nabige Aala <nabige.aala@oss.qualcomm.com>
> ---
Please remember to mark AI-assisted contributions as such, if
that was the case..
Documentation/process/coding-assistants.rst
Documentation/process/submitting-patches.rst
Konrad
^ permalink raw reply [flat|nested] 36+ messages in thread
* [PATCH 05/17] drm/msm: mdss: Add support for MDSS on Nord
2026-09-11 15:36 [PATCH 00/17] Add Qualcomm Nord display and eDP PHY support Nabige Aala
` (3 preceding siblings ...)
2026-09-11 15:36 ` [PATCH 04/17] drm/msm/dpu: Add support for DPU 12.1 on Nord Nabige Aala
@ 2026-09-11 15:36 ` Nabige Aala
2026-09-13 23:47 ` Dmitry Baryshkov
2026-09-11 15:36 ` [PATCH 06/17] drm/msm/dp: Add support for DP controllers " Nabige Aala
` (11 subsequent siblings)
16 siblings, 1 reply; 36+ messages in thread
From: Nabige Aala @ 2026-09-11 15:36 UTC (permalink / raw)
To: Vinod Koul, Neil Armstrong, Manivannan Sadhasivam, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson, Rob Clark,
Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang, Sean Paul,
Marijn Suijten, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Kuogee Hsieh
Cc: linux-arm-msm, linux-phy, devicetree, linux-kernel, dri-devel,
freedreno, Ritesh Kumar, Mahadevan P, Nabige Aala
From: Mahadevan P <mahadevan.p@oss.qualcomm.com>
Add the MDSS compatible for the Qualcomm Nord SoC, reusing the 57 MBps
register bus bandwidth setting shared with the other recent platforms.
Signed-off-by: Mahadevan P <mahadevan.p@oss.qualcomm.com>
Signed-off-by: Nabige Aala <nabige.aala@oss.qualcomm.com>
---
drivers/gpu/drm/msm/msm_mdss.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/gpu/drm/msm/msm_mdss.c b/drivers/gpu/drm/msm/msm_mdss.c
index 9087c4b290db..90bcc8c28dc2 100644
--- a/drivers/gpu/drm/msm/msm_mdss.c
+++ b/drivers/gpu/drm/msm/msm_mdss.c
@@ -531,6 +531,7 @@ static const struct of_device_id mdss_dt_match[] = {
{ .compatible = "qcom,kaanapali-mdss", .data = &data_57k },
{ .compatible = "qcom,milos-mdss", .data = &data_14k },
{ .compatible = "qcom,msm8998-mdss", .data = &data_76k8 },
+ { .compatible = "qcom,nord-mdss", .data = &data_57k },
{ .compatible = "qcom,qcm2290-mdss", .data = &data_76k8 },
{ .compatible = "qcom,qcs8300-mdss", .data = &data_74k },
{ .compatible = "qcom,sa8775p-mdss", .data = &data_74k },
--
2.34.1
^ permalink raw reply [flat|nested] 36+ messages in thread* Re: [PATCH 05/17] drm/msm: mdss: Add support for MDSS on Nord
2026-09-11 15:36 ` [PATCH 05/17] drm/msm: mdss: Add support for MDSS " Nabige Aala
@ 2026-09-13 23:47 ` Dmitry Baryshkov
0 siblings, 0 replies; 36+ messages in thread
From: Dmitry Baryshkov @ 2026-09-13 23:47 UTC (permalink / raw)
To: Nabige Aala
Cc: Vinod Koul, Neil Armstrong, Manivannan Sadhasivam, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson, Rob Clark,
Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang, Sean Paul,
Marijn Suijten, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Kuogee Hsieh,
linux-arm-msm, linux-phy, devicetree, linux-kernel, dri-devel,
freedreno, Ritesh Kumar, Mahadevan P
On Fri, Sep 11, 2026 at 09:06:36PM +0530, Nabige Aala wrote:
> From: Mahadevan P <mahadevan.p@oss.qualcomm.com>
>
> Add the MDSS compatible for the Qualcomm Nord SoC, reusing the 57 MBps
> register bus bandwidth setting shared with the other recent platforms.
Why?
>
> Signed-off-by: Mahadevan P <mahadevan.p@oss.qualcomm.com>
> Signed-off-by: Nabige Aala <nabige.aala@oss.qualcomm.com>
> ---
> drivers/gpu/drm/msm/msm_mdss.c | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/drivers/gpu/drm/msm/msm_mdss.c b/drivers/gpu/drm/msm/msm_mdss.c
> index 9087c4b290db..90bcc8c28dc2 100644
> --- a/drivers/gpu/drm/msm/msm_mdss.c
> +++ b/drivers/gpu/drm/msm/msm_mdss.c
> @@ -531,6 +531,7 @@ static const struct of_device_id mdss_dt_match[] = {
> { .compatible = "qcom,kaanapali-mdss", .data = &data_57k },
> { .compatible = "qcom,milos-mdss", .data = &data_14k },
> { .compatible = "qcom,msm8998-mdss", .data = &data_76k8 },
> + { .compatible = "qcom,nord-mdss", .data = &data_57k },
> { .compatible = "qcom,qcm2290-mdss", .data = &data_76k8 },
> { .compatible = "qcom,qcs8300-mdss", .data = &data_74k },
> { .compatible = "qcom,sa8775p-mdss", .data = &data_74k },
>
> --
> 2.34.1
>
--
With best wishes
Dmitry
^ permalink raw reply [flat|nested] 36+ messages in thread
* [PATCH 06/17] drm/msm/dp: Add support for DP controllers on Nord
2026-09-11 15:36 [PATCH 00/17] Add Qualcomm Nord display and eDP PHY support Nabige Aala
` (4 preceding siblings ...)
2026-09-11 15:36 ` [PATCH 05/17] drm/msm: mdss: Add support for MDSS " Nabige Aala
@ 2026-09-11 15:36 ` Nabige Aala
2026-09-13 23:50 ` Dmitry Baryshkov
2026-09-11 15:36 ` [PATCH 07/17] phy: qcom: edp: Add Nord-specific register offsets Nabige Aala
` (10 subsequent siblings)
16 siblings, 1 reply; 36+ messages in thread
From: Nabige Aala @ 2026-09-11 15:36 UTC (permalink / raw)
To: Vinod Koul, Neil Armstrong, Manivannan Sadhasivam, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson, Rob Clark,
Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang, Sean Paul,
Marijn Suijten, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Kuogee Hsieh
Cc: linux-arm-msm, linux-phy, devicetree, linux-kernel, dri-devel,
freedreno, Ritesh Kumar, Mahadevan P, Nabige Aala
From: Mahadevan P <mahadevan.p@oss.qualcomm.com>
Add the DP controller description and compatible for the Qualcomm Nord
SoC, which provides two independent DP controllers, both wide-bus
capable.
Signed-off-by: Mahadevan P <mahadevan.p@oss.qualcomm.com>
Signed-off-by: Nabige Aala <nabige.aala@oss.qualcomm.com>
---
drivers/gpu/drm/msm/dp/dp_display.c | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/drivers/gpu/drm/msm/dp/dp_display.c b/drivers/gpu/drm/msm/dp/dp_display.c
index bc646d172abe..7e23cb2829ee 100644
--- a/drivers/gpu/drm/msm/dp/dp_display.c
+++ b/drivers/gpu/drm/msm/dp/dp_display.c
@@ -103,6 +103,12 @@ static const struct msm_dp_desc msm_dp_desc_glymur[] = {
{}
};
+static const struct msm_dp_desc msm_dp_desc_nord[] = {
+ { .io_start = 0x0af54000, .id = MSM_DP_CONTROLLER_0, .wide_bus_supported = true },
+ { .io_start = 0x0af5c000, .id = MSM_DP_CONTROLLER_1, .wide_bus_supported = true },
+ {}
+};
+
static const struct msm_dp_desc msm_dp_desc_sa8775p[] = {
{ .io_start = 0x0af54000, .id = MSM_DP_CONTROLLER_0, .wide_bus_supported = true },
{ .io_start = 0x0af5c000, .id = MSM_DP_CONTROLLER_1, .wide_bus_supported = true },
@@ -161,6 +167,7 @@ static const struct msm_dp_desc msm_dp_desc_x1e80100[] = {
static const struct of_device_id msm_dp_dt_match[] = {
{ .compatible = "qcom,glymur-dp", .data = &msm_dp_desc_glymur },
+ { .compatible = "qcom,nord-dp", .data = &msm_dp_desc_nord },
{ .compatible = "qcom,sa8775p-dp", .data = &msm_dp_desc_sa8775p },
{ .compatible = "qcom,sc7180-dp", .data = &msm_dp_desc_sc7180 },
{ .compatible = "qcom,sc7280-dp", .data = &msm_dp_desc_sc7280 },
--
2.34.1
^ permalink raw reply [flat|nested] 36+ messages in thread* Re: [PATCH 06/17] drm/msm/dp: Add support for DP controllers on Nord
2026-09-11 15:36 ` [PATCH 06/17] drm/msm/dp: Add support for DP controllers " Nabige Aala
@ 2026-09-13 23:50 ` Dmitry Baryshkov
0 siblings, 0 replies; 36+ messages in thread
From: Dmitry Baryshkov @ 2026-09-13 23:50 UTC (permalink / raw)
To: Nabige Aala
Cc: Vinod Koul, Neil Armstrong, Manivannan Sadhasivam, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson, Rob Clark,
Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang, Sean Paul,
Marijn Suijten, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Kuogee Hsieh,
linux-arm-msm, linux-phy, devicetree, linux-kernel, dri-devel,
freedreno, Ritesh Kumar, Mahadevan P
On Fri, Sep 11, 2026 at 09:06:37PM +0530, Nabige Aala wrote:
> From: Mahadevan P <mahadevan.p@oss.qualcomm.com>
>
> Add the DP controller description and compatible for the Qualcomm Nord
> SoC, which provides two independent DP controllers, both wide-bus
> capable.
>
> Signed-off-by: Mahadevan P <mahadevan.p@oss.qualcomm.com>
> Signed-off-by: Nabige Aala <nabige.aala@oss.qualcomm.com>
> ---
> drivers/gpu/drm/msm/dp/dp_display.c | 7 +++++++
> 1 file changed, 7 insertions(+)
>
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
--
With best wishes
Dmitry
^ permalink raw reply [flat|nested] 36+ messages in thread
* [PATCH 07/17] phy: qcom: edp: Add Nord-specific register offsets
2026-09-11 15:36 [PATCH 00/17] Add Qualcomm Nord display and eDP PHY support Nabige Aala
` (5 preceding siblings ...)
2026-09-11 15:36 ` [PATCH 06/17] drm/msm/dp: Add support for DP controllers " Nabige Aala
@ 2026-09-11 15:36 ` Nabige Aala
2026-09-13 23:58 ` Dmitry Baryshkov
2026-09-11 15:36 ` [PATCH 08/17] phy: qcom: edp: Generalize power-on path to support per-SoC overrides Nabige Aala
` (9 subsequent siblings)
16 siblings, 1 reply; 36+ messages in thread
From: Nabige Aala @ 2026-09-11 15:36 UTC (permalink / raw)
To: Vinod Koul, Neil Armstrong, Manivannan Sadhasivam, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson, Rob Clark,
Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang, Sean Paul,
Marijn Suijten, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Kuogee Hsieh
Cc: linux-arm-msm, linux-phy, devicetree, linux-kernel, dri-devel,
freedreno, Ritesh Kumar, Mahadevan P, Nabige Aala
From: Ritesh Kumar <ritesh.kumar@oss.qualcomm.com>
Nord relocates several DP PHY and QSERDES v8 COM registers relative
to existing SoCs. Add Nord-specific defines for the relocated and
new-only registers in phy-qcom-qmp-qserdes-dp-com-v8.h and
phy-qcom-edp.c so Nord sequences can reference them by name.
Signed-off-by: Ritesh Kumar <ritesh.kumar@oss.qualcomm.com>
Signed-off-by: Nabige Aala <nabige.aala@oss.qualcomm.com>
---
drivers/phy/qualcomm/phy-qcom-edp.c | 10 ++++++++++
drivers/phy/qualcomm/phy-qcom-qmp-qserdes-dp-com-v8.h | 3 +++
2 files changed, 13 insertions(+)
diff --git a/drivers/phy/qualcomm/phy-qcom-edp.c b/drivers/phy/qualcomm/phy-qcom-edp.c
index a3c893f72908..bf8a17336c7e 100644
--- a/drivers/phy/qualcomm/phy-qcom-edp.c
+++ b/drivers/phy/qualcomm/phy-qcom-edp.c
@@ -41,9 +41,19 @@
#define DP_PHY_VCO_DIV 0x0074
#define DP_PHY_TX0_TX1_LANE_CTL 0x007c
+/* Nord uses a different register layout; non-Nord value is 0x00a0 */
#define DP_PHY_TX2_TX3_LANE_CTL 0x00a0
+#define DP_PHY_TX2_TX3_LANE_CTL_NORD 0x00c0
+/* Nord uses a different register layout; non-Nord value is 0x00e0 */
#define DP_PHY_STATUS 0x00e0
+#define DP_PHY_STATUS_NORD 0x0110
+#define DP_PHY_LDO_CFG 0x00f0
+
+/* Nord-specific TX lane registers */
+#define DP_PHY_TX_LN0_DRV_LVL_NORD 0x00e4
+#define DP_PHY_TX_LN1_DRV_LVL_NORD 0x00e8
+#define TXn_TX_BAND_NORD 0x0024
/* LANE_TXn registers */
#define TXn_CLKBUF_ENABLE 0x0000
diff --git a/drivers/phy/qualcomm/phy-qcom-qmp-qserdes-dp-com-v8.h b/drivers/phy/qualcomm/phy-qcom-qmp-qserdes-dp-com-v8.h
index 93edabb830af..008b17222a8d 100644
--- a/drivers/phy/qualcomm/phy-qcom-qmp-qserdes-dp-com-v8.h
+++ b/drivers/phy/qualcomm/phy-qcom-qmp-qserdes-dp-com-v8.h
@@ -48,5 +48,8 @@
#define DP_QSERDES_V8_COM_CLK_FWD_CONFIG_1 0x2f4
#define DP_QSERDES_V8_COM_CMN_STATUS 0x314
#define DP_QSERDES_V8_COM_C_READY_STATUS 0x33c
+#define DP_QSERDES_V8_COM_SVS_MODE_CLK_SEL_NORD 0x17c
+#define DP_QSERDES_V8_COM_CMN_STATUS_NORD 0x1d0
+#define DP_QSERDES_V8_COM_C_READY_STATUS_NORD 0x1f8
#endif
--
2.34.1
^ permalink raw reply [flat|nested] 36+ messages in thread* Re: [PATCH 07/17] phy: qcom: edp: Add Nord-specific register offsets
2026-09-11 15:36 ` [PATCH 07/17] phy: qcom: edp: Add Nord-specific register offsets Nabige Aala
@ 2026-09-13 23:58 ` Dmitry Baryshkov
0 siblings, 0 replies; 36+ messages in thread
From: Dmitry Baryshkov @ 2026-09-13 23:58 UTC (permalink / raw)
To: Nabige Aala
Cc: Vinod Koul, Neil Armstrong, Manivannan Sadhasivam, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson, Rob Clark,
Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang, Sean Paul,
Marijn Suijten, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Kuogee Hsieh,
linux-arm-msm, linux-phy, devicetree, linux-kernel, dri-devel,
freedreno, Ritesh Kumar, Mahadevan P
On Fri, Sep 11, 2026 at 09:06:38PM +0530, Nabige Aala wrote:
> From: Ritesh Kumar <ritesh.kumar@oss.qualcomm.com>
>
> Nord relocates several DP PHY and QSERDES v8 COM registers relative
> to existing SoCs. Add Nord-specific defines for the relocated and
> new-only registers in phy-qcom-qmp-qserdes-dp-com-v8.h and
> phy-qcom-edp.c so Nord sequences can reference them by name.
If the registers are reallocated it usually means that there are other
registers being inserted (or deleted). Are those the only registers
being changed?
>
> Signed-off-by: Ritesh Kumar <ritesh.kumar@oss.qualcomm.com>
> Signed-off-by: Nabige Aala <nabige.aala@oss.qualcomm.com>
> ---
> drivers/phy/qualcomm/phy-qcom-edp.c | 10 ++++++++++
> drivers/phy/qualcomm/phy-qcom-qmp-qserdes-dp-com-v8.h | 3 +++
> 2 files changed, 13 insertions(+)
>
> diff --git a/drivers/phy/qualcomm/phy-qcom-edp.c b/drivers/phy/qualcomm/phy-qcom-edp.c
> index a3c893f72908..bf8a17336c7e 100644
> --- a/drivers/phy/qualcomm/phy-qcom-edp.c
> +++ b/drivers/phy/qualcomm/phy-qcom-edp.c
> @@ -41,9 +41,19 @@
>
> #define DP_PHY_VCO_DIV 0x0074
> #define DP_PHY_TX0_TX1_LANE_CTL 0x007c
> +/* Nord uses a different register layout; non-Nord value is 0x00a0 */
> #define DP_PHY_TX2_TX3_LANE_CTL 0x00a0
> +#define DP_PHY_TX2_TX3_LANE_CTL_NORD 0x00c0
>
> +/* Nord uses a different register layout; non-Nord value is 0x00e0 */
> #define DP_PHY_STATUS 0x00e0
> +#define DP_PHY_STATUS_NORD 0x0110
> +#define DP_PHY_LDO_CFG 0x00f0
Why does it not have a _NORD suffix?
> +
> +/* Nord-specific TX lane registers */
> +#define DP_PHY_TX_LN0_DRV_LVL_NORD 0x00e4
> +#define DP_PHY_TX_LN1_DRV_LVL_NORD 0x00e8
> +#define TXn_TX_BAND_NORD 0x0024
>
> /* LANE_TXn registers */
> #define TXn_CLKBUF_ENABLE 0x0000
> diff --git a/drivers/phy/qualcomm/phy-qcom-qmp-qserdes-dp-com-v8.h b/drivers/phy/qualcomm/phy-qcom-qmp-qserdes-dp-com-v8.h
> index 93edabb830af..008b17222a8d 100644
> --- a/drivers/phy/qualcomm/phy-qcom-qmp-qserdes-dp-com-v8.h
> +++ b/drivers/phy/qualcomm/phy-qcom-qmp-qserdes-dp-com-v8.h
> @@ -48,5 +48,8 @@
> #define DP_QSERDES_V8_COM_CLK_FWD_CONFIG_1 0x2f4
> #define DP_QSERDES_V8_COM_CMN_STATUS 0x314
> #define DP_QSERDES_V8_COM_C_READY_STATUS 0x33c
> +#define DP_QSERDES_V8_COM_SVS_MODE_CLK_SEL_NORD 0x17c
> +#define DP_QSERDES_V8_COM_CMN_STATUS_NORD 0x1d0
> +#define DP_QSERDES_V8_COM_C_READY_STATUS_NORD 0x1f8
>
> #endif
>
> --
> 2.34.1
>
--
With best wishes
Dmitry
^ permalink raw reply [flat|nested] 36+ messages in thread
* [PATCH 08/17] phy: qcom: edp: Generalize power-on path to support per-SoC overrides
2026-09-11 15:36 [PATCH 00/17] Add Qualcomm Nord display and eDP PHY support Nabige Aala
` (6 preceding siblings ...)
2026-09-11 15:36 ` [PATCH 07/17] phy: qcom: edp: Add Nord-specific register offsets Nabige Aala
@ 2026-09-11 15:36 ` Nabige Aala
2026-09-14 0:00 ` Dmitry Baryshkov
2026-09-11 15:36 ` [PATCH 09/17] phy: qcom: edp: Add Nord AUX channel and VCO divider configuration tables Nabige Aala
` (8 subsequent siblings)
16 siblings, 1 reply; 36+ messages in thread
From: Nabige Aala @ 2026-09-11 15:36 UTC (permalink / raw)
To: Vinod Koul, Neil Armstrong, Manivannan Sadhasivam, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson, Rob Clark,
Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang, Sean Paul,
Marijn Suijten, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Kuogee Hsieh
Cc: linux-arm-msm, linux-phy, devicetree, linux-kernel, dri-devel,
freedreno, Ritesh Kumar, Mahadevan P, Nabige Aala
From: Ritesh Kumar <ritesh.kumar@oss.qualcomm.com>
Nord has a different register layout and power-on sequence that the
existing hard-coded paths cannot accommodate. Make com_clk_fwd_cfg
optional, add phy_tx_lane_cfg and phy_tx_res_cfg callbacks to
phy_ver_ops, and add phy_status_reg and bias1_en_2lane fields to
qcom_edp_phy_cfg so each SoC can override the defaults. No
functional change for existing SoCs; new fields default to zero/NULL.
Signed-off-by: Ritesh Kumar <ritesh.kumar@oss.qualcomm.com>
Signed-off-by: Nabige Aala <nabige.aala@oss.qualcomm.com>
---
drivers/phy/qualcomm/phy-qcom-edp.c | 43 ++++++++++++++++++++++++++-----------
1 file changed, 30 insertions(+), 13 deletions(-)
diff --git a/drivers/phy/qualcomm/phy-qcom-edp.c b/drivers/phy/qualcomm/phy-qcom-edp.c
index bf8a17336c7e..373f13b3d6d5 100644
--- a/drivers/phy/qualcomm/phy-qcom-edp.c
+++ b/drivers/phy/qualcomm/phy-qcom-edp.c
@@ -92,6 +92,8 @@ struct phy_ver_ops {
int (*com_configure_pll)(const struct qcom_edp *edp);
int (*com_configure_ssc)(const struct qcom_edp *edp);
int (*com_ldo_config)(const struct qcom_edp *edp);
+ int (*phy_tx_lane_cfg)(const struct qcom_edp *edp);
+ int (*phy_tx_res_cfg)(const struct qcom_edp *edp);
};
struct qcom_edp_phy_cfg {
@@ -101,6 +103,8 @@ struct qcom_edp_phy_cfg {
const struct qcom_edp_swing_pre_emph_cfg *dp_swing_pre_emph_cfg;
const struct qcom_edp_swing_pre_emph_cfg *edp_swing_pre_emph_cfg;
const struct phy_ver_ops *ver_ops;
+ u32 phy_status_reg;
+ u8 bias1_en_2lane;
};
struct qcom_edp {
@@ -316,9 +320,11 @@ static int qcom_edp_phy_init(struct phy *phy)
memcpy(aux_cfg, edp->cfg->aux_cfg, sizeof(aux_cfg));
- ret = edp->cfg->ver_ops->com_clk_fwd_cfg(edp);
- if (ret)
- return ret;
+ if (edp->cfg->ver_ops->com_clk_fwd_cfg) {
+ ret = edp->cfg->ver_ops->com_clk_fwd_cfg(edp);
+ if (ret)
+ return ret;
+ }
writel(DP_PHY_PD_CTL_PWRDN | DP_PHY_PD_CTL_AUX_PWRDN |
DP_PHY_PD_CTL_PLL_PWRDN | DP_PHY_PD_CTL_DP_CLAMP_EN,
@@ -1131,7 +1137,13 @@ static int qcom_edp_phy_power_on(struct phy *phy)
/* TX Lane configuration */
writel(0x05, edp->edp + DP_PHY_TX0_TX1_LANE_CTL);
- writel(0x05, edp->edp + DP_PHY_TX2_TX3_LANE_CTL);
+ if (edp->cfg->ver_ops->phy_tx_lane_cfg) {
+ ret = edp->cfg->ver_ops->phy_tx_lane_cfg(edp);
+ if (ret)
+ return ret;
+ } else {
+ writel(0x05, edp->edp + DP_PHY_TX2_TX3_LANE_CTL);
+ }
/* TX-0 register configuration */
writel(0x03, edp->tx0 + TXn_TRANSCEIVER_BIAS_EN);
@@ -1169,13 +1181,18 @@ static int qcom_edp_phy_power_on(struct phy *phy)
writel(0x00, edp->tx1 + TXn_TX_POL_INV);
writel(0x10, edp->tx0 + TXn_TX_DRV_LVL_OFFSET);
writel(0x10, edp->tx1 + TXn_TX_DRV_LVL_OFFSET);
- writel(0x11, edp->tx0 + TXn_RES_CODE_LANE_OFFSET_TX0);
- writel(0x11, edp->tx0 + TXn_RES_CODE_LANE_OFFSET_TX1);
- writel(0x11, edp->tx1 + TXn_RES_CODE_LANE_OFFSET_TX0);
- writel(0x11, edp->tx1 + TXn_RES_CODE_LANE_OFFSET_TX1);
-
- writel(0x10, edp->tx0 + TXn_TX_EMP_POST1_LVL);
- writel(0x10, edp->tx1 + TXn_TX_EMP_POST1_LVL);
+ if (edp->cfg->ver_ops->phy_tx_res_cfg) {
+ ret = edp->cfg->ver_ops->phy_tx_res_cfg(edp);
+ if (ret)
+ return ret;
+ } else {
+ writel(0x11, edp->tx0 + TXn_RES_CODE_LANE_OFFSET_TX0);
+ writel(0x11, edp->tx0 + TXn_RES_CODE_LANE_OFFSET_TX1);
+ writel(0x11, edp->tx1 + TXn_RES_CODE_LANE_OFFSET_TX0);
+ writel(0x11, edp->tx1 + TXn_RES_CODE_LANE_OFFSET_TX1);
+ writel(0x10, edp->tx0 + TXn_TX_EMP_POST1_LVL);
+ writel(0x10, edp->tx1 + TXn_TX_EMP_POST1_LVL);
+ }
writel(0x1f, edp->tx0 + TXn_TX_DRV_LVL);
writel(0x1f, edp->tx1 + TXn_TX_DRV_LVL);
@@ -1187,7 +1204,7 @@ static int qcom_edp_phy_power_on(struct phy *phy)
cfg1 = 0x1;
} else if (edp->dp_opts.lanes == 2) {
bias0_en = 0x03;
- bias1_en = 0x00;
+ bias1_en = edp->cfg->bias1_en_2lane;
drvr0_en = 0x04;
drvr1_en = 0x07;
cfg1 = 0x3;
@@ -1210,7 +1227,7 @@ static int qcom_edp_phy_power_on(struct phy *phy)
writel(0x19, edp->edp + DP_PHY_CFG);
- ret = readl_poll_timeout(edp->edp + DP_PHY_STATUS,
+ ret = readl_poll_timeout(edp->edp + (edp->cfg->phy_status_reg ?: DP_PHY_STATUS),
val, val & BIT(1), 500, 10000);
if (ret)
return ret;
--
2.34.1
^ permalink raw reply [flat|nested] 36+ messages in thread* Re: [PATCH 08/17] phy: qcom: edp: Generalize power-on path to support per-SoC overrides
2026-09-11 15:36 ` [PATCH 08/17] phy: qcom: edp: Generalize power-on path to support per-SoC overrides Nabige Aala
@ 2026-09-14 0:00 ` Dmitry Baryshkov
0 siblings, 0 replies; 36+ messages in thread
From: Dmitry Baryshkov @ 2026-09-14 0:00 UTC (permalink / raw)
To: Nabige Aala
Cc: Vinod Koul, Neil Armstrong, Manivannan Sadhasivam, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson, Rob Clark,
Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang, Sean Paul,
Marijn Suijten, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Kuogee Hsieh,
linux-arm-msm, linux-phy, devicetree, linux-kernel, dri-devel,
freedreno, Ritesh Kumar, Mahadevan P
On Fri, Sep 11, 2026 at 09:06:39PM +0530, Nabige Aala wrote:
> From: Ritesh Kumar <ritesh.kumar@oss.qualcomm.com>
>
> Nord has a different register layout and power-on sequence that the
> existing hard-coded paths cannot accommodate. Make com_clk_fwd_cfg
> optional,
Why?
> add phy_tx_lane_cfg and phy_tx_res_cfg callbacks to
> phy_ver_ops, and add phy_status_reg and bias1_en_2lane fields to
> qcom_edp_phy_cfg so each SoC can override the defaults. No
> functional change for existing SoCs; new fields default to zero/NULL.
>
> Signed-off-by: Ritesh Kumar <ritesh.kumar@oss.qualcomm.com>
> Signed-off-by: Nabige Aala <nabige.aala@oss.qualcomm.com>
> ---
> drivers/phy/qualcomm/phy-qcom-edp.c | 43 ++++++++++++++++++++++++++-----------
> 1 file changed, 30 insertions(+), 13 deletions(-)
>
> diff --git a/drivers/phy/qualcomm/phy-qcom-edp.c b/drivers/phy/qualcomm/phy-qcom-edp.c
> index bf8a17336c7e..373f13b3d6d5 100644
> --- a/drivers/phy/qualcomm/phy-qcom-edp.c
> +++ b/drivers/phy/qualcomm/phy-qcom-edp.c
> @@ -92,6 +92,8 @@ struct phy_ver_ops {
> int (*com_configure_pll)(const struct qcom_edp *edp);
> int (*com_configure_ssc)(const struct qcom_edp *edp);
> int (*com_ldo_config)(const struct qcom_edp *edp);
> + int (*phy_tx_lane_cfg)(const struct qcom_edp *edp);
> + int (*phy_tx_res_cfg)(const struct qcom_edp *edp);
> };
>
> struct qcom_edp_phy_cfg {
> @@ -101,6 +103,8 @@ struct qcom_edp_phy_cfg {
> const struct qcom_edp_swing_pre_emph_cfg *dp_swing_pre_emph_cfg;
> const struct qcom_edp_swing_pre_emph_cfg *edp_swing_pre_emph_cfg;
> const struct phy_ver_ops *ver_ops;
> + u32 phy_status_reg;
> + u8 bias1_en_2lane;
> };
>
> struct qcom_edp {
> @@ -316,9 +320,11 @@ static int qcom_edp_phy_init(struct phy *phy)
>
> memcpy(aux_cfg, edp->cfg->aux_cfg, sizeof(aux_cfg));
>
> - ret = edp->cfg->ver_ops->com_clk_fwd_cfg(edp);
> - if (ret)
> - return ret;
> + if (edp->cfg->ver_ops->com_clk_fwd_cfg) {
Why?
> + ret = edp->cfg->ver_ops->com_clk_fwd_cfg(edp);
> + if (ret)
> + return ret;
> + }
>
> writel(DP_PHY_PD_CTL_PWRDN | DP_PHY_PD_CTL_AUX_PWRDN |
> DP_PHY_PD_CTL_PLL_PWRDN | DP_PHY_PD_CTL_DP_CLAMP_EN,
> @@ -1131,7 +1137,13 @@ static int qcom_edp_phy_power_on(struct phy *phy)
>
> /* TX Lane configuration */
> writel(0x05, edp->edp + DP_PHY_TX0_TX1_LANE_CTL);
> - writel(0x05, edp->edp + DP_PHY_TX2_TX3_LANE_CTL);
> + if (edp->cfg->ver_ops->phy_tx_lane_cfg) {
> + ret = edp->cfg->ver_ops->phy_tx_lane_cfg(edp);
> + if (ret)
> + return ret;
> + } else {
> + writel(0x05, edp->edp + DP_PHY_TX2_TX3_LANE_CTL);
if it's about a single register, add a register to the map instead.
> + }
>
> /* TX-0 register configuration */
> writel(0x03, edp->tx0 + TXn_TRANSCEIVER_BIAS_EN);
> @@ -1169,13 +1181,18 @@ static int qcom_edp_phy_power_on(struct phy *phy)
> writel(0x00, edp->tx1 + TXn_TX_POL_INV);
> writel(0x10, edp->tx0 + TXn_TX_DRV_LVL_OFFSET);
> writel(0x10, edp->tx1 + TXn_TX_DRV_LVL_OFFSET);
> - writel(0x11, edp->tx0 + TXn_RES_CODE_LANE_OFFSET_TX0);
> - writel(0x11, edp->tx0 + TXn_RES_CODE_LANE_OFFSET_TX1);
> - writel(0x11, edp->tx1 + TXn_RES_CODE_LANE_OFFSET_TX0);
> - writel(0x11, edp->tx1 + TXn_RES_CODE_LANE_OFFSET_TX1);
> -
> - writel(0x10, edp->tx0 + TXn_TX_EMP_POST1_LVL);
> - writel(0x10, edp->tx1 + TXn_TX_EMP_POST1_LVL);
> + if (edp->cfg->ver_ops->phy_tx_res_cfg) {
> + ret = edp->cfg->ver_ops->phy_tx_res_cfg(edp);
> + if (ret)
> + return ret;
> + } else {
> + writel(0x11, edp->tx0 + TXn_RES_CODE_LANE_OFFSET_TX0);
> + writel(0x11, edp->tx0 + TXn_RES_CODE_LANE_OFFSET_TX1);
> + writel(0x11, edp->tx1 + TXn_RES_CODE_LANE_OFFSET_TX0);
> + writel(0x11, edp->tx1 + TXn_RES_CODE_LANE_OFFSET_TX1);
> + writel(0x10, edp->tx0 + TXn_TX_EMP_POST1_LVL);
> + writel(0x10, edp->tx1 + TXn_TX_EMP_POST1_LVL);
Either use a register map or move defaults to the callback too. My
preference is towards the former option.
> + }
> writel(0x1f, edp->tx0 + TXn_TX_DRV_LVL);
> writel(0x1f, edp->tx1 + TXn_TX_DRV_LVL);
>
> @@ -1187,7 +1204,7 @@ static int qcom_edp_phy_power_on(struct phy *phy)
> cfg1 = 0x1;
> } else if (edp->dp_opts.lanes == 2) {
> bias0_en = 0x03;
> - bias1_en = 0x00;
> + bias1_en = edp->cfg->bias1_en_2lane;
> drvr0_en = 0x04;
> drvr1_en = 0x07;
> cfg1 = 0x3;
> @@ -1210,7 +1227,7 @@ static int qcom_edp_phy_power_on(struct phy *phy)
>
> writel(0x19, edp->edp + DP_PHY_CFG);
>
> - ret = readl_poll_timeout(edp->edp + DP_PHY_STATUS,
> + ret = readl_poll_timeout(edp->edp + (edp->cfg->phy_status_reg ?: DP_PHY_STATUS),
No hidden defaults, thank you.
> val, val & BIT(1), 500, 10000);
> if (ret)
> return ret;
>
> --
> 2.34.1
>
--
With best wishes
Dmitry
^ permalink raw reply [flat|nested] 36+ messages in thread
* [PATCH 09/17] phy: qcom: edp: Add Nord AUX channel and VCO divider configuration tables
2026-09-11 15:36 [PATCH 00/17] Add Qualcomm Nord display and eDP PHY support Nabige Aala
` (7 preceding siblings ...)
2026-09-11 15:36 ` [PATCH 08/17] phy: qcom: edp: Generalize power-on path to support per-SoC overrides Nabige Aala
@ 2026-09-11 15:36 ` Nabige Aala
2026-09-14 0:03 ` Dmitry Baryshkov
2026-09-11 15:36 ` [PATCH 10/17] phy: qcom: edp: Add Nord voltage-swing and pre-emphasis tables Nabige Aala
` (7 subsequent siblings)
16 siblings, 1 reply; 36+ messages in thread
From: Nabige Aala @ 2026-09-11 15:36 UTC (permalink / raw)
To: Vinod Koul, Neil Armstrong, Manivannan Sadhasivam, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson, Rob Clark,
Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang, Sean Paul,
Marijn Suijten, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Kuogee Hsieh
Cc: linux-arm-msm, linux-phy, devicetree, linux-kernel, dri-devel,
freedreno, Ritesh Kumar, Mahadevan P, Nabige Aala
From: Ritesh Kumar <ritesh.kumar@oss.qualcomm.com>
Nord requires different AUX channel and VCO divider settings compared
to existing SoCs. Add edp_phy_aux_cfg_nord and edp_phy_vco_div_cfg_nord
with values sourced from HPG Tables 2-1-a and 2-1-b respectively.
Signed-off-by: Ritesh Kumar <ritesh.kumar@oss.qualcomm.com>
Signed-off-by: Nabige Aala <nabige.aala@oss.qualcomm.com>
---
drivers/phy/qualcomm/phy-qcom-edp.c | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
diff --git a/drivers/phy/qualcomm/phy-qcom-edp.c b/drivers/phy/qualcomm/phy-qcom-edp.c
index 373f13b3d6d5..ee0d7f1a90fe 100644
--- a/drivers/phy/qualcomm/phy-qcom-edp.c
+++ b/drivers/phy/qualcomm/phy-qcom-edp.c
@@ -1508,6 +1508,25 @@ static int qcom_edp_phy_probe(struct platform_device *pdev)
return PTR_ERR_OR_ZERO(phy_provider);
}
+/*
+ * nord AUX config (eDP mode).
+ * From HPG Table 2-1-a: edp_phy_aux_bist.csv
+ * Index: 0 1 2 3 4 5 6 7 8 9 10 11 12
+ */
+static const u8 edp_phy_aux_cfg_nord[DP_AUX_CFG_SIZE] = {
+ 0x00, 0x13, 0xa4, 0x00, 0x0a, 0x26, 0x0a, 0x03, 0x37, 0x03, 0x02, 0x02, 0x04,
+};
+
+/*
+ * nord VCO_DIV config for eDP mode.
+ * From HPG Table 2-1-b AUX Clock Settings (eDP mode) - Nominal/Turbo column.
+ * Indices: [0]=1620, [1]=2700, [2]=5400, [3]=8100
+ */
+static const u8 edp_phy_vco_div_cfg_nord[4] = {
+ 0x00, 0x00, 0x02, 0x01,
+};
+
+
static const struct of_device_id qcom_edp_phy_match_table[] = {
{ .compatible = "qcom,glymur-dp-phy", .data = &glymur_phy_cfg, },
{ .compatible = "qcom,sa8775p-edp-phy", .data = &sa8775p_dp_phy_cfg, },
--
2.34.1
^ permalink raw reply [flat|nested] 36+ messages in thread* Re: [PATCH 09/17] phy: qcom: edp: Add Nord AUX channel and VCO divider configuration tables
2026-09-11 15:36 ` [PATCH 09/17] phy: qcom: edp: Add Nord AUX channel and VCO divider configuration tables Nabige Aala
@ 2026-09-14 0:03 ` Dmitry Baryshkov
0 siblings, 0 replies; 36+ messages in thread
From: Dmitry Baryshkov @ 2026-09-14 0:03 UTC (permalink / raw)
To: Nabige Aala
Cc: Vinod Koul, Neil Armstrong, Manivannan Sadhasivam, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson, Rob Clark,
Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang, Sean Paul,
Marijn Suijten, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Kuogee Hsieh,
linux-arm-msm, linux-phy, devicetree, linux-kernel, dri-devel,
freedreno, Ritesh Kumar, Mahadevan P
On Fri, Sep 11, 2026 at 09:06:40PM +0530, Nabige Aala wrote:
> From: Ritesh Kumar <ritesh.kumar@oss.qualcomm.com>
>
> Nord requires different AUX channel and VCO divider settings compared
> to existing SoCs. Add edp_phy_aux_cfg_nord and edp_phy_vco_div_cfg_nord
> with values sourced from HPG Tables 2-1-a and 2-1-b respectively.
>
> Signed-off-by: Ritesh Kumar <ritesh.kumar@oss.qualcomm.com>
> Signed-off-by: Nabige Aala <nabige.aala@oss.qualcomm.com>
> ---
> drivers/phy/qualcomm/phy-qcom-edp.c | 19 +++++++++++++++++++
> 1 file changed, 19 insertions(+)
>
> diff --git a/drivers/phy/qualcomm/phy-qcom-edp.c b/drivers/phy/qualcomm/phy-qcom-edp.c
> index 373f13b3d6d5..ee0d7f1a90fe 100644
> --- a/drivers/phy/qualcomm/phy-qcom-edp.c
> +++ b/drivers/phy/qualcomm/phy-qcom-edp.c
> @@ -1508,6 +1508,25 @@ static int qcom_edp_phy_probe(struct platform_device *pdev)
> return PTR_ERR_OR_ZERO(phy_provider);
> }
>
> +/*
> + * nord AUX config (eDP mode).
> + * From HPG Table 2-1-a: edp_phy_aux_bist.csv
> + * Index: 0 1 2 3 4 5 6 7 8 9 10 11 12
Drop useless comments.
> + */
> +static const u8 edp_phy_aux_cfg_nord[DP_AUX_CFG_SIZE] = {
> + 0x00, 0x13, 0xa4, 0x00, 0x0a, 0x26, 0x0a, 0x03, 0x37, 0x03, 0x02, 0x02, 0x04,
So, it's the same as edp_phy_aux_cfg_v5, except for the last register?
> +};
> +
> +/*
> + * nord VCO_DIV config for eDP mode.
> + * From HPG Table 2-1-b AUX Clock Settings (eDP mode) - Nominal/Turbo column.
> + * Indices: [0]=1620, [1]=2700, [2]=5400, [3]=8100
:-(
If it's AI, fix the AI prompt, please.
> + */
> +static const u8 edp_phy_vco_div_cfg_nord[4] = {
> + 0x00, 0x00, 0x02, 0x01,
> +};
> +
> +
> static const struct of_device_id qcom_edp_phy_match_table[] = {
> { .compatible = "qcom,glymur-dp-phy", .data = &glymur_phy_cfg, },
> { .compatible = "qcom,sa8775p-edp-phy", .data = &sa8775p_dp_phy_cfg, },
>
> --
> 2.34.1
>
--
With best wishes
Dmitry
^ permalink raw reply [flat|nested] 36+ messages in thread
* [PATCH 10/17] phy: qcom: edp: Add Nord voltage-swing and pre-emphasis tables
2026-09-11 15:36 [PATCH 00/17] Add Qualcomm Nord display and eDP PHY support Nabige Aala
` (8 preceding siblings ...)
2026-09-11 15:36 ` [PATCH 09/17] phy: qcom: edp: Add Nord AUX channel and VCO divider configuration tables Nabige Aala
@ 2026-09-11 15:36 ` Nabige Aala
2026-09-14 0:05 ` Dmitry Baryshkov
2026-09-11 15:36 ` [PATCH 11/17] phy: qcom: edp: Add Nord PHY power-on and reset state-machine callbacks Nabige Aala
` (6 subsequent siblings)
16 siblings, 1 reply; 36+ messages in thread
From: Nabige Aala @ 2026-09-11 15:36 UTC (permalink / raw)
To: Vinod Koul, Neil Armstrong, Manivannan Sadhasivam, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson, Rob Clark,
Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang, Sean Paul,
Marijn Suijten, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Kuogee Hsieh
Cc: linux-arm-msm, linux-phy, devicetree, linux-kernel, dri-devel,
freedreno, Ritesh Kumar, Mahadevan P, Nabige Aala
From: Ritesh Kumar <ritesh.kumar@oss.qualcomm.com>
Nord requires different TX voltage-swing and pre-emphasis levels for
both eDP and DP modes. Add four pairs of 4x4 tables covering RBR/HBR
and HBR2/HBR3 for each mode, sourced from HPG Tables 2-2, 2-4, 2-6-a
and 2-6-b, and wrap them in qcom_edp_swing_pre_emph_cfg descriptors.
Signed-off-by: Ritesh Kumar <ritesh.kumar@oss.qualcomm.com>
Signed-off-by: Nabige Aala <nabige.aala@oss.qualcomm.com>
---
drivers/phy/qualcomm/phy-qcom-edp.c | 85 +++++++++++++++++++++++++++++++++++++
1 file changed, 85 insertions(+)
diff --git a/drivers/phy/qualcomm/phy-qcom-edp.c b/drivers/phy/qualcomm/phy-qcom-edp.c
index ee0d7f1a90fe..64878398f43c 100644
--- a/drivers/phy/qualcomm/phy-qcom-edp.c
+++ b/drivers/phy/qualcomm/phy-qcom-edp.c
@@ -1527,6 +1527,91 @@ static const u8 edp_phy_vco_div_cfg_nord[4] = {
};
+/*
+ * nord eDP swing/pre-emphasis tables (eDP mode, low HBR: RBR/HBR).
+ * From HPG Table 2-2: LDO ON 550mV (0x51).
+ * Rates: 1.62/2.16/2.43/2.7 Gbps
+ */
+static const u8 nord_edp_swing_hbr_rbr[4][4] = {
+ { 0x07, 0x0f, 0x16, 0x1f },
+ { 0x0d, 0x16, 0x1e, 0xff },
+ { 0x11, 0x1b, 0xff, 0xff },
+ { 0x16, 0xff, 0xff, 0xff },
+};
+
+static const u8 nord_edp_pre_emp_hbr_rbr[4][4] = {
+ { 0x05, 0x11, 0x17, 0x1d },
+ { 0x05, 0x11, 0x18, 0xff },
+ { 0x06, 0x11, 0xff, 0xff },
+ { 0x00, 0xff, 0xff, 0xff },
+};
+
+/*
+ * nord eDP swing/pre-emphasis tables (eDP mode, high HBR: HBR2/HBR3).
+ * From HPG Table 2-4: LDO ON 660mV (0x91).
+ * Rates: 3.24/4.32/5.4/5.94/8.1 Gbps
+ */
+static const u8 nord_edp_swing_hbr2_hbr3[4][4] = {
+ { 0x0b, 0x11, 0x17, 0x1c },
+ { 0x10, 0x19, 0x1f, 0xff },
+ { 0x19, 0x1f, 0xff, 0xff },
+ { 0x1f, 0xff, 0xff, 0xff },
+};
+
+static const u8 nord_edp_pre_emp_hbr2_hbr3[4][4] = {
+ { 0x0c, 0x15, 0x19, 0x1e },
+ { 0x0b, 0x15, 0x19, 0xff },
+ { 0x0e, 0x14, 0xff, 0xff },
+ { 0x0d, 0xff, 0xff, 0xff },
+};
+
+static const struct qcom_edp_swing_pre_emph_cfg nord_edp_swing_pre_emph_cfg = {
+ .swing_hbr_rbr = &nord_edp_swing_hbr_rbr,
+ .swing_hbr3_hbr2 = &nord_edp_swing_hbr2_hbr3,
+ .pre_emphasis_hbr_rbr = &nord_edp_pre_emp_hbr_rbr,
+ .pre_emphasis_hbr3_hbr2 = &nord_edp_pre_emp_hbr2_hbr3,
+};
+
+/*
+ * nord DP swing/pre-emphasis tables (DP mode, COMBO_PHYS TypeC).
+ * From HPG Table 2-6-a (HBR3/HBR2) and Table 2-6-b (HBR/RBR).
+ */
+static const u8 nord_dp_swing_hbr2_hbr3[4][4] = {
+ { 0x02, 0x12, 0x16, 0x1a },
+ { 0x09, 0x19, 0x1f, 0xff },
+ { 0x10, 0x1f, 0xff, 0xff },
+ { 0x1f, 0xff, 0xff, 0xff },
+};
+
+static const u8 nord_dp_pre_emp_hbr2_hbr3[4][4] = {
+ { 0x00, 0x0c, 0x15, 0x1b },
+ { 0x02, 0x0e, 0x16, 0xff },
+ { 0x02, 0x11, 0xff, 0xff },
+ { 0x04, 0xff, 0xff, 0xff },
+};
+
+static const u8 nord_dp_swing_hbr_rbr[4][4] = {
+ { 0x07, 0x0f, 0x16, 0x1f },
+ { 0x11, 0x1e, 0x1f, 0xff },
+ { 0x16, 0x1f, 0xff, 0xff },
+ { 0x1f, 0xff, 0xff, 0xff },
+};
+
+static const u8 nord_dp_pre_emp_hbr_rbr[4][4] = {
+ { 0x00, 0x0e, 0x15, 0x1a },
+ { 0x00, 0x0e, 0x15, 0xff },
+ { 0x00, 0x0e, 0xff, 0xff },
+ { 0x02, 0xff, 0xff, 0xff },
+};
+
+static const struct qcom_edp_swing_pre_emph_cfg nord_dp_swing_pre_emph_cfg = {
+ .swing_hbr_rbr = &nord_dp_swing_hbr_rbr,
+ .swing_hbr3_hbr2 = &nord_dp_swing_hbr2_hbr3,
+ .pre_emphasis_hbr_rbr = &nord_dp_pre_emp_hbr_rbr,
+ .pre_emphasis_hbr3_hbr2 = &nord_dp_pre_emp_hbr2_hbr3,
+};
+
+
static const struct of_device_id qcom_edp_phy_match_table[] = {
{ .compatible = "qcom,glymur-dp-phy", .data = &glymur_phy_cfg, },
{ .compatible = "qcom,sa8775p-edp-phy", .data = &sa8775p_dp_phy_cfg, },
--
2.34.1
^ permalink raw reply [flat|nested] 36+ messages in thread* Re: [PATCH 10/17] phy: qcom: edp: Add Nord voltage-swing and pre-emphasis tables
2026-09-11 15:36 ` [PATCH 10/17] phy: qcom: edp: Add Nord voltage-swing and pre-emphasis tables Nabige Aala
@ 2026-09-14 0:05 ` Dmitry Baryshkov
0 siblings, 0 replies; 36+ messages in thread
From: Dmitry Baryshkov @ 2026-09-14 0:05 UTC (permalink / raw)
To: Nabige Aala
Cc: Vinod Koul, Neil Armstrong, Manivannan Sadhasivam, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson, Rob Clark,
Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang, Sean Paul,
Marijn Suijten, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Kuogee Hsieh,
linux-arm-msm, linux-phy, devicetree, linux-kernel, dri-devel,
freedreno, Ritesh Kumar, Mahadevan P
On Fri, Sep 11, 2026 at 09:06:41PM +0530, Nabige Aala wrote:
> From: Ritesh Kumar <ritesh.kumar@oss.qualcomm.com>
>
> Nord requires different TX voltage-swing and pre-emphasis levels for
> both eDP and DP modes. Add four pairs of 4x4 tables covering RBR/HBR
> and HBR2/HBR3 for each mode, sourced from HPG Tables 2-2, 2-4, 2-6-a
> and 2-6-b, and wrap them in qcom_edp_swing_pre_emph_cfg descriptors.
>
> Signed-off-by: Ritesh Kumar <ritesh.kumar@oss.qualcomm.com>
> Signed-off-by: Nabige Aala <nabige.aala@oss.qualcomm.com>
How many commits do we have for a Nord? There is no point in splitting
it in 10 different commits.
> ---
> drivers/phy/qualcomm/phy-qcom-edp.c | 85 +++++++++++++++++++++++++++++++++++++
> 1 file changed, 85 insertions(+)
>
> diff --git a/drivers/phy/qualcomm/phy-qcom-edp.c b/drivers/phy/qualcomm/phy-qcom-edp.c
> index ee0d7f1a90fe..64878398f43c 100644
> --- a/drivers/phy/qualcomm/phy-qcom-edp.c
> +++ b/drivers/phy/qualcomm/phy-qcom-edp.c
> @@ -1527,6 +1527,91 @@ static const u8 edp_phy_vco_div_cfg_nord[4] = {
> };
>
>
> +/*
> + * nord eDP swing/pre-emphasis tables (eDP mode, low HBR: RBR/HBR).
> + * From HPG Table 2-2: LDO ON 550mV (0x51).
> + * Rates: 1.62/2.16/2.43/2.7 Gbps
> + */
> +static const u8 nord_edp_swing_hbr_rbr[4][4] = {
> + { 0x07, 0x0f, 0x16, 0x1f },
> + { 0x0d, 0x16, 0x1e, 0xff },
> + { 0x11, 0x1b, 0xff, 0xff },
> + { 0x16, 0xff, 0xff, 0xff },
> +};
edp_swing_hbr_rbr? Why do you need to duplicate it? Drop the duplicate
tables.
> +
> +static const u8 nord_edp_pre_emp_hbr_rbr[4][4] = {
> + { 0x05, 0x11, 0x17, 0x1d },
> + { 0x05, 0x11, 0x18, 0xff },
> + { 0x06, 0x11, 0xff, 0xff },
> + { 0x00, 0xff, 0xff, 0xff },
> +};
> +
> +/*
> + * nord eDP swing/pre-emphasis tables (eDP mode, high HBR: HBR2/HBR3).
> + * From HPG Table 2-4: LDO ON 660mV (0x91).
> + * Rates: 3.24/4.32/5.4/5.94/8.1 Gbps
> + */
> +static const u8 nord_edp_swing_hbr2_hbr3[4][4] = {
> + { 0x0b, 0x11, 0x17, 0x1c },
> + { 0x10, 0x19, 0x1f, 0xff },
> + { 0x19, 0x1f, 0xff, 0xff },
> + { 0x1f, 0xff, 0xff, 0xff },
> +};
> +
> +static const u8 nord_edp_pre_emp_hbr2_hbr3[4][4] = {
> + { 0x0c, 0x15, 0x19, 0x1e },
> + { 0x0b, 0x15, 0x19, 0xff },
> + { 0x0e, 0x14, 0xff, 0xff },
> + { 0x0d, 0xff, 0xff, 0xff },
> +};
> +
> +static const struct qcom_edp_swing_pre_emph_cfg nord_edp_swing_pre_emph_cfg = {
> + .swing_hbr_rbr = &nord_edp_swing_hbr_rbr,
> + .swing_hbr3_hbr2 = &nord_edp_swing_hbr2_hbr3,
> + .pre_emphasis_hbr_rbr = &nord_edp_pre_emp_hbr_rbr,
> + .pre_emphasis_hbr3_hbr2 = &nord_edp_pre_emp_hbr2_hbr3,
> +};
> +
> +/*
> + * nord DP swing/pre-emphasis tables (DP mode, COMBO_PHYS TypeC).
> + * From HPG Table 2-6-a (HBR3/HBR2) and Table 2-6-b (HBR/RBR).
> + */
> +static const u8 nord_dp_swing_hbr2_hbr3[4][4] = {
> + { 0x02, 0x12, 0x16, 0x1a },
> + { 0x09, 0x19, 0x1f, 0xff },
> + { 0x10, 0x1f, 0xff, 0xff },
> + { 0x1f, 0xff, 0xff, 0xff },
> +};
> +
> +static const u8 nord_dp_pre_emp_hbr2_hbr3[4][4] = {
> + { 0x00, 0x0c, 0x15, 0x1b },
> + { 0x02, 0x0e, 0x16, 0xff },
> + { 0x02, 0x11, 0xff, 0xff },
> + { 0x04, 0xff, 0xff, 0xff },
> +};
> +
> +static const u8 nord_dp_swing_hbr_rbr[4][4] = {
> + { 0x07, 0x0f, 0x16, 0x1f },
> + { 0x11, 0x1e, 0x1f, 0xff },
> + { 0x16, 0x1f, 0xff, 0xff },
> + { 0x1f, 0xff, 0xff, 0xff },
> +};
> +
> +static const u8 nord_dp_pre_emp_hbr_rbr[4][4] = {
> + { 0x00, 0x0e, 0x15, 0x1a },
> + { 0x00, 0x0e, 0x15, 0xff },
> + { 0x00, 0x0e, 0xff, 0xff },
> + { 0x02, 0xff, 0xff, 0xff },
> +};
> +
> +static const struct qcom_edp_swing_pre_emph_cfg nord_dp_swing_pre_emph_cfg = {
> + .swing_hbr_rbr = &nord_dp_swing_hbr_rbr,
> + .swing_hbr3_hbr2 = &nord_dp_swing_hbr2_hbr3,
> + .pre_emphasis_hbr_rbr = &nord_dp_pre_emp_hbr_rbr,
> + .pre_emphasis_hbr3_hbr2 = &nord_dp_pre_emp_hbr2_hbr3,
> +};
> +
> +
> static const struct of_device_id qcom_edp_phy_match_table[] = {
> { .compatible = "qcom,glymur-dp-phy", .data = &glymur_phy_cfg, },
> { .compatible = "qcom,sa8775p-edp-phy", .data = &sa8775p_dp_phy_cfg, },
>
> --
> 2.34.1
>
--
With best wishes
Dmitry
^ permalink raw reply [flat|nested] 36+ messages in thread
* [PATCH 11/17] phy: qcom: edp: Add Nord PHY power-on and reset state-machine callbacks
2026-09-11 15:36 [PATCH 00/17] Add Qualcomm Nord display and eDP PHY support Nabige Aala
` (9 preceding siblings ...)
2026-09-11 15:36 ` [PATCH 10/17] phy: qcom: edp: Add Nord voltage-swing and pre-emphasis tables Nabige Aala
@ 2026-09-11 15:36 ` Nabige Aala
2026-09-14 0:07 ` Dmitry Baryshkov
2026-09-14 8:08 ` Konrad Dybcio
2026-09-11 15:36 ` [PATCH 12/17] phy: qcom: edp: Add Nord bias and clock buffer enable callback Nabige Aala
` (5 subsequent siblings)
16 siblings, 2 replies; 36+ messages in thread
From: Nabige Aala @ 2026-09-11 15:36 UTC (permalink / raw)
To: Vinod Koul, Neil Armstrong, Manivannan Sadhasivam, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson, Rob Clark,
Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang, Sean Paul,
Marijn Suijten, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Kuogee Hsieh
Cc: linux-arm-msm, linux-phy, devicetree, linux-kernel, dri-devel,
freedreno, Ritesh Kumar, Mahadevan P, Nabige Aala
From: Ritesh Kumar <ritesh.kumar@oss.qualcomm.com>
Nord relocates the QSERDES COM CMN_STATUS and C_READY_STATUS registers
so the generic sequences cannot be reused. Add
qcom_edp_phy_power_on_nord() which powers down all lanes and polls
CMN_STATUS_NORD (0x1d0), and qcom_edp_phy_com_resetsm_cntrl_nord()
which triggers the reset SM and polls C_READY_STATUS_NORD (0x1f8).
Signed-off-by: Ritesh Kumar <ritesh.kumar@oss.qualcomm.com>
Signed-off-by: Nabige Aala <nabige.aala@oss.qualcomm.com>
---
drivers/phy/qualcomm/phy-qcom-edp.c | 25 +++++++++++++++++++++++++
1 file changed, 25 insertions(+)
diff --git a/drivers/phy/qualcomm/phy-qcom-edp.c b/drivers/phy/qualcomm/phy-qcom-edp.c
index 64878398f43c..6cac4b55b66f 100644
--- a/drivers/phy/qualcomm/phy-qcom-edp.c
+++ b/drivers/phy/qualcomm/phy-qcom-edp.c
@@ -1612,6 +1612,31 @@ static const struct qcom_edp_swing_pre_emph_cfg nord_dp_swing_pre_emph_cfg = {
};
+static int qcom_edp_phy_power_on_nord(const struct qcom_edp *edp)
+{
+ u32 val;
+
+ writel(DP_PHY_PD_CTL_PWRDN | DP_PHY_PD_CTL_AUX_PWRDN |
+ DP_PHY_PD_CTL_LANE_0_1_PWRDN | DP_PHY_PD_CTL_LANE_2_3_PWRDN |
+ DP_PHY_PD_CTL_PLL_PWRDN | DP_PHY_PD_CTL_DP_CLAMP_EN,
+ edp->edp + DP_PHY_PD_CTL);
+ writel(0xfc, edp->edp + DP_PHY_MODE);
+
+ return readl_poll_timeout(edp->pll + DP_QSERDES_V8_COM_CMN_STATUS_NORD,
+ val, val & BIT(7), 5, 200);
+}
+
+static int qcom_edp_phy_com_resetsm_cntrl_nord(const struct qcom_edp *edp)
+{
+ u32 val;
+
+ writel(0x20, edp->pll + DP_QSERDES_V8_COM_RESETSM_CNTRL);
+
+ return readl_poll_timeout(edp->pll + DP_QSERDES_V8_COM_C_READY_STATUS_NORD,
+ val, val & BIT(0), 500, 10000);
+}
+
+
static const struct of_device_id qcom_edp_phy_match_table[] = {
{ .compatible = "qcom,glymur-dp-phy", .data = &glymur_phy_cfg, },
{ .compatible = "qcom,sa8775p-edp-phy", .data = &sa8775p_dp_phy_cfg, },
--
2.34.1
^ permalink raw reply [flat|nested] 36+ messages in thread* Re: [PATCH 11/17] phy: qcom: edp: Add Nord PHY power-on and reset state-machine callbacks
2026-09-11 15:36 ` [PATCH 11/17] phy: qcom: edp: Add Nord PHY power-on and reset state-machine callbacks Nabige Aala
@ 2026-09-14 0:07 ` Dmitry Baryshkov
2026-09-14 8:08 ` Konrad Dybcio
1 sibling, 0 replies; 36+ messages in thread
From: Dmitry Baryshkov @ 2026-09-14 0:07 UTC (permalink / raw)
To: Nabige Aala
Cc: Vinod Koul, Neil Armstrong, Manivannan Sadhasivam, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson, Rob Clark,
Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang, Sean Paul,
Marijn Suijten, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Kuogee Hsieh,
linux-arm-msm, linux-phy, devicetree, linux-kernel, dri-devel,
freedreno, Ritesh Kumar, Mahadevan P
On Fri, Sep 11, 2026 at 09:06:42PM +0530, Nabige Aala wrote:
> From: Ritesh Kumar <ritesh.kumar@oss.qualcomm.com>
>
> Nord relocates the QSERDES COM CMN_STATUS and C_READY_STATUS registers
> so the generic sequences cannot be reused. Add
> qcom_edp_phy_power_on_nord() which powers down all lanes and polls
> CMN_STATUS_NORD (0x1d0), and qcom_edp_phy_com_resetsm_cntrl_nord()
> which triggers the reset SM and polls C_READY_STATUS_NORD (0x1f8).
If the only difference is the register address, please use register maps
instead.
>
> Signed-off-by: Ritesh Kumar <ritesh.kumar@oss.qualcomm.com>
> Signed-off-by: Nabige Aala <nabige.aala@oss.qualcomm.com>
> ---
> drivers/phy/qualcomm/phy-qcom-edp.c | 25 +++++++++++++++++++++++++
> 1 file changed, 25 insertions(+)
>
> diff --git a/drivers/phy/qualcomm/phy-qcom-edp.c b/drivers/phy/qualcomm/phy-qcom-edp.c
> index 64878398f43c..6cac4b55b66f 100644
> --- a/drivers/phy/qualcomm/phy-qcom-edp.c
> +++ b/drivers/phy/qualcomm/phy-qcom-edp.c
> @@ -1612,6 +1612,31 @@ static const struct qcom_edp_swing_pre_emph_cfg nord_dp_swing_pre_emph_cfg = {
> };
>
>
> +static int qcom_edp_phy_power_on_nord(const struct qcom_edp *edp)
> +{
> + u32 val;
> +
> + writel(DP_PHY_PD_CTL_PWRDN | DP_PHY_PD_CTL_AUX_PWRDN |
> + DP_PHY_PD_CTL_LANE_0_1_PWRDN | DP_PHY_PD_CTL_LANE_2_3_PWRDN |
> + DP_PHY_PD_CTL_PLL_PWRDN | DP_PHY_PD_CTL_DP_CLAMP_EN,
> + edp->edp + DP_PHY_PD_CTL);
> + writel(0xfc, edp->edp + DP_PHY_MODE);
> +
> + return readl_poll_timeout(edp->pll + DP_QSERDES_V8_COM_CMN_STATUS_NORD,
> + val, val & BIT(7), 5, 200);
> +}
> +
> +static int qcom_edp_phy_com_resetsm_cntrl_nord(const struct qcom_edp *edp)
> +{
> + u32 val;
> +
> + writel(0x20, edp->pll + DP_QSERDES_V8_COM_RESETSM_CNTRL);
> +
> + return readl_poll_timeout(edp->pll + DP_QSERDES_V8_COM_C_READY_STATUS_NORD,
> + val, val & BIT(0), 500, 10000);
> +}
> +
> +
> static const struct of_device_id qcom_edp_phy_match_table[] = {
> { .compatible = "qcom,glymur-dp-phy", .data = &glymur_phy_cfg, },
> { .compatible = "qcom,sa8775p-edp-phy", .data = &sa8775p_dp_phy_cfg, },
>
> --
> 2.34.1
>
--
With best wishes
Dmitry
^ permalink raw reply [flat|nested] 36+ messages in thread* Re: [PATCH 11/17] phy: qcom: edp: Add Nord PHY power-on and reset state-machine callbacks
2026-09-11 15:36 ` [PATCH 11/17] phy: qcom: edp: Add Nord PHY power-on and reset state-machine callbacks Nabige Aala
2026-09-14 0:07 ` Dmitry Baryshkov
@ 2026-09-14 8:08 ` Konrad Dybcio
1 sibling, 0 replies; 36+ messages in thread
From: Konrad Dybcio @ 2026-09-14 8:08 UTC (permalink / raw)
To: Nabige Aala, Vinod Koul, Neil Armstrong, Manivannan Sadhasivam,
Rob Herring, Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson,
Rob Clark, Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang,
Sean Paul, Marijn Suijten, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Kuogee Hsieh
Cc: linux-arm-msm, linux-phy, devicetree, linux-kernel, dri-devel,
freedreno, Ritesh Kumar, Mahadevan P
On 9/11/26 5:36 PM, Nabige Aala wrote:
> From: Ritesh Kumar <ritesh.kumar@oss.qualcomm.com>
>
> Nord relocates the QSERDES COM CMN_STATUS and C_READY_STATUS registers
> so the generic sequences cannot be reused. Add
> qcom_edp_phy_power_on_nord() which powers down all lanes and polls
> CMN_STATUS_NORD (0x1d0), and qcom_edp_phy_com_resetsm_cntrl_nord()
> which triggers the reset SM and polls C_READY_STATUS_NORD (0x1f8).
>
> Signed-off-by: Ritesh Kumar <ritesh.kumar@oss.qualcomm.com>
> Signed-off-by: Nabige Aala <nabige.aala@oss.qualcomm.com>
> ---
> drivers/phy/qualcomm/phy-qcom-edp.c | 25 +++++++++++++++++++++++++
> 1 file changed, 25 insertions(+)
>
> diff --git a/drivers/phy/qualcomm/phy-qcom-edp.c b/drivers/phy/qualcomm/phy-qcom-edp.c
> index 64878398f43c..6cac4b55b66f 100644
> --- a/drivers/phy/qualcomm/phy-qcom-edp.c
> +++ b/drivers/phy/qualcomm/phy-qcom-edp.c
> @@ -1612,6 +1612,31 @@ static const struct qcom_edp_swing_pre_emph_cfg nord_dp_swing_pre_emph_cfg = {
> };
>
>
> +static int qcom_edp_phy_power_on_nord(const struct qcom_edp *edp)
This commit introduces compile warnings (-Wunused-function)
> +{
> + u32 val;
> +
> + writel(DP_PHY_PD_CTL_PWRDN | DP_PHY_PD_CTL_AUX_PWRDN |
> + DP_PHY_PD_CTL_LANE_0_1_PWRDN | DP_PHY_PD_CTL_LANE_2_3_PWRDN |
> + DP_PHY_PD_CTL_PLL_PWRDN | DP_PHY_PD_CTL_DP_CLAMP_EN,
> + edp->edp + DP_PHY_PD_CTL);
> + writel(0xfc, edp->edp + DP_PHY_MODE);
> +
> + return readl_poll_timeout(edp->pll + DP_QSERDES_V8_COM_CMN_STATUS_NORD,
> + val, val & BIT(7), 5, 200);
> +}
> +
> +static int qcom_edp_phy_com_resetsm_cntrl_nord(const struct qcom_edp *edp)
> +{
> + u32 val;
> +
> + writel(0x20, edp->pll + DP_QSERDES_V8_COM_RESETSM_CNTRL);
> +
> + return readl_poll_timeout(edp->pll + DP_QSERDES_V8_COM_C_READY_STATUS_NORD,
> + val, val & BIT(0), 500, 10000);
> +}
> +
> +
Double \n
Konrad
^ permalink raw reply [flat|nested] 36+ messages in thread
* [PATCH 12/17] phy: qcom: edp: Add Nord bias and clock buffer enable callback
2026-09-11 15:36 [PATCH 00/17] Add Qualcomm Nord display and eDP PHY support Nabige Aala
` (10 preceding siblings ...)
2026-09-11 15:36 ` [PATCH 11/17] phy: qcom: edp: Add Nord PHY power-on and reset state-machine callbacks Nabige Aala
@ 2026-09-11 15:36 ` Nabige Aala
2026-09-14 0:07 ` Dmitry Baryshkov
2026-09-11 15:36 ` [PATCH 13/17] phy: qcom: edp: Add Nord spread-spectrum clocking configuration callback Nabige Aala
` (4 subsequent siblings)
16 siblings, 1 reply; 36+ messages in thread
From: Nabige Aala @ 2026-09-11 15:36 UTC (permalink / raw)
To: Vinod Koul, Neil Armstrong, Manivannan Sadhasivam, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson, Rob Clark,
Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang, Sean Paul,
Marijn Suijten, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Kuogee Hsieh
Cc: linux-arm-msm, linux-phy, devicetree, linux-kernel, dri-devel,
freedreno, Ritesh Kumar, Mahadevan P, Nabige Aala
From: Ritesh Kumar <ritesh.kumar@oss.qualcomm.com>
Nord requires BIAS_EN_CLKBUFLR_EN to be set to 0x1f to enable the
internal bias generator and clock buffer, which differs from the value
used on existing SoCs. Add qcom_edp_com_bias_en_clkbuflr_nord() per
HPG Table 2-1-d.
Signed-off-by: Ritesh Kumar <ritesh.kumar@oss.qualcomm.com>
Signed-off-by: Nabige Aala <nabige.aala@oss.qualcomm.com>
---
drivers/phy/qualcomm/phy-qcom-edp.c | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/drivers/phy/qualcomm/phy-qcom-edp.c b/drivers/phy/qualcomm/phy-qcom-edp.c
index 6cac4b55b66f..ec4220cffe69 100644
--- a/drivers/phy/qualcomm/phy-qcom-edp.c
+++ b/drivers/phy/qualcomm/phy-qcom-edp.c
@@ -1637,6 +1637,14 @@ static int qcom_edp_phy_com_resetsm_cntrl_nord(const struct qcom_edp *edp)
}
+static int qcom_edp_com_bias_en_clkbuflr_nord(const struct qcom_edp *edp)
+{
+ writel(0x1f, edp->pll + DP_QSERDES_V8_COM_BIAS_EN_CLKBUFLR_EN);
+
+ return 0;
+}
+
+
static const struct of_device_id qcom_edp_phy_match_table[] = {
{ .compatible = "qcom,glymur-dp-phy", .data = &glymur_phy_cfg, },
{ .compatible = "qcom,sa8775p-edp-phy", .data = &sa8775p_dp_phy_cfg, },
--
2.34.1
^ permalink raw reply [flat|nested] 36+ messages in thread* Re: [PATCH 12/17] phy: qcom: edp: Add Nord bias and clock buffer enable callback
2026-09-11 15:36 ` [PATCH 12/17] phy: qcom: edp: Add Nord bias and clock buffer enable callback Nabige Aala
@ 2026-09-14 0:07 ` Dmitry Baryshkov
0 siblings, 0 replies; 36+ messages in thread
From: Dmitry Baryshkov @ 2026-09-14 0:07 UTC (permalink / raw)
To: Nabige Aala
Cc: Vinod Koul, Neil Armstrong, Manivannan Sadhasivam, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson, Rob Clark,
Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang, Sean Paul,
Marijn Suijten, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Kuogee Hsieh,
linux-arm-msm, linux-phy, devicetree, linux-kernel, dri-devel,
freedreno, Ritesh Kumar, Mahadevan P
On Fri, Sep 11, 2026 at 09:06:43PM +0530, Nabige Aala wrote:
> From: Ritesh Kumar <ritesh.kumar@oss.qualcomm.com>
>
> Nord requires BIAS_EN_CLKBUFLR_EN to be set to 0x1f to enable the
> internal bias generator and clock buffer, which differs from the value
> used on existing SoCs. Add qcom_edp_com_bias_en_clkbuflr_nord() per
> HPG Table 2-1-d.
>
> Signed-off-by: Ritesh Kumar <ritesh.kumar@oss.qualcomm.com>
> Signed-off-by: Nabige Aala <nabige.aala@oss.qualcomm.com>
> ---
> drivers/phy/qualcomm/phy-qcom-edp.c | 8 ++++++++
> 1 file changed, 8 insertions(+)
>
> diff --git a/drivers/phy/qualcomm/phy-qcom-edp.c b/drivers/phy/qualcomm/phy-qcom-edp.c
> index 6cac4b55b66f..ec4220cffe69 100644
> --- a/drivers/phy/qualcomm/phy-qcom-edp.c
> +++ b/drivers/phy/qualcomm/phy-qcom-edp.c
> @@ -1637,6 +1637,14 @@ static int qcom_edp_phy_com_resetsm_cntrl_nord(const struct qcom_edp *edp)
> }
>
>
> +static int qcom_edp_com_bias_en_clkbuflr_nord(const struct qcom_edp *edp)
> +{
> + writel(0x1f, edp->pll + DP_QSERDES_V8_COM_BIAS_EN_CLKBUFLR_EN);
> +
> + return 0;
> +}
qcom_edp_com_bias_en_clkbuflr_v8()?
> +
> +
> static const struct of_device_id qcom_edp_phy_match_table[] = {
> { .compatible = "qcom,glymur-dp-phy", .data = &glymur_phy_cfg, },
> { .compatible = "qcom,sa8775p-edp-phy", .data = &sa8775p_dp_phy_cfg, },
>
> --
> 2.34.1
>
>
> --
> linux-phy mailing list
> linux-phy@lists.infradead.org
> https://lists.infradead.org/mailman/listinfo/linux-phy
--
With best wishes
Dmitry
^ permalink raw reply [flat|nested] 36+ messages in thread
* [PATCH 13/17] phy: qcom: edp: Add Nord spread-spectrum clocking configuration callback
2026-09-11 15:36 [PATCH 00/17] Add Qualcomm Nord display and eDP PHY support Nabige Aala
` (11 preceding siblings ...)
2026-09-11 15:36 ` [PATCH 12/17] phy: qcom: edp: Add Nord bias and clock buffer enable callback Nabige Aala
@ 2026-09-11 15:36 ` Nabige Aala
2026-09-11 15:36 ` [PATCH 14/17] phy: qcom: edp: Add Nord PLL " Nabige Aala
` (3 subsequent siblings)
16 siblings, 0 replies; 36+ messages in thread
From: Nabige Aala @ 2026-09-11 15:36 UTC (permalink / raw)
To: Vinod Koul, Neil Armstrong, Manivannan Sadhasivam, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson, Rob Clark,
Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang, Sean Paul,
Marijn Suijten, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Kuogee Hsieh
Cc: linux-arm-msm, linux-phy, devicetree, linux-kernel, dri-devel,
freedreno, Ritesh Kumar, Mahadevan P, Nabige Aala
From: Ritesh Kumar <ritesh.kumar@oss.qualcomm.com>
Nord requires different SSC register values compared to existing SoCs.
Add qcom_edp_com_configure_ssc_nord() which programs SSC_PER1/2 with
fixed values and link-rate-dependent SSC_STEP_SIZE1/2 for RBR, HBR,
HBR2 and HBR3, per HPG Table 2-9.
Signed-off-by: Ritesh Kumar <ritesh.kumar@oss.qualcomm.com>
Signed-off-by: Nabige Aala <nabige.aala@oss.qualcomm.com>
---
drivers/phy/qualcomm/phy-qcom-edp.c | 43 +++++++++++++++++++++++++++++++++++++
1 file changed, 43 insertions(+)
diff --git a/drivers/phy/qualcomm/phy-qcom-edp.c b/drivers/phy/qualcomm/phy-qcom-edp.c
index ec4220cffe69..a0f4b12e561e 100644
--- a/drivers/phy/qualcomm/phy-qcom-edp.c
+++ b/drivers/phy/qualcomm/phy-qcom-edp.c
@@ -1645,6 +1645,49 @@ static int qcom_edp_com_bias_en_clkbuflr_nord(const struct qcom_edp *edp)
}
+/*
+ * Nord SSC settings per HPG Table 2-9.
+ * SSC_PER1 = 0x6b and SSC_PER2 = 0x02 are fixed across all link rates.
+ * SSC_STEP_SIZE1/2 are link-rate dependent.
+ */
+static int qcom_edp_com_configure_ssc_nord(const struct qcom_edp *edp)
+{
+ const struct phy_configure_opts_dp *dp_opts = &edp->dp_opts;
+ u32 step1;
+ u32 step2;
+
+ switch (dp_opts->link_rate) {
+ case 1620:
+ step1 = 0x83;
+ step2 = 0x02;
+ break;
+
+ case 2700:
+ case 5400:
+ step1 = 0x18;
+ step2 = 0x02;
+ break;
+
+ case 8100:
+ step1 = 0x5b;
+ step2 = 0x02;
+ break;
+
+ default:
+ return -EINVAL;
+ }
+
+ writel(0x01, edp->pll + DP_QSERDES_V8_COM_SSC_EN_CENTER);
+ writel(0x00, edp->pll + DP_QSERDES_V8_COM_SSC_ADJ_PER1);
+ writel(0x6b, edp->pll + DP_QSERDES_V8_COM_SSC_PER1);
+ writel(0x02, edp->pll + DP_QSERDES_V8_COM_SSC_PER2);
+ writel(step1, edp->pll + DP_QSERDES_V8_COM_SSC_STEP_SIZE1_MODE0);
+ writel(step2, edp->pll + DP_QSERDES_V8_COM_SSC_STEP_SIZE2_MODE0);
+
+ return 0;
+}
+
+
static const struct of_device_id qcom_edp_phy_match_table[] = {
{ .compatible = "qcom,glymur-dp-phy", .data = &glymur_phy_cfg, },
{ .compatible = "qcom,sa8775p-edp-phy", .data = &sa8775p_dp_phy_cfg, },
--
2.34.1
^ permalink raw reply [flat|nested] 36+ messages in thread* [PATCH 14/17] phy: qcom: edp: Add Nord PLL configuration callback
2026-09-11 15:36 [PATCH 00/17] Add Qualcomm Nord display and eDP PHY support Nabige Aala
` (12 preceding siblings ...)
2026-09-11 15:36 ` [PATCH 13/17] phy: qcom: edp: Add Nord spread-spectrum clocking configuration callback Nabige Aala
@ 2026-09-11 15:36 ` Nabige Aala
2026-09-14 0:12 ` Dmitry Baryshkov
2026-09-11 15:36 ` [PATCH 15/17] phy: qcom: edp: Add Nord LDO, TX lane and TX resistor calibration callbacks Nabige Aala
` (2 subsequent siblings)
16 siblings, 1 reply; 36+ messages in thread
From: Nabige Aala @ 2026-09-11 15:36 UTC (permalink / raw)
To: Vinod Koul, Neil Armstrong, Manivannan Sadhasivam, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson, Rob Clark,
Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang, Sean Paul,
Marijn Suijten, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Kuogee Hsieh
Cc: linux-arm-msm, linux-phy, devicetree, linux-kernel, dri-devel,
freedreno, Ritesh Kumar, Mahadevan P, Nabige Aala
From: Ritesh Kumar <ritesh.kumar@oss.qualcomm.com>
Nord uses a 38.4 MHz CXO reference with a different QSERDES v8 COM
register layout and PLL coefficients. Add
qcom_edp_com_configure_pll_nord() which programs all QSERDES COM PLL
registers with link-rate-dependent values for RBR, HBR, HBR2 and
HBR3, per HPG Table 2-1-d.
Signed-off-by: Ritesh Kumar <ritesh.kumar@oss.qualcomm.com>
Signed-off-by: Nabige Aala <nabige.aala@oss.qualcomm.com>
---
drivers/phy/qualcomm/phy-qcom-edp.c | 112 ++++++++++++++++++++++++++++++++++++
1 file changed, 112 insertions(+)
diff --git a/drivers/phy/qualcomm/phy-qcom-edp.c b/drivers/phy/qualcomm/phy-qcom-edp.c
index a0f4b12e561e..4d1b2c81d956 100644
--- a/drivers/phy/qualcomm/phy-qcom-edp.c
+++ b/drivers/phy/qualcomm/phy-qcom-edp.c
@@ -1688,6 +1688,118 @@ static int qcom_edp_com_configure_ssc_nord(const struct qcom_edp *edp)
}
+/*
+ * Nord PLL configuration per HPG Table 2-1-d, CXO = 38.4 MHz.
+ * Supported link rates: 1.62 Gbps (RBR), 2.7 Gbps (HBR),
+ * 5.4 Gbps (HBR2), 8.1 Gbps (HBR3).
+ */
+static int qcom_edp_com_configure_pll_nord(const struct qcom_edp *edp)
+{
+ const struct phy_configure_opts_dp *dp_opts = &edp->dp_opts;
+ u32 div_frac_start1_mode0;
+ u32 div_frac_start2_mode0;
+ u32 div_frac_start3_mode0;
+ u32 dec_start_mode0;
+ u32 lock_cmp1_mode0;
+ u32 lock_cmp2_mode0;
+ u32 lock_cmp_en;
+ u32 hsclk_sel;
+ u32 code1_mode0;
+ u32 code2_mode0;
+ u32 core_clk_div_mode0 = 0x14;
+
+ switch (dp_opts->link_rate) {
+ case 1620:
+ hsclk_sel = 0x0c;
+ dec_start_mode0 = 0x54;
+ div_frac_start1_mode0 = 0x00;
+ div_frac_start2_mode0 = 0x00;
+ div_frac_start3_mode0 = 0x06;
+ lock_cmp1_mode0 = 0x37;
+ lock_cmp2_mode0 = 0x04;
+ lock_cmp_en = 0x04;
+ code1_mode0 = 0x8d;
+ code2_mode0 = 0x27;
+ break;
+
+ case 2700:
+ hsclk_sel = 0x04;
+ dec_start_mode0 = 0x46;
+ div_frac_start1_mode0 = 0x00;
+ div_frac_start2_mode0 = 0x00;
+ div_frac_start3_mode0 = 0x05;
+ lock_cmp1_mode0 = 0x07;
+ lock_cmp2_mode0 = 0x07;
+ lock_cmp_en = 0x08;
+ code1_mode0 = 0xf6;
+ code2_mode0 = 0x20;
+ break;
+
+ case 5400:
+ hsclk_sel = 0x01;
+ dec_start_mode0 = 0x46;
+ div_frac_start1_mode0 = 0x00;
+ div_frac_start2_mode0 = 0x00;
+ div_frac_start3_mode0 = 0x05;
+ lock_cmp1_mode0 = 0x0f;
+ lock_cmp2_mode0 = 0x0e;
+ lock_cmp_en = 0x08;
+ code1_mode0 = 0xf6;
+ code2_mode0 = 0x20;
+ break;
+
+ case 8100:
+ hsclk_sel = 0x03;
+ dec_start_mode0 = 0x4f;
+ div_frac_start1_mode0 = 0x00;
+ div_frac_start2_mode0 = 0xa0;
+ div_frac_start3_mode0 = 0x01;
+ lock_cmp1_mode0 = 0x17;
+ lock_cmp2_mode0 = 0x15;
+ lock_cmp_en = 0x08;
+ code1_mode0 = 0x14;
+ code2_mode0 = 0x25;
+ core_clk_div_mode0 = 0x0a;
+ break;
+
+ default:
+ return -EINVAL;
+ }
+
+ writel(0x01, edp->pll + DP_QSERDES_V8_COM_SVS_MODE_CLK_SEL_NORD);
+ writel(0x0b, edp->pll + DP_QSERDES_V8_COM_SYSCLK_EN_SEL);
+ writel(0x02, edp->pll + DP_QSERDES_V8_COM_SYS_CLK_CTRL);
+ writel(0x0c, edp->pll + DP_QSERDES_V8_COM_CLK_ENABLE1);
+ writel(0x06, edp->pll + DP_QSERDES_V8_COM_SYSCLK_BUF_ENABLE);
+ writel(0x30, edp->pll + DP_QSERDES_V8_COM_CLK_SELECT);
+ writel(hsclk_sel, edp->pll + DP_QSERDES_V8_COM_HSCLK_SEL_1);
+ writel(0x07, edp->pll + DP_QSERDES_V8_COM_PLL_IVCO);
+ writel(lock_cmp_en, edp->pll + DP_QSERDES_V8_COM_LOCK_CMP_EN);
+ writel(0x36, edp->pll + DP_QSERDES_V8_COM_PLL_CCTRL_MODE0);
+ writel(0x16, edp->pll + DP_QSERDES_V8_COM_PLL_RCTRL_MODE0);
+ writel(0x06, edp->pll + DP_QSERDES_V8_COM_CP_CTRL_MODE0);
+ writel(dec_start_mode0, edp->pll + DP_QSERDES_V8_COM_DEC_START_MODE0);
+ writel(div_frac_start1_mode0, edp->pll + DP_QSERDES_V8_COM_DIV_FRAC_START1_MODE0);
+ writel(div_frac_start2_mode0, edp->pll + DP_QSERDES_V8_COM_DIV_FRAC_START2_MODE0);
+ writel(div_frac_start3_mode0, edp->pll + DP_QSERDES_V8_COM_DIV_FRAC_START3_MODE0);
+ writel(0x12, edp->pll + DP_QSERDES_V8_COM_CMN_CONFIG_1);
+ writel(0x3f, edp->pll + DP_QSERDES_V8_COM_INTEGLOOP_GAIN0_MODE0);
+ writel(0x00, edp->pll + DP_QSERDES_V8_COM_INTEGLOOP_GAIN1_MODE0);
+ writel(0x00, edp->pll + DP_QSERDES_V8_COM_VCO_TUNE_MAP);
+ writel(lock_cmp1_mode0, edp->pll + DP_QSERDES_V8_COM_LOCK_CMP1_MODE0);
+ writel(lock_cmp2_mode0, edp->pll + DP_QSERDES_V8_COM_LOCK_CMP2_MODE0);
+ writel(0x0a, edp->pll + DP_QSERDES_V8_COM_BG_TIMER);
+ writel(core_clk_div_mode0, edp->pll + DP_QSERDES_V8_COM_CORECLK_DIV_MODE0);
+ writel(0x00, edp->pll + DP_QSERDES_V8_COM_VCO_TUNE_CTRL);
+ writel(0x1d, edp->pll + DP_QSERDES_V8_COM_BIAS_EN_CLKBUFLR_EN);
+ writel(0x0f, edp->pll + DP_QSERDES_V8_COM_CORE_CLK_EN);
+ writel(code1_mode0, edp->pll + DP_QSERDES_V8_COM_BIN_VCOCAL_CMP_CODE1_MODE0);
+ writel(code2_mode0, edp->pll + DP_QSERDES_V8_COM_BIN_VCOCAL_CMP_CODE2_MODE0);
+
+ return 0;
+}
+
+
static const struct of_device_id qcom_edp_phy_match_table[] = {
{ .compatible = "qcom,glymur-dp-phy", .data = &glymur_phy_cfg, },
{ .compatible = "qcom,sa8775p-edp-phy", .data = &sa8775p_dp_phy_cfg, },
--
2.34.1
^ permalink raw reply [flat|nested] 36+ messages in thread* Re: [PATCH 14/17] phy: qcom: edp: Add Nord PLL configuration callback
2026-09-11 15:36 ` [PATCH 14/17] phy: qcom: edp: Add Nord PLL " Nabige Aala
@ 2026-09-14 0:12 ` Dmitry Baryshkov
0 siblings, 0 replies; 36+ messages in thread
From: Dmitry Baryshkov @ 2026-09-14 0:12 UTC (permalink / raw)
To: Nabige Aala
Cc: Vinod Koul, Neil Armstrong, Manivannan Sadhasivam, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson, Rob Clark,
Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang, Sean Paul,
Marijn Suijten, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Kuogee Hsieh,
linux-arm-msm, linux-phy, devicetree, linux-kernel, dri-devel,
freedreno, Ritesh Kumar, Mahadevan P
On Fri, Sep 11, 2026 at 09:06:45PM +0530, Nabige Aala wrote:
> From: Ritesh Kumar <ritesh.kumar@oss.qualcomm.com>
>
> Nord uses a 38.4 MHz CXO reference with a different QSERDES v8 COM
> register layout and PLL coefficients. Add
> qcom_edp_com_configure_pll_nord() which programs all QSERDES COM PLL
> registers with link-rate-dependent values for RBR, HBR, HBR2 and
> HBR3, per HPG Table 2-1-d.
>
> Signed-off-by: Ritesh Kumar <ritesh.kumar@oss.qualcomm.com>
> Signed-off-by: Nabige Aala <nabige.aala@oss.qualcomm.com>
> ---
> drivers/phy/qualcomm/phy-qcom-edp.c | 112 ++++++++++++++++++++++++++++++++++++
> 1 file changed, 112 insertions(+)
>
> diff --git a/drivers/phy/qualcomm/phy-qcom-edp.c b/drivers/phy/qualcomm/phy-qcom-edp.c
> index a0f4b12e561e..4d1b2c81d956 100644
> --- a/drivers/phy/qualcomm/phy-qcom-edp.c
> +++ b/drivers/phy/qualcomm/phy-qcom-edp.c
> @@ -1688,6 +1688,118 @@ static int qcom_edp_com_configure_ssc_nord(const struct qcom_edp *edp)
> }
>
>
> +/*
> + * Nord PLL configuration per HPG Table 2-1-d, CXO = 38.4 MHz.
> + * Supported link rates: 1.62 Gbps (RBR), 2.7 Gbps (HBR),
> + * 5.4 Gbps (HBR2), 8.1 Gbps (HBR3).
> + */
> +static int qcom_edp_com_configure_pll_nord(const struct qcom_edp *edp)
> +{
> + const struct phy_configure_opts_dp *dp_opts = &edp->dp_opts;
> + u32 div_frac_start1_mode0;
> + u32 div_frac_start2_mode0;
> + u32 div_frac_start3_mode0;
> + u32 dec_start_mode0;
> + u32 lock_cmp1_mode0;
> + u32 lock_cmp2_mode0;
> + u32 lock_cmp_en;
> + u32 hsclk_sel;
> + u32 code1_mode0;
> + u32 code2_mode0;
> + u32 core_clk_div_mode0 = 0x14;
> +
> + switch (dp_opts->link_rate) {
> + case 1620:
> + hsclk_sel = 0x0c;
> + dec_start_mode0 = 0x54;
> + div_frac_start1_mode0 = 0x00;
> + div_frac_start2_mode0 = 0x00;
> + div_frac_start3_mode0 = 0x06;
> + lock_cmp1_mode0 = 0x37;
> + lock_cmp2_mode0 = 0x04;
> + lock_cmp_en = 0x04;
> + code1_mode0 = 0x8d;
> + code2_mode0 = 0x27;
No extra alignment, please.
> + break;
> +
> + case 2700:
> + hsclk_sel = 0x04;
> + dec_start_mode0 = 0x46;
> + div_frac_start1_mode0 = 0x00;
> + div_frac_start2_mode0 = 0x00;
> + div_frac_start3_mode0 = 0x05;
> + lock_cmp1_mode0 = 0x07;
> + lock_cmp2_mode0 = 0x07;
> + lock_cmp_en = 0x08;
> + code1_mode0 = 0xf6;
> + code2_mode0 = 0x20;
> + break;
> +
> + case 5400:
> + hsclk_sel = 0x01;
> + dec_start_mode0 = 0x46;
> + div_frac_start1_mode0 = 0x00;
> + div_frac_start2_mode0 = 0x00;
> + div_frac_start3_mode0 = 0x05;
> + lock_cmp1_mode0 = 0x0f;
> + lock_cmp2_mode0 = 0x0e;
> + lock_cmp_en = 0x08;
> + code1_mode0 = 0xf6;
> + code2_mode0 = 0x20;
> + break;
> +
> + case 8100:
> + hsclk_sel = 0x03;
> + dec_start_mode0 = 0x4f;
> + div_frac_start1_mode0 = 0x00;
> + div_frac_start2_mode0 = 0xa0;
> + div_frac_start3_mode0 = 0x01;
> + lock_cmp1_mode0 = 0x17;
> + lock_cmp2_mode0 = 0x15;
> + lock_cmp_en = 0x08;
> + code1_mode0 = 0x14;
> + code2_mode0 = 0x25;
> + core_clk_div_mode0 = 0x0a;
> + break;
> +
> + default:
> + return -EINVAL;
> + }
> +
> + writel(0x01, edp->pll + DP_QSERDES_V8_COM_SVS_MODE_CLK_SEL_NORD);
> + writel(0x0b, edp->pll + DP_QSERDES_V8_COM_SYSCLK_EN_SEL);
> + writel(0x02, edp->pll + DP_QSERDES_V8_COM_SYS_CLK_CTRL);
> + writel(0x0c, edp->pll + DP_QSERDES_V8_COM_CLK_ENABLE1);
> + writel(0x06, edp->pll + DP_QSERDES_V8_COM_SYSCLK_BUF_ENABLE);
> + writel(0x30, edp->pll + DP_QSERDES_V8_COM_CLK_SELECT);
> + writel(hsclk_sel, edp->pll + DP_QSERDES_V8_COM_HSCLK_SEL_1);
> + writel(0x07, edp->pll + DP_QSERDES_V8_COM_PLL_IVCO);
> + writel(lock_cmp_en, edp->pll + DP_QSERDES_V8_COM_LOCK_CMP_EN);
> + writel(0x36, edp->pll + DP_QSERDES_V8_COM_PLL_CCTRL_MODE0);
> + writel(0x16, edp->pll + DP_QSERDES_V8_COM_PLL_RCTRL_MODE0);
> + writel(0x06, edp->pll + DP_QSERDES_V8_COM_CP_CTRL_MODE0);
> + writel(dec_start_mode0, edp->pll + DP_QSERDES_V8_COM_DEC_START_MODE0);
> + writel(div_frac_start1_mode0, edp->pll + DP_QSERDES_V8_COM_DIV_FRAC_START1_MODE0);
Always 0x00
> + writel(div_frac_start2_mode0, edp->pll + DP_QSERDES_V8_COM_DIV_FRAC_START2_MODE0);
> + writel(div_frac_start3_mode0, edp->pll + DP_QSERDES_V8_COM_DIV_FRAC_START3_MODE0);
> + writel(0x12, edp->pll + DP_QSERDES_V8_COM_CMN_CONFIG_1);
> + writel(0x3f, edp->pll + DP_QSERDES_V8_COM_INTEGLOOP_GAIN0_MODE0);
> + writel(0x00, edp->pll + DP_QSERDES_V8_COM_INTEGLOOP_GAIN1_MODE0);
> + writel(0x00, edp->pll + DP_QSERDES_V8_COM_VCO_TUNE_MAP);
> + writel(lock_cmp1_mode0, edp->pll + DP_QSERDES_V8_COM_LOCK_CMP1_MODE0);
> + writel(lock_cmp2_mode0, edp->pll + DP_QSERDES_V8_COM_LOCK_CMP2_MODE0);
> + writel(0x0a, edp->pll + DP_QSERDES_V8_COM_BG_TIMER);
> + writel(core_clk_div_mode0, edp->pll + DP_QSERDES_V8_COM_CORECLK_DIV_MODE0);
> + writel(0x00, edp->pll + DP_QSERDES_V8_COM_VCO_TUNE_CTRL);
> + writel(0x1d, edp->pll + DP_QSERDES_V8_COM_BIAS_EN_CLKBUFLR_EN);
Not 0x1f?
> + writel(0x0f, edp->pll + DP_QSERDES_V8_COM_CORE_CLK_EN);
No DP_QSERDES_V8_COM_VCO_TUNE1_MODE0 /
DP_QSERDES_V8_COM_VCO_TUNE2_MODE0?
> + writel(code1_mode0, edp->pll + DP_QSERDES_V8_COM_BIN_VCOCAL_CMP_CODE1_MODE0);
> + writel(code2_mode0, edp->pll + DP_QSERDES_V8_COM_BIN_VCOCAL_CMP_CODE2_MODE0);
> +
> + return 0;
> +}
> +
> +
> static const struct of_device_id qcom_edp_phy_match_table[] = {
> { .compatible = "qcom,glymur-dp-phy", .data = &glymur_phy_cfg, },
> { .compatible = "qcom,sa8775p-edp-phy", .data = &sa8775p_dp_phy_cfg, },
>
> --
> 2.34.1
>
--
With best wishes
Dmitry
^ permalink raw reply [flat|nested] 36+ messages in thread
* [PATCH 15/17] phy: qcom: edp: Add Nord LDO, TX lane and TX resistor calibration callbacks
2026-09-11 15:36 [PATCH 00/17] Add Qualcomm Nord display and eDP PHY support Nabige Aala
` (13 preceding siblings ...)
2026-09-11 15:36 ` [PATCH 14/17] phy: qcom: edp: Add Nord PLL " Nabige Aala
@ 2026-09-11 15:36 ` Nabige Aala
2026-09-14 0:12 ` Dmitry Baryshkov
2026-09-11 15:36 ` [PATCH 16/17] phy: qcom: edp: Introduce Nord phy_ver_ops and phy_cfg descriptor Nabige Aala
2026-09-11 15:36 ` [PATCH 17/17] phy: qcom: edp: Register qcom,nord-dp-phy OF compatible string Nabige Aala
16 siblings, 1 reply; 36+ messages in thread
From: Nabige Aala @ 2026-09-11 15:36 UTC (permalink / raw)
To: Vinod Koul, Neil Armstrong, Manivannan Sadhasivam, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson, Rob Clark,
Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang, Sean Paul,
Marijn Suijten, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Kuogee Hsieh
Cc: linux-arm-msm, linux-phy, devicetree, linux-kernel, dri-devel,
freedreno, Ritesh Kumar, Mahadevan P, Nabige Aala
From: Ritesh Kumar <ritesh.kumar@oss.qualcomm.com>
Nord requires different LDO levels, TX lane control offsets and TX
resistor calibration codes compared to existing SoCs. Add
qcom_edp_ldo_config_nord(), qcom_edp_phy_tx_lane_cfg_nord() and
qcom_edp_phy_tx_res_cfg_nord() with values per HPG Table 2-1-d.
Signed-off-by: Ritesh Kumar <ritesh.kumar@oss.qualcomm.com>
Signed-off-by: Nabige Aala <nabige.aala@oss.qualcomm.com>
---
drivers/phy/qualcomm/phy-qcom-edp.c | 47 +++++++++++++++++++++++++++++++++++++
1 file changed, 47 insertions(+)
diff --git a/drivers/phy/qualcomm/phy-qcom-edp.c b/drivers/phy/qualcomm/phy-qcom-edp.c
index 4d1b2c81d956..361f4e467351 100644
--- a/drivers/phy/qualcomm/phy-qcom-edp.c
+++ b/drivers/phy/qualcomm/phy-qcom-edp.c
@@ -1800,6 +1800,53 @@ static int qcom_edp_com_configure_pll_nord(const struct qcom_edp *edp)
}
+/*
+ * nord LDO configuration.
+ * From HPG Table 2-1-d: LDO Configuration section.
+ * eDP mode: 0xD1 for rates <= 8.1 Gbps, 0x00 for UHBR (>8.1 Gbps).
+ * DP mode: always 0x00.
+ * Also programs EDP2_DP_PHY_LDO_CFG: 0x03 for eDP rates <= 8.1G, 0x00 otherwise.
+ */
+static int qcom_edp_ldo_config_nord(const struct qcom_edp *edp)
+{
+ const struct phy_configure_opts_dp *dp_opts = &edp->dp_opts;
+ u32 ldo_config;
+ u32 phy_ldo_cfg;
+
+ ldo_config = 0xd0;
+ phy_ldo_cfg = 0x03;
+
+ writel(ldo_config, edp->tx0 + TXn_LDO_CONFIG);
+ writel(dp_opts->lanes > 2 ? ldo_config : 0x00, edp->tx1 + TXn_LDO_CONFIG);
+ writel(phy_ldo_cfg, edp->edp + DP_PHY_LDO_CFG);
+
+ return 0;
+}
+
+static int qcom_edp_phy_tx_lane_cfg_nord(const struct qcom_edp *edp)
+{
+ writel(0x05, edp->edp + DP_PHY_TX2_TX3_LANE_CTL_NORD);
+ writel(0x12, edp->edp + DP_PHY_TX_LN0_DRV_LVL_NORD);
+ writel(0x12, edp->edp + DP_PHY_TX_LN1_DRV_LVL_NORD);
+ writel(0x05, edp->tx0 + TXn_TX_BAND_NORD);
+ writel(0x05, edp->tx1 + TXn_TX_BAND_NORD);
+
+ return 0;
+}
+
+static int qcom_edp_phy_tx_res_cfg_nord(const struct qcom_edp *edp)
+{
+ writel(0x06, edp->tx0 + TXn_RES_CODE_LANE_OFFSET_TX0);
+ writel(0x06, edp->tx0 + TXn_RES_CODE_LANE_OFFSET_TX1);
+ writel(0x06, edp->tx1 + TXn_RES_CODE_LANE_OFFSET_TX0);
+ writel(0x06, edp->tx1 + TXn_RES_CODE_LANE_OFFSET_TX1);
+ writel(0x06, edp->tx0 + TXn_TX_EMP_POST1_LVL);
+ writel(0x06, edp->tx1 + TXn_TX_EMP_POST1_LVL);
+
+ return 0;
+}
+
+
static const struct of_device_id qcom_edp_phy_match_table[] = {
{ .compatible = "qcom,glymur-dp-phy", .data = &glymur_phy_cfg, },
{ .compatible = "qcom,sa8775p-edp-phy", .data = &sa8775p_dp_phy_cfg, },
--
2.34.1
^ permalink raw reply [flat|nested] 36+ messages in thread* Re: [PATCH 15/17] phy: qcom: edp: Add Nord LDO, TX lane and TX resistor calibration callbacks
2026-09-11 15:36 ` [PATCH 15/17] phy: qcom: edp: Add Nord LDO, TX lane and TX resistor calibration callbacks Nabige Aala
@ 2026-09-14 0:12 ` Dmitry Baryshkov
0 siblings, 0 replies; 36+ messages in thread
From: Dmitry Baryshkov @ 2026-09-14 0:12 UTC (permalink / raw)
To: Nabige Aala
Cc: Vinod Koul, Neil Armstrong, Manivannan Sadhasivam, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson, Rob Clark,
Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang, Sean Paul,
Marijn Suijten, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Kuogee Hsieh,
linux-arm-msm, linux-phy, devicetree, linux-kernel, dri-devel,
freedreno, Ritesh Kumar, Mahadevan P
On Fri, Sep 11, 2026 at 09:06:46PM +0530, Nabige Aala wrote:
> From: Ritesh Kumar <ritesh.kumar@oss.qualcomm.com>
>
> Nord requires different LDO levels, TX lane control offsets and TX
> resistor calibration codes compared to existing SoCs. Add
> qcom_edp_ldo_config_nord(), qcom_edp_phy_tx_lane_cfg_nord() and
> qcom_edp_phy_tx_res_cfg_nord() with values per HPG Table 2-1-d.
>
> Signed-off-by: Ritesh Kumar <ritesh.kumar@oss.qualcomm.com>
> Signed-off-by: Nabige Aala <nabige.aala@oss.qualcomm.com>
> ---
> drivers/phy/qualcomm/phy-qcom-edp.c | 47 +++++++++++++++++++++++++++++++++++++
> 1 file changed, 47 insertions(+)
>
> diff --git a/drivers/phy/qualcomm/phy-qcom-edp.c b/drivers/phy/qualcomm/phy-qcom-edp.c
> index 4d1b2c81d956..361f4e467351 100644
> --- a/drivers/phy/qualcomm/phy-qcom-edp.c
> +++ b/drivers/phy/qualcomm/phy-qcom-edp.c
> @@ -1800,6 +1800,53 @@ static int qcom_edp_com_configure_pll_nord(const struct qcom_edp *edp)
> }
>
>
> +/*
> + * nord LDO configuration.
> + * From HPG Table 2-1-d: LDO Configuration section.
> + * eDP mode: 0xD1 for rates <= 8.1 Gbps, 0x00 for UHBR (>8.1 Gbps).
> + * DP mode: always 0x00.
> + * Also programs EDP2_DP_PHY_LDO_CFG: 0x03 for eDP rates <= 8.1G, 0x00 otherwise.
> + */
> +static int qcom_edp_ldo_config_nord(const struct qcom_edp *edp)
> +{
> + const struct phy_configure_opts_dp *dp_opts = &edp->dp_opts;
> + u32 ldo_config;
> + u32 phy_ldo_cfg;
> +
> + ldo_config = 0xd0;
> + phy_ldo_cfg = 0x03;
You don't need those variables.
> +
> + writel(ldo_config, edp->tx0 + TXn_LDO_CONFIG);
> + writel(dp_opts->lanes > 2 ? ldo_config : 0x00, edp->tx1 + TXn_LDO_CONFIG);
> + writel(phy_ldo_cfg, edp->edp + DP_PHY_LDO_CFG);
> +
> + return 0;
> +}
> +
> +static int qcom_edp_phy_tx_lane_cfg_nord(const struct qcom_edp *edp)
> +{
> + writel(0x05, edp->edp + DP_PHY_TX2_TX3_LANE_CTL_NORD);
> + writel(0x12, edp->edp + DP_PHY_TX_LN0_DRV_LVL_NORD);
> + writel(0x12, edp->edp + DP_PHY_TX_LN1_DRV_LVL_NORD);
> + writel(0x05, edp->tx0 + TXn_TX_BAND_NORD);
> + writel(0x05, edp->tx1 + TXn_TX_BAND_NORD);
> +
> + return 0;
> +}
> +
> +static int qcom_edp_phy_tx_res_cfg_nord(const struct qcom_edp *edp)
> +{
> + writel(0x06, edp->tx0 + TXn_RES_CODE_LANE_OFFSET_TX0);
> + writel(0x06, edp->tx0 + TXn_RES_CODE_LANE_OFFSET_TX1);
> + writel(0x06, edp->tx1 + TXn_RES_CODE_LANE_OFFSET_TX0);
> + writel(0x06, edp->tx1 + TXn_RES_CODE_LANE_OFFSET_TX1);
> + writel(0x06, edp->tx0 + TXn_TX_EMP_POST1_LVL);
> + writel(0x06, edp->tx1 + TXn_TX_EMP_POST1_LVL);
> +
> + return 0;
> +}
> +
> +
> static const struct of_device_id qcom_edp_phy_match_table[] = {
> { .compatible = "qcom,glymur-dp-phy", .data = &glymur_phy_cfg, },
> { .compatible = "qcom,sa8775p-edp-phy", .data = &sa8775p_dp_phy_cfg, },
>
> --
> 2.34.1
>
>
> --
> linux-phy mailing list
> linux-phy@lists.infradead.org
> https://lists.infradead.org/mailman/listinfo/linux-phy
--
With best wishes
Dmitry
^ permalink raw reply [flat|nested] 36+ messages in thread
* [PATCH 16/17] phy: qcom: edp: Introduce Nord phy_ver_ops and phy_cfg descriptor
2026-09-11 15:36 [PATCH 00/17] Add Qualcomm Nord display and eDP PHY support Nabige Aala
` (14 preceding siblings ...)
2026-09-11 15:36 ` [PATCH 15/17] phy: qcom: edp: Add Nord LDO, TX lane and TX resistor calibration callbacks Nabige Aala
@ 2026-09-11 15:36 ` Nabige Aala
2026-09-11 15:36 ` [PATCH 17/17] phy: qcom: edp: Register qcom,nord-dp-phy OF compatible string Nabige Aala
16 siblings, 0 replies; 36+ messages in thread
From: Nabige Aala @ 2026-09-11 15:36 UTC (permalink / raw)
To: Vinod Koul, Neil Armstrong, Manivannan Sadhasivam, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson, Rob Clark,
Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang, Sean Paul,
Marijn Suijten, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Kuogee Hsieh
Cc: linux-arm-msm, linux-phy, devicetree, linux-kernel, dri-devel,
freedreno, Ritesh Kumar, Mahadevan P, Nabige Aala
From: Ritesh Kumar <ritesh.kumar@oss.qualcomm.com>
Add qcom_edp_phy_ops_nord wiring all eight Nord-specific callbacks and
nord_edp_phy_cfg collecting the Nord AUX, VCO divider, swing/pre-emphasis
tables and ver_ops, with phy_status_reg overridden to DP_PHY_STATUS_NORD
(0x0110) and bias1_en_2lane set to 0x03 for correct 2-lane operation.
Signed-off-by: Ritesh Kumar <ritesh.kumar@oss.qualcomm.com>
Signed-off-by: Nabige Aala <nabige.aala@oss.qualcomm.com>
---
drivers/phy/qualcomm/phy-qcom-edp.c | 23 +++++++++++++++++++++++
1 file changed, 23 insertions(+)
diff --git a/drivers/phy/qualcomm/phy-qcom-edp.c b/drivers/phy/qualcomm/phy-qcom-edp.c
index 361f4e467351..338f28cb404f 100644
--- a/drivers/phy/qualcomm/phy-qcom-edp.c
+++ b/drivers/phy/qualcomm/phy-qcom-edp.c
@@ -1847,6 +1847,29 @@ static int qcom_edp_phy_tx_res_cfg_nord(const struct qcom_edp *edp)
}
+static const struct phy_ver_ops qcom_edp_phy_ops_nord = {
+ .com_power_on = qcom_edp_phy_power_on_nord,
+ .com_resetsm_cntrl = qcom_edp_phy_com_resetsm_cntrl_nord,
+ .com_bias_en_clkbuflr = qcom_edp_com_bias_en_clkbuflr_nord,
+ .com_configure_pll = qcom_edp_com_configure_pll_nord,
+ .com_configure_ssc = qcom_edp_com_configure_ssc_nord,
+ .com_ldo_config = qcom_edp_ldo_config_nord,
+ .phy_tx_lane_cfg = qcom_edp_phy_tx_lane_cfg_nord,
+ .phy_tx_res_cfg = qcom_edp_phy_tx_res_cfg_nord,
+};
+
+static const struct qcom_edp_phy_cfg nord_edp_phy_cfg = {
+ .is_edp = false,
+ .aux_cfg = edp_phy_aux_cfg_nord,
+ .vco_div_cfg = edp_phy_vco_div_cfg_nord,
+ .dp_swing_pre_emph_cfg = &nord_dp_swing_pre_emph_cfg,
+ .edp_swing_pre_emph_cfg = &nord_edp_swing_pre_emph_cfg,
+ .ver_ops = &qcom_edp_phy_ops_nord,
+ .phy_status_reg = DP_PHY_STATUS_NORD,
+ .bias1_en_2lane = 0x03,
+};
+
+
static const struct of_device_id qcom_edp_phy_match_table[] = {
{ .compatible = "qcom,glymur-dp-phy", .data = &glymur_phy_cfg, },
{ .compatible = "qcom,sa8775p-edp-phy", .data = &sa8775p_dp_phy_cfg, },
--
2.34.1
^ permalink raw reply [flat|nested] 36+ messages in thread* [PATCH 17/17] phy: qcom: edp: Register qcom,nord-dp-phy OF compatible string
2026-09-11 15:36 [PATCH 00/17] Add Qualcomm Nord display and eDP PHY support Nabige Aala
` (15 preceding siblings ...)
2026-09-11 15:36 ` [PATCH 16/17] phy: qcom: edp: Introduce Nord phy_ver_ops and phy_cfg descriptor Nabige Aala
@ 2026-09-11 15:36 ` Nabige Aala
16 siblings, 0 replies; 36+ messages in thread
From: Nabige Aala @ 2026-09-11 15:36 UTC (permalink / raw)
To: Vinod Koul, Neil Armstrong, Manivannan Sadhasivam, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson, Rob Clark,
Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang, Sean Paul,
Marijn Suijten, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Kuogee Hsieh
Cc: linux-arm-msm, linux-phy, devicetree, linux-kernel, dri-devel,
freedreno, Ritesh Kumar, Mahadevan P, Nabige Aala
From: Ritesh Kumar <ritesh.kumar@oss.qualcomm.com>
Add "qcom,nord-dp-phy" to the OF match table bound to nord_edp_phy_cfg
so the driver attaches to Nord DP PHY nodes described in device-tree.
Signed-off-by: Ritesh Kumar <ritesh.kumar@oss.qualcomm.com>
Signed-off-by: Nabige Aala <nabige.aala@oss.qualcomm.com>
---
drivers/phy/qualcomm/phy-qcom-edp.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/phy/qualcomm/phy-qcom-edp.c b/drivers/phy/qualcomm/phy-qcom-edp.c
index 338f28cb404f..f9a85ae8be62 100644
--- a/drivers/phy/qualcomm/phy-qcom-edp.c
+++ b/drivers/phy/qualcomm/phy-qcom-edp.c
@@ -1872,6 +1872,7 @@ static const struct qcom_edp_phy_cfg nord_edp_phy_cfg = {
static const struct of_device_id qcom_edp_phy_match_table[] = {
{ .compatible = "qcom,glymur-dp-phy", .data = &glymur_phy_cfg, },
+ { .compatible = "qcom,nord-dp-phy", .data = &nord_edp_phy_cfg, },
{ .compatible = "qcom,sa8775p-edp-phy", .data = &sa8775p_dp_phy_cfg, },
{ .compatible = "qcom,sc7280-edp-phy", .data = &sc7280_dp_phy_cfg, },
{ .compatible = "qcom,sc8180x-edp-phy", .data = &sc8180x_dp_phy_cfg, },
--
2.34.1
^ permalink raw reply [flat|nested] 36+ messages in thread