* [PATCH 00/17] Add Qualcomm Nord display and eDP PHY support
@ 2026-09-11 15:36 Nabige Aala
2026-09-11 15:36 ` [PATCH 01/17] dt-bindings: phy: qcom,edp-phy: Document Nord eDP PHY Nabige Aala
` (16 more replies)
0 siblings, 17 replies; 29+ 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
Nord is a Qualcomm SoC with a DP-only display subsystem
(MDSS 12.1 / DPU 1499A) and two independent DP controllers
backed by eDP PHY. The PHY uses a different register layout,
PLL/SSC coefficients and TX signal parameters compared to
all existing SoCs supported by the qcom-edp driver.
This series enables the display pipeline on Nord by adding
DT bindings for the MDSS, DP controller and eDP PHY, DPU
catalog and driver entries for MDSS and DP, and full eDP
PHY support.
Tested on Nord Ride SX board with one DPU. Both MDSS and
DP controllers probe cleanly and panels render correctly.
Signed-off-by: Ritesh Kumar <ritesh.kumar@oss.qualcomm.com>
Signed-off-by: Mahadevan P <mahadevan.p@oss.qualcomm.com>
Signed-off-by: Nabige Aala <nabige.aala@oss.qualcomm.com>
---
Mahadevan P (6):
dt-bindings: phy: qcom,edp-phy: Document Nord eDP PHY
dt-bindings: display/msm: dp-controller: Document Nord DP
dt-bindings: display/msm: Document Nord MDSS
drm/msm/dpu: Add support for DPU 12.1 on Nord
drm/msm: mdss: Add support for MDSS on Nord
drm/msm/dp: Add support for DP controllers on Nord
Ritesh Kumar (11):
phy: qcom: edp: Add Nord-specific register offsets
phy: qcom: edp: Generalize power-on path to support per-SoC overrides
phy: qcom: edp: Add Nord AUX channel and VCO divider configuration tables
phy: qcom: edp: Add Nord voltage-swing and pre-emphasis tables
phy: qcom: edp: Add Nord PHY power-on and reset state-machine callbacks
phy: qcom: edp: Add Nord bias and clock buffer enable callback
phy: qcom: edp: Add Nord spread-spectrum clocking configuration callback
phy: qcom: edp: Add Nord PLL configuration callback
phy: qcom: edp: Add Nord LDO, TX lane and TX resistor calibration callbacks
phy: qcom: edp: Introduce Nord phy_ver_ops and phy_cfg descriptor
phy: qcom: edp: Register qcom,nord-dp-phy OF compatible string
.../bindings/display/msm/dp-controller.yaml | 1 +
.../bindings/display/msm/qcom,nord-mdss.yaml | 98 ++++
.../devicetree/bindings/phy/qcom,edp-phy.yaml | 1 +
.../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 +
drivers/gpu/drm/msm/dp/dp_display.c | 7 +
drivers/gpu/drm/msm/msm_mdss.c | 1 +
drivers/phy/qualcomm/phy-qcom-edp.c | 416 ++++++++++++++-
.../phy/qualcomm/phy-qcom-qmp-qserdes-dp-com-v8.h | 3 +
12 files changed, 1107 insertions(+), 13 deletions(-)
---
base-commit: 693de981a44b0e7e3b6a73f0b0bcbae9c8d068e6
change-id: 20260911-nord-drv-dt-d09b21f37ae9
Best regards,
--
Nabige Aala <nabige.aala@oss.qualcomm.com>
^ permalink raw reply [flat|nested] 29+ messages in thread
* [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-11 15:48 ` sashiko-bot
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; 29+ 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 related [flat|nested] 29+ 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-11 15:44 ` sashiko-bot
2026-09-13 7:51 ` Krzysztof Kozlowski
2026-09-11 15:36 ` [PATCH 03/17] dt-bindings: display/msm: Document Nord MDSS Nabige Aala
` (14 subsequent siblings)
16 siblings, 2 replies; 29+ 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 related [flat|nested] 29+ 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-11 15:51 ` sashiko-bot
2026-09-13 7:50 ` Krzysztof Kozlowski
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; 29+ 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 related [flat|nested] 29+ 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-11 15:59 ` sashiko-bot
2026-09-11 15:36 ` [PATCH 05/17] drm/msm: mdss: Add support for MDSS " Nabige Aala
` (12 subsequent siblings)
16 siblings, 1 reply; 29+ 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 related [flat|nested] 29+ 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-11 15:36 ` [PATCH 06/17] drm/msm/dp: Add support for DP controllers " Nabige Aala
` (11 subsequent siblings)
16 siblings, 0 replies; 29+ 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 related [flat|nested] 29+ 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-11 15:36 ` [PATCH 07/17] phy: qcom: edp: Add Nord-specific register offsets Nabige Aala
` (10 subsequent siblings)
16 siblings, 0 replies; 29+ 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 related [flat|nested] 29+ 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-11 15:49 ` sashiko-bot
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; 29+ 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 related [flat|nested] 29+ 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-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, 0 replies; 29+ 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 related [flat|nested] 29+ 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-11 15:36 ` [PATCH 10/17] phy: qcom: edp: Add Nord voltage-swing and pre-emphasis tables Nabige Aala
` (7 subsequent siblings)
16 siblings, 0 replies; 29+ 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 related [flat|nested] 29+ 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-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, 0 replies; 29+ 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 related [flat|nested] 29+ 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-11 15:36 ` [PATCH 12/17] phy: qcom: edp: Add Nord bias and clock buffer enable callback Nabige Aala
` (5 subsequent siblings)
16 siblings, 0 replies; 29+ 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 related [flat|nested] 29+ 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-11 15:49 ` sashiko-bot
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; 29+ 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 related [flat|nested] 29+ 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; 29+ 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 related [flat|nested] 29+ 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-11 15:53 ` sashiko-bot
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; 29+ 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 related [flat|nested] 29+ 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-11 15:52 ` sashiko-bot
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; 29+ 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 related [flat|nested] 29+ 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:56 ` sashiko-bot
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; 29+ 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 related [flat|nested] 29+ 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; 29+ 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 related [flat|nested] 29+ 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-11 15:44 ` sashiko-bot
2026-09-13 7:51 ` Krzysztof Kozlowski
1 sibling, 0 replies; 29+ messages in thread
From: sashiko-bot @ 2026-09-11 15:44 UTC (permalink / raw)
To: Nabige Aala
Cc: linux-phy, vkoul, robh, dri-devel, devicetree, olteanv,
neil.armstrong, conor+dt
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [Medium] Incomplete schema validation due to missing compatible string in conditional blocks
--
commit f7216936b411ed638371618630b9bc9b852888e7
Author: Mahadevan P <mahadevan.p@oss.qualcomm.com>
dt-bindings: display/msm: dp-controller: Document Nord DP
This commit adds the compatible string for the DisplayPort controller found
on the Qualcomm Nord SoC to the device tree bindings.
> diff --git a/Documentation/devicetree/bindings/display/msm/dp-controller.yaml b/Documentation/devicetree/bindings/display/msm/dp-controller.yaml
> index 094a6383bb779..8d980acb1a163 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
[Severity: Medium]
Will this omission cause incomplete schema validation?
When qcom,nord-dp is declared here in properties:compatible, it falls back to
the weak top-level minimal constraints because it is entirely omitted from the
validation logic in the allOf section.
The allOf block further down the file defines the conditional logic that
strictly validates the register and clock layouts. Shouldn't qcom,nord-dp be
categorized into one of these hardware capability blocks to enforce correct
constraints during dt_binding_check? Without it, incorrect device tree
configurations like incorrect register or clock counts could silently pass
validation.
> - qcom,sa8775p-dp
> - qcom,sc7180-dp
> - qcom,sc7280-dp
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260911-nord-drv-dt-v1-0-e25c073cf1b6@oss.qualcomm.com?part=2
^ permalink raw reply [flat|nested] 29+ 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-11 15:48 ` sashiko-bot
0 siblings, 0 replies; 29+ messages in thread
From: sashiko-bot @ 2026-09-11 15:48 UTC (permalink / raw)
To: Nabige Aala
Cc: devicetree, vkoul, dri-devel, olteanv, linux-phy, robh, conor+dt,
neil.armstrong
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [Medium] The new compatible string 'qcom,nord-dp-phy' is omitted from the 'allOf' conditional block that enforces the 3-clock constraint, causing it to fall back to the incorrect 2-clock constraint.
--
commit 325c210ca82765c8807b8dc10d9ca6c4f986b06b
Author: Mahadevan P <mahadevan.p@oss.qualcomm.com>
dt-bindings: phy: qcom,edp-phy: Document Nord eDP PHY
This commit adds the compatible string for the eDP PHY found on the
Qualcomm Nord SoC.
> diff --git a/Documentation/devicetree/bindings/phy/qcom,edp-phy.yaml b/Documentation/devicetree/bindings/phy/qcom,edp-phy.yaml
> index 0bf8bf4f66acf..91d7a5c8e19af 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
[Severity: Medium]
Will this compatible string incorrectly fall back to the 2-clock constraint?
Looking at the allOf block later in this file, recent hardware generations
requiring 3 clocks are explicitly enumerated:
allOf:
- if:
properties:
compatible:
enum:
- qcom,glymur-dp-phy
- qcom,sa8775p-edp-phy
- qcom,x1e80100-dp-phy
then:
properties:
clocks:
minItems: 3
maxItems: 3
else:
properties:
clocks:
minItems: 2
maxItems: 2
Since the Nord PHY utilizes a 38.4 MHz CXO reference clock, should
qcom,nord-dp-phy be added to the enum in the allOf conditional block?
Without it, device trees providing the necessary 3 clocks (aux, cfg_ahb, ref)
might fail schema validation, while incomplete ones providing only 2 clocks
could silently pass via the else fallback.
> - qcom,sa8775p-edp-phy
> - qcom,sc7280-edp-phy
> - qcom,sc8180x-edp-phy
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260911-nord-drv-dt-v1-0-e25c073cf1b6@oss.qualcomm.com?part=1
^ permalink raw reply [flat|nested] 29+ 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-11 15:49 ` sashiko-bot
0 siblings, 0 replies; 29+ messages in thread
From: sashiko-bot @ 2026-09-11 15:49 UTC (permalink / raw)
To: Nabige Aala
Cc: vkoul, linux-phy, devicetree, neil.armstrong, robh, conor+dt,
dri-devel, olteanv
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [Low] The newly added register `DP_PHY_LDO_CFG` is missing the `_NORD` suffix.
--
commit d9b8ac1d640ce0c0f48897f46216bd9e72eb391e
Author: Ritesh Kumar <ritesh.kumar@oss.qualcomm.com>
phy: qcom: edp: Add Nord-specific register offsets
This commit adds Nord-specific register offsets for the DP PHY and QSERDES
v8 COM to allow Nord sequences to reference them directly by name.
> diff --git a/drivers/phy/qualcomm/phy-qcom-edp.c b/drivers/phy/qualcomm/phy-qcom-edp.c
> index a3c893f72908f..bf8a17336c7ec 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
[Severity: Low]
The commit message notes this patch adds Nord-specific defines, and other
newly introduced registers appropriately use a _NORD suffix (like
DP_PHY_STATUS_NORD and DP_PHY_TX_LN0_DRV_LVL_NORD).
Does DP_PHY_LDO_CFG also need the _NORD suffix here? Leaving it off makes it
appear as a generic register rather than a Nord-specific one.
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260911-nord-drv-dt-v1-0-e25c073cf1b6@oss.qualcomm.com?part=7
^ permalink raw reply [flat|nested] 29+ 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-11 15:49 ` sashiko-bot
0 siblings, 0 replies; 29+ messages in thread
From: sashiko-bot @ 2026-09-11 15:49 UTC (permalink / raw)
To: Nabige Aala
Cc: conor+dt, robh, olteanv, linux-phy, dri-devel, neil.armstrong,
vkoul, devicetree
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [Medium] Redundant function added due to an incorrect commit message claim
--
commit 3bc884119c8e394e11daa5276d830b8881379d66
Author: Ritesh Kumar <ritesh.kumar@oss.qualcomm.com>
phy: qcom: edp: Add Nord bias and clock buffer enable callback
This commit introduces a new callback for the Nord platform to enable the
internal bias generator and clock buffer. It writes 0x1f to the
BIAS_EN_CLKBUFLR_EN register.
> diff --git a/drivers/phy/qualcomm/phy-qcom-edp.c b/drivers/phy/qualcomm/phy-qcom-edp.c
> index 6cac4b55b66f6..ec4220cffe693 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;
> +}
> +
> +
[Severity: Medium]
The commit message states that setting BIAS_EN_CLKBUFLR_EN to 0x1f "differs
from the value used on existing SoCs". Is this description accurate?
The existing qcom_edp_com_bias_en_clkbuflr_v8() function already writes exactly
0x1f to the same DP_QSERDES_V8_COM_BIAS_EN_CLKBUFLR_EN register.
Does this new qcom_edp_com_bias_en_clkbuflr_nord() function introduce redundant
code? Could the existing v8 variant be reused to avoid duplication, or should
the commit message be updated to explain why a separate identical callback is
required?
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260911-nord-drv-dt-v1-0-e25c073cf1b6@oss.qualcomm.com?part=12
^ permalink raw reply [flat|nested] 29+ 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-11 15:51 ` sashiko-bot
2026-09-13 7:50 ` Krzysztof Kozlowski
1 sibling, 0 replies; 29+ messages in thread
From: sashiko-bot @ 2026-09-11 15:51 UTC (permalink / raw)
To: Nabige Aala
Cc: devicetree, neil.armstrong, linux-phy, vkoul, dri-devel, conor+dt,
olteanv, robh
Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [Medium] The 'qcom,nord-dp' compatible string is omitted from generational 'if-then' constraint blocks.
- [Medium] The compatible string 'qcom,nord-dpu' is referenced for the child display controller, but the corresponding DPU binding update is entirely missing from the patch series.
--
commit 64dd6c393c789d34e5fe84cef41d36aca32b8df0
Author: Mahadevan P <mahadevan.p@oss.qualcomm.com>
dt-bindings: display/msm: Document Nord MDSS
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.
> 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 0000000000000..0b0cacdca9dbd
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/display/msm/qcom,nord-mdss.yaml
> @@ -0,0 +1,98 @@
[ ... ]
> +patternProperties:
> + "^display-controller@[0-9a-f]+$":
> + type: object
> + additionalProperties: true
> + properties:
> + compatible:
> + const: qcom,nord-dpu
[Severity: Medium]
Is the schema binding for qcom,nord-dpu entirely missing from this patch
series?
This compatible string is referenced here for the child display controller,
but the corresponding DPU binding update is omitted.
Without it, full schema validation for the DPU child node cannot occur when
validating a device tree containing qcom,nord-dpu.
> +
> + "^displayport-controller@[0-9a-f]+$":
> + type: object
> + additionalProperties: true
> + properties:
> + compatible:
> + const: qcom,nord-dp
[Severity: Medium]
This isn't a bug introduced by this patch, but by an earlier patch in this
series that added qcom,nord-dp to the top-level compatible enum without
updating the constraint blocks.
Should qcom,nord-dp be included in the generational if-then constraint blocks
in dp-controller.yaml to enforce precise hardware constraints?
Looking at Documentation/devicetree/bindings/display/msm/dp-controller.yaml,
at the start of the generational conditional blocks:
allOf:
# AUX BUS does not exist on DP controllers
By omitting the string from these constraint blocks, device trees for
qcom,nord-dp with invalid configurations (e.g., an incorrect number of clocks
or register regions) will silently pass schema validation when running
dt_binding_check or dtbs_check against a Nord DP node.
They will fall back to the overly permissive top-level defaults (up to 9 reg
items and 8 clocks).
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260911-nord-drv-dt-v1-0-e25c073cf1b6@oss.qualcomm.com?part=3
^ permalink raw reply [flat|nested] 29+ 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-11 15:52 ` sashiko-bot
0 siblings, 0 replies; 29+ messages in thread
From: sashiko-bot @ 2026-09-11 15:52 UTC (permalink / raw)
To: Nabige Aala
Cc: neil.armstrong, robh, linux-phy, conor+dt, dri-devel, devicetree,
vkoul, olteanv
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [High] The `qcom_edp_ldo_config_nord()` function unconditionally hardcodes LDO configuration values, contradicting the requirements documented in its block comment and the commit message.
--
commit c4e3fc5c792992e3093d5a643cdeaee499d326f5
Author: Ritesh Kumar <ritesh.kumar@oss.qualcomm.com>
phy: qcom: edp: Add Nord LDO, TX lane and TX resistor calibration callbacks
This commit adds PHY configuration callbacks for the Nord platform, introducing
specific LDO levels, TX lane control offsets, and TX resistor calibration codes
based on HPG Table 2-1-d.
> diff --git a/drivers/phy/qualcomm/phy-qcom-edp.c b/drivers/phy/qualcomm/phy-qcom-edp.c
> index 4d1b2c81d9563..361f4e4673518 100644
> --- a/drivers/phy/qualcomm/phy-qcom-edp.c
> +++ b/drivers/phy/qualcomm/phy-qcom-edp.c
[ ... ]
> +/*
> + * 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;
[Severity: High]
The block comment directly above specifies that the LDO configuration
should be set dynamically based on the operating mode and link rate, such as
0xD1 for eDP rates <= 8.1 Gbps and 0x00 for UHBR or DP mode.
Does unconditionally hardcoding these values to 0xd0 (which also appears to be
a typo for 0xD1) and 0x03 cause incorrect LDO voltages to be applied when the
PHY is initialized for DP mode or high-speed eDP links?
Applying these values unconditionally during device probe or link training
might lead to PHY instability or link failures when operating in DP mode
or high-speed eDP modes where the hardware programming guide requires 0x00.
> +
> + 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;
> +}
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260911-nord-drv-dt-v1-0-e25c073cf1b6@oss.qualcomm.com?part=15
^ permalink raw reply [flat|nested] 29+ 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-11 15:53 ` sashiko-bot
0 siblings, 0 replies; 29+ messages in thread
From: sashiko-bot @ 2026-09-11 15:53 UTC (permalink / raw)
To: Nabige Aala
Cc: olteanv, dri-devel, robh, conor+dt, vkoul, neil.armstrong,
linux-phy, devicetree
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [High] The PLL configuration incorrectly writes 0x1d to DP_QSERDES_V8_COM_BIAS_EN_CLKBUFLR_EN, silently overwriting the 0x1f value set during initialization.
--
commit 16052638682492657891d8a92561073f1ca35358
Author: Ritesh Kumar <ritesh.kumar@oss.qualcomm.com>
phy: qcom: edp: Add Nord PLL configuration callback
Nord uses a 38.4 MHz CXO reference with a different QSERDES v8 COM register
layout and PLL coefficients. This commit adds a configuration callback to
program the QSERDES COM PLL registers with link-rate-dependent values.
> diff --git a/drivers/phy/qualcomm/phy-qcom-edp.c b/drivers/phy/qualcomm/phy-qcom-edp.c
> index a0f4b12e561e9..4d1b2c81d9563 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)
[ ... ]
> +static int qcom_edp_com_configure_pll_nord(const struct qcom_edp *edp)
> +{
[ ... ]
> + 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);
[Severity: High]
Will this unconditional write of 0x1d silently overwrite the 0x1f bias enable
value required and set during PHY initialization?
It looks like qcom_edp_phy_init() calls com_bias_en_clkbuflr_nord() to set
this register to 0x1f. Later, when qcom_edp_phy_power_on() calls
com_configure_pll_nord(), this exact register is overwritten with 0x1d.
Could clearing this bit (bit 1) prevent the PLL from locking or cause link
training failures resulting in a blank display?
> + 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;
> +}
[ ... ]
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260911-nord-drv-dt-v1-0-e25c073cf1b6@oss.qualcomm.com?part=14
^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: [PATCH 16/17] phy: qcom: edp: Introduce Nord phy_ver_ops and phy_cfg descriptor
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:56 ` sashiko-bot
0 siblings, 0 replies; 29+ messages in thread
From: sashiko-bot @ 2026-09-11 15:56 UTC (permalink / raw)
To: Nabige Aala
Cc: neil.armstrong, olteanv, conor+dt, dri-devel, devicetree, vkoul,
linux-phy, robh
Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [High] The common power-on flow unconditionally writes to the legacy TX_BAND offset, which corrupts registers on the Nord platform.
- [High] The Nord LDO configuration ignores DP mode and applies incorrect eDP settings, contradicting the Hardware Programming Guide.
--
commit ff420262cd547c67f8bafbb24b3a2db77628fd60
Author: Ritesh Kumar <ritesh.kumar@oss.qualcomm.com>
phy: qcom: edp: Introduce Nord phy_ver_ops and phy_cfg descriptor
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.
> diff --git a/drivers/phy/qualcomm/phy-qcom-edp.c b/drivers/phy/qualcomm/phy-qcom-edp.c
> index 361f4e4673518..338f28cb404fb 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,
[Severity: High]
Does this hardcode the incorrect LDO configuration for DP mode?
The comments for qcom_edp_ldo_config_nord() document that DP mode must use
0x00 and eDP mode must use 0xD1.
However, the implementation seems to unconditionally hardcode 0xd0 and 0x03,
ignoring edp->is_edp completely:
qcom_edp_ldo_config_nord()
ldo_config = 0xd0;
phy_ldo_cfg = 0x03;
writel(ldo_config, edp->tx0 + TXn_LDO_CONFIG);
Could this cause instability or link failures when running in DP mode due to
contradicting the hardware requirements?
> + .phy_tx_lane_cfg = qcom_edp_phy_tx_lane_cfg_nord,
[Severity: High]
Can the common power-on flow corrupt registers on the Nord platform here?
When qcom_edp_phy_power_on() runs, it calls this phy_tx_lane_cfg() callback
which correctly programs the Nord-specific TX_BAND offset at 0x0024:
qcom_edp_phy_power_on()
if (edp->cfg->ver_ops->phy_tx_lane_cfg) {
ret = edp->cfg->ver_ops->phy_tx_lane_cfg(edp);
...
But immediately afterward, the common flow unconditionally writes to the
legacy TX_BAND offset:
qcom_edp_phy_power_on()
/* TX-0 register configuration */
...
writel(0x04, edp->tx0 + TXn_TX_BAND);
Since TXn_TX_BAND moved to 0x0024 on Nord, writing to the legacy offset
(0x0028) might clobber whatever unknown register resides there now.
Would it be better to conditionally bypass the legacy TX_BAND write when the
Nord specific callback is used?
> + .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,
> +};
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260911-nord-drv-dt-v1-0-e25c073cf1b6@oss.qualcomm.com?part=16
^ permalink raw reply [flat|nested] 29+ 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-11 15:59 ` sashiko-bot
0 siblings, 0 replies; 29+ messages in thread
From: sashiko-bot @ 2026-09-11 15:59 UTC (permalink / raw)
To: Nabige Aala
Cc: olteanv, devicetree, robh, vkoul, dri-devel, neil.armstrong,
conor+dt, linux-phy
Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [High] Adding `INTF_9` and `INTF_10` without corresponding entries in `enum dpu_hw_intr_reg` causes the `MDP_INTFn_INTR()` macro to silently alias with legacy DSI TEAR interrupts, leading to fatal unclocked hardware accesses.
- [High] Including inferred, unverified dummy register addresses and bus mapper IDs in an upstream hardware catalog.
--
commit bd1cb43210104c822d361350ae75f5b63854edc7
Author: Mahadevan P <mahadevan.p@oss.qualcomm.com>
drm/msm/dpu: Add support for DPU 12.1 on Nord
This commit adds the DPU catalog entry for the Qualcomm Nord SoC (MDSS 12.1),
a DP-only chip with 8 DSPP blocks, 2 writeback blocks, 8 interfaces and 2 DP
controllers. It extends the interface enum with INTF_9 and INTF_10 and adds
inferred hardware catalog entries marked with FIXME.
> 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 0000000000000..8eb18752f3c4b
> --- /dev/null
> +++ b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_12_1_nord.h
[ ... ]
> +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 */
[Severity: High]
Is it safe to include inferred register base addresses and bus mapper IDs that
haven't been verified against actual hardware?
When the driver probes on Nord, it will unconditionally map and access these
unverified addresses. If the inferred base address is incorrect, accessing
this region will likely hit invalid physical memory and cause an immediate
bus error.
[ ... ]
> +static const struct dpu_intf_cfg nord_intf[] = {
> + {
[ ... ]
> + .name = "intf_4", .id = INTF_4,
> + .base = 0x38000, .len = 0x4bc, /* FIXME(REG_ADDR): new, stride +0x1000 */
[Severity: High]
Similarly here, will accessing this unverified INTF_4 base address cause a
system crash if the guessed stride is incorrect for this SoC?
[ ... ]
> 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 0e65bf5ddc4a6..7eccb4d2c65ef 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
> };
[Severity: High]
Does adding INTF_9 and INTF_10 without updating enum dpu_hw_intr_reg cause
an interrupt mapping collision?
Looking at MDP_INTFn_INTR in dpu_hw_interrupts.h:
#define MDP_INTFn_INTR(intf) (MDP_INTF0_INTR + (intf - INTF_0))
When this maps INTF_9 (index 10) and INTF_10 (index 11), they evaluate to
offsets 12 and 13 respectively. In enum dpu_hw_intr_reg, offsets 12 and 13
are already mapped to MDP_INTF1_TEAR_INTR and MDP_INTF2_TEAR_INTR.
During driver probe, dpu_hw_intr_init() uses this macro to populate the
irq_mask. Since Nord is DP-only and explicitly lacks the INTF_1 and INTF_2
hardware blocks, will dpu_clear_irqs() iterating over this mask attempt to
write to unmapped TEAR registers and cause an unrecoverable bus fault?
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260911-nord-drv-dt-v1-0-e25c073cf1b6@oss.qualcomm.com?part=4
^ permalink raw reply [flat|nested] 29+ 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-11 15:51 ` sashiko-bot
@ 2026-09-13 7:50 ` Krzysztof Kozlowski
1 sibling, 0 replies; 29+ 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] 29+ 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-11 15:44 ` sashiko-bot
@ 2026-09-13 7:51 ` Krzysztof Kozlowski
1 sibling, 0 replies; 29+ 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] 29+ messages in thread
end of thread, other threads:[~2026-09-13 7:52 UTC | newest]
Thread overview: 29+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
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:48 ` sashiko-bot
2026-09-11 15:36 ` [PATCH 02/17] dt-bindings: display/msm: dp-controller: Document Nord DP Nabige Aala
2026-09-11 15:44 ` sashiko-bot
2026-09-13 7:51 ` Krzysztof Kozlowski
2026-09-11 15:36 ` [PATCH 03/17] dt-bindings: display/msm: Document Nord MDSS Nabige Aala
2026-09-11 15:51 ` sashiko-bot
2026-09-13 7:50 ` Krzysztof Kozlowski
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:59 ` sashiko-bot
2026-09-11 15:36 ` [PATCH 05/17] drm/msm: mdss: Add support for MDSS " Nabige Aala
2026-09-11 15:36 ` [PATCH 06/17] drm/msm/dp: Add support for DP controllers " Nabige Aala
2026-09-11 15:36 ` [PATCH 07/17] phy: qcom: edp: Add Nord-specific register offsets Nabige Aala
2026-09-11 15:49 ` sashiko-bot
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 ` [PATCH 09/17] phy: qcom: edp: Add Nord AUX channel and VCO divider configuration tables Nabige Aala
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 ` [PATCH 11/17] phy: qcom: edp: Add Nord PHY power-on and reset state-machine callbacks Nabige Aala
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:49 ` sashiko-bot
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 ` [PATCH 14/17] phy: qcom: edp: Add Nord PLL " Nabige Aala
2026-09-11 15:53 ` sashiko-bot
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:52 ` sashiko-bot
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:56 ` sashiko-bot
2026-09-11 15:36 ` [PATCH 17/17] phy: qcom: edp: Register qcom,nord-dp-phy OF compatible string Nabige Aala
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox