* [PATCH 00/12] drm/msm: Add support for Kaanapali
@ 2025-10-23 7:53 yuanjie yang
2025-10-23 7:53 ` [PATCH 01/12] drm/msm/dsi/phy: " yuanjie yang
` (7 more replies)
0 siblings, 8 replies; 77+ messages in thread
From: yuanjie yang @ 2025-10-23 7:53 UTC (permalink / raw)
To: robin.clark, lumag, abhinav.kumar, sean, marijn.suijten, airlied,
simona, maarten.lankhorst, mripard, tzimmermann, robh, krzk+dt,
conor+dt, quic_mkrishn, jonathan, quic_khsieh, neil.armstrong
Cc: linux-arm-msm, dri-devel, freedreno, devicetree, linux-kernel,
tingwei.zhang, aiqun.yu, yongxing.mou
From: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
The Kaanapali MDSS has some differences compared to the SM8750 MDSS:
- DSI PHY/DSI base address have some changes.
- DPU 13.0:
- SSPP layout has a great change.
- interrupt INTF layout has some changes.
This patchset contains DSI PHY, DSI Controller, DPU & MDSS bindings
in addition to the driver changes.
We have already tested the display functionality using the Kaanapali-mtp
device on the Kaanapali branch of kernel-qcom repository.
Test command: "modetest -r -v"
kernel-qcom repository: https://git.codelinaro.org/clo/linux-kernel/kernel-qcom/-/tree/kaanapali
Signed-off-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
Signed-off-by: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
---
Yuanjie Yang (12):
drm/msm/dsi/phy: Add support for Kaanapali
drm/msm/dpu: Add support for Kaanapali DPU
drm/msm/dpu: Compatible with Kaanapali interrupt register
drm/msm/mdss: Add support for Kaanapali
drm/msm/dsi: Add support for Kaanapali
drm/msm/dpu: Add Kaanapali SSPP sub-block support
drm/panel: Set sufficient voltage for panel nt37801
arm64: defconfig: Enable NT37801 DSI panel driver
dt-bindings: display/msm: qcom,kaanapali-dpu: Add Kaanapali
dt-bindings: display/msm: dsi-phy-7nm: Add Kaanapali DSi PHY
dt-bindings: display/msm: dsi-controller-main: Add Kaanapali
dt-bindings: display/msm: qcom,kaanapali-mdss: Add Kaanapali
.../display/msm/dsi-controller-main.yaml | 2 +
.../bindings/display/msm/dsi-phy-7nm.yaml | 1 +
.../display/msm/qcom,kaanapali-mdss.yaml | 298 +++++++++++
.../bindings/display/msm/qcom,sm8650-dpu.yaml | 1 +
arch/arm64/configs/defconfig | 1 +
.../disp/dpu1/catalog/dpu_13_0_kaanapali.h | 492 ++++++++++++++++++
.../gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c | 44 ++
.../gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h | 29 +-
.../gpu/drm/msm/disp/dpu1/dpu_hw_interrupts.c | 89 +++-
drivers/gpu/drm/msm/disp/dpu1/dpu_hw_sspp.c | 474 ++++++++++++++++-
drivers/gpu/drm/msm/disp/dpu1/dpu_hw_util.c | 23 +
drivers/gpu/drm/msm/disp/dpu1/dpu_hw_util.h | 4 +
drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c | 1 +
drivers/gpu/drm/msm/dsi/dsi_cfg.c | 13 +
drivers/gpu/drm/msm/dsi/dsi_cfg.h | 1 +
drivers/gpu/drm/msm/dsi/phy/dsi_phy.c | 2 +
drivers/gpu/drm/msm/dsi/phy/dsi_phy.h | 1 +
drivers/gpu/drm/msm/dsi/phy/dsi_phy_7nm.c | 23 +
drivers/gpu/drm/msm/msm_mdss.c | 22 +
drivers/gpu/drm/panel/panel-novatek-nt37801.c | 5 +
include/linux/soc/qcom/ubwc.h | 1 +
21 files changed, 1507 insertions(+), 20 deletions(-)
create mode 100644 Documentation/devicetree/bindings/display/msm/qcom,kaanapali-mdss.yaml
create mode 100644 drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_13_0_kaanapali.h
--
2.34.1
^ permalink raw reply [flat|nested] 77+ messages in thread
* [PATCH 01/12] drm/msm/dsi/phy: Add support for Kaanapali
2025-10-23 7:53 [PATCH 00/12] drm/msm: Add support for Kaanapali yuanjie yang
@ 2025-10-23 7:53 ` yuanjie yang
2025-10-23 11:48 ` Dmitry Baryshkov
2025-10-23 7:53 ` [PATCH 02/12] drm/msm/dpu: Add support for Kaanapali DPU yuanjie yang
` (6 subsequent siblings)
7 siblings, 1 reply; 77+ messages in thread
From: yuanjie yang @ 2025-10-23 7:53 UTC (permalink / raw)
To: robin.clark, lumag, abhinav.kumar, sean, marijn.suijten, airlied,
simona, maarten.lankhorst, mripard, tzimmermann, robh, krzk+dt,
conor+dt, quic_mkrishn, jonathan, quic_khsieh, neil.armstrong
Cc: linux-arm-msm, dri-devel, freedreno, devicetree, linux-kernel,
tingwei.zhang, aiqun.yu, yongxing.mou
From: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
Add DSI PHY support for the Kaanapali platform.
Signed-off-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
Signed-off-by: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
---
drivers/gpu/drm/msm/dsi/phy/dsi_phy.c | 2 ++
drivers/gpu/drm/msm/dsi/phy/dsi_phy.h | 1 +
drivers/gpu/drm/msm/dsi/phy/dsi_phy_7nm.c | 23 +++++++++++++++++++++++
3 files changed, 26 insertions(+)
diff --git a/drivers/gpu/drm/msm/dsi/phy/dsi_phy.c b/drivers/gpu/drm/msm/dsi/phy/dsi_phy.c
index 4ea681130dba..7937266de1d2 100644
--- a/drivers/gpu/drm/msm/dsi/phy/dsi_phy.c
+++ b/drivers/gpu/drm/msm/dsi/phy/dsi_phy.c
@@ -577,6 +577,8 @@ static const struct of_device_id dsi_phy_dt_match[] = {
.data = &dsi_phy_4nm_8650_cfgs },
{ .compatible = "qcom,sm8750-dsi-phy-3nm",
.data = &dsi_phy_3nm_8750_cfgs },
+ { .compatible = "qcom,kaanapali-dsi-phy-3nm",
+ .data = &dsi_phy_3nm_kaanapali_cfgs },
#endif
{}
};
diff --git a/drivers/gpu/drm/msm/dsi/phy/dsi_phy.h b/drivers/gpu/drm/msm/dsi/phy/dsi_phy.h
index e391505fdaf0..8df37ea50f92 100644
--- a/drivers/gpu/drm/msm/dsi/phy/dsi_phy.h
+++ b/drivers/gpu/drm/msm/dsi/phy/dsi_phy.h
@@ -64,6 +64,7 @@ extern const struct msm_dsi_phy_cfg dsi_phy_5nm_sar2130p_cfgs;
extern const struct msm_dsi_phy_cfg dsi_phy_4nm_8550_cfgs;
extern const struct msm_dsi_phy_cfg dsi_phy_4nm_8650_cfgs;
extern const struct msm_dsi_phy_cfg dsi_phy_3nm_8750_cfgs;
+extern const struct msm_dsi_phy_cfg dsi_phy_3nm_kaanapali_cfgs;
struct msm_dsi_dphy_timing {
u32 clk_zero;
diff --git a/drivers/gpu/drm/msm/dsi/phy/dsi_phy_7nm.c b/drivers/gpu/drm/msm/dsi/phy/dsi_phy_7nm.c
index 32f06edd21a9..93e53fb8b4fa 100644
--- a/drivers/gpu/drm/msm/dsi/phy/dsi_phy_7nm.c
+++ b/drivers/gpu/drm/msm/dsi/phy/dsi_phy_7nm.c
@@ -1518,3 +1518,26 @@ const struct msm_dsi_phy_cfg dsi_phy_3nm_8750_cfgs = {
.num_dsi_phy = 2,
.quirks = DSI_PHY_7NM_QUIRK_V7_0,
};
+
+const struct msm_dsi_phy_cfg dsi_phy_3nm_kaanapali_cfgs = {
+ .has_phy_lane = true,
+ .regulator_data = dsi_phy_7nm_98000uA_regulators,
+ .num_regulators = ARRAY_SIZE(dsi_phy_7nm_98000uA_regulators),
+ .ops = {
+ .enable = dsi_7nm_phy_enable,
+ .disable = dsi_7nm_phy_disable,
+ .pll_init = dsi_pll_7nm_init,
+ .save_pll_state = dsi_7nm_pll_save_state,
+ .restore_pll_state = dsi_7nm_pll_restore_state,
+ .set_continuous_clock = dsi_7nm_set_continuous_clock,
+ },
+ .min_pll_rate = 600000000UL,
+#ifdef CONFIG_64BIT
+ .max_pll_rate = 5000000000UL,
+#else
+ .max_pll_rate = ULONG_MAX,
+#endif
+ .io_start = { 0x9ac1000, 0xae97000 },
+ .num_dsi_phy = 2,
+ .quirks = DSI_PHY_7NM_QUIRK_V7_0,
+};
--
2.34.1
^ permalink raw reply related [flat|nested] 77+ messages in thread
* [PATCH 02/12] drm/msm/dpu: Add support for Kaanapali DPU
2025-10-23 7:53 [PATCH 00/12] drm/msm: Add support for Kaanapali yuanjie yang
2025-10-23 7:53 ` [PATCH 01/12] drm/msm/dsi/phy: " yuanjie yang
@ 2025-10-23 7:53 ` yuanjie yang
2025-10-23 11:56 ` Dmitry Baryshkov
2025-10-23 7:53 ` [PATCH 03/12] drm/msm/dpu: Compatible with Kaanapali interrupt register yuanjie yang
` (5 subsequent siblings)
7 siblings, 1 reply; 77+ messages in thread
From: yuanjie yang @ 2025-10-23 7:53 UTC (permalink / raw)
To: robin.clark, lumag, abhinav.kumar, sean, marijn.suijten, airlied,
simona, maarten.lankhorst, mripard, tzimmermann, robh, krzk+dt,
conor+dt, quic_mkrishn, jonathan, quic_khsieh, neil.armstrong
Cc: linux-arm-msm, dri-devel, freedreno, devicetree, linux-kernel,
tingwei.zhang, aiqun.yu, yongxing.mou
From: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
Add support for Display Processing Unit (DPU) version 13.0
on the Kaanapali platform. This version introduces changes
to the SSPP sub-block structure. Add common block and rectangle
blocks to accommodate these structural modifications for compatibility.
Signed-off-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
Signed-off-by: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
---
.../disp/dpu1/catalog/dpu_13_0_kaanapali.h | 492 ++++++++++++++++++
.../gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c | 44 ++
.../gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h | 29 +-
drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c | 1 +
4 files changed, 565 insertions(+), 1 deletion(-)
create mode 100644 drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_13_0_kaanapali.h
diff --git a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_13_0_kaanapali.h b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_13_0_kaanapali.h
new file mode 100644
index 000000000000..1b14930fcd88
--- /dev/null
+++ b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_13_0_kaanapali.h
@@ -0,0 +1,492 @@
+/* SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) */
+/*
+ * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
+ */
+
+#ifndef _DPU_13_0_KAANAPALI_H
+#define _DPU_13_0_KAANAPALI_H
+
+static const struct dpu_caps kaanapali_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 kaanapali_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 kaanapali_ctl[] = {
+ {
+ .name = "ctl_0", .id = CTL_0,
+ .base = 0x1F000, .len = 0x1000,
+ .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 9),
+ }, {
+ .name = "ctl_1", .id = CTL_1,
+ .base = 0x20000, .len = 0x1000,
+ .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 10),
+ }, {
+ .name = "ctl_2", .id = CTL_2,
+ .base = 0x21000, .len = 0x1000,
+ .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 11),
+ }, {
+ .name = "ctl_3", .id = CTL_3,
+ .base = 0x22000, .len = 0x1000,
+ .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 12),
+ }, {
+ .name = "ctl_4", .id = CTL_4,
+ .base = 0x23000, .len = 0x1000,
+ .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 13),
+ }, {
+ .name = "ctl_5", .id = CTL_5,
+ .base = 0x24000, .len = 0x1000,
+ .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 23),
+ },
+};
+
+static const struct dpu_sspp_cfg kaanapali_sspp[] = {
+ {
+ .name = "sspp_0", .id = SSPP_VIG0,
+ .base = 0x2b000, .len = 0x84,
+ .features = VIG_SDM845_MASK_SDMA,
+ .sblk = &dpu_vig_sblk_qseed3_3_5,
+ .xin_id = 0,
+ .type = SSPP_TYPE_VIG,
+ }, {
+ .name = "sspp_1", .id = SSPP_VIG1,
+ .base = 0x34000, .len = 0x84,
+ .features = VIG_SDM845_MASK_SDMA,
+ .sblk = &dpu_vig_sblk_qseed3_3_5,
+ .xin_id = 4,
+ .type = SSPP_TYPE_VIG,
+ }, {
+ .name = "sspp_2", .id = SSPP_VIG2,
+ .base = 0x3d000, .len = 0x84,
+ .features = VIG_SDM845_MASK_SDMA,
+ .sblk = &dpu_vig_sblk_qseed3_3_5,
+ .xin_id = 8,
+ .type = SSPP_TYPE_VIG,
+ }, {
+ .name = "sspp_3", .id = SSPP_VIG3,
+ .base = 0x46000, .len = 0x84,
+ .features = VIG_SDM845_MASK_SDMA,
+ .sblk = &dpu_vig_sblk_qseed3_3_5,
+ .xin_id = 12,
+ .type = SSPP_TYPE_VIG,
+ }, {
+ .name = "sspp_8", .id = SSPP_DMA0,
+ .base = 0x97000, .len = 0x84,
+ .features = DMA_SDM845_MASK_SDMA,
+ .sblk = &dpu_dma_sblk,
+ .xin_id = 1,
+ .type = SSPP_TYPE_DMA,
+ }, {
+ .name = "sspp_9", .id = SSPP_DMA1,
+ .base = 0xa0000, .len = 0x84,
+ .features = DMA_SDM845_MASK_SDMA,
+ .sblk = &dpu_dma_sblk,
+ .xin_id = 5,
+ .type = SSPP_TYPE_DMA,
+ }, {
+ .name = "sspp_10", .id = SSPP_DMA2,
+ .base = 0xa9000, .len = 0x84,
+ .features = DMA_SDM845_MASK_SDMA,
+ .sblk = &dpu_dma_sblk,
+ .xin_id = 9,
+ .type = SSPP_TYPE_DMA,
+ }, {
+ .name = "sspp_11", .id = SSPP_DMA3,
+ .base = 0xb2000, .len = 0x84,
+ .features = DMA_SDM845_MASK_SDMA,
+ .sblk = &dpu_dma_sblk,
+ .xin_id = 13,
+ .type = SSPP_TYPE_DMA,
+ }, {
+ .name = "sspp_12", .id = SSPP_DMA4,
+ .base = 0xbb000, .len = 0x84,
+ .features = DMA_CURSOR_SDM845_MASK_SDMA,
+ .sblk = &dpu_dma_sblk,
+ .xin_id = 14,
+ .type = SSPP_TYPE_DMA,
+ }, {
+ .name = "sspp_13", .id = SSPP_DMA5,
+ .base = 0xc4000, .len = 0x84,
+ .features = DMA_CURSOR_SDM845_MASK_SDMA,
+ .sblk = &dpu_dma_sblk,
+ .xin_id = 15,
+ .type = SSPP_TYPE_DMA,
+ },
+};
+
+static const struct dpu_lm_cfg kaanapali_lm[] = {
+ {
+ .name = "lm_0", .id = LM_0,
+ .base = 0x103000, .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 = 0x10b000, .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 = 0x113000, .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 = 0x11b000, .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 = 0x123000, .len = 0x400,
+ .features = MIXER_MSM8998_MASK,
+ .sblk = &sm8750_lm_sblk,
+ .lm_pair = LM_5,
+ .pingpong = PINGPONG_4,
+ }, {
+ .name = "lm_5", .id = LM_5,
+ .base = 0x12b000, .len = 0x400,
+ .features = MIXER_MSM8998_MASK,
+ .sblk = &sm8750_lm_sblk,
+ .lm_pair = LM_4,
+ .pingpong = PINGPONG_5,
+ }, {
+ .name = "lm_6", .id = LM_6,
+ .base = 0x133000, .len = 0x400,
+ .features = MIXER_MSM8998_MASK,
+ .sblk = &sm8750_lm_sblk,
+ .lm_pair = LM_7,
+ .pingpong = PINGPONG_6,
+ }, {
+ .name = "lm_7", .id = LM_7,
+ .base = 0x13b000, .len = 0x400,
+ .features = MIXER_MSM8998_MASK,
+ .sblk = &sm8750_lm_sblk,
+ .lm_pair = LM_6,
+ .pingpong = PINGPONG_7,
+ },
+};
+
+static const struct dpu_dspp_cfg kaanapali_dspp[] = {
+ {
+ .name = "dspp_0", .id = DSPP_0,
+ .base = 0x105000, .len = 0x1800,
+ .sblk = &sm8750_dspp_sblk,
+ }, {
+ .name = "dspp_1", .id = DSPP_1,
+ .base = 0x10d000, .len = 0x1800,
+ .sblk = &sm8750_dspp_sblk,
+ }, {
+ .name = "dspp_2", .id = DSPP_2,
+ .base = 0x115000, .len = 0x1800,
+ .sblk = &sm8750_dspp_sblk,
+ }, {
+ .name = "dspp_3", .id = DSPP_3,
+ .base = 0x11d000, .len = 0x1800,
+ .sblk = &sm8750_dspp_sblk,
+ },
+};
+
+static const struct dpu_pingpong_cfg kaanapali_pp[] = {
+ {
+ .name = "pingpong_0", .id = PINGPONG_0,
+ .base = 0x108000, .len = 0,
+ .sblk = &kaanapali_pp_sblk,
+ .merge_3d = MERGE_3D_0,
+ .intr_done = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 8),
+ }, {
+ .name = "pingpong_1", .id = PINGPONG_1,
+ .base = 0x110000, .len = 0,
+ .sblk = &kaanapali_pp_sblk,
+ .merge_3d = MERGE_3D_0,
+ .intr_done = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 9),
+ }, {
+ .name = "pingpong_2", .id = PINGPONG_2,
+ .base = 0x118000, .len = 0,
+ .sblk = &kaanapali_pp_sblk,
+ .merge_3d = MERGE_3D_1,
+ .intr_done = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 10),
+ }, {
+ .name = "pingpong_3", .id = PINGPONG_3,
+ .base = 0x120000, .len = 0,
+ .sblk = &kaanapali_pp_sblk,
+ .merge_3d = MERGE_3D_1,
+ .intr_done = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 11),
+ }, {
+ .name = "pingpong_4", .id = PINGPONG_4,
+ .base = 0x128000, .len = 0,
+ .sblk = &kaanapali_pp_sblk,
+ .merge_3d = MERGE_3D_2,
+ .intr_done = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 30),
+ }, {
+ .name = "pingpong_5", .id = PINGPONG_5,
+ .base = 0x130000, .len = 0,
+ .sblk = &kaanapali_pp_sblk,
+ .merge_3d = MERGE_3D_2,
+ .intr_done = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 31),
+ }, {
+ .name = "pingpong_6", .id = PINGPONG_6,
+ .base = 0x138000, .len = 0,
+ .sblk = &kaanapali_pp_sblk,
+ .merge_3d = MERGE_3D_3,
+ .intr_done = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 20),
+ }, {
+ .name = "pingpong_7", .id = PINGPONG_7,
+ .base = 0x140000, .len = 0,
+ .sblk = &kaanapali_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 = 0x169000, .len = 0,
+ .sblk = &kaanapali_pp_sblk,
+ .merge_3d = MERGE_3D_4,
+ }, {
+ .name = "pingpong_cwb_1", .id = PINGPONG_CWB_1,
+ .base = 0x169400, .len = 0,
+ .sblk = &kaanapali_pp_sblk,
+ .merge_3d = MERGE_3D_4,
+ }, {
+ .name = "pingpong_cwb_2", .id = PINGPONG_CWB_2,
+ .base = 0x16a000, .len = 0,
+ .sblk = &kaanapali_pp_sblk,
+ .merge_3d = MERGE_3D_5,
+ }, {
+ .name = "pingpong_cwb_3", .id = PINGPONG_CWB_3,
+ .base = 0x16a400, .len = 0,
+ .sblk = &kaanapali_pp_sblk,
+ .merge_3d = MERGE_3D_5,
+ },
+};
+
+static const struct dpu_merge_3d_cfg kaanapali_merge_3d[] = {
+ {
+ .name = "merge_3d_0", .id = MERGE_3D_0,
+ .base = 0x163000, .len = 0x1c,
+ }, {
+ .name = "merge_3d_1", .id = MERGE_3D_1,
+ .base = 0x164000, .len = 0x1c,
+ }, {
+ .name = "merge_3d_2", .id = MERGE_3D_2,
+ .base = 0x165000, .len = 0x1c,
+ }, {
+ .name = "merge_3d_3", .id = MERGE_3D_3,
+ .base = 0x166000, .len = 0x1c,
+ }, {
+ .name = "merge_3d_4", .id = MERGE_3D_4,
+ .base = 0x169700, .len = 0x1c,
+ }, {
+ .name = "merge_3d_5", .id = MERGE_3D_5,
+ .base = 0x16a700, .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.
+ */
+static const struct dpu_dsc_cfg kaanapali_dsc[] = {
+ {
+ .name = "dce_0_0", .id = DSC_0,
+ .base = 0x181000, .len = 0x8,
+ .features = BIT(DPU_DSC_NATIVE_42x_EN),
+ .sblk = &sm8750_dsc_sblk_0,
+ }, {
+ .name = "dce_0_1", .id = DSC_1,
+ .base = 0x181000, .len = 0x8,
+ .features = BIT(DPU_DSC_NATIVE_42x_EN),
+ .sblk = &sm8750_dsc_sblk_1,
+ }, {
+ .name = "dce_1_0", .id = DSC_2,
+ .base = 0x183000, .len = 0x8,
+ .features = BIT(DPU_DSC_NATIVE_42x_EN),
+ .sblk = &sm8750_dsc_sblk_0,
+ }, {
+ .name = "dce_1_1", .id = DSC_3,
+ .base = 0x183000, .len = 0x8,
+ .features = BIT(DPU_DSC_NATIVE_42x_EN),
+ .sblk = &sm8750_dsc_sblk_1,
+ }, {
+ .name = "dce_2_0", .id = DSC_4,
+ .base = 0x185000, .len = 0x8,
+ .features = BIT(DPU_DSC_NATIVE_42x_EN),
+ .sblk = &sm8750_dsc_sblk_0,
+ }, {
+ .name = "dce_2_1", .id = DSC_5,
+ .base = 0x185000, .len = 0x8,
+ .features = BIT(DPU_DSC_NATIVE_42x_EN),
+ .sblk = &sm8750_dsc_sblk_1,
+ }, {
+ .name = "dce_3_0", .id = DSC_6,
+ .base = 0x187000, .len = 0x8,
+ .features = BIT(DPU_DSC_NATIVE_42x_EN),
+ .sblk = &sm8750_dsc_sblk_0,
+ }, {
+ .name = "dce_3_1", .id = DSC_7,
+ .base = 0x187000, .len = 0x8,
+ .features = BIT(DPU_DSC_NATIVE_42x_EN),
+ .sblk = &sm8750_dsc_sblk_1,
+ },
+};
+
+static const struct dpu_wb_cfg kaanapali_wb[] = {
+ {
+ .name = "wb_2", .id = WB_2,
+ .base = 0x16e000, .len = 0x2c8,
+ .features = WB_SDM845_MASK,
+ .format_list = wb2_formats_rgb_yuv,
+ .num_formats = ARRAY_SIZE(wb2_formats_rgb_yuv),
+ .xin_id = 6,
+ .vbif_idx = VBIF_RT,
+ .maxlinewidth = 4096,
+ .intr_wb_done = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 4),
+ },
+};
+
+static const struct dpu_cwb_cfg kaanapali_cwb[] = {
+ {
+ .name = "cwb_0", .id = CWB_0,
+ .base = 0x169200, .len = 0x20,
+ },
+ {
+ .name = "cwb_1", .id = CWB_1,
+ .base = 0x169600, .len = 0x20,
+ },
+ {
+ .name = "cwb_2", .id = CWB_2,
+ .base = 0x16A200, .len = 0x20,
+ },
+ {
+ .name = "cwb_3", .id = CWB_3,
+ .base = 0x16A600, .len = 0x20,
+ },
+};
+
+static const struct dpu_intf_cfg kaanapali_intf[] = {
+ {
+ .name = "intf_0", .id = INTF_0,
+ .base = 0x18d000, .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_1", .id = INTF_1,
+ .base = 0x18e000, .len = 0x4bc,
+ .type = INTF_DSI,
+ .controller_id = MSM_DSI_CONTROLLER_0,
+ .prog_fetch_lines_worst_case = 24,
+ .intr_underrun = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 26),
+ .intr_vsync = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 27),
+ .intr_tear_rd_ptr = DPU_IRQ_IDX(MDP_INTF1_TEAR_INTR, 2),
+ }, {
+ .name = "intf_2", .id = INTF_2,
+ .base = 0x18f000, .len = 0x4bc,
+ .type = INTF_DSI,
+ .controller_id = MSM_DSI_CONTROLLER_1,
+ .prog_fetch_lines_worst_case = 24,
+ .intr_underrun = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 28),
+ .intr_vsync = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 29),
+ .intr_tear_rd_ptr = DPU_IRQ_IDX(MDP_INTF2_TEAR_INTR, 2),
+ }, {
+ .name = "intf_3", .id = INTF_3,
+ .base = 0x190000, .len = 0x4bc,
+ .type = INTF_DP,
+ .controller_id = MSM_DP_CONTROLLER_1,
+ .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),
+ },
+};
+
+static const struct dpu_perf_cfg kaanapali_perf_data = {
+ .max_bw_low = 21400000,
+ .max_bw_high = 30200000,
+ .min_core_ib = 2500000,
+ .min_llcc_ib = 0,
+ .min_dram_ib = 800000,
+ .min_prefill_lines = 35,
+ .danger_lut_tbl = {0x0ffff, 0x0ffff, 0x0},
+ .safe_lut_tbl = {0xff00, 0xff00, 0xffff},
+ .qos_lut_tbl = {
+ {.nentry = ARRAY_SIZE(kaanapali_qos_linear),
+ .entries = kaanapali_qos_linear
+ },
+ {.nentry = ARRAY_SIZE(kaanapali_qos_macrotile),
+ .entries = kaanapali_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 kaanapali_mdss_ver = {
+ .core_major_ver = 13,
+ .core_minor_ver = 0,
+};
+
+const struct dpu_mdss_cfg dpu_kaanapali_cfg = {
+ .mdss_ver = &kaanapali_mdss_ver,
+ .caps = &kaanapali_dpu_caps,
+ .mdp = &kaanapali_mdp,
+ .cdm = &dpu_cdm_kaanapali_x,
+ .ctl_count = ARRAY_SIZE(kaanapali_ctl),
+ .ctl = kaanapali_ctl,
+ .sspp_count = ARRAY_SIZE(kaanapali_sspp),
+ .sspp = kaanapali_sspp,
+ .mixer_count = ARRAY_SIZE(kaanapali_lm),
+ .mixer = kaanapali_lm,
+ .dspp_count = ARRAY_SIZE(kaanapali_dspp),
+ .dspp = kaanapali_dspp,
+ .pingpong_count = ARRAY_SIZE(kaanapali_pp),
+ .pingpong = kaanapali_pp,
+ .dsc_count = ARRAY_SIZE(kaanapali_dsc),
+ .dsc = kaanapali_dsc,
+ .merge_3d_count = ARRAY_SIZE(kaanapali_merge_3d),
+ .merge_3d = kaanapali_merge_3d,
+ .wb_count = ARRAY_SIZE(kaanapali_wb),
+ .wb = kaanapali_wb,
+ .cwb_count = ARRAY_SIZE(kaanapali_cwb),
+ .cwb = sm8650_cwb,
+ .intf_count = ARRAY_SIZE(kaanapali_intf),
+ .intf = kaanapali_intf,
+ .vbif_count = ARRAY_SIZE(sm8650_vbif),
+ .vbif = sm8650_vbif,
+ .perf = &kaanapali_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 6641455c4ec6..5a24ed0f818c 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
@@ -241,6 +241,25 @@ static const u32 wb2_formats_rgb_yuv[] = {
.rotation_cfg = NULL, \
}
+/* kaanapali SSPP common configuration */
+#define _KAANAPALI_VIG_SBLK(scaler_ver) \
+ { \
+ .cmn_blk = {.name = "cmn_blk", \
+ .base = 0, .len = 0x100,}, \
+ .sspp_rec0_blk = {.name = "sspp_rec0", \
+ .base = 0x1000, .len = 0x180,}, \
+ .csc_blk = {.name = "csc", \
+ .base = 0x1800, .len = 0x100,}, \
+ .scaler_blk = {.name = "scaler", \
+ .version = scaler_ver, \
+ .base = 0x2000, .len = 0xec,}, \
+ .sspp_rec1_blk = {.name = "sspp_rec1", \
+ .base = 0x3000, .len = 0x180,}, \
+ .format_list = plane_formats_yuv, \
+ .num_formats = ARRAY_SIZE(plane_formats_yuv), \
+ .rotation_cfg = NULL, \
+ }
+
#define _VIG_SBLK_ROT(scaler_ver, rot_cfg) \
{ \
.scaler_blk = {.name = "scaler", \
@@ -329,6 +348,9 @@ static const struct dpu_sspp_sub_blks dpu_vig_sblk_qseed3_3_3 =
static const struct dpu_sspp_sub_blks dpu_vig_sblk_qseed3_3_4 =
_VIG_SBLK(SSPP_SCALER_VER(3, 4));
+static const struct dpu_sspp_sub_blks dpu_vig_sblk_qseed3_3_5 =
+ _KAANAPALI_VIG_SBLK(SSPP_SCALER_VER(3, 5));
+
static const struct dpu_sspp_sub_blks dpu_rgb_sblk = _RGB_SBLK();
static const struct dpu_sspp_sub_blks dpu_dma_sblk = _DMA_SBLK();
@@ -412,6 +434,11 @@ static const struct dpu_pingpong_sub_blks sc7280_pp_sblk = {
.len = 0x20, .version = 0x20000},
};
+static const struct dpu_pingpong_sub_blks kaanapali_pp_sblk = {
+ .dither = {.name = "dither", .base = 0xc0,
+ .len = 0x40, .version = 0x30000},
+};
+
/*************************************************************
* DSC sub blocks config
*************************************************************/
@@ -452,6 +479,13 @@ static const struct dpu_cdm_cfg dpu_cdm_5_x = {
.base = 0x79200,
};
+static const struct dpu_cdm_cfg dpu_cdm_kaanapali_x = {
+ .name = "cdm_0",
+ .id = CDM_0,
+ .len = 0x240,
+ .base = 0x19e000,
+};
+
/*************************************************************
* VBIF sub blocks config
*************************************************************/
@@ -639,6 +673,10 @@ static const struct dpu_qos_lut_entry sc7180_qos_linear[] = {
{.fl = 0, .lut = 0x0011222222335777},
};
+static const struct dpu_qos_lut_entry kaanapali_qos_linear[] = {
+ {.fl = 0, .lut = 0x0011223344556666},
+};
+
static const struct dpu_qos_lut_entry sm6350_qos_linear_macrotile[] = {
{.fl = 0, .lut = 0x0011223445566777 },
};
@@ -668,6 +706,10 @@ static const struct dpu_qos_lut_entry sc7180_qos_macrotile[] = {
{.fl = 0, .lut = 0x0011223344556677},
};
+static const struct dpu_qos_lut_entry kaanapali_qos_macrotile[] = {
+ {.fl = 0, .lut = 0x0011223344556666},
+};
+
static const struct dpu_qos_lut_entry sc8180x_qos_macrotile[] = {
{.fl = 10, .lut = 0x0000000344556677},
};
@@ -726,3 +768,5 @@ static const struct dpu_qos_lut_entry sc7180_qos_nrt[] = {
#include "catalog/dpu_10_0_sm8650.h"
#include "catalog/dpu_12_0_sm8750.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 f0768f54e9b3..99c81c24630f 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h
@@ -208,6 +208,30 @@ struct dpu_dsc_blk {
u32 len;
};
+/**
+ * struct dpu_sspp_rec_blk - sspp rec sub-blk information
+ * @name: string name for debug purposes
+ * @base: offset of this sub-block relative to the block offset
+ * @len: register block length of this sub-block
+ */
+struct dpu_sspp_rec_blk {
+ char name[DPU_HW_BLK_NAME_LEN];
+ u32 base;
+ u32 len;
+};
+
+/**
+ * struct dpu_sspp_cmn_blk - sspp common sub-blk information
+ * @name: string name for debug purposes
+ * @base: offset of this sub-block relative to the block offset
+ * @len: register block length of this sub-block
+ */
+struct dpu_sspp_cmn_blk {
+ char name[DPU_HW_BLK_NAME_LEN];
+ u32 base;
+ u32 len;
+};
+
/**
* enum dpu_qos_lut_usage - define QoS LUT use cases
*/
@@ -294,7 +318,9 @@ struct dpu_sspp_sub_blks {
u32 qseed_ver;
struct dpu_scaler_blk scaler_blk;
struct dpu_pp_blk csc_blk;
-
+ struct dpu_sspp_cmn_blk cmn_blk;
+ struct dpu_sspp_rec_blk sspp_rec0_blk;
+ struct dpu_sspp_rec_blk sspp_rec1_blk;
const u32 *format_list;
u32 num_formats;
const struct dpu_rotation_cfg *rotation_cfg;
@@ -778,6 +804,7 @@ extern const struct dpu_mdss_cfg dpu_sa8775p_cfg;
extern const struct dpu_mdss_cfg dpu_sm8550_cfg;
extern const struct dpu_mdss_cfg dpu_sm8650_cfg;
extern const struct dpu_mdss_cfg dpu_sm8750_cfg;
+extern const struct dpu_mdss_cfg dpu_kaanapali_cfg;
extern const struct dpu_mdss_cfg dpu_x1e80100_cfg;
#endif /* _DPU_HW_CATALOG_H */
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
index 4e5a8ecd31f7..15bec44324d5 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
@@ -1505,6 +1505,7 @@ static const struct dev_pm_ops dpu_pm_ops = {
};
static const struct of_device_id dpu_dt_match[] = {
+ { .compatible = "qcom,kaanapali-dpu", .data = &dpu_kaanapali_cfg, },
{ .compatible = "qcom,msm8917-mdp5", .data = &dpu_msm8917_cfg, },
{ .compatible = "qcom,msm8937-mdp5", .data = &dpu_msm8937_cfg, },
{ .compatible = "qcom,msm8953-mdp5", .data = &dpu_msm8953_cfg, },
--
2.34.1
^ permalink raw reply related [flat|nested] 77+ messages in thread
* [PATCH 03/12] drm/msm/dpu: Compatible with Kaanapali interrupt register
2025-10-23 7:53 [PATCH 00/12] drm/msm: Add support for Kaanapali yuanjie yang
2025-10-23 7:53 ` [PATCH 01/12] drm/msm/dsi/phy: " yuanjie yang
2025-10-23 7:53 ` [PATCH 02/12] drm/msm/dpu: Add support for Kaanapali DPU yuanjie yang
@ 2025-10-23 7:53 ` yuanjie yang
2025-10-23 11:59 ` Dmitry Baryshkov
2025-10-28 6:07 ` Jessica Zhang
2025-10-23 7:53 ` [PATCH 04/12] drm/msm/mdss: Add support for Kaanapali yuanjie yang
` (4 subsequent siblings)
7 siblings, 2 replies; 77+ messages in thread
From: yuanjie yang @ 2025-10-23 7:53 UTC (permalink / raw)
To: robin.clark, lumag, abhinav.kumar, sean, marijn.suijten, airlied,
simona, maarten.lankhorst, mripard, tzimmermann, robh, krzk+dt,
conor+dt, quic_mkrishn, jonathan, quic_khsieh, neil.armstrong
Cc: linux-arm-msm, dri-devel, freedreno, devicetree, linux-kernel,
tingwei.zhang, aiqun.yu, yongxing.mou
From: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
DPU version 13 introduces changes to the interrupt register
layout. Update the driver to support these modifications for
proper interrupt handling.
Signed-off-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
Signed-off-by: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
---
.../gpu/drm/msm/disp/dpu1/dpu_hw_interrupts.c | 89 ++++++++++++++++++-
1 file changed, 88 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_interrupts.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_interrupts.c
index 49bd77a755aa..8d265581f6ec 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_interrupts.c
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_interrupts.c
@@ -40,6 +40,15 @@
#define MDP_INTF_REV_7xxx_INTR_TEAR_STATUS(intf) (MDP_INTF_REV_7xxx_TEAR_OFF(intf) + 0x004)
#define MDP_INTF_REV_7xxx_INTR_TEAR_CLEAR(intf) (MDP_INTF_REV_7xxx_TEAR_OFF(intf) + 0x008)
+#define MDP_INTF_REV_13xx_OFF(intf) (0x18D000 + 0x1000 * (intf))
+#define MDP_INTF_REV_13xx_INTR_EN(intf) (MDP_INTF_REV_13xx_OFF(intf) + 0x1c0)
+#define MDP_INTF_REV_13xx_INTR_STATUS(intf) (MDP_INTF_REV_13xx_OFF(intf) + 0x1c4)
+#define MDP_INTF_REV_13xx_INTR_CLEAR(intf) (MDP_INTF_REV_13xx_OFF(intf) + 0x1c8)
+#define MDP_INTF_REV_13xx_TEAR_OFF(intf) (0x18D800 + 0x1000 * (intf))
+#define MDP_INTF_REV_13xx_INTR_TEAR_EN(intf) (MDP_INTF_REV_13xx_TEAR_OFF(intf) + 0x000)
+#define MDP_INTF_REV_13xx_INTR_TEAR_STATUS(intf) (MDP_INTF_REV_13xx_TEAR_OFF(intf) + 0x004)
+#define MDP_INTF_REV_13xx_INTR_TEAR_CLEAR(intf) (MDP_INTF_REV_13xx_TEAR_OFF(intf) + 0x008)
+
/**
* struct dpu_intr_reg - array of DPU register sets
* @clr_off: offset to CLEAR reg
@@ -199,6 +208,82 @@ static const struct dpu_intr_reg dpu_intr_set_7xxx[] = {
},
};
+/*
+ * dpu_intr_set_13xx - List of DPU interrupt registers for DPU >= 13.0
+ */
+static const struct dpu_intr_reg dpu_intr_set_13xx[] = {
+ [MDP_SSPP_TOP0_INTR] = {
+ INTR_CLEAR,
+ INTR_EN,
+ INTR_STATUS
+ },
+ [MDP_SSPP_TOP0_INTR2] = {
+ INTR2_CLEAR,
+ INTR2_EN,
+ INTR2_STATUS
+ },
+ [MDP_SSPP_TOP0_HIST_INTR] = {
+ HIST_INTR_CLEAR,
+ HIST_INTR_EN,
+ HIST_INTR_STATUS
+ },
+ [MDP_INTF0_INTR] = {
+ MDP_INTF_REV_13xx_INTR_CLEAR(0),
+ MDP_INTF_REV_13xx_INTR_EN(0),
+ MDP_INTF_REV_13xx_INTR_STATUS(0)
+ },
+ [MDP_INTF1_INTR] = {
+ MDP_INTF_REV_13xx_INTR_CLEAR(1),
+ MDP_INTF_REV_13xx_INTR_EN(1),
+ MDP_INTF_REV_13xx_INTR_STATUS(1)
+ },
+ [MDP_INTF1_TEAR_INTR] = {
+ MDP_INTF_REV_13xx_INTR_TEAR_CLEAR(1),
+ MDP_INTF_REV_13xx_INTR_TEAR_EN(1),
+ MDP_INTF_REV_13xx_INTR_TEAR_STATUS(1)
+ },
+ [MDP_INTF2_INTR] = {
+ MDP_INTF_REV_13xx_INTR_CLEAR(2),
+ MDP_INTF_REV_13xx_INTR_EN(2),
+ MDP_INTF_REV_13xx_INTR_STATUS(2)
+ },
+ [MDP_INTF2_TEAR_INTR] = {
+ MDP_INTF_REV_13xx_INTR_TEAR_CLEAR(2),
+ MDP_INTF_REV_13xx_INTR_TEAR_EN(2),
+ MDP_INTF_REV_13xx_INTR_TEAR_STATUS(2)
+ },
+ [MDP_INTF3_INTR] = {
+ MDP_INTF_REV_13xx_INTR_CLEAR(3),
+ MDP_INTF_REV_13xx_INTR_EN(3),
+ MDP_INTF_REV_13xx_INTR_STATUS(3)
+ },
+ [MDP_INTF4_INTR] = {
+ MDP_INTF_REV_13xx_INTR_CLEAR(4),
+ MDP_INTF_REV_13xx_INTR_EN(4),
+ MDP_INTF_REV_13xx_INTR_STATUS(4)
+ },
+ [MDP_INTF5_INTR] = {
+ MDP_INTF_REV_13xx_INTR_CLEAR(5),
+ MDP_INTF_REV_13xx_INTR_EN(5),
+ MDP_INTF_REV_13xx_INTR_STATUS(5)
+ },
+ [MDP_INTF6_INTR] = {
+ MDP_INTF_REV_13xx_INTR_CLEAR(6),
+ MDP_INTF_REV_13xx_INTR_EN(6),
+ MDP_INTF_REV_13xx_INTR_STATUS(6)
+ },
+ [MDP_INTF7_INTR] = {
+ MDP_INTF_REV_13xx_INTR_CLEAR(7),
+ MDP_INTF_REV_13xx_INTR_EN(7),
+ MDP_INTF_REV_13xx_INTR_STATUS(7)
+ },
+ [MDP_INTF8_INTR] = {
+ MDP_INTF_REV_13xx_INTR_CLEAR(8),
+ MDP_INTF_REV_13xx_INTR_EN(8),
+ MDP_INTF_REV_13xx_INTR_STATUS(8)
+ },
+};
+
#define DPU_IRQ_MASK(irq_idx) (BIT(DPU_IRQ_BIT(irq_idx)))
static inline bool dpu_core_irq_is_valid(unsigned int irq_idx)
@@ -507,7 +592,9 @@ struct dpu_hw_intr *dpu_hw_intr_init(struct drm_device *dev,
if (!intr)
return ERR_PTR(-ENOMEM);
- if (m->mdss_ver->core_major_ver >= 7)
+ if (m->mdss_ver->core_major_ver >= 13)
+ intr->intr_set = dpu_intr_set_13xx;
+ else if (m->mdss_ver->core_major_ver >= 7)
intr->intr_set = dpu_intr_set_7xxx;
else
intr->intr_set = dpu_intr_set_legacy;
--
2.34.1
^ permalink raw reply related [flat|nested] 77+ messages in thread
* [PATCH 04/12] drm/msm/mdss: Add support for Kaanapali
2025-10-23 7:53 [PATCH 00/12] drm/msm: Add support for Kaanapali yuanjie yang
` (2 preceding siblings ...)
2025-10-23 7:53 ` [PATCH 03/12] drm/msm/dpu: Compatible with Kaanapali interrupt register yuanjie yang
@ 2025-10-23 7:53 ` yuanjie yang
2025-10-23 12:01 ` Dmitry Baryshkov
2025-10-23 7:53 ` [PATCH 05/12] drm/msm/dsi: " yuanjie yang
` (3 subsequent siblings)
7 siblings, 1 reply; 77+ messages in thread
From: yuanjie yang @ 2025-10-23 7:53 UTC (permalink / raw)
To: robin.clark, lumag, abhinav.kumar, sean, marijn.suijten, airlied,
simona, maarten.lankhorst, mripard, tzimmermann, robh, krzk+dt,
conor+dt, quic_mkrishn, jonathan, quic_khsieh, neil.armstrong
Cc: linux-arm-msm, dri-devel, freedreno, devicetree, linux-kernel,
tingwei.zhang, aiqun.yu, yongxing.mou
From: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
Add mdss support for the Qualcomm Kaanapali platform.
Signed-off-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
Signed-off-by: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
---
drivers/gpu/drm/msm/msm_mdss.c | 22 ++++++++++++++++++++++
include/linux/soc/qcom/ubwc.h | 1 +
2 files changed, 23 insertions(+)
diff --git a/drivers/gpu/drm/msm/msm_mdss.c b/drivers/gpu/drm/msm/msm_mdss.c
index 2d0e3e784c04..665751d2b999 100644
--- a/drivers/gpu/drm/msm/msm_mdss.c
+++ b/drivers/gpu/drm/msm/msm_mdss.c
@@ -243,6 +243,24 @@ static void msm_mdss_setup_ubwc_dec_50(struct msm_mdss *msm_mdss)
writel_relaxed(1, msm_mdss->mmio + REG_MDSS_UBWC_PREDICTION_MODE);
}
+static void msm_mdss_setup_ubwc_dec_60(struct msm_mdss *msm_mdss)
+{
+ const struct qcom_ubwc_cfg_data *data = msm_mdss->mdss_data;
+ u32 value = MDSS_UBWC_STATIC_UBWC_SWIZZLE(data->ubwc_swizzle) |
+ MDSS_UBWC_STATIC_HIGHEST_BANK_BIT(data->highest_bank_bit);
+
+ if (data->ubwc_bank_spread)
+ value |= MDSS_UBWC_STATIC_UBWC_BANK_SPREAD;
+
+ if (data->macrotile_mode)
+ value |= MDSS_UBWC_STATIC_MACROTILE_MODE;
+
+ writel_relaxed(value, msm_mdss->mmio + REG_MDSS_UBWC_STATIC);
+
+ writel_relaxed(5, msm_mdss->mmio + REG_MDSS_UBWC_CTRL_2);
+ writel_relaxed(1, msm_mdss->mmio + REG_MDSS_UBWC_PREDICTION_MODE);
+}
+
static int msm_mdss_enable(struct msm_mdss *msm_mdss)
{
int ret, i;
@@ -296,6 +314,9 @@ static int msm_mdss_enable(struct msm_mdss *msm_mdss)
case UBWC_5_0:
msm_mdss_setup_ubwc_dec_50(msm_mdss);
break;
+ case UBWC_6_0:
+ msm_mdss_setup_ubwc_dec_60(msm_mdss);
+ break;
default:
dev_err(msm_mdss->dev, "Unsupported UBWC decoder version %x\n",
msm_mdss->mdss_data->ubwc_dec_version);
@@ -552,6 +573,7 @@ static const struct msm_mdss_data data_153k6 = {
};
static const struct of_device_id mdss_dt_match[] = {
+ { .compatible = "qcom,kaanapali-mdss", .data = &data_57k },
{ .compatible = "qcom,mdss", .data = &data_153k6 },
{ .compatible = "qcom,msm8998-mdss", .data = &data_76k8 },
{ .compatible = "qcom,qcm2290-mdss", .data = &data_76k8 },
diff --git a/include/linux/soc/qcom/ubwc.h b/include/linux/soc/qcom/ubwc.h
index 1ed8b1b16bc9..0a4edfe3d96d 100644
--- a/include/linux/soc/qcom/ubwc.h
+++ b/include/linux/soc/qcom/ubwc.h
@@ -52,6 +52,7 @@ struct qcom_ubwc_cfg_data {
#define UBWC_4_0 0x40000000
#define UBWC_4_3 0x40030000
#define UBWC_5_0 0x50000000
+#define UBWC_6_0 0x60000000
#if IS_ENABLED(CONFIG_QCOM_UBWC_CONFIG)
const struct qcom_ubwc_cfg_data *qcom_ubwc_config_get_data(void);
--
2.34.1
^ permalink raw reply related [flat|nested] 77+ messages in thread
* [PATCH 05/12] drm/msm/dsi: Add support for Kaanapali
2025-10-23 7:53 [PATCH 00/12] drm/msm: Add support for Kaanapali yuanjie yang
` (3 preceding siblings ...)
2025-10-23 7:53 ` [PATCH 04/12] drm/msm/mdss: Add support for Kaanapali yuanjie yang
@ 2025-10-23 7:53 ` yuanjie yang
2025-10-23 12:01 ` Dmitry Baryshkov
2025-10-23 8:06 ` [PATCH 06/12] drm/msm/dpu: Add Kaanapali SSPP sub-block support yuanjie yang
` (2 subsequent siblings)
7 siblings, 1 reply; 77+ messages in thread
From: yuanjie yang @ 2025-10-23 7:53 UTC (permalink / raw)
To: robin.clark, lumag, abhinav.kumar, sean, marijn.suijten, airlied,
simona, maarten.lankhorst, mripard, tzimmermann, robh, krzk+dt,
conor+dt, quic_mkrishn, jonathan, quic_khsieh, neil.armstrong
Cc: linux-arm-msm, dri-devel, freedreno, devicetree, linux-kernel,
tingwei.zhang, aiqun.yu, yongxing.mou
From: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
Add DSI Controller version 2.10.0 support for DSI on Qualcomm
Kaanapali SoC.
Signed-off-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
Signed-off-by: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
---
drivers/gpu/drm/msm/dsi/dsi_cfg.c | 13 +++++++++++++
drivers/gpu/drm/msm/dsi/dsi_cfg.h | 1 +
2 files changed, 14 insertions(+)
diff --git a/drivers/gpu/drm/msm/dsi/dsi_cfg.c b/drivers/gpu/drm/msm/dsi/dsi_cfg.c
index fed8e9b67011..bd3c51c350e7 100644
--- a/drivers/gpu/drm/msm/dsi/dsi_cfg.c
+++ b/drivers/gpu/drm/msm/dsi/dsi_cfg.c
@@ -205,6 +205,17 @@ static const struct msm_dsi_config sm8650_dsi_cfg = {
},
};
+static const struct msm_dsi_config kaanapali_dsi_cfg = {
+ .io_offset = DSI_6G_REG_SHIFT,
+ .regulator_data = sm8650_dsi_regulators,
+ .num_regulators = ARRAY_SIZE(sm8650_dsi_regulators),
+ .bus_clk_names = dsi_v2_4_clk_names,
+ .num_bus_clks = ARRAY_SIZE(dsi_v2_4_clk_names),
+ .io_start = {
+ { 0x9ac0000, 0x9ac3000 },
+ },
+};
+
static const struct regulator_bulk_data sc7280_dsi_regulators[] = {
{ .supply = "vdda", .init_load_uA = 8350 }, /* 1.2 V */
{ .supply = "refgen" },
@@ -332,6 +343,8 @@ static const struct msm_dsi_cfg_handler dsi_cfg_handlers[] = {
&sm8650_dsi_cfg, &msm_dsi_6g_v2_host_ops},
{MSM_DSI_VER_MAJOR_6G, MSM_DSI_6G_VER_MINOR_V2_9_0,
&sm8650_dsi_cfg, &msm_dsi_6g_v2_9_host_ops},
+ {MSM_DSI_VER_MAJOR_6G, MSM_DSI_6G_VER_MINOR_V2_10_0,
+ &kaanapali_dsi_cfg, &msm_dsi_6g_v2_9_host_ops},
};
const struct msm_dsi_cfg_handler *msm_dsi_cfg_get(u32 major, u32 minor)
diff --git a/drivers/gpu/drm/msm/dsi/dsi_cfg.h b/drivers/gpu/drm/msm/dsi/dsi_cfg.h
index 38f303f2ed04..5dc812028bd5 100644
--- a/drivers/gpu/drm/msm/dsi/dsi_cfg.h
+++ b/drivers/gpu/drm/msm/dsi/dsi_cfg.h
@@ -32,6 +32,7 @@
#define MSM_DSI_6G_VER_MINOR_V2_7_0 0x20070000
#define MSM_DSI_6G_VER_MINOR_V2_8_0 0x20080000
#define MSM_DSI_6G_VER_MINOR_V2_9_0 0x20090000
+#define MSM_DSI_6G_VER_MINOR_V2_10_0 0x200a0000
#define MSM_DSI_V2_VER_MINOR_8064 0x0
--
2.34.1
^ permalink raw reply related [flat|nested] 77+ messages in thread
* [PATCH 06/12] drm/msm/dpu: Add Kaanapali SSPP sub-block support
2025-10-23 7:53 [PATCH 00/12] drm/msm: Add support for Kaanapali yuanjie yang
` (4 preceding siblings ...)
2025-10-23 7:53 ` [PATCH 05/12] drm/msm/dsi: " yuanjie yang
@ 2025-10-23 8:06 ` yuanjie yang
2025-10-23 8:06 ` [PATCH 07/12] drm/panel: Set sufficient voltage for panel nt37801 yuanjie yang
` (5 more replies)
2025-10-23 8:17 ` [PATCH 12/12] dt-bindings: display/msm: qcom,kaanapali-mdss: Add Kaanapali yuanjie yang
2025-10-23 11:46 ` [PATCH 00/12] drm/msm: Add support for Kaanapali Dmitry Baryshkov
7 siblings, 6 replies; 77+ messages in thread
From: yuanjie yang @ 2025-10-23 8:06 UTC (permalink / raw)
To: robin.clark, lumag, abhinav.kumar, sean, marijn.suijten, airlied,
simona, maarten.lankhorst, mripard, tzimmermann, robh, krzk+dt,
conor+dt, quic_mkrishn, jonathan, quic_khsieh, neil.armstrong
Cc: linux-arm-msm, dri-devel, freedreno, devicetree, linux-kernel,
tingwei.zhang, aiqun.yu, yongxing.mou
From: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
Add support for Kaanapali platform SSPP sub-blocks, which
introduce structural changes including register additions,
removals, and relocations. Add the new common and rectangle
blocks, and update register definitions and handling to
ensure compatibility with DPU v13.0.
Signed-off-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
Signed-off-by: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
---
drivers/gpu/drm/msm/disp/dpu1/dpu_hw_sspp.c | 474 +++++++++++++++++++-
drivers/gpu/drm/msm/disp/dpu1/dpu_hw_util.c | 23 +
drivers/gpu/drm/msm/disp/dpu1/dpu_hw_util.h | 4 +
3 files changed, 483 insertions(+), 18 deletions(-)
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_sspp.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_sspp.c
index 6f1fc790ad6d..7217c952f01c 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_sspp.c
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_sspp.c
@@ -17,6 +17,7 @@
#define DPU_FETCH_CONFIG_RESET_VALUE 0x00000087
+/* <= v12 DPU */
/* SSPP registers */
#define SSPP_SRC_SIZE 0x00
#define SSPP_SRC_XY 0x08
@@ -74,12 +75,116 @@
#define SSPP_EXCL_REC_XY 0x1B8
#define SSPP_CLK_CTRL 0x330
+/* >= v13 DPU */
+/* CMN Registers -> Source Surface Processing Pipe Common SSPP registers */
+/* Name Offset */
+#define SSPP_CMN_CLK_CTRL 0x0
+#define SSPP_CMN_CLK_STATUS 0x4
+#define SSPP_CMN_MULTI_REC_OP_MODE 0x10
+#define SSPP_CMN_ADDR_CONFIG 0x14
+#define SSPP_CMN_CAC_CTRL 0x20
+#define SSPP_CMN_SYS_CACHE_MODE 0x24
+#define SSPP_CMN_QOS_CTRL 0x28
+#define SSPP_CMN_DANGER_LUT 0x2C
+#define SSPP_CMN_SAFE_LUT 0x30
+
+#define SSPP_CMN_FILL_LEVEL_SCALE 0x3C
+#define SSPP_CMN_FILL_LEVELS 0x40
+#define SSPP_CMN_STATUS 0x44
+#define SSPP_CMN_FETCH_DMA_RD_OTS 0x48
+#define SSPP_CMN_FETCH_DTB_WR_PLANE0 0x4C
+#define SSPP_CMN_FETCH_DTB_WR_PLANE1 0x50
+#define SSPP_CMN_FETCH_DTB_WR_PLANE2 0x54
+#define SSPP_CMN_DTB_UNPACK_RD_PLANE0 0x58
+#define SSPP_CMN_DTB_UNPACK_RD_PLANE1 0x5C
+#define SSPP_CMN_DTB_UNPACK_RD_PLANE2 0x60
+#define SSPP_CMN_UNPACK_LINE_COUNT 0x64
+#define SSPP_CMN_TPG_CONTROL 0x68
+#define SSPP_CMN_TPG_CONFIG 0x6C
+#define SSPP_CMN_TPG_COMPONENT_LIMITS 0x70
+#define SSPP_CMN_TPG_RECTANGLE 0x74
+#define SSPP_CMN_TPG_BLACK_WHITE_PATTERN_FRAMES 0x78
+#define SSPP_CMN_TPG_RGB_MAPPING 0x7C
+#define SSPP_CMN_TPG_PATTERN_GEN_INIT_VAL 0x80
+
+/*RECRegisterset*/
+/*Name Offset*/
+#define SSPP_REC_SRC_FORMAT 0x0
+#define SSPP_REC_SRC_UNPACK_PATTERN 0x4
+#define SSPP_REC_SRC_OP_MODE 0x8
+#define SSPP_REC_SRC_CONSTANT_COLOR 0xC
+#define SSPP_REC_SRC_IMG_SIZE 0x10
+#define SSPP_REC_SRC_SIZE 0x14
+#define SSPP_REC_SRC_XY 0x18
+#define SSPP_REC_OUT_SIZE 0x1C
+#define SSPP_REC_OUT_XY 0x20
+#define SSPP_REC_SW_PIX_EXT_LR 0x24
+#define SSPP_REC_SW_PIX_EXT_TB 0x28
+#define SSPP_REC_SRC_SIZE_ODX 0x30
+#define SSPP_REC_SRC_XY_ODX 0x34
+#define SSPP_REC_OUT_SIZE_ODX 0x38
+#define SSPP_REC_OUT_XY_ODX 0x3C
+#define SSPP_REC_SW_PIX_EXT_LR_ODX 0x40
+#define SSPP_REC_SW_PIX_EXT_TB_ODX 0x44
+#define SSPP_REC_PRE_DOWN_SCALE 0x48
+#define SSPP_REC_SRC0_ADDR 0x4C
+#define SSPP_REC_SRC1_ADDR 0x50
+#define SSPP_REC_SRC2_ADDR 0x54
+#define SSPP_REC_SRC3_ADDR 0x58
+#define SSPP_REC_SRC_YSTRIDE0 0x5C
+#define SSPP_REC_SRC_YSTRIDE1 0x60
+#define SSPP_REC_CURRENT_SRC0_ADDR 0x64
+#define SSPP_REC_CURRENT_SRC1_ADDR 0x68
+#define SSPP_REC_CURRENT_SRC2_ADDR 0x6C
+#define SSPP_REC_CURRENT_SRC3_ADDR 0x70
+#define SSPP_REC_SRC_ADDR_SW_STATUS 0x74
+#define SSPP_REC_CDP_CNTL 0x78
+#define SSPP_REC_TRAFFIC_SHAPER 0x7C
+#define SSPP_REC_TRAFFIC_SHAPER_PREFILL 0x80
+#define SSPP_REC_PD_MEM_ALLOC 0x84
+#define SSPP_REC_QOS_CLAMP 0x88
+#define SSPP_REC_UIDLE_CTRL_VALUE 0x8C
+#define SSPP_REC_UBWC_STATIC_CTRL 0x90
+#define SSPP_REC_UBWC_STATIC_CTRL_OVERRIDE 0x94
+#define SSPP_REC_UBWC_STATS_ROI 0x98
+#define SSPP_REC_UBWC_STATS_WORST_TILE_ROW_BW_ROI0 0x9C
+#define SSPP_REC_UBWC_STATS_TOTAL_BW_ROI0 0xA0
+#define SSPP_REC_UBWC_STATS_WORST_TILE_ROW_BW_ROI1 0xA4
+#define SSPP_REC_UBWC_STATS_TOTAL_BW_ROI1 0xA8
+#define SSPP_REC_UBWC_STATS_WORST_TILE_ROW_BW_ROI2 0xAC
+#define SSPP_REC_UBWC_STATS_TOTAL_BW_ROI2 0xB0
+#define SSPP_REC_EXCL_REC_CTRL 0xB4
+#define SSPP_REC_EXCL_REC_SIZE 0xB8
+#define SSPP_REC_EXCL_REC_XY 0xBC
+#define SSPP_REC_LINE_INSERTION_CTRL 0xC0
+#define SSPP_REC_LINE_INSERTION_OUT_SIZE 0xC4
+#define SSPP_REC_FETCH_PIPE_ACTIVE 0xC8
+#define SSPP_REC_META_ERROR_STATUS 0xCC
+#define SSPP_REC_UBWC_ERROR_STATUS 0xD0
+#define SSPP_REC_FLUSH_CTRL 0xD4
+#define SSPP_REC_INTR_EN 0xD8
+#define SSPP_REC_INTR_STATUS 0xDC
+#define SSPP_REC_INTR_CLEAR 0xE0
+#define SSPP_REC_HSYNC_STATUS 0xE4
+#define SSPP_REC_FP16_CONFIG 0x150
+#define SSPP_REC_FP16_CSC_MATRIX_COEFF_R_0 0x154
+#define SSPP_REC_FP16_CSC_MATRIX_COEFF_R_1 0x158
+#define SSPP_REC_FP16_CSC_MATRIX_COEFF_G_0 0x15C
+#define SSPP_REC_FP16_CSC_MATRIX_COEFF_G_1 0x160
+#define SSPP_REC_FP16_CSC_MATRIX_COEFF_B_0 0x164
+#define SSPP_REC_FP16_CSC_MATRIX_COEFF_B_1 0x168
+#define SSPP_REC_FP16_CSC_PRE_CLAMP_R 0x16C
+#define SSPP_REC_FP16_CSC_PRE_CLAMP_G 0x170
+#define SSPP_REC_FP16_CSC_PRE_CLAMP_B 0x174
+#define SSPP_REC_FP16_CSC_POST_CLAMP 0x178
+
/* SSPP_SRC_OP_MODE & OP_MODE_REC1 */
#define MDSS_MDP_OP_DEINTERLACE BIT(22)
#define MDSS_MDP_OP_DEINTERLACE_ODD BIT(23)
#define MDSS_MDP_OP_IGC_ROM_1 BIT(18)
#define MDSS_MDP_OP_IGC_ROM_0 BIT(17)
#define MDSS_MDP_OP_IGC_EN BIT(16)
+#define MDSS_MDP_OP_ROT_90 BIT(15)
#define MDSS_MDP_OP_FLIP_UD BIT(14)
#define MDSS_MDP_OP_FLIP_LR BIT(13)
#define MDSS_MDP_OP_BWC_EN BIT(0)
@@ -141,6 +246,12 @@
/* traffic shaper clock in Hz */
#define TS_CLK 19200000
+static inline u32 _sspp_calculate_rect_off(enum dpu_sspp_multirect_index rect_index,
+ struct dpu_hw_sspp *ctx)
+{
+ return (rect_index == DPU_SSPP_RECT_SOLO || rect_index == DPU_SSPP_RECT_0) ?
+ ctx->cap->sblk->sspp_rec0_blk.base : ctx->cap->sblk->sspp_rec1_blk.base;
+}
static void dpu_hw_sspp_setup_multirect(struct dpu_sw_pipe *pipe)
{
@@ -169,6 +280,34 @@ static void dpu_hw_sspp_setup_multirect(struct dpu_sw_pipe *pipe)
DPU_REG_WRITE(&ctx->hw, SSPP_MULTIRECT_OPMODE, mode_mask);
}
+static void dpu_hw_sspp_setup_multirect_v13(struct dpu_sw_pipe *pipe)
+{
+ struct dpu_hw_sspp *ctx = pipe->sspp;
+ u32 offset = ctx->cap->sblk->cmn_blk.base;
+ u32 mode_mask;
+
+ if (!ctx)
+ return;
+
+ if (pipe->multirect_index == DPU_SSPP_RECT_SOLO) {
+ /**
+ * if rect index is RECT_SOLO, we cannot expect a
+ * virtual plane sharing the same SSPP id. So we go
+ * and disable multirect
+ */
+ mode_mask = 0;
+ } else {
+ mode_mask = DPU_REG_READ(&ctx->hw, offset + SSPP_CMN_MULTI_REC_OP_MODE);
+ mode_mask |= pipe->multirect_index;
+ if (pipe->multirect_mode == DPU_SSPP_MULTIRECT_TIME_MX)
+ mode_mask |= BIT(2);
+ else
+ mode_mask &= ~BIT(2);
+ }
+
+ DPU_REG_WRITE(&ctx->hw, offset + SSPP_CMN_MULTI_REC_OP_MODE, mode_mask);
+}
+
static void _sspp_setup_opmode(struct dpu_hw_sspp *ctx,
u32 mask, u8 en)
{
@@ -328,6 +467,119 @@ static void dpu_hw_sspp_setup_format(struct dpu_sw_pipe *pipe,
DPU_REG_WRITE(c, SSPP_UBWC_ERROR_STATUS, BIT(31));
}
+static void dpu_hw_sspp_setup_format_v13(struct dpu_sw_pipe *pipe,
+ const struct msm_format *fmt, u32 flags)
+{
+ struct dpu_hw_sspp *ctx = pipe->sspp;
+ struct dpu_hw_blk_reg_map *c;
+ u32 chroma_samp, unpack, src_format;
+ u32 opmode = 0;
+ u32 fast_clear = 0;
+ u32 offset;
+
+ if (!ctx || !fmt)
+ return;
+
+ offset = _sspp_calculate_rect_off(pipe->multirect_index, ctx);
+
+ c = &ctx->hw;
+
+ opmode = DPU_REG_READ(c, offset + SSPP_REC_SRC_OP_MODE);
+ opmode &= ~(MDSS_MDP_OP_FLIP_LR | MDSS_MDP_OP_FLIP_UD |
+ MDSS_MDP_OP_BWC_EN | MDSS_MDP_OP_PE_OVERRIDE
+ | MDSS_MDP_OP_ROT_90);
+
+ if (flags & DPU_SSPP_FLIP_LR)
+ opmode |= MDSS_MDP_OP_FLIP_LR;
+ if (flags & DPU_SSPP_FLIP_UD)
+ opmode |= MDSS_MDP_OP_FLIP_UD;
+ if (flags & DPU_SSPP_ROT_90)
+ opmode |= MDSS_MDP_OP_ROT_90;
+
+ chroma_samp = fmt->chroma_sample;
+ if (flags & DPU_SSPP_SOURCE_ROTATED_90) {
+ if (chroma_samp == CHROMA_H2V1)
+ chroma_samp = CHROMA_H1V2;
+ else if (chroma_samp == CHROMA_H1V2)
+ chroma_samp = CHROMA_H2V1;
+ }
+
+ src_format = (chroma_samp << 23) | (fmt->fetch_type << 19) |
+ (fmt->bpc_a << 6) | (fmt->bpc_r_cr << 4) |
+ (fmt->bpc_b_cb << 2) | (fmt->bpc_g_y << 0);
+
+ if (flags & DPU_SSPP_ROT_90)
+ src_format |= BIT(11); /* ROT90 */
+
+ if (fmt->alpha_enable && fmt->fetch_type == MDP_PLANE_INTERLEAVED)
+ src_format |= BIT(8); /* SRCC3_EN */
+
+ if (flags & DPU_SSPP_SOLID_FILL)
+ src_format |= BIT(22);
+
+ unpack = (fmt->element[3] << 24) | (fmt->element[2] << 16) |
+ (fmt->element[1] << 8) | (fmt->element[0] << 0);
+ src_format |= ((fmt->unpack_count - 1) << 12) |
+ ((fmt->flags & MSM_FORMAT_FLAG_UNPACK_TIGHT ? 1 : 0) << 17) |
+ ((fmt->flags & MSM_FORMAT_FLAG_UNPACK_ALIGN_MSB ? 1 : 0) << 18) |
+ ((fmt->bpp - 1) << 9);
+
+ if (fmt->fetch_mode != MDP_FETCH_LINEAR) {
+ if (MSM_FORMAT_IS_UBWC(fmt))
+ opmode |= MDSS_MDP_OP_BWC_EN;
+ src_format |= (fmt->fetch_mode & 3) << 30; /*FRAME_FORMAT */
+ switch (ctx->ubwc->ubwc_enc_version) {
+ case UBWC_1_0:
+ fast_clear = fmt->alpha_enable ? BIT(31) : 0;
+ DPU_REG_WRITE(c, offset + SSPP_REC_UBWC_STATIC_CTRL,
+ fast_clear | (ctx->ubwc->ubwc_swizzle & 0x1) |
+ BIT(8) |
+ (ctx->ubwc->highest_bank_bit << 4));
+ break;
+ case UBWC_2_0:
+ fast_clear = fmt->alpha_enable ? BIT(31) : 0;
+ DPU_REG_WRITE(c, offset + SSPP_REC_UBWC_STATIC_CTRL,
+ fast_clear | (ctx->ubwc->ubwc_swizzle) |
+ (ctx->ubwc->highest_bank_bit << 4));
+ break;
+ case UBWC_3_0:
+ DPU_REG_WRITE(c, offset + SSPP_REC_UBWC_STATIC_CTRL,
+ BIT(30) | (ctx->ubwc->ubwc_swizzle) |
+ (ctx->ubwc->highest_bank_bit << 4));
+ break;
+ case UBWC_4_0:
+ DPU_REG_WRITE(c, offset + SSPP_REC_UBWC_STATIC_CTRL,
+ MSM_FORMAT_IS_YUV(fmt) ? 0 : BIT(30));
+ break;
+ }
+ }
+
+ opmode |= MDSS_MDP_OP_PE_OVERRIDE;
+
+ /* if this is YUV pixel format, enable CSC */
+ if (MSM_FORMAT_IS_YUV(fmt))
+ src_format |= BIT(15);
+
+ if (MSM_FORMAT_IS_DX(fmt))
+ src_format |= BIT(14);
+
+ /* update scaler opmode, if appropriate */
+ if (test_bit(DPU_SSPP_CSC, &ctx->cap->features))
+ _sspp_setup_opmode(ctx, VIG_OP_CSC_EN | VIG_OP_CSC_SRC_DATAFMT,
+ MSM_FORMAT_IS_YUV(fmt));
+ else if (test_bit(DPU_SSPP_CSC_10BIT, &ctx->cap->features))
+ _sspp_setup_csc10_opmode(ctx,
+ VIG_CSC_10_EN | VIG_CSC_10_SRC_DATAFMT,
+ MSM_FORMAT_IS_YUV(fmt));
+
+ DPU_REG_WRITE(c, offset + SSPP_REC_SRC_FORMAT, src_format);
+ DPU_REG_WRITE(c, offset + SSPP_REC_SRC_UNPACK_PATTERN, unpack);
+ DPU_REG_WRITE(c, offset + SSPP_REC_SRC_OP_MODE, opmode);
+
+ /* clear previous UBWC error */
+ DPU_REG_WRITE(c, offset + SSPP_REC_UBWC_ERROR_STATUS, BIT(31));
+}
+
static void dpu_hw_sspp_setup_pe_config(struct dpu_hw_sspp *ctx,
struct dpu_hw_pixel_ext *pe_ext)
{
@@ -385,6 +637,53 @@ static void dpu_hw_sspp_setup_pe_config(struct dpu_hw_sspp *ctx,
tot_req_pixels[3]);
}
+static void dpu_hw_sspp_setup_pe_config_v13(struct dpu_hw_sspp *ctx,
+ struct dpu_hw_pixel_ext *pe_ext)
+{
+ struct dpu_hw_blk_reg_map *c;
+ u8 color;
+ u32 lr_pe[4], tb_pe[4], tot_req_pixels[4];
+ const u32 bytemask = 0xff;
+ const u32 shortmask = 0xffff;
+ u32 offset = ctx->cap->sblk->sspp_rec0_blk.base;
+
+ if (!ctx || !pe_ext)
+ return;
+
+ c = &ctx->hw;
+ /* program SW pixel extension override for all pipes*/
+ for (color = 0; color < DPU_MAX_PLANES; color++) {
+ /* color 2 has the same set of registers as color 1 */
+ if (color == 2)
+ continue;
+
+ lr_pe[color] = ((pe_ext->right_ftch[color] & bytemask) << 24) |
+ ((pe_ext->right_rpt[color] & bytemask) << 16) |
+ ((pe_ext->left_ftch[color] & bytemask) << 8) |
+ (pe_ext->left_rpt[color] & bytemask);
+
+ tb_pe[color] = ((pe_ext->btm_ftch[color] & bytemask) << 24) |
+ ((pe_ext->btm_rpt[color] & bytemask) << 16) |
+ ((pe_ext->top_ftch[color] & bytemask) << 8) |
+ (pe_ext->top_rpt[color] & bytemask);
+
+ tot_req_pixels[color] = (((pe_ext->roi_h[color] +
+ pe_ext->num_ext_pxls_top[color] +
+ pe_ext->num_ext_pxls_btm[color]) & shortmask) << 16) |
+ ((pe_ext->roi_w[color] +
+ pe_ext->num_ext_pxls_left[color] +
+ pe_ext->num_ext_pxls_right[color]) & shortmask);
+ }
+
+ /* color 0 */
+ DPU_REG_WRITE(c, SSPP_REC_SW_PIX_EXT_LR + offset, lr_pe[0]);
+ DPU_REG_WRITE(c, SSPP_REC_SW_PIX_EXT_TB + offset, tb_pe[0]);
+
+ /* color 1 and color 2 */
+ DPU_REG_WRITE(c, SSPP_REC_SW_PIX_EXT_LR_ODX + offset, lr_pe[1]);
+ DPU_REG_WRITE(c, SSPP_REC_SW_PIX_EXT_TB_ODX + offset, tb_pe[1]);
+}
+
static void _dpu_hw_sspp_setup_scaler3(struct dpu_hw_sspp *ctx,
struct dpu_hw_scaler3_cfg *scaler3_cfg,
const struct msm_format *format)
@@ -443,6 +742,36 @@ static void dpu_hw_sspp_setup_rects(struct dpu_sw_pipe *pipe,
DPU_REG_WRITE(c, out_xy_off, dst_xy);
}
+static void dpu_hw_sspp_setup_rects_v13(struct dpu_sw_pipe *pipe,
+ struct dpu_sw_pipe_cfg *cfg)
+{
+ struct dpu_hw_sspp *ctx = pipe->sspp;
+ struct dpu_hw_blk_reg_map *c;
+ u32 src_size, src_xy, dst_size, dst_xy;
+ u32 offset;
+
+ if (!ctx || !cfg)
+ return;
+
+ c = &ctx->hw;
+
+ offset = _sspp_calculate_rect_off(pipe->multirect_index, ctx);
+
+ /* src and dest rect programming */
+ src_xy = (cfg->src_rect.y1 << 16) | cfg->src_rect.x1;
+ src_size = (drm_rect_height(&cfg->src_rect) << 16) |
+ drm_rect_width(&cfg->src_rect);
+ dst_xy = (cfg->dst_rect.y1 << 16) | cfg->dst_rect.x1;
+ dst_size = (drm_rect_height(&cfg->dst_rect) << 16) |
+ drm_rect_width(&cfg->dst_rect);
+
+ /* rectangle register programming */
+ DPU_REG_WRITE(c, offset + SSPP_REC_SRC_SIZE, src_size);
+ DPU_REG_WRITE(c, offset + SSPP_REC_SRC_XY, src_xy);
+ DPU_REG_WRITE(c, offset + SSPP_REC_OUT_SIZE, dst_size);
+ DPU_REG_WRITE(c, offset + SSPP_REC_OUT_XY, dst_xy);
+}
+
static void dpu_hw_sspp_setup_sourceaddress(struct dpu_sw_pipe *pipe,
struct dpu_hw_fmt_layout *layout)
{
@@ -497,6 +826,29 @@ static void dpu_hw_sspp_setup_sourceaddress(struct dpu_sw_pipe *pipe,
DPU_REG_WRITE(&ctx->hw, SSPP_SRC_YSTRIDE1, ystride1);
}
+static void dpu_hw_sspp_setup_sourceaddress_v13(struct dpu_sw_pipe *pipe,
+ struct dpu_hw_fmt_layout *layout)
+{
+ struct dpu_hw_sspp *ctx = pipe->sspp;
+ int i;
+ u32 addr, ystride0, ystride1;
+
+ if (!ctx)
+ return;
+
+ addr = _sspp_calculate_rect_off(pipe->multirect_index, ctx);
+
+ for (i = 0; i < ARRAY_SIZE(layout->plane_addr); i++)
+ DPU_REG_WRITE(&ctx->hw, addr + SSPP_REC_SRC0_ADDR + i * 0x4,
+ layout->plane_addr[i]);
+
+ ystride0 = (layout->plane_pitch[0]) | (layout->plane_pitch[2] << 16);
+ ystride1 = (layout->plane_pitch[1]) | (layout->plane_pitch[3] << 16);
+
+ DPU_REG_WRITE(&ctx->hw, addr + SSPP_REC_SRC_YSTRIDE0, ystride0);
+ DPU_REG_WRITE(&ctx->hw, addr + SSPP_REC_SRC_YSTRIDE1, ystride1);
+}
+
static void dpu_hw_sspp_setup_csc(struct dpu_hw_sspp *ctx,
const struct dpu_csc_cfg *data)
{
@@ -536,6 +888,24 @@ static void dpu_hw_sspp_setup_solidfill(struct dpu_sw_pipe *pipe, u32 color)
color);
}
+static void dpu_hw_sspp_setup_solidfill_v13(struct dpu_sw_pipe *pipe, u32 color)
+{
+ struct dpu_hw_sspp *ctx = pipe->sspp;
+ struct dpu_hw_fmt_layout cfg;
+ u32 offset;
+
+ if (!ctx)
+ return;
+
+ offset = _sspp_calculate_rect_off(pipe->multirect_index, ctx);
+
+ /* cleanup source addresses */
+ memset(&cfg, 0, sizeof(cfg));
+ ctx->ops.setup_sourceaddress(pipe, &cfg);
+
+ DPU_REG_WRITE(&ctx->hw, offset + SSPP_REC_SRC_CONSTANT_COLOR, color);
+}
+
static void dpu_hw_sspp_setup_qos_lut(struct dpu_hw_sspp *ctx,
struct dpu_hw_qos_cfg *cfg)
{
@@ -547,6 +917,17 @@ static void dpu_hw_sspp_setup_qos_lut(struct dpu_hw_sspp *ctx,
cfg);
}
+static void dpu_hw_sspp_setup_qos_lut_v13(struct dpu_hw_sspp *ctx,
+ struct dpu_hw_qos_cfg *cfg)
+{
+ if (!ctx || !cfg)
+ return;
+
+ _dpu_hw_setup_qos_lut_v13(&ctx->hw, 0,
+ ctx->mdss_ver->core_major_ver >= 4,
+ cfg);
+}
+
static void dpu_hw_sspp_setup_qos_ctrl(struct dpu_hw_sspp *ctx,
bool danger_safe_en)
{
@@ -557,6 +938,16 @@ static void dpu_hw_sspp_setup_qos_ctrl(struct dpu_hw_sspp *ctx,
danger_safe_en ? SSPP_QOS_CTRL_DANGER_SAFE_EN : 0);
}
+static void dpu_hw_sspp_setup_qos_ctrl_v13(struct dpu_hw_sspp *ctx,
+ bool danger_safe_en)
+{
+ if (!ctx)
+ return;
+
+ DPU_REG_WRITE(&ctx->hw, SSPP_CMN_QOS_CTRL,
+ danger_safe_en ? SSPP_QOS_CTRL_DANGER_SAFE_EN : 0);
+}
+
static void dpu_hw_sspp_setup_cdp(struct dpu_sw_pipe *pipe,
const struct msm_format *fmt,
bool enable)
@@ -576,6 +967,20 @@ static void dpu_hw_sspp_setup_cdp(struct dpu_sw_pipe *pipe,
dpu_setup_cdp(&ctx->hw, cdp_cntl_offset, fmt, enable);
}
+static void dpu_hw_sspp_setup_cdp_v13(struct dpu_sw_pipe *pipe,
+ const struct msm_format *fmt,
+ bool enable)
+{
+ struct dpu_hw_sspp *ctx = pipe->sspp;
+ u32 offset = 0;
+
+ if (!ctx)
+ return;
+
+ offset = _sspp_calculate_rect_off(pipe->multirect_index, ctx);
+ dpu_setup_cdp(&ctx->hw, offset + SSPP_REC_CDP_CNTL, fmt, enable);
+}
+
static bool dpu_hw_sspp_setup_clk_force_ctrl(struct dpu_hw_sspp *ctx, bool enable)
{
static const struct dpu_clk_ctrl_reg sspp_clk_ctrl = {
@@ -586,36 +991,69 @@ static bool dpu_hw_sspp_setup_clk_force_ctrl(struct dpu_hw_sspp *ctx, bool enabl
return dpu_hw_clk_force_ctrl(&ctx->hw, &sspp_clk_ctrl, enable);
}
+static bool dpu_hw_sspp_setup_clk_force_ctrl_v13(struct dpu_hw_sspp *ctx, bool enable)
+{
+ static const struct dpu_clk_ctrl_reg sspp_clk_ctrl = {
+ .reg_off = SSPP_CMN_CLK_CTRL,
+ .bit_off = 0
+ };
+
+ return dpu_hw_clk_force_ctrl(&ctx->hw, &sspp_clk_ctrl, enable);
+}
+
static void _setup_layer_ops(struct dpu_hw_sspp *c,
unsigned long features, const struct dpu_mdss_version *mdss_rev)
{
- c->ops.setup_format = dpu_hw_sspp_setup_format;
- c->ops.setup_rects = dpu_hw_sspp_setup_rects;
- c->ops.setup_sourceaddress = dpu_hw_sspp_setup_sourceaddress;
- c->ops.setup_solidfill = dpu_hw_sspp_setup_solidfill;
- c->ops.setup_pe = dpu_hw_sspp_setup_pe_config;
-
- if (test_bit(DPU_SSPP_QOS, &features)) {
- c->ops.setup_qos_lut = dpu_hw_sspp_setup_qos_lut;
- c->ops.setup_qos_ctrl = dpu_hw_sspp_setup_qos_ctrl;
+ if (mdss_rev->core_major_ver >= 13) {
+ c->ops.setup_format = dpu_hw_sspp_setup_format_v13;
+ c->ops.setup_rects = dpu_hw_sspp_setup_rects_v13;
+ c->ops.setup_sourceaddress = dpu_hw_sspp_setup_sourceaddress_v13;
+ c->ops.setup_solidfill = dpu_hw_sspp_setup_solidfill_v13;
+ c->ops.setup_pe = dpu_hw_sspp_setup_pe_config_v13;
+
+ if (test_bit(DPU_SSPP_QOS, &features)) {
+ c->ops.setup_qos_lut = dpu_hw_sspp_setup_qos_lut_v13;
+ c->ops.setup_qos_ctrl = dpu_hw_sspp_setup_qos_ctrl_v13;
+ }
+
+ if (test_bit(DPU_SSPP_SMART_DMA_V1, &c->cap->features) ||
+ test_bit(DPU_SSPP_SMART_DMA_V2, &c->cap->features))
+ c->ops.setup_multirect = dpu_hw_sspp_setup_multirect_v13;
+
+ if (test_bit(DPU_SSPP_CDP, &features))
+ c->ops.setup_cdp = dpu_hw_sspp_setup_cdp_v13;
+
+ c->ops.setup_clk_force_ctrl = dpu_hw_sspp_setup_clk_force_ctrl_v13;
+ } else {
+ c->ops.setup_format = dpu_hw_sspp_setup_format;
+ c->ops.setup_rects = dpu_hw_sspp_setup_rects;
+ c->ops.setup_sourceaddress = dpu_hw_sspp_setup_sourceaddress;
+ c->ops.setup_solidfill = dpu_hw_sspp_setup_solidfill;
+ c->ops.setup_pe = dpu_hw_sspp_setup_pe_config;
+
+ if (test_bit(DPU_SSPP_QOS, &features)) {
+ c->ops.setup_qos_lut = dpu_hw_sspp_setup_qos_lut;
+ c->ops.setup_qos_ctrl = dpu_hw_sspp_setup_qos_ctrl;
+ }
+
+ if (test_bit(DPU_SSPP_SMART_DMA_V1, &c->cap->features) ||
+ test_bit(DPU_SSPP_SMART_DMA_V2, &c->cap->features))
+ c->ops.setup_multirect = dpu_hw_sspp_setup_multirect;
+
+ if (test_bit(DPU_SSPP_CDP, &features))
+ c->ops.setup_cdp = dpu_hw_sspp_setup_cdp;
+
+ if (mdss_rev->core_major_ver >= 9)
+ c->ops.setup_clk_force_ctrl = dpu_hw_sspp_setup_clk_force_ctrl;
}
if (test_bit(DPU_SSPP_CSC, &features) ||
test_bit(DPU_SSPP_CSC_10BIT, &features))
c->ops.setup_csc = dpu_hw_sspp_setup_csc;
- if (test_bit(DPU_SSPP_SMART_DMA_V1, &c->cap->features) ||
- test_bit(DPU_SSPP_SMART_DMA_V2, &c->cap->features))
- c->ops.setup_multirect = dpu_hw_sspp_setup_multirect;
-
if (test_bit(DPU_SSPP_SCALER_QSEED3_COMPATIBLE, &features))
c->ops.setup_scaler = _dpu_hw_sspp_setup_scaler3;
- if (test_bit(DPU_SSPP_CDP, &features))
- c->ops.setup_cdp = dpu_hw_sspp_setup_cdp;
-
- if (mdss_rev->core_major_ver >= 9)
- c->ops.setup_clk_force_ctrl = dpu_hw_sspp_setup_clk_force_ctrl;
}
#ifdef CONFIG_DEBUG_FS
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_util.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_util.c
index 486be346d40d..1acf456c425b 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_util.c
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_util.c
@@ -81,6 +81,13 @@ static u32 dpu_hw_util_log_mask = DPU_DBG_MASK_NONE;
#define QOS_CREQ_LUT_0 0x14
#define QOS_CREQ_LUT_1 0x18
+/* CMN_QOS_LUT */
+#define SSPP_CMN_DANGER_LUT 0x2C
+#define SSPP_CMN_SAFE_LUT 0x30
+#define SSPP_CMN_CREQ_LUT_0 0x34
+#define SSPP_CMN_CREQ_LUT_1 0x38
+#define SSPP_CMN_QOS_CTRL 0x28
+
/* QOS_QOS_CTRL */
#define QOS_QOS_CTRL_DANGER_SAFE_EN BIT(0)
#define QOS_QOS_CTRL_DANGER_VBLANK_MASK GENMASK(5, 4)
@@ -475,6 +482,22 @@ void _dpu_hw_setup_qos_lut(struct dpu_hw_blk_reg_map *c, u32 offset,
cfg->danger_safe_en ? QOS_QOS_CTRL_DANGER_SAFE_EN : 0);
}
+void _dpu_hw_setup_qos_lut_v13(struct dpu_hw_blk_reg_map *c, u32 offset,
+ bool qos_8lvl,
+ const struct dpu_hw_qos_cfg *cfg)
+{
+ DPU_REG_WRITE(c, offset + SSPP_CMN_DANGER_LUT, cfg->danger_lut);
+ DPU_REG_WRITE(c, offset + SSPP_CMN_SAFE_LUT, cfg->safe_lut);
+
+ if (qos_8lvl) {
+ DPU_REG_WRITE(c, offset + SSPP_CMN_CREQ_LUT_0, cfg->creq_lut);
+ DPU_REG_WRITE(c, offset + SSPP_CMN_CREQ_LUT_1, cfg->creq_lut >> 32);
+ }
+
+ DPU_REG_WRITE(c, offset + SSPP_CMN_QOS_CTRL,
+ cfg->danger_safe_en ? QOS_QOS_CTRL_DANGER_SAFE_EN : 0);
+}
+
/*
* note: Aside from encoders, input_sel should be set to 0x0 by default
*/
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_util.h b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_util.h
index 67b08e99335d..9d442d6fc11c 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_util.h
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_util.h
@@ -360,6 +360,10 @@ void _dpu_hw_setup_qos_lut(struct dpu_hw_blk_reg_map *c, u32 offset,
bool qos_8lvl,
const struct dpu_hw_qos_cfg *cfg);
+void _dpu_hw_setup_qos_lut_v13(struct dpu_hw_blk_reg_map *c, u32 offset,
+ bool qos_8lvl,
+ const struct dpu_hw_qos_cfg *cfg);
+
void dpu_hw_setup_misr(struct dpu_hw_blk_reg_map *c,
u32 misr_ctrl_offset, u8 input_sel);
--
2.34.1
^ permalink raw reply related [flat|nested] 77+ messages in thread
* [PATCH 07/12] drm/panel: Set sufficient voltage for panel nt37801
2025-10-23 8:06 ` [PATCH 06/12] drm/msm/dpu: Add Kaanapali SSPP sub-block support yuanjie yang
@ 2025-10-23 8:06 ` yuanjie yang
2025-10-23 8:22 ` Konrad Dybcio
2025-10-23 12:14 ` Dmitry Baryshkov
2025-10-23 8:06 ` [PATCH 08/12] arm64: defconfig: Enable NT37801 DSI panel driver yuanjie yang
` (4 subsequent siblings)
5 siblings, 2 replies; 77+ messages in thread
From: yuanjie yang @ 2025-10-23 8:06 UTC (permalink / raw)
To: robin.clark, lumag, abhinav.kumar, sean, marijn.suijten, airlied,
simona, maarten.lankhorst, mripard, tzimmermann, robh, krzk+dt,
conor+dt, quic_mkrishn, jonathan, quic_khsieh, neil.armstrong
Cc: linux-arm-msm, dri-devel, freedreno, devicetree, linux-kernel,
tingwei.zhang, aiqun.yu, yongxing.mou
From: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
The NT37801 Sepc V1.0 chapter "5.7.1 Power On Sequence" states
VDDI=1.65V~1.95V, so set sufficient voltage for panel nt37801.
Signed-off-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
Signed-off-by: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
---
drivers/gpu/drm/panel/panel-novatek-nt37801.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/drivers/gpu/drm/panel/panel-novatek-nt37801.c b/drivers/gpu/drm/panel/panel-novatek-nt37801.c
index d6a37d7e0cc6..7eda16e0c1f9 100644
--- a/drivers/gpu/drm/panel/panel-novatek-nt37801.c
+++ b/drivers/gpu/drm/panel/panel-novatek-nt37801.c
@@ -267,6 +267,11 @@ static int novatek_nt37801_probe(struct mipi_dsi_device *dsi)
if (ret < 0)
return ret;
+ ret = regulator_set_voltage(ctx->supplies[0].consumer,
+ 1650000, 1950000);
+ if (ret < 0)
+ return ret;
+
ctx->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_OUT_LOW);
if (IS_ERR(ctx->reset_gpio))
return dev_err_probe(dev, PTR_ERR(ctx->reset_gpio),
--
2.34.1
^ permalink raw reply related [flat|nested] 77+ messages in thread
* [PATCH 08/12] arm64: defconfig: Enable NT37801 DSI panel driver
2025-10-23 8:06 ` [PATCH 06/12] drm/msm/dpu: Add Kaanapali SSPP sub-block support yuanjie yang
2025-10-23 8:06 ` [PATCH 07/12] drm/panel: Set sufficient voltage for panel nt37801 yuanjie yang
@ 2025-10-23 8:06 ` yuanjie yang
2025-10-23 8:22 ` Konrad Dybcio
2025-10-28 3:51 ` Bjorn Andersson
2025-10-23 8:06 ` [PATCH 09/12] dt-bindings: display/msm: qcom,kaanapali-dpu: Add Kaanapali yuanjie yang
` (3 subsequent siblings)
5 siblings, 2 replies; 77+ messages in thread
From: yuanjie yang @ 2025-10-23 8:06 UTC (permalink / raw)
To: robin.clark, lumag, abhinav.kumar, sean, marijn.suijten, airlied,
simona, maarten.lankhorst, mripard, tzimmermann, robh, krzk+dt,
conor+dt, quic_mkrishn, jonathan, quic_khsieh, neil.armstrong
Cc: linux-arm-msm, dri-devel, freedreno, devicetree, linux-kernel,
tingwei.zhang, aiqun.yu, yongxing.mou
From: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
Build the NT37801 DSI panel driver as module.
Signed-off-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
Signed-off-by: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
---
arch/arm64/configs/defconfig | 1 +
1 file changed, 1 insertion(+)
diff --git a/arch/arm64/configs/defconfig b/arch/arm64/configs/defconfig
index 8cfb5000fa8e..537a065db11c 100644
--- a/arch/arm64/configs/defconfig
+++ b/arch/arm64/configs/defconfig
@@ -945,6 +945,7 @@ CONFIG_DRM_PANEL_SITRONIX_ST7703=m
CONFIG_DRM_PANEL_STARTEK_KD070FHFID015=m
CONFIG_DRM_PANEL_TRULY_NT35597_WQXGA=m
CONFIG_DRM_PANEL_VISIONOX_VTDR6130=m
+CONFIG_DRM_PANEL_NOVATEK_NT37801=m
CONFIG_DRM_DISPLAY_CONNECTOR=m
CONFIG_DRM_FSL_LDB=m
CONFIG_DRM_ITE_IT6263=m
--
2.34.1
^ permalink raw reply related [flat|nested] 77+ messages in thread
* [PATCH 09/12] dt-bindings: display/msm: qcom,kaanapali-dpu: Add Kaanapali
2025-10-23 8:06 ` [PATCH 06/12] drm/msm/dpu: Add Kaanapali SSPP sub-block support yuanjie yang
2025-10-23 8:06 ` [PATCH 07/12] drm/panel: Set sufficient voltage for panel nt37801 yuanjie yang
2025-10-23 8:06 ` [PATCH 08/12] arm64: defconfig: Enable NT37801 DSI panel driver yuanjie yang
@ 2025-10-23 8:06 ` yuanjie yang
2025-10-26 22:34 ` Rob Herring (Arm)
2025-10-23 8:06 ` [PATCH 10/12] dt-bindings: display/msm: dsi-phy-7nm: Add Kaanapali DSi PHY yuanjie yang
` (2 subsequent siblings)
5 siblings, 1 reply; 77+ messages in thread
From: yuanjie yang @ 2025-10-23 8:06 UTC (permalink / raw)
To: robin.clark, lumag, abhinav.kumar, sean, marijn.suijten, airlied,
simona, maarten.lankhorst, mripard, tzimmermann, robh, krzk+dt,
conor+dt, quic_mkrishn, jonathan, quic_khsieh, neil.armstrong
Cc: linux-arm-msm, dri-devel, freedreno, devicetree, linux-kernel,
tingwei.zhang, aiqun.yu, yongxing.mou
From: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
Add DPU version 13.0 for Qualcomm Kaanapali Soc. The Kaanapali
DPU and SM8750 have significant differences, including additions
and removals of registers, as well as changes in register addresses.
Signed-off-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
Signed-off-by: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
---
.../devicetree/bindings/display/msm/qcom,sm8650-dpu.yaml | 1 +
1 file changed, 1 insertion(+)
diff --git a/Documentation/devicetree/bindings/display/msm/qcom,sm8650-dpu.yaml b/Documentation/devicetree/bindings/display/msm/qcom,sm8650-dpu.yaml
index 0a46120dd868..424dbda3fd9d 100644
--- a/Documentation/devicetree/bindings/display/msm/qcom,sm8650-dpu.yaml
+++ b/Documentation/devicetree/bindings/display/msm/qcom,sm8650-dpu.yaml
@@ -14,6 +14,7 @@ $ref: /schemas/display/msm/dpu-common.yaml#
properties:
compatible:
enum:
+ - qcom,kaanapali-dpu
- qcom,sa8775p-dpu
- qcom,sm8650-dpu
- qcom,sm8750-dpu
--
2.34.1
^ permalink raw reply related [flat|nested] 77+ messages in thread
* [PATCH 10/12] dt-bindings: display/msm: dsi-phy-7nm: Add Kaanapali DSi PHY
2025-10-23 8:06 ` [PATCH 06/12] drm/msm/dpu: Add Kaanapali SSPP sub-block support yuanjie yang
` (2 preceding siblings ...)
2025-10-23 8:06 ` [PATCH 09/12] dt-bindings: display/msm: qcom,kaanapali-dpu: Add Kaanapali yuanjie yang
@ 2025-10-23 8:06 ` yuanjie yang
2025-10-23 12:16 ` Dmitry Baryshkov
2025-10-23 8:06 ` [PATCH 11/12] dt-bindings: display/msm: dsi-controller-main: Add Kaanapali yuanjie yang
2025-10-23 12:14 ` [PATCH 06/12] drm/msm/dpu: Add Kaanapali SSPP sub-block support Dmitry Baryshkov
5 siblings, 1 reply; 77+ messages in thread
From: yuanjie yang @ 2025-10-23 8:06 UTC (permalink / raw)
To: robin.clark, lumag, abhinav.kumar, sean, marijn.suijten, airlied,
simona, maarten.lankhorst, mripard, tzimmermann, robh, krzk+dt,
conor+dt, quic_mkrishn, jonathan, quic_khsieh, neil.armstrong
Cc: linux-arm-msm, dri-devel, freedreno, devicetree, linux-kernel,
tingwei.zhang, aiqun.yu, yongxing.mou
From: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
Add DSI PHY for Kaanapali.
Signed-off-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
Signed-off-by: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
---
Documentation/devicetree/bindings/display/msm/dsi-phy-7nm.yaml | 1 +
1 file changed, 1 insertion(+)
diff --git a/Documentation/devicetree/bindings/display/msm/dsi-phy-7nm.yaml b/Documentation/devicetree/bindings/display/msm/dsi-phy-7nm.yaml
index 1ca820a500b7..a6e044eed3df 100644
--- a/Documentation/devicetree/bindings/display/msm/dsi-phy-7nm.yaml
+++ b/Documentation/devicetree/bindings/display/msm/dsi-phy-7nm.yaml
@@ -17,6 +17,7 @@ properties:
enum:
- qcom,dsi-phy-7nm
- qcom,dsi-phy-7nm-8150
+ - qcom,kaanapali-dsi-phy-3nm
- qcom,sa8775p-dsi-phy-5nm
- qcom,sar2130p-dsi-phy-5nm
- qcom,sc7280-dsi-phy-7nm
--
2.34.1
^ permalink raw reply related [flat|nested] 77+ messages in thread
* [PATCH 11/12] dt-bindings: display/msm: dsi-controller-main: Add Kaanapali
2025-10-23 8:06 ` [PATCH 06/12] drm/msm/dpu: Add Kaanapali SSPP sub-block support yuanjie yang
` (3 preceding siblings ...)
2025-10-23 8:06 ` [PATCH 10/12] dt-bindings: display/msm: dsi-phy-7nm: Add Kaanapali DSi PHY yuanjie yang
@ 2025-10-23 8:06 ` yuanjie yang
2025-10-23 12:16 ` Dmitry Baryshkov
2025-10-23 12:14 ` [PATCH 06/12] drm/msm/dpu: Add Kaanapali SSPP sub-block support Dmitry Baryshkov
5 siblings, 1 reply; 77+ messages in thread
From: yuanjie yang @ 2025-10-23 8:06 UTC (permalink / raw)
To: robin.clark, lumag, abhinav.kumar, sean, marijn.suijten, airlied,
simona, maarten.lankhorst, mripard, tzimmermann, robh, krzk+dt,
conor+dt, quic_mkrishn, jonathan, quic_khsieh, neil.armstrong
Cc: linux-arm-msm, dri-devel, freedreno, devicetree, linux-kernel,
tingwei.zhang, aiqun.yu, yongxing.mou
From: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
Add DSI Controller for Kaanapali.
Signed-off-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
Signed-off-by: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
---
.../devicetree/bindings/display/msm/dsi-controller-main.yaml | 2 ++
1 file changed, 2 insertions(+)
diff --git a/Documentation/devicetree/bindings/display/msm/dsi-controller-main.yaml b/Documentation/devicetree/bindings/display/msm/dsi-controller-main.yaml
index 4400d4cce072..536ebf331828 100644
--- a/Documentation/devicetree/bindings/display/msm/dsi-controller-main.yaml
+++ b/Documentation/devicetree/bindings/display/msm/dsi-controller-main.yaml
@@ -15,6 +15,7 @@ properties:
- items:
- enum:
- qcom,apq8064-dsi-ctrl
+ - qcom,kaanapali-dsi-ctrl
- qcom,msm8226-dsi-ctrl
- qcom,msm8916-dsi-ctrl
- qcom,msm8953-dsi-ctrl
@@ -369,6 +370,7 @@ allOf:
compatible:
contains:
enum:
+ - qcom,kaanapali-dsi-ctrl
- qcom,sm8750-dsi-ctrl
then:
properties:
--
2.34.1
^ permalink raw reply related [flat|nested] 77+ messages in thread
* [PATCH 12/12] dt-bindings: display/msm: qcom,kaanapali-mdss: Add Kaanapali
2025-10-23 7:53 [PATCH 00/12] drm/msm: Add support for Kaanapali yuanjie yang
` (5 preceding siblings ...)
2025-10-23 8:06 ` [PATCH 06/12] drm/msm/dpu: Add Kaanapali SSPP sub-block support yuanjie yang
@ 2025-10-23 8:17 ` yuanjie yang
2025-10-23 9:34 ` Rob Herring (Arm)
2025-10-23 12:17 ` Dmitry Baryshkov
2025-10-23 11:46 ` [PATCH 00/12] drm/msm: Add support for Kaanapali Dmitry Baryshkov
7 siblings, 2 replies; 77+ messages in thread
From: yuanjie yang @ 2025-10-23 8:17 UTC (permalink / raw)
To: robin.clark, lumag, abhinav.kumar, sean, marijn.suijten, airlied,
simona, maarten.lankhorst, mripard, tzimmermann, robh, krzk+dt,
conor+dt, quic_mkrishn, jonathan, quic_khsieh, neil.armstrong
Cc: linux-arm-msm, dri-devel, freedreno, devicetree, linux-kernel,
tingwei.zhang, aiqun.yu, yongxing.mou
From: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
Add MDSS/MDP display subsystem for Qualcomm Kaanapali.
Signed-off-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
Signed-off-by: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
---
.../display/msm/qcom,kaanapali-mdss.yaml | 298 ++++++++++++++++++
1 file changed, 298 insertions(+)
create mode 100644 Documentation/devicetree/bindings/display/msm/qcom,kaanapali-mdss.yaml
diff --git a/Documentation/devicetree/bindings/display/msm/qcom,kaanapali-mdss.yaml b/Documentation/devicetree/bindings/display/msm/qcom,kaanapali-mdss.yaml
new file mode 100644
index 000000000000..3006c0a69309
--- /dev/null
+++ b/Documentation/devicetree/bindings/display/msm/qcom,kaanapali-mdss.yaml
@@ -0,0 +1,298 @@
+# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/display/msm/qcom,kaanapali-mdss.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Qualcomm Kaanapali Display MDSS
+
+maintainers:
+ - Yongxing Mou <yongxing.mou@oss.qualcomm.com>
+
+description:
+ Kaanapali MSM Mobile Display Subsystem(MDSS), which encapsulates sub-blocks
+ like DPU display controller, DSI and DP interfaces etc.
+
+$ref: /schemas/display/msm/mdss-common.yaml#
+
+properties:
+ compatible:
+ const: qcom,kaanapali-mdss
+
+ clocks:
+ items:
+ - description: Display AHB
+ - description: Display hf AXI
+ - description: Display core
+ - description: Display AHB SWI
+
+ 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,kaanapali-dpu
+
+ "^dsi@[0-9a-f]+$":
+ type: object
+ additionalProperties: true
+ properties:
+ compatible:
+ contains:
+ const: qcom,kaanapali-dsi-ctrl
+
+ "^phy@[0-9a-f]+$":
+ type: object
+ additionalProperties: true
+ properties:
+ compatible:
+ const: qcom,kaanapali-dsi-phy-3nm
+
+required:
+ - compatible
+
+unevaluatedProperties: false
+
+examples:
+ - |
+ #include <dt-bindings/clock/qcom,rpmh.h>
+ #include <dt-bindings/interconnect/qcom,icc.h>
+ #include <dt-bindings/interconnect/qcom,kaanapali-rpmh.h>
+ #include <dt-bindings/interrupt-controller/arm-gic.h>
+ #include <dt-bindings/phy/phy-qcom-qmp.h>
+ #include <dt-bindings/power/qcom,rpmhpd.h>
+
+ display-subsystem@9800000 {
+ compatible = "qcom,kaanapali-mdss";
+ reg = <0x09800000 0x1000>;
+ reg-names = "mdss";
+
+ interrupts = <GIC_SPI 83 IRQ_TYPE_LEVEL_HIGH>;
+
+ clocks = <&disp_cc_mdss_ahb_clk>,
+ <&gcc_disp_hf_axi_clk>,
+ <&disp_cc_mdss_mdp_clk>,
+ <&disp_cc_mdss_ahb1_clk>;
+ resets = <&dispcc DISP_CC_MDSS_CORE_BCR>;
+
+ interconnects = <&mmss_noc MASTER_MDP QCOM_ICC_TAG_ALWAYS
+ &mc_virt SLAVE_EBI1 QCOM_ICC_TAG_ALWAYS>,
+ <&gem_noc MASTER_APPSS_PROC QCOM_ICC_TAG_ACTIVE_ONLY
+ &config_noc SLAVE_DISPLAY_CFG QCOM_ICC_TAG_ACTIVE_ONLY>;
+ interconnect-names = "mdp0-mem",
+ "cpu-cfg";
+
+ power-domains = <&dispcc DISP_CC_MDSS_CORE_GDSC>;
+
+ iommus = <&apps_smmu 0x800 0x2>;
+
+ interrupt-controller;
+ #interrupt-cells = <1>;
+
+ #address-cells = <1>;
+ #size-cells = <1>;
+ ranges;
+
+ display-controller@9801000 {
+ compatible = "qcom,kaanapali-dpu";
+ reg = <0x09801000 0x1C8000>,
+ <0x09B16000 0x3000>;
+ reg-names = "mdp",
+ "vbif";
+
+ interrupts-extended = <&mdss 0>;
+
+ clocks = <&gcc_disp_hf_axi_clk>,
+ <&disp_cc_mdss_ahb_clk>,
+ <&disp_cc_mdss_mdp_lut_clk>,
+ <&disp_cc_mdss_mdp_clk>,
+ <&disp_cc_mdss_vsync_clk>;
+ clock-names = "nrt_bus",
+ "iface",
+ "lut",
+ "core",
+ "vsync";
+
+ assigned-clocks = <&disp_cc_mdss_vsync_clk>;
+ assigned-clock-rates = <19200000>;
+
+ operating-points-v2 = <&mdp_opp_table>;
+
+ power-domains = <&rpmhpd RPMHPD_MMCX>;
+
+ ports {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ port@0 {
+ reg = <0>;
+
+ dpu_intf1_out: endpoint {
+ remote-endpoint = <&mdss_dsi0_in>;
+ };
+ };
+
+ port@1 {
+ reg = <1>;
+
+ dpu_intf2_out: endpoint {
+ remote-endpoint = <&mdss_dsi1_in>;
+ };
+ };
+ };
+
+ mdp_opp_table: opp-table {
+ compatible = "operating-points-v2";
+
+ opp-207000000 {
+ opp-hz = /bits/ 64 <207000000>;
+ required-opps = <&rpmhpd_opp_low_svs>;
+ };
+
+ opp-337000000 {
+ opp-hz = /bits/ 64 <337000000>;
+ required-opps = <&rpmhpd_opp_svs>;
+ };
+
+ opp-417000000 {
+ opp-hz = /bits/ 64 <417000000>;
+ required-opps = <&rpmhpd_opp_svs_l1>;
+ };
+
+ opp-532000000 {
+ opp-hz = /bits/ 64 <532000000>;
+ required-opps = <&rpmhpd_opp_nom>;
+ };
+
+ opp-600000000 {
+ opp-hz = /bits/ 64 <600000000>;
+ required-opps = <&rpmhpd_opp_nom_l1>;
+ };
+
+ opp-650000000 {
+ opp-hz = /bits/ 64 <650000000>;
+ required-opps = <&rpmhpd_opp_turbo>;
+ };
+ };
+ };
+
+ dsi@ae94000 {
+ compatible = "qcom,kaanapali-dsi-ctrl", "qcom,mdss-dsi-ctrl";
+ reg = <0x09ac0000 0x500>;
+ reg-names = "dsi_ctrl";
+
+ interrupts-extended = <&mdss 4>;
+
+ clocks = <&disp_cc_mdss_byte0_clk>,
+ <&disp_cc_mdss_byte0_intf_clk>,
+ <&disp_cc_mdss_pclk0_clk>,
+ <&disp_cc_mdss_esc0_clk>,
+ <&disp_cc_mdss_ahb_clk>,
+ <&gcc_disp_hf_axi_clk>,
+ <&mdss_dsi0_phy 1>,
+ <&mdss_dsi0_phy 0>,
+ <&disp_cc_esync0_clk>,
+ <&disp_cc_osc_clk>,
+ <&disp_cc_mdss_byte0_clk_src>,
+ <&disp_cc_mdss_pclk0_clk_src>;
+ clock-names = "byte",
+ "byte_intf",
+ "pixel",
+ "core",
+ "iface",
+ "bus",
+ "dsi_pll_pixel",
+ "dsi_pll_byte",
+ "esync",
+ "osc",
+ "byte_src",
+ "pixel_src";
+
+ operating-points-v2 = <&mdss_dsi_opp_table>;
+
+ power-domains = <&rpmhpd RPMHPD_MMCX>;
+
+ phys = <&mdss_dsi0_phy>;
+ phy-names = "dsi";
+
+ vdda-supply = <&vreg_l3g_1p2>;
+
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ ports {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ port@0 {
+ reg = <0>;
+
+ mdss_dsi0_in: endpoint {
+ remote-endpoint = <&dpu_intf1_out>;
+ };
+ };
+
+ port@1 {
+ reg = <1>;
+
+ mdss_dsi0_out: endpoint {
+ remote-endpoint = <&panel0_in>;
+ data-lanes = <0 1 2 3>;
+ };
+ };
+ };
+
+ mdss_dsi_opp_table: opp-table {
+ compatible = "operating-points-v2";
+
+ opp-187500000 {
+ opp-hz = /bits/ 64 <187500000>;
+ required-opps = <&rpmhpd_opp_low_svs>;
+ };
+
+ opp-300000000 {
+ opp-hz = /bits/ 64 <300000000>;
+ required-opps = <&rpmhpd_opp_svs>;
+ };
+
+ opp-358000000 {
+ opp-hz = /bits/ 64 <358000000>;
+ required-opps = <&rpmhpd_opp_svs_l1>;
+ };
+ };
+ };
+
+ mdss_dsi0_phy: phy@ae95000 {
+ compatible = "qcom,kaanapali-dsi-phy-3nm", "qcom,sm8750-dsi-phy-3nm";
+ reg = <0x09ac1000 0x200>,
+ <0x09ac1200 0x280>,
+ <0x09ac1500 0x400>;
+ reg-names = "dsi_phy",
+ "dsi_phy_lane",
+ "dsi_pll";
+
+ clocks = <&disp_cc_mdss_ahb_clk>,
+ <&rpmhcc RPMH_CXO_CLK>;
+ clock-names = "iface",
+ "ref";
+
+ vdds-supply = <&vreg_l3i_0p88>;
+
+ #clock-cells = <1>;
+ #phy-cells = <0>;
+ };
+ };
--
2.34.1
^ permalink raw reply related [flat|nested] 77+ messages in thread
* Re: [PATCH 07/12] drm/panel: Set sufficient voltage for panel nt37801
2025-10-23 8:06 ` [PATCH 07/12] drm/panel: Set sufficient voltage for panel nt37801 yuanjie yang
@ 2025-10-23 8:22 ` Konrad Dybcio
2025-10-23 8:57 ` yuanjiey
2025-10-23 12:14 ` Dmitry Baryshkov
1 sibling, 1 reply; 77+ messages in thread
From: Konrad Dybcio @ 2025-10-23 8:22 UTC (permalink / raw)
To: yuanjie yang, robin.clark, lumag, abhinav.kumar, sean,
marijn.suijten, airlied, simona, maarten.lankhorst, mripard,
tzimmermann, robh, krzk+dt, conor+dt, quic_mkrishn, jonathan,
quic_khsieh, neil.armstrong
Cc: linux-arm-msm, dri-devel, freedreno, devicetree, linux-kernel,
tingwei.zhang, aiqun.yu, yongxing.mou
On 10/23/25 10:06 AM, yuanjie yang wrote:
> From: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
>
> The NT37801 Sepc V1.0 chapter "5.7.1 Power On Sequence" states
> VDDI=1.65V~1.95V, so set sufficient voltage for panel nt37801.
>
> Signed-off-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
> Signed-off-by: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
> ---
This patch should have been sent separately as it's not at all
related to extending the msm display driver to support Kaanapali
*and* it goes through a different maintainer
Konrad
^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH 08/12] arm64: defconfig: Enable NT37801 DSI panel driver
2025-10-23 8:06 ` [PATCH 08/12] arm64: defconfig: Enable NT37801 DSI panel driver yuanjie yang
@ 2025-10-23 8:22 ` Konrad Dybcio
2025-10-23 9:02 ` yuanjiey
2025-10-28 3:51 ` Bjorn Andersson
1 sibling, 1 reply; 77+ messages in thread
From: Konrad Dybcio @ 2025-10-23 8:22 UTC (permalink / raw)
To: yuanjie yang, robin.clark, lumag, abhinav.kumar, sean,
marijn.suijten, airlied, simona, maarten.lankhorst, mripard,
tzimmermann, robh, krzk+dt, conor+dt, quic_mkrishn, jonathan,
quic_khsieh, neil.armstrong
Cc: linux-arm-msm, dri-devel, freedreno, devicetree, linux-kernel,
tingwei.zhang, aiqun.yu, yongxing.mou
On 10/23/25 10:06 AM, yuanjie yang wrote:
> From: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
>
> Build the NT37801 DSI panel driver as module.
Yes, we can see that's what happens in the diff below.
You failed to state the "why"
Konrad
>
> Signed-off-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
> Signed-off-by: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
> ---
> arch/arm64/configs/defconfig | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/arch/arm64/configs/defconfig b/arch/arm64/configs/defconfig
> index 8cfb5000fa8e..537a065db11c 100644
> --- a/arch/arm64/configs/defconfig
> +++ b/arch/arm64/configs/defconfig
> @@ -945,6 +945,7 @@ CONFIG_DRM_PANEL_SITRONIX_ST7703=m
> CONFIG_DRM_PANEL_STARTEK_KD070FHFID015=m
> CONFIG_DRM_PANEL_TRULY_NT35597_WQXGA=m
> CONFIG_DRM_PANEL_VISIONOX_VTDR6130=m
> +CONFIG_DRM_PANEL_NOVATEK_NT37801=m
> CONFIG_DRM_DISPLAY_CONNECTOR=m
> CONFIG_DRM_FSL_LDB=m
> CONFIG_DRM_ITE_IT6263=m
^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH 07/12] drm/panel: Set sufficient voltage for panel nt37801
2025-10-23 8:22 ` Konrad Dybcio
@ 2025-10-23 8:57 ` yuanjiey
0 siblings, 0 replies; 77+ messages in thread
From: yuanjiey @ 2025-10-23 8:57 UTC (permalink / raw)
To: Konrad Dybcio
Cc: robin.clark, lumag, abhinav.kumar, sean, marijn.suijten, airlied,
simona, maarten.lankhorst, mripard, tzimmermann, robh, krzk+dt,
conor+dt, quic_mkrishn, jonathan, quic_khsieh, neil.armstrong,
linux-arm-msm, dri-devel, freedreno, devicetree, linux-kernel,
tingwei.zhang, aiqun.yu, yongxing.mou
On Thu, Oct 23, 2025 at 10:22:12AM +0200, Konrad Dybcio wrote:
> On 10/23/25 10:06 AM, yuanjie yang wrote:
> > From: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
> >
> > The NT37801 Sepc V1.0 chapter "5.7.1 Power On Sequence" states
> > VDDI=1.65V~1.95V, so set sufficient voltage for panel nt37801.
> >
> > Signed-off-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
> > Signed-off-by: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
> > ---
>
> This patch should have been sent separately as it's not at all
> related to extending the msm display driver to support Kaanapali
> *and* it goes through a different maintainer
OK, get it, will split panel patch.
Thanks,
Yuanjie
> Konrad
^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH 08/12] arm64: defconfig: Enable NT37801 DSI panel driver
2025-10-23 8:22 ` Konrad Dybcio
@ 2025-10-23 9:02 ` yuanjiey
0 siblings, 0 replies; 77+ messages in thread
From: yuanjiey @ 2025-10-23 9:02 UTC (permalink / raw)
To: Konrad Dybcio
Cc: robin.clark, lumag, abhinav.kumar, sean, marijn.suijten, airlied,
simona, maarten.lankhorst, mripard, tzimmermann, robh, krzk+dt,
conor+dt, quic_mkrishn, jonathan, quic_khsieh, neil.armstrong,
linux-arm-msm, dri-devel, freedreno, devicetree, linux-kernel,
tingwei.zhang, aiqun.yu, yongxing.mou
On Thu, Oct 23, 2025 at 10:22:36AM +0200, Konrad Dybcio wrote:
> On 10/23/25 10:06 AM, yuanjie yang wrote:
> > From: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
> >
> > Build the NT37801 DSI panel driver as module.
>
> Yes, we can see that's what happens in the diff below.
>
> You failed to state the "why"
Novatek NT37801 panel is used on Qualcomm Kaanapali-mtp and SM8750-mtp board.
I will give this reason in split panel patch.
Thanks,
Yuanjie
> Konrad
>
> >
> > Signed-off-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
> > Signed-off-by: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
> > ---
> > arch/arm64/configs/defconfig | 1 +
> > 1 file changed, 1 insertion(+)
> >
> > diff --git a/arch/arm64/configs/defconfig b/arch/arm64/configs/defconfig
> > index 8cfb5000fa8e..537a065db11c 100644
> > --- a/arch/arm64/configs/defconfig
> > +++ b/arch/arm64/configs/defconfig
> > @@ -945,6 +945,7 @@ CONFIG_DRM_PANEL_SITRONIX_ST7703=m
> > CONFIG_DRM_PANEL_STARTEK_KD070FHFID015=m
> > CONFIG_DRM_PANEL_TRULY_NT35597_WQXGA=m
> > CONFIG_DRM_PANEL_VISIONOX_VTDR6130=m
> > +CONFIG_DRM_PANEL_NOVATEK_NT37801=m
> > CONFIG_DRM_DISPLAY_CONNECTOR=m
> > CONFIG_DRM_FSL_LDB=m
> > CONFIG_DRM_ITE_IT6263=m
^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH 12/12] dt-bindings: display/msm: qcom,kaanapali-mdss: Add Kaanapali
2025-10-23 8:17 ` [PATCH 12/12] dt-bindings: display/msm: qcom,kaanapali-mdss: Add Kaanapali yuanjie yang
@ 2025-10-23 9:34 ` Rob Herring (Arm)
2025-10-23 9:36 ` Konrad Dybcio
2025-10-23 12:17 ` Dmitry Baryshkov
1 sibling, 1 reply; 77+ messages in thread
From: Rob Herring (Arm) @ 2025-10-23 9:34 UTC (permalink / raw)
To: yuanjie yang
Cc: dri-devel, mripard, linux-kernel, aiqun.yu, marijn.suijten,
abhinav.kumar, simona, devicetree, tingwei.zhang, krzk+dt,
freedreno, neil.armstrong, quic_mkrishn, linux-arm-msm, lumag,
airlied, sean, maarten.lankhorst, tzimmermann, jonathan,
robin.clark, quic_khsieh, conor+dt, yongxing.mou
On Thu, 23 Oct 2025 16:17:36 +0800, yuanjie yang wrote:
> From: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
>
> Add MDSS/MDP display subsystem for Qualcomm Kaanapali.
>
> Signed-off-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
> Signed-off-by: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
> ---
> .../display/msm/qcom,kaanapali-mdss.yaml | 298 ++++++++++++++++++
> 1 file changed, 298 insertions(+)
> create mode 100644 Documentation/devicetree/bindings/display/msm/qcom,kaanapali-mdss.yaml
>
My bot found errors running 'make dt_binding_check' on your patch:
yamllint warnings/errors:
dtschema/dtc warnings/errors:
Documentation/devicetree/bindings/display/msm/qcom,kaanapali-mdss.example.dts:26:18: fatal error: dt-bindings/interconnect/qcom,kaanapali-rpmh.h: No such file or directory
26 | #include <dt-bindings/interconnect/qcom,kaanapali-rpmh.h>
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
make[2]: *** [scripts/Makefile.dtbs:132: Documentation/devicetree/bindings/display/msm/qcom,kaanapali-mdss.example.dtb] Error 1
make[2]: *** Waiting for unfinished jobs....
make[1]: *** [/builds/robherring/dt-review-ci/linux/Makefile:1528: dt_binding_check] Error 2
make: *** [Makefile:248: __sub-make] Error 2
doc reference errors (make refcheckdocs):
See https://patchwork.ozlabs.org/project/devicetree-bindings/patch/20251023081736.1251-1-yuanjie.yang@oss.qualcomm.com
The base for the series is generally the latest rc1. A different dependency
should be noted in *this* patch.
If you already ran 'make dt_binding_check' and didn't see the above
error(s), then make sure 'yamllint' is installed and dt-schema is up to
date:
pip3 install dtschema --upgrade
Please check and re-submit after running the above command yourself. Note
that DT_SCHEMA_FILES can be set to your schema file to speed up checking
your schema. However, it must be unset to test all examples with your schema.
^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH 12/12] dt-bindings: display/msm: qcom,kaanapali-mdss: Add Kaanapali
2025-10-23 9:34 ` Rob Herring (Arm)
@ 2025-10-23 9:36 ` Konrad Dybcio
2025-10-23 9:52 ` yuanjiey
0 siblings, 1 reply; 77+ messages in thread
From: Konrad Dybcio @ 2025-10-23 9:36 UTC (permalink / raw)
To: Rob Herring (Arm), yuanjie yang
Cc: dri-devel, mripard, linux-kernel, aiqun.yu, marijn.suijten,
abhinav.kumar, simona, devicetree, tingwei.zhang, krzk+dt,
freedreno, neil.armstrong, quic_mkrishn, linux-arm-msm, lumag,
airlied, sean, maarten.lankhorst, tzimmermann, jonathan,
robin.clark, quic_khsieh, conor+dt, yongxing.mou
On 10/23/25 11:34 AM, Rob Herring (Arm) wrote:
>
> On Thu, 23 Oct 2025 16:17:36 +0800, yuanjie yang wrote:
>> From: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
>>
>> Add MDSS/MDP display subsystem for Qualcomm Kaanapali.
>>
>> Signed-off-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
>> Signed-off-by: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
>> ---
>> .../display/msm/qcom,kaanapali-mdss.yaml | 298 ++++++++++++++++++
>> 1 file changed, 298 insertions(+)
>> create mode 100644 Documentation/devicetree/bindings/display/msm/qcom,kaanapali-mdss.yaml
>>
>
> My bot found errors running 'make dt_binding_check' on your patch:
>
> yamllint warnings/errors:
>
> dtschema/dtc warnings/errors:
> Documentation/devicetree/bindings/display/msm/qcom,kaanapali-mdss.example.dts:26:18: fatal error: dt-bindings/interconnect/qcom,kaanapali-rpmh.h: No such file or directory
> 26 | #include <dt-bindings/interconnect/qcom,kaanapali-rpmh.h>
Please do what you did with the other clocks and simply refer to it
as some vague &rpmhcc_xo_clk which doesn't actually need to be defined
Konrad
^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH 12/12] dt-bindings: display/msm: qcom,kaanapali-mdss: Add Kaanapali
2025-10-23 9:36 ` Konrad Dybcio
@ 2025-10-23 9:52 ` yuanjiey
0 siblings, 0 replies; 77+ messages in thread
From: yuanjiey @ 2025-10-23 9:52 UTC (permalink / raw)
To: Konrad Dybcio
Cc: Rob Herring (Arm), dri-devel, mripard, linux-kernel, aiqun.yu,
marijn.suijten, abhinav.kumar, simona, devicetree, tingwei.zhang,
krzk+dt, freedreno, neil.armstrong, quic_mkrishn, linux-arm-msm,
lumag, airlied, sean, maarten.lankhorst, tzimmermann, jonathan,
robin.clark, quic_khsieh, conor+dt, yongxing.mou
On Thu, Oct 23, 2025 at 11:36:42AM +0200, Konrad Dybcio wrote:
> On 10/23/25 11:34 AM, Rob Herring (Arm) wrote:
> >
> > On Thu, 23 Oct 2025 16:17:36 +0800, yuanjie yang wrote:
> >> From: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
> >>
> >> Add MDSS/MDP display subsystem for Qualcomm Kaanapali.
> >>
> >> Signed-off-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
> >> Signed-off-by: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
> >> ---
> >> .../display/msm/qcom,kaanapali-mdss.yaml | 298 ++++++++++++++++++
> >> 1 file changed, 298 insertions(+)
> >> create mode 100644 Documentation/devicetree/bindings/display/msm/qcom,kaanapali-mdss.yaml
> >>
> >
> > My bot found errors running 'make dt_binding_check' on your patch:
> >
> > yamllint warnings/errors:
> >
> > dtschema/dtc warnings/errors:
> > Documentation/devicetree/bindings/display/msm/qcom,kaanapali-mdss.example.dts:26:18: fatal error: dt-bindings/interconnect/qcom,kaanapali-rpmh.h: No such file or directory
> > 26 | #include <dt-bindings/interconnect/qcom,kaanapali-rpmh.h>
>
> Please do what you did with the other clocks and simply refer to it
> as some vague &rpmhcc_xo_clk which doesn't actually need to be defined
Thanks for your tips, let me check and fix it.
Thanks,
Yuanjie
> Konrad
^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH 00/12] drm/msm: Add support for Kaanapali
2025-10-23 7:53 [PATCH 00/12] drm/msm: Add support for Kaanapali yuanjie yang
` (6 preceding siblings ...)
2025-10-23 8:17 ` [PATCH 12/12] dt-bindings: display/msm: qcom,kaanapali-mdss: Add Kaanapali yuanjie yang
@ 2025-10-23 11:46 ` Dmitry Baryshkov
2025-10-24 2:32 ` yuanjiey
7 siblings, 1 reply; 77+ messages in thread
From: Dmitry Baryshkov @ 2025-10-23 11:46 UTC (permalink / raw)
To: yuanjie yang
Cc: robin.clark, lumag, abhinav.kumar, sean, marijn.suijten, airlied,
simona, maarten.lankhorst, mripard, tzimmermann, robh, krzk+dt,
conor+dt, quic_mkrishn, jonathan, quic_khsieh, neil.armstrong,
linux-arm-msm, dri-devel, freedreno, devicetree, linux-kernel,
tingwei.zhang, aiqun.yu, yongxing.mou
On Thu, Oct 23, 2025 at 03:53:49PM +0800, yuanjie yang wrote:
> From: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
>
> The Kaanapali MDSS has some differences compared to the SM8750 MDSS:
> - DSI PHY/DSI base address have some changes.
> - DPU 13.0:
> - SSPP layout has a great change.
> - interrupt INTF layout has some changes.
>
> This patchset contains DSI PHY, DSI Controller, DPU & MDSS bindings
> in addition to the driver changes.
>
> We have already tested the display functionality using the Kaanapali-mtp
> device on the Kaanapali branch of kernel-qcom repository.
> Test command: "modetest -r -v"
> kernel-qcom repository: https://git.codelinaro.org/clo/linux-kernel/kernel-qcom/-/tree/kaanapali
>
> Signed-off-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
> Signed-off-by: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
> ---
> Yuanjie Yang (12):
> drm/msm/dsi/phy: Add support for Kaanapali
> drm/msm/dpu: Add support for Kaanapali DPU
> drm/msm/dpu: Compatible with Kaanapali interrupt register
> drm/msm/mdss: Add support for Kaanapali
> drm/msm/dsi: Add support for Kaanapali
> drm/msm/dpu: Add Kaanapali SSPP sub-block support
> drm/panel: Set sufficient voltage for panel nt37801
> arm64: defconfig: Enable NT37801 DSI panel driver
> dt-bindings: display/msm: qcom,kaanapali-dpu: Add Kaanapali
> dt-bindings: display/msm: dsi-phy-7nm: Add Kaanapali DSi PHY
> dt-bindings: display/msm: dsi-controller-main: Add Kaanapali
> dt-bindings: display/msm: qcom,kaanapali-mdss: Add Kaanapali
The order is wrong:
- bindings
- driver changes
- DT changes
--
With best wishes
Dmitry
^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH 01/12] drm/msm/dsi/phy: Add support for Kaanapali
2025-10-23 7:53 ` [PATCH 01/12] drm/msm/dsi/phy: " yuanjie yang
@ 2025-10-23 11:48 ` Dmitry Baryshkov
2025-10-23 12:02 ` Konrad Dybcio
0 siblings, 1 reply; 77+ messages in thread
From: Dmitry Baryshkov @ 2025-10-23 11:48 UTC (permalink / raw)
To: yuanjie yang
Cc: robin.clark, lumag, abhinav.kumar, sean, marijn.suijten, airlied,
simona, maarten.lankhorst, mripard, tzimmermann, robh, krzk+dt,
conor+dt, quic_mkrishn, jonathan, quic_khsieh, neil.armstrong,
linux-arm-msm, dri-devel, freedreno, devicetree, linux-kernel,
tingwei.zhang, aiqun.yu, yongxing.mou
On Thu, Oct 23, 2025 at 03:53:50PM +0800, yuanjie yang wrote:
> From: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
>
> Add DSI PHY support for the Kaanapali platform.
>
> Signed-off-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
> Signed-off-by: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
> ---
> drivers/gpu/drm/msm/dsi/phy/dsi_phy.c | 2 ++
> drivers/gpu/drm/msm/dsi/phy/dsi_phy.h | 1 +
> drivers/gpu/drm/msm/dsi/phy/dsi_phy_7nm.c | 23 +++++++++++++++++++++++
> 3 files changed, 26 insertions(+)
>
> diff --git a/drivers/gpu/drm/msm/dsi/phy/dsi_phy.c b/drivers/gpu/drm/msm/dsi/phy/dsi_phy.c
> index 4ea681130dba..7937266de1d2 100644
> --- a/drivers/gpu/drm/msm/dsi/phy/dsi_phy.c
> +++ b/drivers/gpu/drm/msm/dsi/phy/dsi_phy.c
> @@ -577,6 +577,8 @@ static const struct of_device_id dsi_phy_dt_match[] = {
> .data = &dsi_phy_4nm_8650_cfgs },
> { .compatible = "qcom,sm8750-dsi-phy-3nm",
> .data = &dsi_phy_3nm_8750_cfgs },
> + { .compatible = "qcom,kaanapali-dsi-phy-3nm",
> + .data = &dsi_phy_3nm_kaanapali_cfgs },
> #endif
> {}
> };
> diff --git a/drivers/gpu/drm/msm/dsi/phy/dsi_phy.h b/drivers/gpu/drm/msm/dsi/phy/dsi_phy.h
> index e391505fdaf0..8df37ea50f92 100644
> --- a/drivers/gpu/drm/msm/dsi/phy/dsi_phy.h
> +++ b/drivers/gpu/drm/msm/dsi/phy/dsi_phy.h
> @@ -64,6 +64,7 @@ extern const struct msm_dsi_phy_cfg dsi_phy_5nm_sar2130p_cfgs;
> extern const struct msm_dsi_phy_cfg dsi_phy_4nm_8550_cfgs;
> extern const struct msm_dsi_phy_cfg dsi_phy_4nm_8650_cfgs;
> extern const struct msm_dsi_phy_cfg dsi_phy_3nm_8750_cfgs;
> +extern const struct msm_dsi_phy_cfg dsi_phy_3nm_kaanapali_cfgs;
>
> struct msm_dsi_dphy_timing {
> u32 clk_zero;
> diff --git a/drivers/gpu/drm/msm/dsi/phy/dsi_phy_7nm.c b/drivers/gpu/drm/msm/dsi/phy/dsi_phy_7nm.c
> index 32f06edd21a9..93e53fb8b4fa 100644
> --- a/drivers/gpu/drm/msm/dsi/phy/dsi_phy_7nm.c
> +++ b/drivers/gpu/drm/msm/dsi/phy/dsi_phy_7nm.c
> @@ -1518,3 +1518,26 @@ const struct msm_dsi_phy_cfg dsi_phy_3nm_8750_cfgs = {
> .num_dsi_phy = 2,
> .quirks = DSI_PHY_7NM_QUIRK_V7_0,
> };
> +
> +const struct msm_dsi_phy_cfg dsi_phy_3nm_kaanapali_cfgs = {
> + .has_phy_lane = true,
> + .regulator_data = dsi_phy_7nm_98000uA_regulators,
> + .num_regulators = ARRAY_SIZE(dsi_phy_7nm_98000uA_regulators),
> + .ops = {
> + .enable = dsi_7nm_phy_enable,
> + .disable = dsi_7nm_phy_disable,
> + .pll_init = dsi_pll_7nm_init,
> + .save_pll_state = dsi_7nm_pll_save_state,
> + .restore_pll_state = dsi_7nm_pll_restore_state,
> + .set_continuous_clock = dsi_7nm_set_continuous_clock,
> + },
> + .min_pll_rate = 600000000UL,
> +#ifdef CONFIG_64BIT
> + .max_pll_rate = 5000000000UL,
> +#else
> + .max_pll_rate = ULONG_MAX,
> +#endif
> + .io_start = { 0x9ac1000, 0xae97000 },
These two addresses are very strange. Would you care to explain? Other
than that there is no difference from SM8750 entry.
> + .num_dsi_phy = 2,
> + .quirks = DSI_PHY_7NM_QUIRK_V7_0,
> +};
> --
> 2.34.1
>
--
With best wishes
Dmitry
^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH 02/12] drm/msm/dpu: Add support for Kaanapali DPU
2025-10-23 7:53 ` [PATCH 02/12] drm/msm/dpu: Add support for Kaanapali DPU yuanjie yang
@ 2025-10-23 11:56 ` Dmitry Baryshkov
2025-10-24 2:53 ` yuanjiey
0 siblings, 1 reply; 77+ messages in thread
From: Dmitry Baryshkov @ 2025-10-23 11:56 UTC (permalink / raw)
To: yuanjie yang
Cc: robin.clark, lumag, abhinav.kumar, sean, marijn.suijten, airlied,
simona, maarten.lankhorst, mripard, tzimmermann, robh, krzk+dt,
conor+dt, quic_mkrishn, jonathan, quic_khsieh, neil.armstrong,
linux-arm-msm, dri-devel, freedreno, devicetree, linux-kernel,
tingwei.zhang, aiqun.yu, yongxing.mou
On Thu, Oct 23, 2025 at 03:53:51PM +0800, yuanjie yang wrote:
> From: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
>
> Add support for Display Processing Unit (DPU) version 13.0
> on the Kaanapali platform. This version introduces changes
> to the SSPP sub-block structure. Add common block and rectangle
> blocks to accommodate these structural modifications for compatibility.
This needs to come up differently: first implement driver changes for
the changed SSPP blocks, then add Kaananapali catalog entries.
>
> Signed-off-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
> Signed-off-by: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
> ---
> .../disp/dpu1/catalog/dpu_13_0_kaanapali.h | 492 ++++++++++++++++++
> .../gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c | 44 ++
> .../gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h | 29 +-
> drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c | 1 +
> 4 files changed, 565 insertions(+), 1 deletion(-)
> create mode 100644 drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_13_0_kaanapali.h
>
> +
> +static const struct dpu_cwb_cfg kaanapali_cwb[] = {
> + {
> + .name = "cwb_0", .id = CWB_0,
> + .base = 0x169200, .len = 0x20,
> + },
> + {
> + .name = "cwb_1", .id = CWB_1,
> + .base = 0x169600, .len = 0x20,
> + },
> + {
> + .name = "cwb_2", .id = CWB_2,
> + .base = 0x16A200, .len = 0x20,
> + },
> + {
> + .name = "cwb_3", .id = CWB_3,
> + .base = 0x16A600, .len = 0x20,
lowercase hex
> + },
> +};
> +
> 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 6641455c4ec6..5a24ed0f818c 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
> @@ -241,6 +241,25 @@ static const u32 wb2_formats_rgb_yuv[] = {
> .rotation_cfg = NULL, \
> }
>
> +/* kaanapali SSPP common configuration */
> +#define _KAANAPALI_VIG_SBLK(scaler_ver) \
And then it gets reused for some other platform... No. Please come up
with a generic enough name.
> + { \
> + .cmn_blk = {.name = "cmn_blk", \
> + .base = 0, .len = 0x100,}, \
No, sblks shouldn't have .base set to 0. It's the main block.
> + .sspp_rec0_blk = {.name = "sspp_rec0", \
> + .base = 0x1000, .len = 0x180,}, \
> + .csc_blk = {.name = "csc", \
> + .base = 0x1800, .len = 0x100,}, \
> + .scaler_blk = {.name = "scaler", \
> + .version = scaler_ver, \
> + .base = 0x2000, .len = 0xec,}, \
> + .sspp_rec1_blk = {.name = "sspp_rec1", \
> + .base = 0x3000, .len = 0x180,}, \
> + .format_list = plane_formats_yuv, \
> + .num_formats = ARRAY_SIZE(plane_formats_yuv), \
> + .rotation_cfg = NULL, \
> + }
> +
> #define _VIG_SBLK_ROT(scaler_ver, rot_cfg) \
> { \
> .scaler_blk = {.name = "scaler", \
> @@ -329,6 +348,9 @@ static const struct dpu_sspp_sub_blks dpu_vig_sblk_qseed3_3_3 =
> static const struct dpu_sspp_sub_blks dpu_vig_sblk_qseed3_3_4 =
> _VIG_SBLK(SSPP_SCALER_VER(3, 4));
>
> +static const struct dpu_sspp_sub_blks dpu_vig_sblk_qseed3_3_5 =
> + _KAANAPALI_VIG_SBLK(SSPP_SCALER_VER(3, 5));
> +
> static const struct dpu_sspp_sub_blks dpu_rgb_sblk = _RGB_SBLK();
>
> static const struct dpu_sspp_sub_blks dpu_dma_sblk = _DMA_SBLK();
> @@ -412,6 +434,11 @@ static const struct dpu_pingpong_sub_blks sc7280_pp_sblk = {
> .len = 0x20, .version = 0x20000},
> };
>
> +static const struct dpu_pingpong_sub_blks kaanapali_pp_sblk = {
> + .dither = {.name = "dither", .base = 0xc0,
> + .len = 0x40, .version = 0x30000},
> +};
> +
> /*************************************************************
> * DSC sub blocks config
> *************************************************************/
> @@ -452,6 +479,13 @@ static const struct dpu_cdm_cfg dpu_cdm_5_x = {
> .base = 0x79200,
> };
>
> +static const struct dpu_cdm_cfg dpu_cdm_kaanapali_x = {
13_x
> + .name = "cdm_0",
> + .id = CDM_0,
> + .len = 0x240,
> + .base = 0x19e000,
> +};
> +
> /*************************************************************
> * VBIF sub blocks config
> *************************************************************/
> @@ -639,6 +673,10 @@ static const struct dpu_qos_lut_entry sc7180_qos_linear[] = {
> {.fl = 0, .lut = 0x0011222222335777},
> };
>
> +static const struct dpu_qos_lut_entry kaanapali_qos_linear[] = {
> + {.fl = 0, .lut = 0x0011223344556666},
> +};
> +
> static const struct dpu_qos_lut_entry sm6350_qos_linear_macrotile[] = {
> {.fl = 0, .lut = 0x0011223445566777 },
> };
> @@ -668,6 +706,10 @@ static const struct dpu_qos_lut_entry sc7180_qos_macrotile[] = {
> {.fl = 0, .lut = 0x0011223344556677},
> };
>
> +static const struct dpu_qos_lut_entry kaanapali_qos_macrotile[] = {
> + {.fl = 0, .lut = 0x0011223344556666},
> +};
> +
> static const struct dpu_qos_lut_entry sc8180x_qos_macrotile[] = {
> {.fl = 10, .lut = 0x0000000344556677},
> };
> @@ -726,3 +768,5 @@ static const struct dpu_qos_lut_entry sc7180_qos_nrt[] = {
>
> #include "catalog/dpu_10_0_sm8650.h"
> #include "catalog/dpu_12_0_sm8750.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 f0768f54e9b3..99c81c24630f 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h
> @@ -208,6 +208,30 @@ struct dpu_dsc_blk {
> u32 len;
> };
>
> +/**
> + * struct dpu_sspp_rec_blk - sspp rec sub-blk information
SSPP, REC
> + * @name: string name for debug purposes
> + * @base: offset of this sub-block relative to the block offset
> + * @len: register block length of this sub-block
> + */
> +struct dpu_sspp_rec_blk {
> + char name[DPU_HW_BLK_NAME_LEN];
> + u32 base;
> + u32 len;
> +};
> +
> +/**
> + * struct dpu_sspp_cmn_blk - sspp common sub-blk information
> + * @name: string name for debug purposes
> + * @base: offset of this sub-block relative to the block offset
> + * @len: register block length of this sub-block
> + */
> +struct dpu_sspp_cmn_blk {
> + char name[DPU_HW_BLK_NAME_LEN];
> + u32 base;
> + u32 len;
> +};
> +
> /**
> * enum dpu_qos_lut_usage - define QoS LUT use cases
> */
> @@ -294,7 +318,9 @@ struct dpu_sspp_sub_blks {
> u32 qseed_ver;
> struct dpu_scaler_blk scaler_blk;
> struct dpu_pp_blk csc_blk;
> -
> + struct dpu_sspp_cmn_blk cmn_blk;
> + struct dpu_sspp_rec_blk sspp_rec0_blk;
> + struct dpu_sspp_rec_blk sspp_rec1_blk;
> const u32 *format_list;
> u32 num_formats;
> const struct dpu_rotation_cfg *rotation_cfg;
> @@ -778,6 +804,7 @@ extern const struct dpu_mdss_cfg dpu_sa8775p_cfg;
> extern const struct dpu_mdss_cfg dpu_sm8550_cfg;
> extern const struct dpu_mdss_cfg dpu_sm8650_cfg;
> extern const struct dpu_mdss_cfg dpu_sm8750_cfg;
> +extern const struct dpu_mdss_cfg dpu_kaanapali_cfg;
> extern const struct dpu_mdss_cfg dpu_x1e80100_cfg;
>
> #endif /* _DPU_HW_CATALOG_H */
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
> index 4e5a8ecd31f7..15bec44324d5 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
> @@ -1505,6 +1505,7 @@ static const struct dev_pm_ops dpu_pm_ops = {
> };
>
> static const struct of_device_id dpu_dt_match[] = {
> + { .compatible = "qcom,kaanapali-dpu", .data = &dpu_kaanapali_cfg, },
> { .compatible = "qcom,msm8917-mdp5", .data = &dpu_msm8917_cfg, },
> { .compatible = "qcom,msm8937-mdp5", .data = &dpu_msm8937_cfg, },
> { .compatible = "qcom,msm8953-mdp5", .data = &dpu_msm8953_cfg, },
> --
> 2.34.1
>
--
With best wishes
Dmitry
^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH 03/12] drm/msm/dpu: Compatible with Kaanapali interrupt register
2025-10-23 7:53 ` [PATCH 03/12] drm/msm/dpu: Compatible with Kaanapali interrupt register yuanjie yang
@ 2025-10-23 11:59 ` Dmitry Baryshkov
2025-10-24 2:59 ` yuanjiey
2025-10-28 6:07 ` Jessica Zhang
1 sibling, 1 reply; 77+ messages in thread
From: Dmitry Baryshkov @ 2025-10-23 11:59 UTC (permalink / raw)
To: yuanjie yang
Cc: robin.clark, lumag, abhinav.kumar, sean, marijn.suijten, airlied,
simona, maarten.lankhorst, mripard, tzimmermann, robh, krzk+dt,
conor+dt, quic_mkrishn, jonathan, quic_khsieh, neil.armstrong,
linux-arm-msm, dri-devel, freedreno, devicetree, linux-kernel,
tingwei.zhang, aiqun.yu, yongxing.mou
On Thu, Oct 23, 2025 at 03:53:52PM +0800, yuanjie yang wrote:
> From: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
>
> DPU version 13 introduces changes to the interrupt register
> layout. Update the driver to support these modifications for
> proper interrupt handling.
So... Previous patch enabled support for the platform and it has been
using wrong registers for interrupts? I think that's broken.
>
> Signed-off-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
> Signed-off-by: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
> ---
> .../gpu/drm/msm/disp/dpu1/dpu_hw_interrupts.c | 89 ++++++++++++++++++-
> 1 file changed, 88 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_interrupts.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_interrupts.c
> index 49bd77a755aa..8d265581f6ec 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_interrupts.c
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_interrupts.c
> @@ -40,6 +40,15 @@
> #define MDP_INTF_REV_7xxx_INTR_TEAR_STATUS(intf) (MDP_INTF_REV_7xxx_TEAR_OFF(intf) + 0x004)
> #define MDP_INTF_REV_7xxx_INTR_TEAR_CLEAR(intf) (MDP_INTF_REV_7xxx_TEAR_OFF(intf) + 0x008)
>
> +#define MDP_INTF_REV_13xx_OFF(intf) (0x18D000 + 0x1000 * (intf))
Lowercase hex
> +#define MDP_INTF_REV_13xx_INTR_EN(intf) (MDP_INTF_REV_13xx_OFF(intf) + 0x1c0)
> +#define MDP_INTF_REV_13xx_INTR_STATUS(intf) (MDP_INTF_REV_13xx_OFF(intf) + 0x1c4)
> +#define MDP_INTF_REV_13xx_INTR_CLEAR(intf) (MDP_INTF_REV_13xx_OFF(intf) + 0x1c8)
> +#define MDP_INTF_REV_13xx_TEAR_OFF(intf) (0x18D800 + 0x1000 * (intf))
> +#define MDP_INTF_REV_13xx_INTR_TEAR_EN(intf) (MDP_INTF_REV_13xx_TEAR_OFF(intf) + 0x000)
> +#define MDP_INTF_REV_13xx_INTR_TEAR_STATUS(intf) (MDP_INTF_REV_13xx_TEAR_OFF(intf) + 0x004)
> +#define MDP_INTF_REV_13xx_INTR_TEAR_CLEAR(intf) (MDP_INTF_REV_13xx_TEAR_OFF(intf) + 0x008)
> +
> /**
> * struct dpu_intr_reg - array of DPU register sets
> * @clr_off: offset to CLEAR reg
--
With best wishes
Dmitry
^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH 04/12] drm/msm/mdss: Add support for Kaanapali
2025-10-23 7:53 ` [PATCH 04/12] drm/msm/mdss: Add support for Kaanapali yuanjie yang
@ 2025-10-23 12:01 ` Dmitry Baryshkov
2025-10-24 3:05 ` yuanjiey
0 siblings, 1 reply; 77+ messages in thread
From: Dmitry Baryshkov @ 2025-10-23 12:01 UTC (permalink / raw)
To: yuanjie yang
Cc: robin.clark, lumag, abhinav.kumar, sean, marijn.suijten, airlied,
simona, maarten.lankhorst, mripard, tzimmermann, robh, krzk+dt,
conor+dt, quic_mkrishn, jonathan, quic_khsieh, neil.armstrong,
linux-arm-msm, dri-devel, freedreno, devicetree, linux-kernel,
tingwei.zhang, aiqun.yu, yongxing.mou
On Thu, Oct 23, 2025 at 03:53:53PM +0800, yuanjie yang wrote:
> From: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
>
> Add mdss support for the Qualcomm Kaanapali platform.
>
> Signed-off-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
> Signed-off-by: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
> ---
> drivers/gpu/drm/msm/msm_mdss.c | 22 ++++++++++++++++++++++
> include/linux/soc/qcom/ubwc.h | 1 +
> 2 files changed, 23 insertions(+)
Where can I find the UBWC config for Kaanapali?
>
> diff --git a/drivers/gpu/drm/msm/msm_mdss.c b/drivers/gpu/drm/msm/msm_mdss.c
> index 2d0e3e784c04..665751d2b999 100644
> --- a/drivers/gpu/drm/msm/msm_mdss.c
> +++ b/drivers/gpu/drm/msm/msm_mdss.c
> @@ -243,6 +243,24 @@ static void msm_mdss_setup_ubwc_dec_50(struct msm_mdss *msm_mdss)
> writel_relaxed(1, msm_mdss->mmio + REG_MDSS_UBWC_PREDICTION_MODE);
> }
>
> +static void msm_mdss_setup_ubwc_dec_60(struct msm_mdss *msm_mdss)
> +{
> + const struct qcom_ubwc_cfg_data *data = msm_mdss->mdss_data;
> + u32 value = MDSS_UBWC_STATIC_UBWC_SWIZZLE(data->ubwc_swizzle) |
> + MDSS_UBWC_STATIC_HIGHEST_BANK_BIT(data->highest_bank_bit);
> +
> + if (data->ubwc_bank_spread)
> + value |= MDSS_UBWC_STATIC_UBWC_BANK_SPREAD;
> +
> + if (data->macrotile_mode)
> + value |= MDSS_UBWC_STATIC_MACROTILE_MODE;
> +
> + writel_relaxed(value, msm_mdss->mmio + REG_MDSS_UBWC_STATIC);
> +
> + writel_relaxed(5, msm_mdss->mmio + REG_MDSS_UBWC_CTRL_2);
> + writel_relaxed(1, msm_mdss->mmio + REG_MDSS_UBWC_PREDICTION_MODE);
> +}
> +
> static int msm_mdss_enable(struct msm_mdss *msm_mdss)
> {
> int ret, i;
> @@ -296,6 +314,9 @@ static int msm_mdss_enable(struct msm_mdss *msm_mdss)
> case UBWC_5_0:
> msm_mdss_setup_ubwc_dec_50(msm_mdss);
> break;
> + case UBWC_6_0:
> + msm_mdss_setup_ubwc_dec_60(msm_mdss);
> + break;
> default:
> dev_err(msm_mdss->dev, "Unsupported UBWC decoder version %x\n",
> msm_mdss->mdss_data->ubwc_dec_version);
> @@ -552,6 +573,7 @@ static const struct msm_mdss_data data_153k6 = {
> };
>
> static const struct of_device_id mdss_dt_match[] = {
> + { .compatible = "qcom,kaanapali-mdss", .data = &data_57k },
> { .compatible = "qcom,mdss", .data = &data_153k6 },
> { .compatible = "qcom,msm8998-mdss", .data = &data_76k8 },
> { .compatible = "qcom,qcm2290-mdss", .data = &data_76k8 },
> diff --git a/include/linux/soc/qcom/ubwc.h b/include/linux/soc/qcom/ubwc.h
> index 1ed8b1b16bc9..0a4edfe3d96d 100644
> --- a/include/linux/soc/qcom/ubwc.h
> +++ b/include/linux/soc/qcom/ubwc.h
> @@ -52,6 +52,7 @@ struct qcom_ubwc_cfg_data {
> #define UBWC_4_0 0x40000000
> #define UBWC_4_3 0x40030000
> #define UBWC_5_0 0x50000000
> +#define UBWC_6_0 0x60000000
This should be tied with the ubwc config changes as this chunk goes into
a different subsystem.
>
> #if IS_ENABLED(CONFIG_QCOM_UBWC_CONFIG)
> const struct qcom_ubwc_cfg_data *qcom_ubwc_config_get_data(void);
> --
> 2.34.1
>
--
With best wishes
Dmitry
^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH 05/12] drm/msm/dsi: Add support for Kaanapali
2025-10-23 7:53 ` [PATCH 05/12] drm/msm/dsi: " yuanjie yang
@ 2025-10-23 12:01 ` Dmitry Baryshkov
0 siblings, 0 replies; 77+ messages in thread
From: Dmitry Baryshkov @ 2025-10-23 12:01 UTC (permalink / raw)
To: yuanjie yang
Cc: robin.clark, lumag, abhinav.kumar, sean, marijn.suijten, airlied,
simona, maarten.lankhorst, mripard, tzimmermann, robh, krzk+dt,
conor+dt, quic_mkrishn, jonathan, quic_khsieh, neil.armstrong,
linux-arm-msm, dri-devel, freedreno, devicetree, linux-kernel,
tingwei.zhang, aiqun.yu, yongxing.mou
On Thu, Oct 23, 2025 at 03:53:54PM +0800, yuanjie yang wrote:
> From: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
>
> Add DSI Controller version 2.10.0 support for DSI on Qualcomm
> Kaanapali SoC.
>
> Signed-off-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
> Signed-off-by: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
> ---
> drivers/gpu/drm/msm/dsi/dsi_cfg.c | 13 +++++++++++++
> drivers/gpu/drm/msm/dsi/dsi_cfg.h | 1 +
> 2 files changed, 14 insertions(+)
>
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
--
With best wishes
Dmitry
^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH 01/12] drm/msm/dsi/phy: Add support for Kaanapali
2025-10-23 11:48 ` Dmitry Baryshkov
@ 2025-10-23 12:02 ` Konrad Dybcio
2025-10-24 3:27 ` yuanjiey
0 siblings, 1 reply; 77+ messages in thread
From: Konrad Dybcio @ 2025-10-23 12:02 UTC (permalink / raw)
To: Dmitry Baryshkov, yuanjie yang
Cc: robin.clark, lumag, abhinav.kumar, sean, marijn.suijten, airlied,
simona, maarten.lankhorst, mripard, tzimmermann, robh, krzk+dt,
conor+dt, quic_mkrishn, jonathan, quic_khsieh, neil.armstrong,
linux-arm-msm, dri-devel, freedreno, devicetree, linux-kernel,
tingwei.zhang, aiqun.yu, yongxing.mou
On 10/23/25 1:48 PM, Dmitry Baryshkov wrote:
> On Thu, Oct 23, 2025 at 03:53:50PM +0800, yuanjie yang wrote:
>> From: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
>>
>> Add DSI PHY support for the Kaanapali platform.
>>
>> Signed-off-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
>> Signed-off-by: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
>> ---
[...]
>> + .io_start = { 0x9ac1000, 0xae97000 },
>
> These two addresses are very strange. Would you care to explain? Other
> than that there is no difference from SM8750 entry.
They're correct.
Although they correspond to DSI_0 and DSI_2..
Yuanjie, none of the DSI patches mention that v2.10.0 is packed with
new features. Please provide some more context and how that impacts
the hw description.
Konrad
^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH 06/12] drm/msm/dpu: Add Kaanapali SSPP sub-block support
2025-10-23 8:06 ` [PATCH 06/12] drm/msm/dpu: Add Kaanapali SSPP sub-block support yuanjie yang
` (4 preceding siblings ...)
2025-10-23 8:06 ` [PATCH 11/12] dt-bindings: display/msm: dsi-controller-main: Add Kaanapali yuanjie yang
@ 2025-10-23 12:14 ` Dmitry Baryshkov
2025-10-24 5:49 ` yuanjiey
5 siblings, 1 reply; 77+ messages in thread
From: Dmitry Baryshkov @ 2025-10-23 12:14 UTC (permalink / raw)
To: yuanjie yang
Cc: robin.clark, lumag, abhinav.kumar, sean, marijn.suijten, airlied,
simona, maarten.lankhorst, mripard, tzimmermann, robh, krzk+dt,
conor+dt, quic_mkrishn, jonathan, quic_khsieh, neil.armstrong,
linux-arm-msm, dri-devel, freedreno, devicetree, linux-kernel,
tingwei.zhang, aiqun.yu, yongxing.mou
On Thu, Oct 23, 2025 at 04:06:03PM +0800, yuanjie yang wrote:
> From: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
>
> Add support for Kaanapali platform SSPP sub-blocks, which
> introduce structural changes including register additions,
> removals, and relocations. Add the new common and rectangle
> blocks, and update register definitions and handling to
> ensure compatibility with DPU v13.0.
Merge new structures into this patch.
>
> Signed-off-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
> Signed-off-by: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
> ---
> drivers/gpu/drm/msm/disp/dpu1/dpu_hw_sspp.c | 474 +++++++++++++++++++-
> drivers/gpu/drm/msm/disp/dpu1/dpu_hw_util.c | 23 +
> drivers/gpu/drm/msm/disp/dpu1/dpu_hw_util.h | 4 +
> 3 files changed, 483 insertions(+), 18 deletions(-)
>
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_sspp.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_sspp.c
> index 6f1fc790ad6d..7217c952f01c 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_sspp.c
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_sspp.c
> @@ -17,6 +17,7 @@
>
> #define DPU_FETCH_CONFIG_RESET_VALUE 0x00000087
>
> +/* <= v12 DPU */
> /* SSPP registers */
> #define SSPP_SRC_SIZE 0x00
> #define SSPP_SRC_XY 0x08
> @@ -74,12 +75,116 @@
> #define SSPP_EXCL_REC_XY 0x1B8
> #define SSPP_CLK_CTRL 0x330
>
> +/* >= v13 DPU */
> +/* CMN Registers -> Source Surface Processing Pipe Common SSPP registers */
> +/* Name Offset */
> +#define SSPP_CMN_CLK_CTRL 0x0
> +#define SSPP_CMN_CLK_STATUS 0x4
> +#define SSPP_CMN_MULTI_REC_OP_MODE 0x10
> +#define SSPP_CMN_ADDR_CONFIG 0x14
> +#define SSPP_CMN_CAC_CTRL 0x20
> +#define SSPP_CMN_SYS_CACHE_MODE 0x24
> +#define SSPP_CMN_QOS_CTRL 0x28
> +#define SSPP_CMN_DANGER_LUT 0x2C
> +#define SSPP_CMN_SAFE_LUT 0x30
lowercase hex.
> @@ -141,6 +246,12 @@
> /* traffic shaper clock in Hz */
> #define TS_CLK 19200000
>
> +static inline u32 _sspp_calculate_rect_off(enum dpu_sspp_multirect_index rect_index,
> + struct dpu_hw_sspp *ctx)
> +{
> + return (rect_index == DPU_SSPP_RECT_SOLO || rect_index == DPU_SSPP_RECT_0) ?
> + ctx->cap->sblk->sspp_rec0_blk.base : ctx->cap->sblk->sspp_rec1_blk.base;
> +}
>
> static void dpu_hw_sspp_setup_multirect(struct dpu_sw_pipe *pipe)
> {
> @@ -169,6 +280,34 @@ static void dpu_hw_sspp_setup_multirect(struct dpu_sw_pipe *pipe)
> DPU_REG_WRITE(&ctx->hw, SSPP_MULTIRECT_OPMODE, mode_mask);
> }
>
> +static void dpu_hw_sspp_setup_multirect_v13(struct dpu_sw_pipe *pipe)
> +{
> + struct dpu_hw_sspp *ctx = pipe->sspp;
> + u32 offset = ctx->cap->sblk->cmn_blk.base;
> + u32 mode_mask;
> +
> + if (!ctx)
> + return;
> +
> + if (pipe->multirect_index == DPU_SSPP_RECT_SOLO) {
> + /**
> + * if rect index is RECT_SOLO, we cannot expect a
> + * virtual plane sharing the same SSPP id. So we go
> + * and disable multirect
> + */
> + mode_mask = 0;
> + } else {
> + mode_mask = DPU_REG_READ(&ctx->hw, offset + SSPP_CMN_MULTI_REC_OP_MODE);
> + mode_mask |= pipe->multirect_index;
> + if (pipe->multirect_mode == DPU_SSPP_MULTIRECT_TIME_MX)
> + mode_mask |= BIT(2);
> + else
> + mode_mask &= ~BIT(2);
> + }
> +
> + DPU_REG_WRITE(&ctx->hw, offset + SSPP_CMN_MULTI_REC_OP_MODE, mode_mask);
> +}
> +
> static void _sspp_setup_opmode(struct dpu_hw_sspp *ctx,
> u32 mask, u8 en)
> {
> @@ -328,6 +467,119 @@ static void dpu_hw_sspp_setup_format(struct dpu_sw_pipe *pipe,
> DPU_REG_WRITE(c, SSPP_UBWC_ERROR_STATUS, BIT(31));
> }
>
> +static void dpu_hw_sspp_setup_format_v13(struct dpu_sw_pipe *pipe,
> + const struct msm_format *fmt, u32 flags)
> +{
> + struct dpu_hw_sspp *ctx = pipe->sspp;
> + struct dpu_hw_blk_reg_map *c;
> + u32 chroma_samp, unpack, src_format;
> + u32 opmode = 0;
> + u32 fast_clear = 0;
> + u32 offset;
> +
> + if (!ctx || !fmt)
> + return;
> +
> + offset = _sspp_calculate_rect_off(pipe->multirect_index, ctx);
> +
> + c = &ctx->hw;
> +
> + opmode = DPU_REG_READ(c, offset + SSPP_REC_SRC_OP_MODE);
> + opmode &= ~(MDSS_MDP_OP_FLIP_LR | MDSS_MDP_OP_FLIP_UD |
> + MDSS_MDP_OP_BWC_EN | MDSS_MDP_OP_PE_OVERRIDE
> + | MDSS_MDP_OP_ROT_90);
> +
> + if (flags & DPU_SSPP_FLIP_LR)
> + opmode |= MDSS_MDP_OP_FLIP_LR;
> + if (flags & DPU_SSPP_FLIP_UD)
> + opmode |= MDSS_MDP_OP_FLIP_UD;
> + if (flags & DPU_SSPP_ROT_90)
> + opmode |= MDSS_MDP_OP_ROT_90;
> +
> + chroma_samp = fmt->chroma_sample;
> + if (flags & DPU_SSPP_SOURCE_ROTATED_90) {
> + if (chroma_samp == CHROMA_H2V1)
> + chroma_samp = CHROMA_H1V2;
> + else if (chroma_samp == CHROMA_H1V2)
> + chroma_samp = CHROMA_H2V1;
> + }
> +
> + src_format = (chroma_samp << 23) | (fmt->fetch_type << 19) |
> + (fmt->bpc_a << 6) | (fmt->bpc_r_cr << 4) |
> + (fmt->bpc_b_cb << 2) | (fmt->bpc_g_y << 0);
> +
> + if (flags & DPU_SSPP_ROT_90)
> + src_format |= BIT(11); /* ROT90 */
> +
> + if (fmt->alpha_enable && fmt->fetch_type == MDP_PLANE_INTERLEAVED)
> + src_format |= BIT(8); /* SRCC3_EN */
> +
> + if (flags & DPU_SSPP_SOLID_FILL)
> + src_format |= BIT(22);
> +
> + unpack = (fmt->element[3] << 24) | (fmt->element[2] << 16) |
> + (fmt->element[1] << 8) | (fmt->element[0] << 0);
> + src_format |= ((fmt->unpack_count - 1) << 12) |
> + ((fmt->flags & MSM_FORMAT_FLAG_UNPACK_TIGHT ? 1 : 0) << 17) |
> + ((fmt->flags & MSM_FORMAT_FLAG_UNPACK_ALIGN_MSB ? 1 : 0) << 18) |
> + ((fmt->bpp - 1) << 9);
> +
> + if (fmt->fetch_mode != MDP_FETCH_LINEAR) {
> + if (MSM_FORMAT_IS_UBWC(fmt))
> + opmode |= MDSS_MDP_OP_BWC_EN;
> + src_format |= (fmt->fetch_mode & 3) << 30; /*FRAME_FORMAT */
> + switch (ctx->ubwc->ubwc_enc_version) {
> + case UBWC_1_0:
> + fast_clear = fmt->alpha_enable ? BIT(31) : 0;
> + DPU_REG_WRITE(c, offset + SSPP_REC_UBWC_STATIC_CTRL,
> + fast_clear | (ctx->ubwc->ubwc_swizzle & 0x1) |
> + BIT(8) |
> + (ctx->ubwc->highest_bank_bit << 4));
> + break;
> + case UBWC_2_0:
> + fast_clear = fmt->alpha_enable ? BIT(31) : 0;
> + DPU_REG_WRITE(c, offset + SSPP_REC_UBWC_STATIC_CTRL,
> + fast_clear | (ctx->ubwc->ubwc_swizzle) |
> + (ctx->ubwc->highest_bank_bit << 4));
> + break;
> + case UBWC_3_0:
> + DPU_REG_WRITE(c, offset + SSPP_REC_UBWC_STATIC_CTRL,
> + BIT(30) | (ctx->ubwc->ubwc_swizzle) |
> + (ctx->ubwc->highest_bank_bit << 4));
> + break;
> + case UBWC_4_0:
> + DPU_REG_WRITE(c, offset + SSPP_REC_UBWC_STATIC_CTRL,
> + MSM_FORMAT_IS_YUV(fmt) ? 0 : BIT(30));
> + break;
> + }
> + }
> +
> + opmode |= MDSS_MDP_OP_PE_OVERRIDE;
> +
> + /* if this is YUV pixel format, enable CSC */
> + if (MSM_FORMAT_IS_YUV(fmt))
> + src_format |= BIT(15);
> +
> + if (MSM_FORMAT_IS_DX(fmt))
> + src_format |= BIT(14);
> +
> + /* update scaler opmode, if appropriate */
> + if (test_bit(DPU_SSPP_CSC, &ctx->cap->features))
> + _sspp_setup_opmode(ctx, VIG_OP_CSC_EN | VIG_OP_CSC_SRC_DATAFMT,
> + MSM_FORMAT_IS_YUV(fmt));
> + else if (test_bit(DPU_SSPP_CSC_10BIT, &ctx->cap->features))
> + _sspp_setup_csc10_opmode(ctx,
> + VIG_CSC_10_EN | VIG_CSC_10_SRC_DATAFMT,
> + MSM_FORMAT_IS_YUV(fmt));
This function is a nice c&p of the old one. Can we abstract it at least
a bit and let it be shared between the old code and the new one?
> +
> + DPU_REG_WRITE(c, offset + SSPP_REC_SRC_FORMAT, src_format);
> + DPU_REG_WRITE(c, offset + SSPP_REC_SRC_UNPACK_PATTERN, unpack);
> + DPU_REG_WRITE(c, offset + SSPP_REC_SRC_OP_MODE, opmode);
> +
> + /* clear previous UBWC error */
> + DPU_REG_WRITE(c, offset + SSPP_REC_UBWC_ERROR_STATUS, BIT(31));
> +}
> +
> static void dpu_hw_sspp_setup_pe_config(struct dpu_hw_sspp *ctx,
> struct dpu_hw_pixel_ext *pe_ext)
> {
> @@ -385,6 +637,53 @@ static void dpu_hw_sspp_setup_pe_config(struct dpu_hw_sspp *ctx,
> tot_req_pixels[3]);
> }
>
> +static void dpu_hw_sspp_setup_pe_config_v13(struct dpu_hw_sspp *ctx,
> + struct dpu_hw_pixel_ext *pe_ext)
> +{
> + struct dpu_hw_blk_reg_map *c;
> + u8 color;
> + u32 lr_pe[4], tb_pe[4], tot_req_pixels[4];
> + const u32 bytemask = 0xff;
> + const u32 shortmask = 0xffff;
> + u32 offset = ctx->cap->sblk->sspp_rec0_blk.base;
> +
> + if (!ctx || !pe_ext)
> + return;
> +
> + c = &ctx->hw;
> + /* program SW pixel extension override for all pipes*/
> + for (color = 0; color < DPU_MAX_PLANES; color++) {
> + /* color 2 has the same set of registers as color 1 */
> + if (color == 2)
> + continue;
> +
> + lr_pe[color] = ((pe_ext->right_ftch[color] & bytemask) << 24) |
> + ((pe_ext->right_rpt[color] & bytemask) << 16) |
> + ((pe_ext->left_ftch[color] & bytemask) << 8) |
> + (pe_ext->left_rpt[color] & bytemask);
> +
> + tb_pe[color] = ((pe_ext->btm_ftch[color] & bytemask) << 24) |
> + ((pe_ext->btm_rpt[color] & bytemask) << 16) |
> + ((pe_ext->top_ftch[color] & bytemask) << 8) |
> + (pe_ext->top_rpt[color] & bytemask);
> +
> + tot_req_pixels[color] = (((pe_ext->roi_h[color] +
> + pe_ext->num_ext_pxls_top[color] +
> + pe_ext->num_ext_pxls_btm[color]) & shortmask) << 16) |
> + ((pe_ext->roi_w[color] +
> + pe_ext->num_ext_pxls_left[color] +
> + pe_ext->num_ext_pxls_right[color]) & shortmask);
> + }
Same comment. No C&P, of a sensible code, please.
> +
> + /* color 0 */
> + DPU_REG_WRITE(c, SSPP_REC_SW_PIX_EXT_LR + offset, lr_pe[0]);
> + DPU_REG_WRITE(c, SSPP_REC_SW_PIX_EXT_TB + offset, tb_pe[0]);
> +
> + /* color 1 and color 2 */
> + DPU_REG_WRITE(c, SSPP_REC_SW_PIX_EXT_LR_ODX + offset, lr_pe[1]);
> + DPU_REG_WRITE(c, SSPP_REC_SW_PIX_EXT_TB_ODX + offset, tb_pe[1]);
> +}
> +
> static void _dpu_hw_sspp_setup_scaler3(struct dpu_hw_sspp *ctx,
> struct dpu_hw_scaler3_cfg *scaler3_cfg,
> const struct msm_format *format)
> @@ -443,6 +742,36 @@ static void dpu_hw_sspp_setup_rects(struct dpu_sw_pipe *pipe,
> DPU_REG_WRITE(c, out_xy_off, dst_xy);
> }
>
> +static void dpu_hw_sspp_setup_rects_v13(struct dpu_sw_pipe *pipe,
> + struct dpu_sw_pipe_cfg *cfg)
> +{
> + struct dpu_hw_sspp *ctx = pipe->sspp;
> + struct dpu_hw_blk_reg_map *c;
> + u32 src_size, src_xy, dst_size, dst_xy;
> + u32 offset;
> +
> + if (!ctx || !cfg)
> + return;
> +
> + c = &ctx->hw;
> +
> + offset = _sspp_calculate_rect_off(pipe->multirect_index, ctx);
> +
> + /* src and dest rect programming */
> + src_xy = (cfg->src_rect.y1 << 16) | cfg->src_rect.x1;
> + src_size = (drm_rect_height(&cfg->src_rect) << 16) |
> + drm_rect_width(&cfg->src_rect);
> + dst_xy = (cfg->dst_rect.y1 << 16) | cfg->dst_rect.x1;
> + dst_size = (drm_rect_height(&cfg->dst_rect) << 16) |
> + drm_rect_width(&cfg->dst_rect);
> +
> + /* rectangle register programming */
> + DPU_REG_WRITE(c, offset + SSPP_REC_SRC_SIZE, src_size);
> + DPU_REG_WRITE(c, offset + SSPP_REC_SRC_XY, src_xy);
> + DPU_REG_WRITE(c, offset + SSPP_REC_OUT_SIZE, dst_size);
> + DPU_REG_WRITE(c, offset + SSPP_REC_OUT_XY, dst_xy);
> +}
> +
> static void dpu_hw_sspp_setup_sourceaddress(struct dpu_sw_pipe *pipe,
> struct dpu_hw_fmt_layout *layout)
> {
> @@ -497,6 +826,29 @@ static void dpu_hw_sspp_setup_sourceaddress(struct dpu_sw_pipe *pipe,
> DPU_REG_WRITE(&ctx->hw, SSPP_SRC_YSTRIDE1, ystride1);
> }
>
> +static void dpu_hw_sspp_setup_sourceaddress_v13(struct dpu_sw_pipe *pipe,
> + struct dpu_hw_fmt_layout *layout)
> +{
> + struct dpu_hw_sspp *ctx = pipe->sspp;
> + int i;
> + u32 addr, ystride0, ystride1;
> +
> + if (!ctx)
> + return;
> +
> + addr = _sspp_calculate_rect_off(pipe->multirect_index, ctx);
> +
> + for (i = 0; i < ARRAY_SIZE(layout->plane_addr); i++)
> + DPU_REG_WRITE(&ctx->hw, addr + SSPP_REC_SRC0_ADDR + i * 0x4,
> + layout->plane_addr[i]);
> +
> + ystride0 = (layout->plane_pitch[0]) | (layout->plane_pitch[2] << 16);
> + ystride1 = (layout->plane_pitch[1]) | (layout->plane_pitch[3] << 16);
> +
> + DPU_REG_WRITE(&ctx->hw, addr + SSPP_REC_SRC_YSTRIDE0, ystride0);
> + DPU_REG_WRITE(&ctx->hw, addr + SSPP_REC_SRC_YSTRIDE1, ystride1);
> +}
> +
> static void dpu_hw_sspp_setup_csc(struct dpu_hw_sspp *ctx,
> const struct dpu_csc_cfg *data)
> {
> @@ -536,6 +888,24 @@ static void dpu_hw_sspp_setup_solidfill(struct dpu_sw_pipe *pipe, u32 color)
> color);
> }
>
> +static void dpu_hw_sspp_setup_solidfill_v13(struct dpu_sw_pipe *pipe, u32 color)
> +{
> + struct dpu_hw_sspp *ctx = pipe->sspp;
> + struct dpu_hw_fmt_layout cfg;
> + u32 offset;
> +
> + if (!ctx)
> + return;
> +
> + offset = _sspp_calculate_rect_off(pipe->multirect_index, ctx);
> +
> + /* cleanup source addresses */
> + memset(&cfg, 0, sizeof(cfg));
> + ctx->ops.setup_sourceaddress(pipe, &cfg);
> +
> + DPU_REG_WRITE(&ctx->hw, offset + SSPP_REC_SRC_CONSTANT_COLOR, color);
> +}
> +
> static void dpu_hw_sspp_setup_qos_lut(struct dpu_hw_sspp *ctx,
> struct dpu_hw_qos_cfg *cfg)
> {
> @@ -547,6 +917,17 @@ static void dpu_hw_sspp_setup_qos_lut(struct dpu_hw_sspp *ctx,
> cfg);
> }
>
> +static void dpu_hw_sspp_setup_qos_lut_v13(struct dpu_hw_sspp *ctx,
> + struct dpu_hw_qos_cfg *cfg)
> +{
> + if (!ctx || !cfg)
> + return;
> +
> + _dpu_hw_setup_qos_lut_v13(&ctx->hw, 0,
> + ctx->mdss_ver->core_major_ver >= 4,
This is v13, of course it is >= 4.
> + cfg);
> +}
> +
> static void dpu_hw_sspp_setup_qos_ctrl(struct dpu_hw_sspp *ctx,
> bool danger_safe_en)
> {
> @@ -557,6 +938,16 @@ static void dpu_hw_sspp_setup_qos_ctrl(struct dpu_hw_sspp *ctx,
> danger_safe_en ? SSPP_QOS_CTRL_DANGER_SAFE_EN : 0);
> }
>
> +static void dpu_hw_sspp_setup_qos_ctrl_v13(struct dpu_hw_sspp *ctx,
> + bool danger_safe_en)
> +{
> + if (!ctx)
> + return;
> +
> + DPU_REG_WRITE(&ctx->hw, SSPP_CMN_QOS_CTRL,
> + danger_safe_en ? SSPP_QOS_CTRL_DANGER_SAFE_EN : 0);
> +}
> +
> static void dpu_hw_sspp_setup_cdp(struct dpu_sw_pipe *pipe,
> const struct msm_format *fmt,
> bool enable)
> @@ -576,6 +967,20 @@ static void dpu_hw_sspp_setup_cdp(struct dpu_sw_pipe *pipe,
> dpu_setup_cdp(&ctx->hw, cdp_cntl_offset, fmt, enable);
> }
>
> +static void dpu_hw_sspp_setup_cdp_v13(struct dpu_sw_pipe *pipe,
> + const struct msm_format *fmt,
> + bool enable)
> +{
> + struct dpu_hw_sspp *ctx = pipe->sspp;
> + u32 offset = 0;
> +
> + if (!ctx)
> + return;
> +
> + offset = _sspp_calculate_rect_off(pipe->multirect_index, ctx);
> + dpu_setup_cdp(&ctx->hw, offset + SSPP_REC_CDP_CNTL, fmt, enable);
> +}
> +
> static bool dpu_hw_sspp_setup_clk_force_ctrl(struct dpu_hw_sspp *ctx, bool enable)
> {
> static const struct dpu_clk_ctrl_reg sspp_clk_ctrl = {
> @@ -586,36 +991,69 @@ static bool dpu_hw_sspp_setup_clk_force_ctrl(struct dpu_hw_sspp *ctx, bool enabl
> return dpu_hw_clk_force_ctrl(&ctx->hw, &sspp_clk_ctrl, enable);
> }
>
> +static bool dpu_hw_sspp_setup_clk_force_ctrl_v13(struct dpu_hw_sspp *ctx, bool enable)
> +{
> + static const struct dpu_clk_ctrl_reg sspp_clk_ctrl = {
> + .reg_off = SSPP_CMN_CLK_CTRL,
> + .bit_off = 0
> + };
> +
> + return dpu_hw_clk_force_ctrl(&ctx->hw, &sspp_clk_ctrl, enable);
> +}
> +
> static void _setup_layer_ops(struct dpu_hw_sspp *c,
> unsigned long features, const struct dpu_mdss_version *mdss_rev)
> {
> - c->ops.setup_format = dpu_hw_sspp_setup_format;
> - c->ops.setup_rects = dpu_hw_sspp_setup_rects;
> - c->ops.setup_sourceaddress = dpu_hw_sspp_setup_sourceaddress;
> - c->ops.setup_solidfill = dpu_hw_sspp_setup_solidfill;
> - c->ops.setup_pe = dpu_hw_sspp_setup_pe_config;
> -
> - if (test_bit(DPU_SSPP_QOS, &features)) {
> - c->ops.setup_qos_lut = dpu_hw_sspp_setup_qos_lut;
> - c->ops.setup_qos_ctrl = dpu_hw_sspp_setup_qos_ctrl;
> + if (mdss_rev->core_major_ver >= 13) {
> + c->ops.setup_format = dpu_hw_sspp_setup_format_v13;
> + c->ops.setup_rects = dpu_hw_sspp_setup_rects_v13;
> + c->ops.setup_sourceaddress = dpu_hw_sspp_setup_sourceaddress_v13;
> + c->ops.setup_solidfill = dpu_hw_sspp_setup_solidfill_v13;
> + c->ops.setup_pe = dpu_hw_sspp_setup_pe_config_v13;
> +
> + if (test_bit(DPU_SSPP_QOS, &features)) {
> + c->ops.setup_qos_lut = dpu_hw_sspp_setup_qos_lut_v13;
> + c->ops.setup_qos_ctrl = dpu_hw_sspp_setup_qos_ctrl_v13;
> + }
> +
> + if (test_bit(DPU_SSPP_SMART_DMA_V1, &c->cap->features) ||
> + test_bit(DPU_SSPP_SMART_DMA_V2, &c->cap->features))
> + c->ops.setup_multirect = dpu_hw_sspp_setup_multirect_v13;
> +
> + if (test_bit(DPU_SSPP_CDP, &features))
> + c->ops.setup_cdp = dpu_hw_sspp_setup_cdp_v13;
> +
> + c->ops.setup_clk_force_ctrl = dpu_hw_sspp_setup_clk_force_ctrl_v13;
> + } else {
> + c->ops.setup_format = dpu_hw_sspp_setup_format;
> + c->ops.setup_rects = dpu_hw_sspp_setup_rects;
> + c->ops.setup_sourceaddress = dpu_hw_sspp_setup_sourceaddress;
> + c->ops.setup_solidfill = dpu_hw_sspp_setup_solidfill;
> + c->ops.setup_pe = dpu_hw_sspp_setup_pe_config;
> +
> + if (test_bit(DPU_SSPP_QOS, &features)) {
> + c->ops.setup_qos_lut = dpu_hw_sspp_setup_qos_lut;
> + c->ops.setup_qos_ctrl = dpu_hw_sspp_setup_qos_ctrl;
> + }
> +
> + if (test_bit(DPU_SSPP_SMART_DMA_V1, &c->cap->features) ||
> + test_bit(DPU_SSPP_SMART_DMA_V2, &c->cap->features))
> + c->ops.setup_multirect = dpu_hw_sspp_setup_multirect;
> +
> + if (test_bit(DPU_SSPP_CDP, &features))
> + c->ops.setup_cdp = dpu_hw_sspp_setup_cdp;
> +
> + if (mdss_rev->core_major_ver >= 9)
> + c->ops.setup_clk_force_ctrl = dpu_hw_sspp_setup_clk_force_ctrl;
> }
>
> if (test_bit(DPU_SSPP_CSC, &features) ||
> test_bit(DPU_SSPP_CSC_10BIT, &features))
> c->ops.setup_csc = dpu_hw_sspp_setup_csc;
>
> - if (test_bit(DPU_SSPP_SMART_DMA_V1, &c->cap->features) ||
> - test_bit(DPU_SSPP_SMART_DMA_V2, &c->cap->features))
> - c->ops.setup_multirect = dpu_hw_sspp_setup_multirect;
> -
> if (test_bit(DPU_SSPP_SCALER_QSEED3_COMPATIBLE, &features))
> c->ops.setup_scaler = _dpu_hw_sspp_setup_scaler3;
If the only common items are CSC and scaler (and both are already pretty
abstracted), please don't squash it in the same old file. Create new
file for the new hardware block (like we did for DSC 1.1 vs 1.2).
>
> - if (test_bit(DPU_SSPP_CDP, &features))
> - c->ops.setup_cdp = dpu_hw_sspp_setup_cdp;
> -
> - if (mdss_rev->core_major_ver >= 9)
> - c->ops.setup_clk_force_ctrl = dpu_hw_sspp_setup_clk_force_ctrl;
> }
>
> #ifdef CONFIG_DEBUG_FS
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_util.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_util.c
> index 486be346d40d..1acf456c425b 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_util.c
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_util.c
> @@ -81,6 +81,13 @@ static u32 dpu_hw_util_log_mask = DPU_DBG_MASK_NONE;
> #define QOS_CREQ_LUT_0 0x14
> #define QOS_CREQ_LUT_1 0x18
>
> +/* CMN_QOS_LUT */
> +#define SSPP_CMN_DANGER_LUT 0x2C
> +#define SSPP_CMN_SAFE_LUT 0x30
> +#define SSPP_CMN_CREQ_LUT_0 0x34
> +#define SSPP_CMN_CREQ_LUT_1 0x38
> +#define SSPP_CMN_QOS_CTRL 0x28
Lowercase hex, sort by the address.
> +
> /* QOS_QOS_CTRL */
> #define QOS_QOS_CTRL_DANGER_SAFE_EN BIT(0)
> #define QOS_QOS_CTRL_DANGER_VBLANK_MASK GENMASK(5, 4)
> @@ -475,6 +482,22 @@ void _dpu_hw_setup_qos_lut(struct dpu_hw_blk_reg_map *c, u32 offset,
> cfg->danger_safe_en ? QOS_QOS_CTRL_DANGER_SAFE_EN : 0);
> }
>
> +void _dpu_hw_setup_qos_lut_v13(struct dpu_hw_blk_reg_map *c, u32 offset,
> + bool qos_8lvl,
> + const struct dpu_hw_qos_cfg *cfg)
> +{
> + DPU_REG_WRITE(c, offset + SSPP_CMN_DANGER_LUT, cfg->danger_lut);
> + DPU_REG_WRITE(c, offset + SSPP_CMN_SAFE_LUT, cfg->safe_lut);
> +
> + if (qos_8lvl) {
> + DPU_REG_WRITE(c, offset + SSPP_CMN_CREQ_LUT_0, cfg->creq_lut);
> + DPU_REG_WRITE(c, offset + SSPP_CMN_CREQ_LUT_1, cfg->creq_lut >> 32);
> + }
> +
> + DPU_REG_WRITE(c, offset + SSPP_CMN_QOS_CTRL,
> + cfg->danger_safe_en ? QOS_QOS_CTRL_DANGER_SAFE_EN : 0);
> +}
> +
> /*
> * note: Aside from encoders, input_sel should be set to 0x0 by default
> */
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_util.h b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_util.h
> index 67b08e99335d..9d442d6fc11c 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_util.h
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_util.h
> @@ -360,6 +360,10 @@ void _dpu_hw_setup_qos_lut(struct dpu_hw_blk_reg_map *c, u32 offset,
> bool qos_8lvl,
> const struct dpu_hw_qos_cfg *cfg);
>
> +void _dpu_hw_setup_qos_lut_v13(struct dpu_hw_blk_reg_map *c, u32 offset,
> + bool qos_8lvl,
> + const struct dpu_hw_qos_cfg *cfg);
> +
> void dpu_hw_setup_misr(struct dpu_hw_blk_reg_map *c,
> u32 misr_ctrl_offset, u8 input_sel);
>
> --
> 2.34.1
>
--
With best wishes
Dmitry
^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH 07/12] drm/panel: Set sufficient voltage for panel nt37801
2025-10-23 8:06 ` [PATCH 07/12] drm/panel: Set sufficient voltage for panel nt37801 yuanjie yang
2025-10-23 8:22 ` Konrad Dybcio
@ 2025-10-23 12:14 ` Dmitry Baryshkov
2025-10-24 6:00 ` yuanjiey
1 sibling, 1 reply; 77+ messages in thread
From: Dmitry Baryshkov @ 2025-10-23 12:14 UTC (permalink / raw)
To: yuanjie yang
Cc: robin.clark, lumag, abhinav.kumar, sean, marijn.suijten, airlied,
simona, maarten.lankhorst, mripard, tzimmermann, robh, krzk+dt,
conor+dt, quic_mkrishn, jonathan, quic_khsieh, neil.armstrong,
linux-arm-msm, dri-devel, freedreno, devicetree, linux-kernel,
tingwei.zhang, aiqun.yu, yongxing.mou
On Thu, Oct 23, 2025 at 04:06:04PM +0800, yuanjie yang wrote:
> From: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
>
> The NT37801 Sepc V1.0 chapter "5.7.1 Power On Sequence" states
> VDDI=1.65V~1.95V, so set sufficient voltage for panel nt37801.
>
> Signed-off-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
> Signed-off-by: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
> ---
> drivers/gpu/drm/panel/panel-novatek-nt37801.c | 5 +++++
> 1 file changed, 5 insertions(+)
>
> diff --git a/drivers/gpu/drm/panel/panel-novatek-nt37801.c b/drivers/gpu/drm/panel/panel-novatek-nt37801.c
> index d6a37d7e0cc6..7eda16e0c1f9 100644
> --- a/drivers/gpu/drm/panel/panel-novatek-nt37801.c
> +++ b/drivers/gpu/drm/panel/panel-novatek-nt37801.c
> @@ -267,6 +267,11 @@ static int novatek_nt37801_probe(struct mipi_dsi_device *dsi)
> if (ret < 0)
> return ret;
>
> + ret = regulator_set_voltage(ctx->supplies[0].consumer,
> + 1650000, 1950000);
This should be done in the DT. Limit the voltage per the user.
> + if (ret < 0)
> + return ret;
> +
> ctx->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_OUT_LOW);
> if (IS_ERR(ctx->reset_gpio))
> return dev_err_probe(dev, PTR_ERR(ctx->reset_gpio),
> --
> 2.34.1
>
--
With best wishes
Dmitry
^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH 11/12] dt-bindings: display/msm: dsi-controller-main: Add Kaanapali
2025-10-23 8:06 ` [PATCH 11/12] dt-bindings: display/msm: dsi-controller-main: Add Kaanapali yuanjie yang
@ 2025-10-23 12:16 ` Dmitry Baryshkov
2025-10-24 6:08 ` yuanjiey
0 siblings, 1 reply; 77+ messages in thread
From: Dmitry Baryshkov @ 2025-10-23 12:16 UTC (permalink / raw)
To: yuanjie yang
Cc: robin.clark, lumag, abhinav.kumar, sean, marijn.suijten, airlied,
simona, maarten.lankhorst, mripard, tzimmermann, robh, krzk+dt,
conor+dt, quic_mkrishn, jonathan, quic_khsieh, neil.armstrong,
linux-arm-msm, dri-devel, freedreno, devicetree, linux-kernel,
tingwei.zhang, aiqun.yu, yongxing.mou
On Thu, Oct 23, 2025 at 04:06:08PM +0800, yuanjie yang wrote:
> From: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
>
> Add DSI Controller for Kaanapali.
Please say something more important here. Why do we need new compatible
for this platform, etc.
>
> Signed-off-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
> Signed-off-by: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
> ---
> .../devicetree/bindings/display/msm/dsi-controller-main.yaml | 2 ++
> 1 file changed, 2 insertions(+)
>
> diff --git a/Documentation/devicetree/bindings/display/msm/dsi-controller-main.yaml b/Documentation/devicetree/bindings/display/msm/dsi-controller-main.yaml
> index 4400d4cce072..536ebf331828 100644
> --- a/Documentation/devicetree/bindings/display/msm/dsi-controller-main.yaml
> +++ b/Documentation/devicetree/bindings/display/msm/dsi-controller-main.yaml
> @@ -15,6 +15,7 @@ properties:
> - items:
> - enum:
> - qcom,apq8064-dsi-ctrl
> + - qcom,kaanapali-dsi-ctrl
> - qcom,msm8226-dsi-ctrl
> - qcom,msm8916-dsi-ctrl
> - qcom,msm8953-dsi-ctrl
> @@ -369,6 +370,7 @@ allOf:
> compatible:
> contains:
> enum:
> + - qcom,kaanapali-dsi-ctrl
> - qcom,sm8750-dsi-ctrl
> then:
> properties:
> --
> 2.34.1
>
--
With best wishes
Dmitry
^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH 10/12] dt-bindings: display/msm: dsi-phy-7nm: Add Kaanapali DSi PHY
2025-10-23 8:06 ` [PATCH 10/12] dt-bindings: display/msm: dsi-phy-7nm: Add Kaanapali DSi PHY yuanjie yang
@ 2025-10-23 12:16 ` Dmitry Baryshkov
2025-10-24 6:10 ` yuanjiey
0 siblings, 1 reply; 77+ messages in thread
From: Dmitry Baryshkov @ 2025-10-23 12:16 UTC (permalink / raw)
To: yuanjie yang
Cc: robin.clark, lumag, abhinav.kumar, sean, marijn.suijten, airlied,
simona, maarten.lankhorst, mripard, tzimmermann, robh, krzk+dt,
conor+dt, quic_mkrishn, jonathan, quic_khsieh, neil.armstrong,
linux-arm-msm, dri-devel, freedreno, devicetree, linux-kernel,
tingwei.zhang, aiqun.yu, yongxing.mou
On Thu, Oct 23, 2025 at 04:06:07PM +0800, yuanjie yang wrote:
> From: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
In the subject: DSI, not DSi
>
> Add DSI PHY for Kaanapali.
Why?
>
> Signed-off-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
> Signed-off-by: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
> ---
> Documentation/devicetree/bindings/display/msm/dsi-phy-7nm.yaml | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/Documentation/devicetree/bindings/display/msm/dsi-phy-7nm.yaml b/Documentation/devicetree/bindings/display/msm/dsi-phy-7nm.yaml
> index 1ca820a500b7..a6e044eed3df 100644
> --- a/Documentation/devicetree/bindings/display/msm/dsi-phy-7nm.yaml
> +++ b/Documentation/devicetree/bindings/display/msm/dsi-phy-7nm.yaml
> @@ -17,6 +17,7 @@ properties:
> enum:
> - qcom,dsi-phy-7nm
> - qcom,dsi-phy-7nm-8150
> + - qcom,kaanapali-dsi-phy-3nm
> - qcom,sa8775p-dsi-phy-5nm
> - qcom,sar2130p-dsi-phy-5nm
> - qcom,sc7280-dsi-phy-7nm
> --
> 2.34.1
>
--
With best wishes
Dmitry
^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH 12/12] dt-bindings: display/msm: qcom,kaanapali-mdss: Add Kaanapali
2025-10-23 8:17 ` [PATCH 12/12] dt-bindings: display/msm: qcom,kaanapali-mdss: Add Kaanapali yuanjie yang
2025-10-23 9:34 ` Rob Herring (Arm)
@ 2025-10-23 12:17 ` Dmitry Baryshkov
2025-10-24 6:16 ` yuanjiey
1 sibling, 1 reply; 77+ messages in thread
From: Dmitry Baryshkov @ 2025-10-23 12:17 UTC (permalink / raw)
To: yuanjie yang
Cc: robin.clark, lumag, abhinav.kumar, sean, marijn.suijten, airlied,
simona, maarten.lankhorst, mripard, tzimmermann, robh, krzk+dt,
conor+dt, quic_mkrishn, jonathan, quic_khsieh, neil.armstrong,
linux-arm-msm, dri-devel, freedreno, devicetree, linux-kernel,
tingwei.zhang, aiqun.yu, yongxing.mou
On Thu, Oct 23, 2025 at 04:17:36PM +0800, yuanjie yang wrote:
> From: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
>
> Add MDSS/MDP display subsystem for Qualcomm Kaanapali.
>
> Signed-off-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
> Signed-off-by: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
> ---
> .../display/msm/qcom,kaanapali-mdss.yaml | 298 ++++++++++++++++++
> 1 file changed, 298 insertions(+)
> create mode 100644 Documentation/devicetree/bindings/display/msm/qcom,kaanapali-mdss.yaml
>
> +
> + "^phy@[0-9a-f]+$":
> + type: object
> + additionalProperties: true
> + properties:
> + compatible:
> + const: qcom,kaanapali-dsi-phy-3nm
> +
> +required:
> + - compatible
> +
> +unevaluatedProperties: false
> +
> +
> + mdss_dsi0_phy: phy@ae95000 {
> + compatible = "qcom,kaanapali-dsi-phy-3nm", "qcom,sm8750-dsi-phy-3nm";
This doesn't match what you've written above. Was it validated?
> + reg = <0x09ac1000 0x200>,
> + <0x09ac1200 0x280>,
> + <0x09ac1500 0x400>;
> + reg-names = "dsi_phy",
> + "dsi_phy_lane",
> + "dsi_pll";
> +
> + clocks = <&disp_cc_mdss_ahb_clk>,
> + <&rpmhcc RPMH_CXO_CLK>;
> + clock-names = "iface",
> + "ref";
> +
> + vdds-supply = <&vreg_l3i_0p88>;
> +
> + #clock-cells = <1>;
> + #phy-cells = <0>;
> + };
> + };
> --
> 2.34.1
>
--
With best wishes
Dmitry
^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH 00/12] drm/msm: Add support for Kaanapali
2025-10-23 11:46 ` [PATCH 00/12] drm/msm: Add support for Kaanapali Dmitry Baryshkov
@ 2025-10-24 2:32 ` yuanjiey
0 siblings, 0 replies; 77+ messages in thread
From: yuanjiey @ 2025-10-24 2:32 UTC (permalink / raw)
To: Dmitry Baryshkov
Cc: robin.clark, lumag, abhinav.kumar, sean, marijn.suijten, airlied,
simona, maarten.lankhorst, mripard, tzimmermann, robh, krzk+dt,
conor+dt, quic_mkrishn, jonathan, quic_khsieh, neil.armstrong,
linux-arm-msm, dri-devel, freedreno, devicetree, linux-kernel,
tingwei.zhang, aiqun.yu, yongxing.mou
On Thu, Oct 23, 2025 at 02:46:10PM +0300, Dmitry Baryshkov wrote:
> On Thu, Oct 23, 2025 at 03:53:49PM +0800, yuanjie yang wrote:
> > From: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
> >
> > The Kaanapali MDSS has some differences compared to the SM8750 MDSS:
> > - DSI PHY/DSI base address have some changes.
> > - DPU 13.0:
> > - SSPP layout has a great change.
> > - interrupt INTF layout has some changes.
> >
> > This patchset contains DSI PHY, DSI Controller, DPU & MDSS bindings
> > in addition to the driver changes.
> >
> > We have already tested the display functionality using the Kaanapali-mtp
> > device on the Kaanapali branch of kernel-qcom repository.
> > Test command: "modetest -r -v"
> > kernel-qcom repository: https://git.codelinaro.org/clo/linux-kernel/kernel-qcom/-/tree/kaanapali
> >
> > Signed-off-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
> > Signed-off-by: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
> > ---
> > Yuanjie Yang (12):
> > drm/msm/dsi/phy: Add support for Kaanapali
> > drm/msm/dpu: Add support for Kaanapali DPU
> > drm/msm/dpu: Compatible with Kaanapali interrupt register
> > drm/msm/mdss: Add support for Kaanapali
> > drm/msm/dsi: Add support for Kaanapali
> > drm/msm/dpu: Add Kaanapali SSPP sub-block support
> > drm/panel: Set sufficient voltage for panel nt37801
> > arm64: defconfig: Enable NT37801 DSI panel driver
> > dt-bindings: display/msm: qcom,kaanapali-dpu: Add Kaanapali
> > dt-bindings: display/msm: dsi-phy-7nm: Add Kaanapali DSi PHY
> > dt-bindings: display/msm: dsi-controller-main: Add Kaanapali
> > dt-bindings: display/msm: qcom,kaanapali-mdss: Add Kaanapali
OK, get it, will fix.
Thanks,
Yuanjie
> The order is wrong:
>
> - bindings
> - driver changes
> - DT changes
>
>
> --
> With best wishes
> Dmitry
^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH 02/12] drm/msm/dpu: Add support for Kaanapali DPU
2025-10-23 11:56 ` Dmitry Baryshkov
@ 2025-10-24 2:53 ` yuanjiey
0 siblings, 0 replies; 77+ messages in thread
From: yuanjiey @ 2025-10-24 2:53 UTC (permalink / raw)
To: Dmitry Baryshkov
Cc: robin.clark, lumag, abhinav.kumar, sean, marijn.suijten, airlied,
simona, maarten.lankhorst, mripard, tzimmermann, robh, krzk+dt,
conor+dt, quic_mkrishn, jonathan, quic_khsieh, neil.armstrong,
linux-arm-msm, dri-devel, freedreno, devicetree, linux-kernel,
tingwei.zhang, aiqun.yu, yongxing.mou
On Thu, Oct 23, 2025 at 02:56:49PM +0300, Dmitry Baryshkov wrote:
> On Thu, Oct 23, 2025 at 03:53:51PM +0800, yuanjie yang wrote:
> > From: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
> >
> > Add support for Display Processing Unit (DPU) version 13.0
> > on the Kaanapali platform. This version introduces changes
> > to the SSPP sub-block structure. Add common block and rectangle
> > blocks to accommodate these structural modifications for compatibility.
>
> This needs to come up differently: first implement driver changes for
> the changed SSPP blocks, then add Kaananapali catalog entries.
OK, will adjust patch order.
> >
> > Signed-off-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
> > Signed-off-by: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
> > ---
> > .../disp/dpu1/catalog/dpu_13_0_kaanapali.h | 492 ++++++++++++++++++
> > .../gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c | 44 ++
> > .../gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h | 29 +-
> > drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c | 1 +
> > 4 files changed, 565 insertions(+), 1 deletion(-)
> > create mode 100644 drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_13_0_kaanapali.h
> >
> > +
> > +static const struct dpu_cwb_cfg kaanapali_cwb[] = {
> > + {
> > + .name = "cwb_0", .id = CWB_0,
> > + .base = 0x169200, .len = 0x20,
> > + },
> > + {
> > + .name = "cwb_1", .id = CWB_1,
> > + .base = 0x169600, .len = 0x20,
> > + },
> > + {
> > + .name = "cwb_2", .id = CWB_2,
> > + .base = 0x16A200, .len = 0x20,
> > + },
> > + {
> > + .name = "cwb_3", .id = CWB_3,
> > + .base = 0x16A600, .len = 0x20,
>
> lowercase hex
OK, will fix.
> > + },
> > +};
> > +
>
> > 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 6641455c4ec6..5a24ed0f818c 100644
> > --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
> > +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
> > @@ -241,6 +241,25 @@ static const u32 wb2_formats_rgb_yuv[] = {
> > .rotation_cfg = NULL, \
> > }
> >
> > +/* kaanapali SSPP common configuration */
> > +#define _KAANAPALI_VIG_SBLK(scaler_ver) \
>
> And then it gets reused for some other platform... No. Please come up
> with a generic enough name.
_KAANAPALI_VIG_SBLK --> _VIG_SBLK_REC0_REC1
This "_VIG_SBLK_REC0_REC1" is a good name here?
>
> > + { \
> > + .cmn_blk = {.name = "cmn_blk", \
> > + .base = 0, .len = 0x100,}, \
>
> No, sblks shouldn't have .base set to 0. It's the main block.
OK will drop it.
> > + .sspp_rec0_blk = {.name = "sspp_rec0", \
> > + .base = 0x1000, .len = 0x180,}, \
> > + .csc_blk = {.name = "csc", \
> > + .base = 0x1800, .len = 0x100,}, \
> > + .scaler_blk = {.name = "scaler", \
> > + .version = scaler_ver, \
> > + .base = 0x2000, .len = 0xec,}, \
> > + .sspp_rec1_blk = {.name = "sspp_rec1", \
> > + .base = 0x3000, .len = 0x180,}, \
> > + .format_list = plane_formats_yuv, \
> > + .num_formats = ARRAY_SIZE(plane_formats_yuv), \
> > + .rotation_cfg = NULL, \
> > + }
> > +
> > #define _VIG_SBLK_ROT(scaler_ver, rot_cfg) \
> > { \
> > .scaler_blk = {.name = "scaler", \
> > @@ -329,6 +348,9 @@ static const struct dpu_sspp_sub_blks dpu_vig_sblk_qseed3_3_3 =
> > static const struct dpu_sspp_sub_blks dpu_vig_sblk_qseed3_3_4 =
> > _VIG_SBLK(SSPP_SCALER_VER(3, 4));
> >
> > +static const struct dpu_sspp_sub_blks dpu_vig_sblk_qseed3_3_5 =
> > + _KAANAPALI_VIG_SBLK(SSPP_SCALER_VER(3, 5));
> > +
> > static const struct dpu_sspp_sub_blks dpu_rgb_sblk = _RGB_SBLK();
> >
> > static const struct dpu_sspp_sub_blks dpu_dma_sblk = _DMA_SBLK();
> > @@ -412,6 +434,11 @@ static const struct dpu_pingpong_sub_blks sc7280_pp_sblk = {
> > .len = 0x20, .version = 0x20000},
> > };
> >
> > +static const struct dpu_pingpong_sub_blks kaanapali_pp_sblk = {
> > + .dither = {.name = "dither", .base = 0xc0,
> > + .len = 0x40, .version = 0x30000},
> > +};
> > +
> > /*************************************************************
> > * DSC sub blocks config
> > *************************************************************/
> > @@ -452,6 +479,13 @@ static const struct dpu_cdm_cfg dpu_cdm_5_x = {
> > .base = 0x79200,
> > };
> >
> > +static const struct dpu_cdm_cfg dpu_cdm_kaanapali_x = {
>
> 13_x
OK, will fix.
> > + .name = "cdm_0",
> > + .id = CDM_0,
> > + .len = 0x240,
> > + .base = 0x19e000,
> > +};
> > +
> > /*************************************************************
> > * VBIF sub blocks config
> > *************************************************************/
> > @@ -639,6 +673,10 @@ static const struct dpu_qos_lut_entry sc7180_qos_linear[] = {
> > {.fl = 0, .lut = 0x0011222222335777},
> > };
> >
> > +static const struct dpu_qos_lut_entry kaanapali_qos_linear[] = {
> > + {.fl = 0, .lut = 0x0011223344556666},
> > +};
> > +
> > static const struct dpu_qos_lut_entry sm6350_qos_linear_macrotile[] = {
> > {.fl = 0, .lut = 0x0011223445566777 },
> > };
> > @@ -668,6 +706,10 @@ static const struct dpu_qos_lut_entry sc7180_qos_macrotile[] = {
> > {.fl = 0, .lut = 0x0011223344556677},
> > };
> >
> > +static const struct dpu_qos_lut_entry kaanapali_qos_macrotile[] = {
> > + {.fl = 0, .lut = 0x0011223344556666},
> > +};
> > +
> > static const struct dpu_qos_lut_entry sc8180x_qos_macrotile[] = {
> > {.fl = 10, .lut = 0x0000000344556677},
> > };
> > @@ -726,3 +768,5 @@ static const struct dpu_qos_lut_entry sc7180_qos_nrt[] = {
> >
> > #include "catalog/dpu_10_0_sm8650.h"
> > #include "catalog/dpu_12_0_sm8750.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 f0768f54e9b3..99c81c24630f 100644
> > --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h
> > +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h
> > @@ -208,6 +208,30 @@ struct dpu_dsc_blk {
> > u32 len;
> > };
> >
> > +/**
> > + * struct dpu_sspp_rec_blk - sspp rec sub-blk information
>
> SSPP, REC
OK, will fix.
> > + * @name: string name for debug purposes
> > + * @base: offset of this sub-block relative to the block offset
> > + * @len: register block length of this sub-block
> > + */
> > +struct dpu_sspp_rec_blk {
> > + char name[DPU_HW_BLK_NAME_LEN];
> > + u32 base;
> > + u32 len;
> > +};
> > +
> > +/**
> > + * struct dpu_sspp_cmn_blk - sspp common sub-blk information
> > + * @name: string name for debug purposes
> > + * @base: offset of this sub-block relative to the block offset
> > + * @len: register block length of this sub-block
> > + */
> > +struct dpu_sspp_cmn_blk {
> > + char name[DPU_HW_BLK_NAME_LEN];
> > + u32 base;
> > + u32 len;
> > +};
> > +
> > /**
> > * enum dpu_qos_lut_usage - define QoS LUT use cases
> > */
> > @@ -294,7 +318,9 @@ struct dpu_sspp_sub_blks {
> > u32 qseed_ver;
> > struct dpu_scaler_blk scaler_blk;
> > struct dpu_pp_blk csc_blk;
> > -
> > + struct dpu_sspp_cmn_blk cmn_blk;
> > + struct dpu_sspp_rec_blk sspp_rec0_blk;
> > + struct dpu_sspp_rec_blk sspp_rec1_blk;
> > const u32 *format_list;
> > u32 num_formats;
> > const struct dpu_rotation_cfg *rotation_cfg;
> > @@ -778,6 +804,7 @@ extern const struct dpu_mdss_cfg dpu_sa8775p_cfg;
> > extern const struct dpu_mdss_cfg dpu_sm8550_cfg;
> > extern const struct dpu_mdss_cfg dpu_sm8650_cfg;
> > extern const struct dpu_mdss_cfg dpu_sm8750_cfg;
> > +extern const struct dpu_mdss_cfg dpu_kaanapali_cfg;
> > extern const struct dpu_mdss_cfg dpu_x1e80100_cfg;
> >
> > #endif /* _DPU_HW_CATALOG_H */
> > diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
> > index 4e5a8ecd31f7..15bec44324d5 100644
> > --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
> > +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
> > @@ -1505,6 +1505,7 @@ static const struct dev_pm_ops dpu_pm_ops = {
> > };
> >
> > static const struct of_device_id dpu_dt_match[] = {
> > + { .compatible = "qcom,kaanapali-dpu", .data = &dpu_kaanapali_cfg, },
> > { .compatible = "qcom,msm8917-mdp5", .data = &dpu_msm8917_cfg, },
> > { .compatible = "qcom,msm8937-mdp5", .data = &dpu_msm8937_cfg, },
> > { .compatible = "qcom,msm8953-mdp5", .data = &dpu_msm8953_cfg, },
> > --
> > 2.34.1
> >
>
> --
> With best wishes
> Dmitry
Thanks,
Yuanjie
^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH 03/12] drm/msm/dpu: Compatible with Kaanapali interrupt register
2025-10-23 11:59 ` Dmitry Baryshkov
@ 2025-10-24 2:59 ` yuanjiey
2025-10-27 13:21 ` Dmitry Baryshkov
0 siblings, 1 reply; 77+ messages in thread
From: yuanjiey @ 2025-10-24 2:59 UTC (permalink / raw)
To: Dmitry Baryshkov
Cc: robin.clark, lumag, abhinav.kumar, sean, marijn.suijten, airlied,
simona, maarten.lankhorst, mripard, tzimmermann, robh, krzk+dt,
conor+dt, quic_mkrishn, jonathan, quic_khsieh, neil.armstrong,
linux-arm-msm, dri-devel, freedreno, devicetree, linux-kernel,
tingwei.zhang, aiqun.yu, yongxing.mou
On Thu, Oct 23, 2025 at 02:59:12PM +0300, Dmitry Baryshkov wrote:
> On Thu, Oct 23, 2025 at 03:53:52PM +0800, yuanjie yang wrote:
> > From: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
> >
> > DPU version 13 introduces changes to the interrupt register
> > layout. Update the driver to support these modifications for
> > proper interrupt handling.
>
> So... Previous patch enabled support for the platform and it has been
> using wrong registers for interrupts? I think that's broken.
I want to express DPU 13 has different INTF register address, so need to add new
interrupt array to let DPU 13 interrupt work fine. Maybe I should optimize my commit msg.
> >
> > Signed-off-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
> > Signed-off-by: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
> > ---
> > .../gpu/drm/msm/disp/dpu1/dpu_hw_interrupts.c | 89 ++++++++++++++++++-
> > 1 file changed, 88 insertions(+), 1 deletion(-)
> >
> > diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_interrupts.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_interrupts.c
> > index 49bd77a755aa..8d265581f6ec 100644
> > --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_interrupts.c
> > +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_interrupts.c
> > @@ -40,6 +40,15 @@
> > #define MDP_INTF_REV_7xxx_INTR_TEAR_STATUS(intf) (MDP_INTF_REV_7xxx_TEAR_OFF(intf) + 0x004)
> > #define MDP_INTF_REV_7xxx_INTR_TEAR_CLEAR(intf) (MDP_INTF_REV_7xxx_TEAR_OFF(intf) + 0x008)
> >
> > +#define MDP_INTF_REV_13xx_OFF(intf) (0x18D000 + 0x1000 * (intf))
>
> Lowercase hex
OK, will fix.
> > +#define MDP_INTF_REV_13xx_INTR_EN(intf) (MDP_INTF_REV_13xx_OFF(intf) + 0x1c0)
> > +#define MDP_INTF_REV_13xx_INTR_STATUS(intf) (MDP_INTF_REV_13xx_OFF(intf) + 0x1c4)
> > +#define MDP_INTF_REV_13xx_INTR_CLEAR(intf) (MDP_INTF_REV_13xx_OFF(intf) + 0x1c8)
> > +#define MDP_INTF_REV_13xx_TEAR_OFF(intf) (0x18D800 + 0x1000 * (intf))
> > +#define MDP_INTF_REV_13xx_INTR_TEAR_EN(intf) (MDP_INTF_REV_13xx_TEAR_OFF(intf) + 0x000)
> > +#define MDP_INTF_REV_13xx_INTR_TEAR_STATUS(intf) (MDP_INTF_REV_13xx_TEAR_OFF(intf) + 0x004)
> > +#define MDP_INTF_REV_13xx_INTR_TEAR_CLEAR(intf) (MDP_INTF_REV_13xx_TEAR_OFF(intf) + 0x008)
> > +
> > /**
> > * struct dpu_intr_reg - array of DPU register sets
> > * @clr_off: offset to CLEAR reg
>
> --
> With best wishes
> Dmitry
Thanks,
Yuanjie
^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH 04/12] drm/msm/mdss: Add support for Kaanapali
2025-10-23 12:01 ` Dmitry Baryshkov
@ 2025-10-24 3:05 ` yuanjiey
0 siblings, 0 replies; 77+ messages in thread
From: yuanjiey @ 2025-10-24 3:05 UTC (permalink / raw)
To: Dmitry Baryshkov
Cc: robin.clark, lumag, abhinav.kumar, sean, marijn.suijten, airlied,
simona, maarten.lankhorst, mripard, tzimmermann, robh, krzk+dt,
conor+dt, quic_mkrishn, jonathan, quic_khsieh, neil.armstrong,
linux-arm-msm, dri-devel, freedreno, devicetree, linux-kernel,
tingwei.zhang, aiqun.yu, yongxing.mou
On Thu, Oct 23, 2025 at 03:01:14PM +0300, Dmitry Baryshkov wrote:
> On Thu, Oct 23, 2025 at 03:53:53PM +0800, yuanjie yang wrote:
> > From: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
> >
> > Add mdss support for the Qualcomm Kaanapali platform.
> >
> > Signed-off-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
> > Signed-off-by: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
> > ---
> > drivers/gpu/drm/msm/msm_mdss.c | 22 ++++++++++++++++++++++
> > include/linux/soc/qcom/ubwc.h | 1 +
> > 2 files changed, 23 insertions(+)
>
> Where can I find the UBWC config for Kaanapali?
https://lore.kernel.org/all/20250930-kaana-gpu-support-v1-1-73530b0700ed@oss.qualcomm.com/
I see UBWC config is in gpu patch list, so I don't push UBWC config patch in my patch list.
so I should wait gpu patch applied and rebase this patch ?
Thanks,
Yuanjie
> >
> > diff --git a/drivers/gpu/drm/msm/msm_mdss.c b/drivers/gpu/drm/msm/msm_mdss.c
> > index 2d0e3e784c04..665751d2b999 100644
> > --- a/drivers/gpu/drm/msm/msm_mdss.c
> > +++ b/drivers/gpu/drm/msm/msm_mdss.c
> > @@ -243,6 +243,24 @@ static void msm_mdss_setup_ubwc_dec_50(struct msm_mdss *msm_mdss)
> > writel_relaxed(1, msm_mdss->mmio + REG_MDSS_UBWC_PREDICTION_MODE);
> > }
> >
> > +static void msm_mdss_setup_ubwc_dec_60(struct msm_mdss *msm_mdss)
> > +{
> > + const struct qcom_ubwc_cfg_data *data = msm_mdss->mdss_data;
> > + u32 value = MDSS_UBWC_STATIC_UBWC_SWIZZLE(data->ubwc_swizzle) |
> > + MDSS_UBWC_STATIC_HIGHEST_BANK_BIT(data->highest_bank_bit);
> > +
> > + if (data->ubwc_bank_spread)
> > + value |= MDSS_UBWC_STATIC_UBWC_BANK_SPREAD;
> > +
> > + if (data->macrotile_mode)
> > + value |= MDSS_UBWC_STATIC_MACROTILE_MODE;
> > +
> > + writel_relaxed(value, msm_mdss->mmio + REG_MDSS_UBWC_STATIC);
> > +
> > + writel_relaxed(5, msm_mdss->mmio + REG_MDSS_UBWC_CTRL_2);
> > + writel_relaxed(1, msm_mdss->mmio + REG_MDSS_UBWC_PREDICTION_MODE);
> > +}
> > +
> > static int msm_mdss_enable(struct msm_mdss *msm_mdss)
> > {
> > int ret, i;
> > @@ -296,6 +314,9 @@ static int msm_mdss_enable(struct msm_mdss *msm_mdss)
> > case UBWC_5_0:
> > msm_mdss_setup_ubwc_dec_50(msm_mdss);
> > break;
> > + case UBWC_6_0:
> > + msm_mdss_setup_ubwc_dec_60(msm_mdss);
> > + break;
> > default:
> > dev_err(msm_mdss->dev, "Unsupported UBWC decoder version %x\n",
> > msm_mdss->mdss_data->ubwc_dec_version);
> > @@ -552,6 +573,7 @@ static const struct msm_mdss_data data_153k6 = {
> > };
> >
> > static const struct of_device_id mdss_dt_match[] = {
> > + { .compatible = "qcom,kaanapali-mdss", .data = &data_57k },
> > { .compatible = "qcom,mdss", .data = &data_153k6 },
> > { .compatible = "qcom,msm8998-mdss", .data = &data_76k8 },
> > { .compatible = "qcom,qcm2290-mdss", .data = &data_76k8 },
> > diff --git a/include/linux/soc/qcom/ubwc.h b/include/linux/soc/qcom/ubwc.h
> > index 1ed8b1b16bc9..0a4edfe3d96d 100644
> > --- a/include/linux/soc/qcom/ubwc.h
> > +++ b/include/linux/soc/qcom/ubwc.h
> > @@ -52,6 +52,7 @@ struct qcom_ubwc_cfg_data {
> > #define UBWC_4_0 0x40000000
> > #define UBWC_4_3 0x40030000
> > #define UBWC_5_0 0x50000000
> > +#define UBWC_6_0 0x60000000
>
> This should be tied with the ubwc config changes as this chunk goes into
> a different subsystem.
>
> >
> > #if IS_ENABLED(CONFIG_QCOM_UBWC_CONFIG)
> > const struct qcom_ubwc_cfg_data *qcom_ubwc_config_get_data(void);
> > --
> > 2.34.1
> >
>
> --
> With best wishes
> Dmitry
^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH 01/12] drm/msm/dsi/phy: Add support for Kaanapali
2025-10-23 12:02 ` Konrad Dybcio
@ 2025-10-24 3:27 ` yuanjiey
2025-10-27 12:48 ` Konrad Dybcio
2025-10-27 13:14 ` Dmitry Baryshkov
0 siblings, 2 replies; 77+ messages in thread
From: yuanjiey @ 2025-10-24 3:27 UTC (permalink / raw)
To: Konrad Dybcio
Cc: Dmitry Baryshkov, robin.clark, lumag, abhinav.kumar, sean,
marijn.suijten, airlied, simona, maarten.lankhorst, mripard,
tzimmermann, robh, krzk+dt, conor+dt, quic_mkrishn, jonathan,
quic_khsieh, neil.armstrong, linux-arm-msm, dri-devel, freedreno,
devicetree, linux-kernel, tingwei.zhang, aiqun.yu, yongxing.mou
On Thu, Oct 23, 2025 at 02:02:45PM +0200, Konrad Dybcio wrote:
> On 10/23/25 1:48 PM, Dmitry Baryshkov wrote:
> > On Thu, Oct 23, 2025 at 03:53:50PM +0800, yuanjie yang wrote:
> >> From: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
> >>
> >> Add DSI PHY support for the Kaanapali platform.
> >>
> >> Signed-off-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
> >> Signed-off-by: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
> >> ---
>
> [...]
>
> >> + .io_start = { 0x9ac1000, 0xae97000 },
> >
> > These two addresses are very strange. Would you care to explain? Other
> > than that there is no difference from SM8750 entry.
>
> They're correct.
> Although they correspond to DSI_0 and DSI_2..
>
> Yuanjie, none of the DSI patches mention that v2.10.0 is packed with
> new features. Please provide some more context and how that impacts
> the hw description.
Thanks for your reminder.
Correct here:
io_start = { 0x9ac1000, 0x9ac4000 } DSI_Phy0 DSI_phy1
And v2.10.0 no clearly meaningful changes compared to v2.9.0.
just some register address change.
Thanks,
Yuanjie
> Konrad
^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH 06/12] drm/msm/dpu: Add Kaanapali SSPP sub-block support
2025-10-23 12:14 ` [PATCH 06/12] drm/msm/dpu: Add Kaanapali SSPP sub-block support Dmitry Baryshkov
@ 2025-10-24 5:49 ` yuanjiey
0 siblings, 0 replies; 77+ messages in thread
From: yuanjiey @ 2025-10-24 5:49 UTC (permalink / raw)
To: Dmitry Baryshkov
Cc: robin.clark, lumag, abhinav.kumar, sean, marijn.suijten, airlied,
simona, maarten.lankhorst, mripard, tzimmermann, robh, krzk+dt,
conor+dt, quic_mkrishn, jonathan, quic_khsieh, neil.armstrong,
linux-arm-msm, dri-devel, freedreno, devicetree, linux-kernel,
tingwei.zhang, aiqun.yu, yongxing.mou
On Thu, Oct 23, 2025 at 03:14:00PM +0300, Dmitry Baryshkov wrote:
> On Thu, Oct 23, 2025 at 04:06:03PM +0800, yuanjie yang wrote:
> > From: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
> >
> > Add support for Kaanapali platform SSPP sub-blocks, which
> > introduce structural changes including register additions,
> > removals, and relocations. Add the new common and rectangle
> > blocks, and update register definitions and handling to
> > ensure compatibility with DPU v13.0.
>
> Merge new structures into this patch.
OK will adjust patch.
> >
> > Signed-off-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
> > Signed-off-by: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
> > ---
> > drivers/gpu/drm/msm/disp/dpu1/dpu_hw_sspp.c | 474 +++++++++++++++++++-
> > drivers/gpu/drm/msm/disp/dpu1/dpu_hw_util.c | 23 +
> > drivers/gpu/drm/msm/disp/dpu1/dpu_hw_util.h | 4 +
> > 3 files changed, 483 insertions(+), 18 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_sspp.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_sspp.c
> > index 6f1fc790ad6d..7217c952f01c 100644
> > --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_sspp.c
> > +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_sspp.c
> > @@ -17,6 +17,7 @@
> >
> > #define DPU_FETCH_CONFIG_RESET_VALUE 0x00000087
> >
> > +/* <= v12 DPU */
> > /* SSPP registers */
> > #define SSPP_SRC_SIZE 0x00
> > #define SSPP_SRC_XY 0x08
> > @@ -74,12 +75,116 @@
> > #define SSPP_EXCL_REC_XY 0x1B8
> > #define SSPP_CLK_CTRL 0x330
> >
> > +/* >= v13 DPU */
> > +/* CMN Registers -> Source Surface Processing Pipe Common SSPP registers */
> > +/* Name Offset */
> > +#define SSPP_CMN_CLK_CTRL 0x0
> > +#define SSPP_CMN_CLK_STATUS 0x4
> > +#define SSPP_CMN_MULTI_REC_OP_MODE 0x10
> > +#define SSPP_CMN_ADDR_CONFIG 0x14
> > +#define SSPP_CMN_CAC_CTRL 0x20
> > +#define SSPP_CMN_SYS_CACHE_MODE 0x24
> > +#define SSPP_CMN_QOS_CTRL 0x28
> > +#define SSPP_CMN_DANGER_LUT 0x2C
> > +#define SSPP_CMN_SAFE_LUT 0x30
>
> lowercase hex.
OK will fix
>
> > @@ -141,6 +246,12 @@
> > /* traffic shaper clock in Hz */
> > #define TS_CLK 19200000
> >
> > +static inline u32 _sspp_calculate_rect_off(enum dpu_sspp_multirect_index rect_index,
> > + struct dpu_hw_sspp *ctx)
> > +{
> > + return (rect_index == DPU_SSPP_RECT_SOLO || rect_index == DPU_SSPP_RECT_0) ?
> > + ctx->cap->sblk->sspp_rec0_blk.base : ctx->cap->sblk->sspp_rec1_blk.base;
> > +}
> >
> > static void dpu_hw_sspp_setup_multirect(struct dpu_sw_pipe *pipe)
> > {
> > @@ -169,6 +280,34 @@ static void dpu_hw_sspp_setup_multirect(struct dpu_sw_pipe *pipe)
> > DPU_REG_WRITE(&ctx->hw, SSPP_MULTIRECT_OPMODE, mode_mask);
> > }
> >
> > +static void dpu_hw_sspp_setup_multirect_v13(struct dpu_sw_pipe *pipe)
> > +{
> > + struct dpu_hw_sspp *ctx = pipe->sspp;
> > + u32 offset = ctx->cap->sblk->cmn_blk.base;
> > + u32 mode_mask;
> > +
> > + if (!ctx)
> > + return;
> > +
> > + if (pipe->multirect_index == DPU_SSPP_RECT_SOLO) {
> > + /**
> > + * if rect index is RECT_SOLO, we cannot expect a
> > + * virtual plane sharing the same SSPP id. So we go
> > + * and disable multirect
> > + */
> > + mode_mask = 0;
> > + } else {
> > + mode_mask = DPU_REG_READ(&ctx->hw, offset + SSPP_CMN_MULTI_REC_OP_MODE);
> > + mode_mask |= pipe->multirect_index;
> > + if (pipe->multirect_mode == DPU_SSPP_MULTIRECT_TIME_MX)
> > + mode_mask |= BIT(2);
> > + else
> > + mode_mask &= ~BIT(2);
> > + }
> > +
> > + DPU_REG_WRITE(&ctx->hw, offset + SSPP_CMN_MULTI_REC_OP_MODE, mode_mask);
> > +}
> > +
> > static void _sspp_setup_opmode(struct dpu_hw_sspp *ctx,
> > u32 mask, u8 en)
> > {
> > @@ -328,6 +467,119 @@ static void dpu_hw_sspp_setup_format(struct dpu_sw_pipe *pipe,
> > DPU_REG_WRITE(c, SSPP_UBWC_ERROR_STATUS, BIT(31));
> > }
> >
> > +static void dpu_hw_sspp_setup_format_v13(struct dpu_sw_pipe *pipe,
> > + const struct msm_format *fmt, u32 flags)
> > +{
> > + struct dpu_hw_sspp *ctx = pipe->sspp;
> > + struct dpu_hw_blk_reg_map *c;
> > + u32 chroma_samp, unpack, src_format;
> > + u32 opmode = 0;
> > + u32 fast_clear = 0;
> > + u32 offset;
> > +
> > + if (!ctx || !fmt)
> > + return;
> > +
> > + offset = _sspp_calculate_rect_off(pipe->multirect_index, ctx);
> > +
> > + c = &ctx->hw;
> > +
> > + opmode = DPU_REG_READ(c, offset + SSPP_REC_SRC_OP_MODE);
> > + opmode &= ~(MDSS_MDP_OP_FLIP_LR | MDSS_MDP_OP_FLIP_UD |
> > + MDSS_MDP_OP_BWC_EN | MDSS_MDP_OP_PE_OVERRIDE
> > + | MDSS_MDP_OP_ROT_90);
> > +
> > + if (flags & DPU_SSPP_FLIP_LR)
> > + opmode |= MDSS_MDP_OP_FLIP_LR;
> > + if (flags & DPU_SSPP_FLIP_UD)
> > + opmode |= MDSS_MDP_OP_FLIP_UD;
> > + if (flags & DPU_SSPP_ROT_90)
> > + opmode |= MDSS_MDP_OP_ROT_90;
> > +
> > + chroma_samp = fmt->chroma_sample;
> > + if (flags & DPU_SSPP_SOURCE_ROTATED_90) {
> > + if (chroma_samp == CHROMA_H2V1)
> > + chroma_samp = CHROMA_H1V2;
> > + else if (chroma_samp == CHROMA_H1V2)
> > + chroma_samp = CHROMA_H2V1;
> > + }
> > +
> > + src_format = (chroma_samp << 23) | (fmt->fetch_type << 19) |
> > + (fmt->bpc_a << 6) | (fmt->bpc_r_cr << 4) |
> > + (fmt->bpc_b_cb << 2) | (fmt->bpc_g_y << 0);
> > +
> > + if (flags & DPU_SSPP_ROT_90)
> > + src_format |= BIT(11); /* ROT90 */
> > +
> > + if (fmt->alpha_enable && fmt->fetch_type == MDP_PLANE_INTERLEAVED)
> > + src_format |= BIT(8); /* SRCC3_EN */
> > +
> > + if (flags & DPU_SSPP_SOLID_FILL)
> > + src_format |= BIT(22);
> > +
> > + unpack = (fmt->element[3] << 24) | (fmt->element[2] << 16) |
> > + (fmt->element[1] << 8) | (fmt->element[0] << 0);
> > + src_format |= ((fmt->unpack_count - 1) << 12) |
> > + ((fmt->flags & MSM_FORMAT_FLAG_UNPACK_TIGHT ? 1 : 0) << 17) |
> > + ((fmt->flags & MSM_FORMAT_FLAG_UNPACK_ALIGN_MSB ? 1 : 0) << 18) |
> > + ((fmt->bpp - 1) << 9);
> > +
> > + if (fmt->fetch_mode != MDP_FETCH_LINEAR) {
> > + if (MSM_FORMAT_IS_UBWC(fmt))
> > + opmode |= MDSS_MDP_OP_BWC_EN;
> > + src_format |= (fmt->fetch_mode & 3) << 30; /*FRAME_FORMAT */
> > + switch (ctx->ubwc->ubwc_enc_version) {
> > + case UBWC_1_0:
> > + fast_clear = fmt->alpha_enable ? BIT(31) : 0;
> > + DPU_REG_WRITE(c, offset + SSPP_REC_UBWC_STATIC_CTRL,
> > + fast_clear | (ctx->ubwc->ubwc_swizzle & 0x1) |
> > + BIT(8) |
> > + (ctx->ubwc->highest_bank_bit << 4));
> > + break;
> > + case UBWC_2_0:
> > + fast_clear = fmt->alpha_enable ? BIT(31) : 0;
> > + DPU_REG_WRITE(c, offset + SSPP_REC_UBWC_STATIC_CTRL,
> > + fast_clear | (ctx->ubwc->ubwc_swizzle) |
> > + (ctx->ubwc->highest_bank_bit << 4));
> > + break;
> > + case UBWC_3_0:
> > + DPU_REG_WRITE(c, offset + SSPP_REC_UBWC_STATIC_CTRL,
> > + BIT(30) | (ctx->ubwc->ubwc_swizzle) |
> > + (ctx->ubwc->highest_bank_bit << 4));
> > + break;
> > + case UBWC_4_0:
> > + DPU_REG_WRITE(c, offset + SSPP_REC_UBWC_STATIC_CTRL,
> > + MSM_FORMAT_IS_YUV(fmt) ? 0 : BIT(30));
> > + break;
> > + }
> > + }
> > +
> > + opmode |= MDSS_MDP_OP_PE_OVERRIDE;
> > +
> > + /* if this is YUV pixel format, enable CSC */
> > + if (MSM_FORMAT_IS_YUV(fmt))
> > + src_format |= BIT(15);
> > +
> > + if (MSM_FORMAT_IS_DX(fmt))
> > + src_format |= BIT(14);
> > +
> > + /* update scaler opmode, if appropriate */
> > + if (test_bit(DPU_SSPP_CSC, &ctx->cap->features))
> > + _sspp_setup_opmode(ctx, VIG_OP_CSC_EN | VIG_OP_CSC_SRC_DATAFMT,
> > + MSM_FORMAT_IS_YUV(fmt));
> > + else if (test_bit(DPU_SSPP_CSC_10BIT, &ctx->cap->features))
> > + _sspp_setup_csc10_opmode(ctx,
> > + VIG_CSC_10_EN | VIG_CSC_10_SRC_DATAFMT,
> > + MSM_FORMAT_IS_YUV(fmt));
>
> This function is a nice c&p of the old one. Can we abstract it at least
> a bit and let it be shared between the old code and the new one?
OK, I will try to abstract some common code into a function.
> > +
> > + DPU_REG_WRITE(c, offset + SSPP_REC_SRC_FORMAT, src_format);
> > + DPU_REG_WRITE(c, offset + SSPP_REC_SRC_UNPACK_PATTERN, unpack);
> > + DPU_REG_WRITE(c, offset + SSPP_REC_SRC_OP_MODE, opmode);
> > +
> > + /* clear previous UBWC error */
> > + DPU_REG_WRITE(c, offset + SSPP_REC_UBWC_ERROR_STATUS, BIT(31));
> > +}
> > +
> > static void dpu_hw_sspp_setup_pe_config(struct dpu_hw_sspp *ctx,
> > struct dpu_hw_pixel_ext *pe_ext)
> > {
> > @@ -385,6 +637,53 @@ static void dpu_hw_sspp_setup_pe_config(struct dpu_hw_sspp *ctx,
> > tot_req_pixels[3]);
> > }
> >
> > +static void dpu_hw_sspp_setup_pe_config_v13(struct dpu_hw_sspp *ctx,
> > + struct dpu_hw_pixel_ext *pe_ext)
> > +{
> > + struct dpu_hw_blk_reg_map *c;
> > + u8 color;
> > + u32 lr_pe[4], tb_pe[4], tot_req_pixels[4];
> > + const u32 bytemask = 0xff;
> > + const u32 shortmask = 0xffff;
> > + u32 offset = ctx->cap->sblk->sspp_rec0_blk.base;
> > +
> > + if (!ctx || !pe_ext)
> > + return;
> > +
> > + c = &ctx->hw;
> > + /* program SW pixel extension override for all pipes*/
> > + for (color = 0; color < DPU_MAX_PLANES; color++) {
> > + /* color 2 has the same set of registers as color 1 */
> > + if (color == 2)
> > + continue;
> > +
> > + lr_pe[color] = ((pe_ext->right_ftch[color] & bytemask) << 24) |
> > + ((pe_ext->right_rpt[color] & bytemask) << 16) |
> > + ((pe_ext->left_ftch[color] & bytemask) << 8) |
> > + (pe_ext->left_rpt[color] & bytemask);
> > +
> > + tb_pe[color] = ((pe_ext->btm_ftch[color] & bytemask) << 24) |
> > + ((pe_ext->btm_rpt[color] & bytemask) << 16) |
> > + ((pe_ext->top_ftch[color] & bytemask) << 8) |
> > + (pe_ext->top_rpt[color] & bytemask);
> > +
> > + tot_req_pixels[color] = (((pe_ext->roi_h[color] +
> > + pe_ext->num_ext_pxls_top[color] +
> > + pe_ext->num_ext_pxls_btm[color]) & shortmask) << 16) |
> > + ((pe_ext->roi_w[color] +
> > + pe_ext->num_ext_pxls_left[color] +
> > + pe_ext->num_ext_pxls_right[color]) & shortmask);
> > + }
>
> Same comment. No C&P, of a sensible code, please.
OK, will do. Thanks
> > +
> > + /* color 0 */
> > + DPU_REG_WRITE(c, SSPP_REC_SW_PIX_EXT_LR + offset, lr_pe[0]);
> > + DPU_REG_WRITE(c, SSPP_REC_SW_PIX_EXT_TB + offset, tb_pe[0]);
> > +
> > + /* color 1 and color 2 */
> > + DPU_REG_WRITE(c, SSPP_REC_SW_PIX_EXT_LR_ODX + offset, lr_pe[1]);
> > + DPU_REG_WRITE(c, SSPP_REC_SW_PIX_EXT_TB_ODX + offset, tb_pe[1]);
> > +}
> > +
> > static void _dpu_hw_sspp_setup_scaler3(struct dpu_hw_sspp *ctx,
> > struct dpu_hw_scaler3_cfg *scaler3_cfg,
> > const struct msm_format *format)
> > @@ -443,6 +742,36 @@ static void dpu_hw_sspp_setup_rects(struct dpu_sw_pipe *pipe,
> > DPU_REG_WRITE(c, out_xy_off, dst_xy);
> > }
> >
> > +static void dpu_hw_sspp_setup_rects_v13(struct dpu_sw_pipe *pipe,
> > + struct dpu_sw_pipe_cfg *cfg)
> > +{
> > + struct dpu_hw_sspp *ctx = pipe->sspp;
> > + struct dpu_hw_blk_reg_map *c;
> > + u32 src_size, src_xy, dst_size, dst_xy;
> > + u32 offset;
> > +
> > + if (!ctx || !cfg)
> > + return;
> > +
> > + c = &ctx->hw;
> > +
> > + offset = _sspp_calculate_rect_off(pipe->multirect_index, ctx);
> > +
> > + /* src and dest rect programming */
> > + src_xy = (cfg->src_rect.y1 << 16) | cfg->src_rect.x1;
> > + src_size = (drm_rect_height(&cfg->src_rect) << 16) |
> > + drm_rect_width(&cfg->src_rect);
> > + dst_xy = (cfg->dst_rect.y1 << 16) | cfg->dst_rect.x1;
> > + dst_size = (drm_rect_height(&cfg->dst_rect) << 16) |
> > + drm_rect_width(&cfg->dst_rect);
> > +
> > + /* rectangle register programming */
> > + DPU_REG_WRITE(c, offset + SSPP_REC_SRC_SIZE, src_size);
> > + DPU_REG_WRITE(c, offset + SSPP_REC_SRC_XY, src_xy);
> > + DPU_REG_WRITE(c, offset + SSPP_REC_OUT_SIZE, dst_size);
> > + DPU_REG_WRITE(c, offset + SSPP_REC_OUT_XY, dst_xy);
> > +}
> > +
> > static void dpu_hw_sspp_setup_sourceaddress(struct dpu_sw_pipe *pipe,
> > struct dpu_hw_fmt_layout *layout)
> > {
> > @@ -497,6 +826,29 @@ static void dpu_hw_sspp_setup_sourceaddress(struct dpu_sw_pipe *pipe,
> > DPU_REG_WRITE(&ctx->hw, SSPP_SRC_YSTRIDE1, ystride1);
> > }
> >
> > +static void dpu_hw_sspp_setup_sourceaddress_v13(struct dpu_sw_pipe *pipe,
> > + struct dpu_hw_fmt_layout *layout)
> > +{
> > + struct dpu_hw_sspp *ctx = pipe->sspp;
> > + int i;
> > + u32 addr, ystride0, ystride1;
> > +
> > + if (!ctx)
> > + return;
> > +
> > + addr = _sspp_calculate_rect_off(pipe->multirect_index, ctx);
> > +
> > + for (i = 0; i < ARRAY_SIZE(layout->plane_addr); i++)
> > + DPU_REG_WRITE(&ctx->hw, addr + SSPP_REC_SRC0_ADDR + i * 0x4,
> > + layout->plane_addr[i]);
> > +
> > + ystride0 = (layout->plane_pitch[0]) | (layout->plane_pitch[2] << 16);
> > + ystride1 = (layout->plane_pitch[1]) | (layout->plane_pitch[3] << 16);
> > +
> > + DPU_REG_WRITE(&ctx->hw, addr + SSPP_REC_SRC_YSTRIDE0, ystride0);
> > + DPU_REG_WRITE(&ctx->hw, addr + SSPP_REC_SRC_YSTRIDE1, ystride1);
> > +}
> > +
> > static void dpu_hw_sspp_setup_csc(struct dpu_hw_sspp *ctx,
> > const struct dpu_csc_cfg *data)
> > {
> > @@ -536,6 +888,24 @@ static void dpu_hw_sspp_setup_solidfill(struct dpu_sw_pipe *pipe, u32 color)
> > color);
> > }
> >
> > +static void dpu_hw_sspp_setup_solidfill_v13(struct dpu_sw_pipe *pipe, u32 color)
> > +{
> > + struct dpu_hw_sspp *ctx = pipe->sspp;
> > + struct dpu_hw_fmt_layout cfg;
> > + u32 offset;
> > +
> > + if (!ctx)
> > + return;
> > +
> > + offset = _sspp_calculate_rect_off(pipe->multirect_index, ctx);
> > +
> > + /* cleanup source addresses */
> > + memset(&cfg, 0, sizeof(cfg));
> > + ctx->ops.setup_sourceaddress(pipe, &cfg);
> > +
> > + DPU_REG_WRITE(&ctx->hw, offset + SSPP_REC_SRC_CONSTANT_COLOR, color);
> > +}
> > +
> > static void dpu_hw_sspp_setup_qos_lut(struct dpu_hw_sspp *ctx,
> > struct dpu_hw_qos_cfg *cfg)
> > {
> > @@ -547,6 +917,17 @@ static void dpu_hw_sspp_setup_qos_lut(struct dpu_hw_sspp *ctx,
> > cfg);
> > }
> >
> > +static void dpu_hw_sspp_setup_qos_lut_v13(struct dpu_hw_sspp *ctx,
> > + struct dpu_hw_qos_cfg *cfg)
> > +{
> > + if (!ctx || !cfg)
> > + return;
> > +
> > + _dpu_hw_setup_qos_lut_v13(&ctx->hw, 0,
> > + ctx->mdss_ver->core_major_ver >= 4,
>
> This is v13, of course it is >= 4.
OK will fix.
> > + cfg);
> > +}
> > +
> > static void dpu_hw_sspp_setup_qos_ctrl(struct dpu_hw_sspp *ctx,
> > bool danger_safe_en)
> > {
> > @@ -557,6 +938,16 @@ static void dpu_hw_sspp_setup_qos_ctrl(struct dpu_hw_sspp *ctx,
> > danger_safe_en ? SSPP_QOS_CTRL_DANGER_SAFE_EN : 0);
> > }
> >
> > +static void dpu_hw_sspp_setup_qos_ctrl_v13(struct dpu_hw_sspp *ctx,
> > + bool danger_safe_en)
> > +{
> > + if (!ctx)
> > + return;
> > +
> > + DPU_REG_WRITE(&ctx->hw, SSPP_CMN_QOS_CTRL,
> > + danger_safe_en ? SSPP_QOS_CTRL_DANGER_SAFE_EN : 0);
> > +}
> > +
> > static void dpu_hw_sspp_setup_cdp(struct dpu_sw_pipe *pipe,
> > const struct msm_format *fmt,
> > bool enable)
> > @@ -576,6 +967,20 @@ static void dpu_hw_sspp_setup_cdp(struct dpu_sw_pipe *pipe,
> > dpu_setup_cdp(&ctx->hw, cdp_cntl_offset, fmt, enable);
> > }
> >
> > +static void dpu_hw_sspp_setup_cdp_v13(struct dpu_sw_pipe *pipe,
> > + const struct msm_format *fmt,
> > + bool enable)
> > +{
> > + struct dpu_hw_sspp *ctx = pipe->sspp;
> > + u32 offset = 0;
> > +
> > + if (!ctx)
> > + return;
> > +
> > + offset = _sspp_calculate_rect_off(pipe->multirect_index, ctx);
> > + dpu_setup_cdp(&ctx->hw, offset + SSPP_REC_CDP_CNTL, fmt, enable);
> > +}
> > +
> > static bool dpu_hw_sspp_setup_clk_force_ctrl(struct dpu_hw_sspp *ctx, bool enable)
> > {
> > static const struct dpu_clk_ctrl_reg sspp_clk_ctrl = {
> > @@ -586,36 +991,69 @@ static bool dpu_hw_sspp_setup_clk_force_ctrl(struct dpu_hw_sspp *ctx, bool enabl
> > return dpu_hw_clk_force_ctrl(&ctx->hw, &sspp_clk_ctrl, enable);
> > }
> >
> > +static bool dpu_hw_sspp_setup_clk_force_ctrl_v13(struct dpu_hw_sspp *ctx, bool enable)
> > +{
> > + static const struct dpu_clk_ctrl_reg sspp_clk_ctrl = {
> > + .reg_off = SSPP_CMN_CLK_CTRL,
> > + .bit_off = 0
> > + };
> > +
> > + return dpu_hw_clk_force_ctrl(&ctx->hw, &sspp_clk_ctrl, enable);
> > +}
> > +
> > static void _setup_layer_ops(struct dpu_hw_sspp *c,
> > unsigned long features, const struct dpu_mdss_version *mdss_rev)
> > {
> > - c->ops.setup_format = dpu_hw_sspp_setup_format;
> > - c->ops.setup_rects = dpu_hw_sspp_setup_rects;
> > - c->ops.setup_sourceaddress = dpu_hw_sspp_setup_sourceaddress;
> > - c->ops.setup_solidfill = dpu_hw_sspp_setup_solidfill;
> > - c->ops.setup_pe = dpu_hw_sspp_setup_pe_config;
> > -
> > - if (test_bit(DPU_SSPP_QOS, &features)) {
> > - c->ops.setup_qos_lut = dpu_hw_sspp_setup_qos_lut;
> > - c->ops.setup_qos_ctrl = dpu_hw_sspp_setup_qos_ctrl;
> > + if (mdss_rev->core_major_ver >= 13) {
> > + c->ops.setup_format = dpu_hw_sspp_setup_format_v13;
> > + c->ops.setup_rects = dpu_hw_sspp_setup_rects_v13;
> > + c->ops.setup_sourceaddress = dpu_hw_sspp_setup_sourceaddress_v13;
> > + c->ops.setup_solidfill = dpu_hw_sspp_setup_solidfill_v13;
> > + c->ops.setup_pe = dpu_hw_sspp_setup_pe_config_v13;
> > +
> > + if (test_bit(DPU_SSPP_QOS, &features)) {
> > + c->ops.setup_qos_lut = dpu_hw_sspp_setup_qos_lut_v13;
> > + c->ops.setup_qos_ctrl = dpu_hw_sspp_setup_qos_ctrl_v13;
> > + }
> > +
> > + if (test_bit(DPU_SSPP_SMART_DMA_V1, &c->cap->features) ||
> > + test_bit(DPU_SSPP_SMART_DMA_V2, &c->cap->features))
> > + c->ops.setup_multirect = dpu_hw_sspp_setup_multirect_v13;
> > +
> > + if (test_bit(DPU_SSPP_CDP, &features))
> > + c->ops.setup_cdp = dpu_hw_sspp_setup_cdp_v13;
> > +
> > + c->ops.setup_clk_force_ctrl = dpu_hw_sspp_setup_clk_force_ctrl_v13;
> > + } else {
> > + c->ops.setup_format = dpu_hw_sspp_setup_format;
> > + c->ops.setup_rects = dpu_hw_sspp_setup_rects;
> > + c->ops.setup_sourceaddress = dpu_hw_sspp_setup_sourceaddress;
> > + c->ops.setup_solidfill = dpu_hw_sspp_setup_solidfill;
> > + c->ops.setup_pe = dpu_hw_sspp_setup_pe_config;
> > +
> > + if (test_bit(DPU_SSPP_QOS, &features)) {
> > + c->ops.setup_qos_lut = dpu_hw_sspp_setup_qos_lut;
> > + c->ops.setup_qos_ctrl = dpu_hw_sspp_setup_qos_ctrl;
> > + }
> > +
> > + if (test_bit(DPU_SSPP_SMART_DMA_V1, &c->cap->features) ||
> > + test_bit(DPU_SSPP_SMART_DMA_V2, &c->cap->features))
> > + c->ops.setup_multirect = dpu_hw_sspp_setup_multirect;
> > +
> > + if (test_bit(DPU_SSPP_CDP, &features))
> > + c->ops.setup_cdp = dpu_hw_sspp_setup_cdp;
> > +
> > + if (mdss_rev->core_major_ver >= 9)
> > + c->ops.setup_clk_force_ctrl = dpu_hw_sspp_setup_clk_force_ctrl;
> > }
> >
> > if (test_bit(DPU_SSPP_CSC, &features) ||
> > test_bit(DPU_SSPP_CSC_10BIT, &features))
> > c->ops.setup_csc = dpu_hw_sspp_setup_csc;
> >
> > - if (test_bit(DPU_SSPP_SMART_DMA_V1, &c->cap->features) ||
> > - test_bit(DPU_SSPP_SMART_DMA_V2, &c->cap->features))
> > - c->ops.setup_multirect = dpu_hw_sspp_setup_multirect;
> > -
> > if (test_bit(DPU_SSPP_SCALER_QSEED3_COMPATIBLE, &features))
> > c->ops.setup_scaler = _dpu_hw_sspp_setup_scaler3;
>
> If the only common items are CSC and scaler (and both are already pretty
> abstracted), please don't squash it in the same old file. Create new
> file for the new hardware block (like we did for DSC 1.1 vs 1.2).
Yes, I agree. My original idea is to make a file named dpu_hw_sspp_v13.c to include
all DPU version 13 SSPP change. Will do it in next patch.
> >
> > - if (test_bit(DPU_SSPP_CDP, &features))
> > - c->ops.setup_cdp = dpu_hw_sspp_setup_cdp;
> > -
> > - if (mdss_rev->core_major_ver >= 9)
> > - c->ops.setup_clk_force_ctrl = dpu_hw_sspp_setup_clk_force_ctrl;
> > }
> >
> > #ifdef CONFIG_DEBUG_FS
> > diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_util.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_util.c
> > index 486be346d40d..1acf456c425b 100644
> > --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_util.c
> > +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_util.c
> > @@ -81,6 +81,13 @@ static u32 dpu_hw_util_log_mask = DPU_DBG_MASK_NONE;
> > #define QOS_CREQ_LUT_0 0x14
> > #define QOS_CREQ_LUT_1 0x18
> >
> > +/* CMN_QOS_LUT */
> > +#define SSPP_CMN_DANGER_LUT 0x2C
> > +#define SSPP_CMN_SAFE_LUT 0x30
> > +#define SSPP_CMN_CREQ_LUT_0 0x34
> > +#define SSPP_CMN_CREQ_LUT_1 0x38
> > +#define SSPP_CMN_QOS_CTRL 0x28
>
> Lowercase hex, sort by the address.
OK will fix
> > +
> > /* QOS_QOS_CTRL */
> > #define QOS_QOS_CTRL_DANGER_SAFE_EN BIT(0)
> > #define QOS_QOS_CTRL_DANGER_VBLANK_MASK GENMASK(5, 4)
> > @@ -475,6 +482,22 @@ void _dpu_hw_setup_qos_lut(struct dpu_hw_blk_reg_map *c, u32 offset,
> > cfg->danger_safe_en ? QOS_QOS_CTRL_DANGER_SAFE_EN : 0);
> > }
> >
> > +void _dpu_hw_setup_qos_lut_v13(struct dpu_hw_blk_reg_map *c, u32 offset,
> > + bool qos_8lvl,
> > + const struct dpu_hw_qos_cfg *cfg)
> > +{
> > + DPU_REG_WRITE(c, offset + SSPP_CMN_DANGER_LUT, cfg->danger_lut);
> > + DPU_REG_WRITE(c, offset + SSPP_CMN_SAFE_LUT, cfg->safe_lut);
> > +
> > + if (qos_8lvl) {
> > + DPU_REG_WRITE(c, offset + SSPP_CMN_CREQ_LUT_0, cfg->creq_lut);
> > + DPU_REG_WRITE(c, offset + SSPP_CMN_CREQ_LUT_1, cfg->creq_lut >> 32);
> > + }
> > +
> > + DPU_REG_WRITE(c, offset + SSPP_CMN_QOS_CTRL,
> > + cfg->danger_safe_en ? QOS_QOS_CTRL_DANGER_SAFE_EN : 0);
> > +}
> > +
> > /*
> > * note: Aside from encoders, input_sel should be set to 0x0 by default
> > */
> > diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_util.h b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_util.h
> > index 67b08e99335d..9d442d6fc11c 100644
> > --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_util.h
> > +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_util.h
> > @@ -360,6 +360,10 @@ void _dpu_hw_setup_qos_lut(struct dpu_hw_blk_reg_map *c, u32 offset,
> > bool qos_8lvl,
> > const struct dpu_hw_qos_cfg *cfg);
> >
> > +void _dpu_hw_setup_qos_lut_v13(struct dpu_hw_blk_reg_map *c, u32 offset,
> > + bool qos_8lvl,
> > + const struct dpu_hw_qos_cfg *cfg);
> > +
> > void dpu_hw_setup_misr(struct dpu_hw_blk_reg_map *c,
> > u32 misr_ctrl_offset, u8 input_sel);
> >
> > --
> > 2.34.1
> >
>
> --
> With best wishes
> Dmitry
Thanks,
Yuanjie
^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH 07/12] drm/panel: Set sufficient voltage for panel nt37801
2025-10-23 12:14 ` Dmitry Baryshkov
@ 2025-10-24 6:00 ` yuanjiey
2025-10-27 12:22 ` Dmitry Baryshkov
0 siblings, 1 reply; 77+ messages in thread
From: yuanjiey @ 2025-10-24 6:00 UTC (permalink / raw)
To: Dmitry Baryshkov
Cc: robin.clark, lumag, abhinav.kumar, sean, marijn.suijten, airlied,
simona, maarten.lankhorst, mripard, tzimmermann, robh, krzk+dt,
conor+dt, quic_mkrishn, jonathan, quic_khsieh, neil.armstrong,
linux-arm-msm, dri-devel, freedreno, devicetree, linux-kernel,
tingwei.zhang, aiqun.yu, yongxing.mou
On Thu, Oct 23, 2025 at 03:14:38PM +0300, Dmitry Baryshkov wrote:
> On Thu, Oct 23, 2025 at 04:06:04PM +0800, yuanjie yang wrote:
> > From: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
> >
> > The NT37801 Sepc V1.0 chapter "5.7.1 Power On Sequence" states
> > VDDI=1.65V~1.95V, so set sufficient voltage for panel nt37801.
> >
> > Signed-off-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
> > Signed-off-by: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
> > ---
> > drivers/gpu/drm/panel/panel-novatek-nt37801.c | 5 +++++
> > 1 file changed, 5 insertions(+)
> >
> > diff --git a/drivers/gpu/drm/panel/panel-novatek-nt37801.c b/drivers/gpu/drm/panel/panel-novatek-nt37801.c
> > index d6a37d7e0cc6..7eda16e0c1f9 100644
> > --- a/drivers/gpu/drm/panel/panel-novatek-nt37801.c
> > +++ b/drivers/gpu/drm/panel/panel-novatek-nt37801.c
> > @@ -267,6 +267,11 @@ static int novatek_nt37801_probe(struct mipi_dsi_device *dsi)
> > if (ret < 0)
> > return ret;
> >
> > + ret = regulator_set_voltage(ctx->supplies[0].consumer,
> > + 1650000, 1950000);
>
> This should be done in the DT. Limit the voltage per the user.
Two reason:
1.
I see https://patchwork.freedesktop.org/patch/354612/
panel panel-novatek-nt35510.c also use regulator_set_voltage set right voltage,
so I do the same work.
2. Kaanapali vddio regulator:
vreg_l12b_1p8: ldo12 {
regulator-name = "vreg_l12b_1p8";
regulator-min-microvolt = <1200000>;
regulator-max-microvolt = <1800000>;
Voltage is from 1.2~.1.8 V , So I can not set it 1.65~1.95 V from DT(1.95V is beyond the allowed range).
So I use regulator_set_voltage to set voltage, and regulator_set_voltage will choose the appropriate voltage.
Thanks,
Yuanjie
> > + if (ret < 0)
> > + return ret;
> > +
> > ctx->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_OUT_LOW);
> > if (IS_ERR(ctx->reset_gpio))
> > return dev_err_probe(dev, PTR_ERR(ctx->reset_gpio),
> > --
> > 2.34.1
> >
>
> --
> With best wishes
> Dmitry
^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH 11/12] dt-bindings: display/msm: dsi-controller-main: Add Kaanapali
2025-10-23 12:16 ` Dmitry Baryshkov
@ 2025-10-24 6:08 ` yuanjiey
0 siblings, 0 replies; 77+ messages in thread
From: yuanjiey @ 2025-10-24 6:08 UTC (permalink / raw)
To: Dmitry Baryshkov
Cc: robin.clark, lumag, abhinav.kumar, sean, marijn.suijten, airlied,
simona, maarten.lankhorst, mripard, tzimmermann, robh, krzk+dt,
conor+dt, quic_mkrishn, jonathan, quic_khsieh, neil.armstrong,
linux-arm-msm, dri-devel, freedreno, devicetree, linux-kernel,
tingwei.zhang, aiqun.yu, yongxing.mou
On Thu, Oct 23, 2025 at 03:16:11PM +0300, Dmitry Baryshkov wrote:
> On Thu, Oct 23, 2025 at 04:06:08PM +0800, yuanjie yang wrote:
> > From: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
> >
> > Add DSI Controller for Kaanapali.
>
> Please say something more important here. Why do we need new compatible
> for this platform, etc.
DSI Controller for Kaanapali have no significant diiference with previous version(SM8750).
But some register change make it imcompatible with previous version(SM8750).
I will give this reason in my next patch.
Thanks
Yuanjie.
> >
> > Signed-off-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
> > Signed-off-by: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
> > ---
> > .../devicetree/bindings/display/msm/dsi-controller-main.yaml | 2 ++
> > 1 file changed, 2 insertions(+)
> >
> > diff --git a/Documentation/devicetree/bindings/display/msm/dsi-controller-main.yaml b/Documentation/devicetree/bindings/display/msm/dsi-controller-main.yaml
> > index 4400d4cce072..536ebf331828 100644
> > --- a/Documentation/devicetree/bindings/display/msm/dsi-controller-main.yaml
> > +++ b/Documentation/devicetree/bindings/display/msm/dsi-controller-main.yaml
> > @@ -15,6 +15,7 @@ properties:
> > - items:
> > - enum:
> > - qcom,apq8064-dsi-ctrl
> > + - qcom,kaanapali-dsi-ctrl
> > - qcom,msm8226-dsi-ctrl
> > - qcom,msm8916-dsi-ctrl
> > - qcom,msm8953-dsi-ctrl
> > @@ -369,6 +370,7 @@ allOf:
> > compatible:
> > contains:
> > enum:
> > + - qcom,kaanapali-dsi-ctrl
> > - qcom,sm8750-dsi-ctrl
> > then:
> > properties:
> > --
> > 2.34.1
> >
>
> --
> With best wishes
> Dmitry
^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH 10/12] dt-bindings: display/msm: dsi-phy-7nm: Add Kaanapali DSi PHY
2025-10-23 12:16 ` Dmitry Baryshkov
@ 2025-10-24 6:10 ` yuanjiey
2025-10-27 13:30 ` Dmitry Baryshkov
0 siblings, 1 reply; 77+ messages in thread
From: yuanjiey @ 2025-10-24 6:10 UTC (permalink / raw)
To: Dmitry Baryshkov
Cc: robin.clark, lumag, abhinav.kumar, sean, marijn.suijten, airlied,
simona, maarten.lankhorst, mripard, tzimmermann, robh, krzk+dt,
conor+dt, quic_mkrishn, jonathan, quic_khsieh, neil.armstrong,
linux-arm-msm, dri-devel, freedreno, devicetree, linux-kernel,
tingwei.zhang, aiqun.yu, yongxing.mou
On Thu, Oct 23, 2025 at 03:16:31PM +0300, Dmitry Baryshkov wrote:
> On Thu, Oct 23, 2025 at 04:06:07PM +0800, yuanjie yang wrote:
> > From: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
>
> In the subject: DSI, not DSi
OK will note.
> >
> > Add DSI PHY for Kaanapali.
>
> Why?
DSI phy for Kaanapali have no significant diiference with previous version(SM8750).
But some register change make it imcompatible with previous version(SM8750).
I will give this reason in my next patch.
Thanks
Yuanjie.
>
> >
> > Signed-off-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
> > Signed-off-by: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
> > ---
> > Documentation/devicetree/bindings/display/msm/dsi-phy-7nm.yaml | 1 +
> > 1 file changed, 1 insertion(+)
> >
> > diff --git a/Documentation/devicetree/bindings/display/msm/dsi-phy-7nm.yaml b/Documentation/devicetree/bindings/display/msm/dsi-phy-7nm.yaml
> > index 1ca820a500b7..a6e044eed3df 100644
> > --- a/Documentation/devicetree/bindings/display/msm/dsi-phy-7nm.yaml
> > +++ b/Documentation/devicetree/bindings/display/msm/dsi-phy-7nm.yaml
> > @@ -17,6 +17,7 @@ properties:
> > enum:
> > - qcom,dsi-phy-7nm
> > - qcom,dsi-phy-7nm-8150
> > + - qcom,kaanapali-dsi-phy-3nm
> > - qcom,sa8775p-dsi-phy-5nm
> > - qcom,sar2130p-dsi-phy-5nm
> > - qcom,sc7280-dsi-phy-7nm
> > --
> > 2.34.1
> >
>
> --
> With best wishes
> Dmitry
^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH 12/12] dt-bindings: display/msm: qcom,kaanapali-mdss: Add Kaanapali
2025-10-23 12:17 ` Dmitry Baryshkov
@ 2025-10-24 6:16 ` yuanjiey
0 siblings, 0 replies; 77+ messages in thread
From: yuanjiey @ 2025-10-24 6:16 UTC (permalink / raw)
To: Dmitry Baryshkov
Cc: robin.clark, lumag, abhinav.kumar, sean, marijn.suijten, airlied,
simona, maarten.lankhorst, mripard, tzimmermann, robh, krzk+dt,
conor+dt, quic_mkrishn, jonathan, quic_khsieh, neil.armstrong,
linux-arm-msm, dri-devel, freedreno, devicetree, linux-kernel,
tingwei.zhang, aiqun.yu, yongxing.mou
On Thu, Oct 23, 2025 at 03:17:53PM +0300, Dmitry Baryshkov wrote:
> On Thu, Oct 23, 2025 at 04:17:36PM +0800, yuanjie yang wrote:
> > From: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
> >
> > Add MDSS/MDP display subsystem for Qualcomm Kaanapali.
> >
> > Signed-off-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
> > Signed-off-by: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
> > ---
> > .../display/msm/qcom,kaanapali-mdss.yaml | 298 ++++++++++++++++++
> > 1 file changed, 298 insertions(+)
> > create mode 100644 Documentation/devicetree/bindings/display/msm/qcom,kaanapali-mdss.yaml
> >
> > +
> > + "^phy@[0-9a-f]+$":
> > + type: object
> > + additionalProperties: true
> > + properties:
> > + compatible:
> > + const: qcom,kaanapali-dsi-phy-3nm
> > +
> > +required:
> > + - compatible
> > +
> > +unevaluatedProperties: false
> > +
> > +
> > + mdss_dsi0_phy: phy@ae95000 {
> > + compatible = "qcom,kaanapali-dsi-phy-3nm", "qcom,sm8750-dsi-phy-3nm";
>
> This doesn't match what you've written above. Was it validated?
Thanks for your reminder, this is a mistake forget to fix.
correct here:
compatible = "qcom,kaanapali-dsi-phy-3nm";
qcom,kaanapali-dsi-phy-3nm and qcom,sm8750-dsi-phy-3nm have different cfg.
Will be more careful to push a better patch.
Thanks for your careful review.
Thanks,
Yuanjie
> > + reg = <0x09ac1000 0x200>,
> > + <0x09ac1200 0x280>,
> > + <0x09ac1500 0x400>;
> > + reg-names = "dsi_phy",
> > + "dsi_phy_lane",
> > + "dsi_pll";
> > +
> > + clocks = <&disp_cc_mdss_ahb_clk>,
> > + <&rpmhcc RPMH_CXO_CLK>;
> > + clock-names = "iface",
> > + "ref";
> > +
> > + vdds-supply = <&vreg_l3i_0p88>;
> > +
> > + #clock-cells = <1>;
> > + #phy-cells = <0>;
> > + };
> > + };
> > --
> > 2.34.1
> >
>
> --
> With best wishes
> Dmitry
^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH 09/12] dt-bindings: display/msm: qcom,kaanapali-dpu: Add Kaanapali
2025-10-23 8:06 ` [PATCH 09/12] dt-bindings: display/msm: qcom,kaanapali-dpu: Add Kaanapali yuanjie yang
@ 2025-10-26 22:34 ` Rob Herring (Arm)
0 siblings, 0 replies; 77+ messages in thread
From: Rob Herring (Arm) @ 2025-10-26 22:34 UTC (permalink / raw)
To: yuanjie yang
Cc: conor+dt, simona, airlied, quic_khsieh, lumag, marijn.suijten,
aiqun.yu, linux-kernel, dri-devel, tzimmermann, quic_mkrishn,
neil.armstrong, jonathan, robin.clark, maarten.lankhorst,
abhinav.kumar, freedreno, yongxing.mou, krzk+dt, devicetree,
tingwei.zhang, mripard, sean, linux-arm-msm
On Thu, 23 Oct 2025 16:06:06 +0800, yuanjie yang wrote:
> From: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
>
> Add DPU version 13.0 for Qualcomm Kaanapali Soc. The Kaanapali
> DPU and SM8750 have significant differences, including additions
> and removals of registers, as well as changes in register addresses.
>
> Signed-off-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
> Signed-off-by: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
> ---
> .../devicetree/bindings/display/msm/qcom,sm8650-dpu.yaml | 1 +
> 1 file changed, 1 insertion(+)
>
Acked-by: Rob Herring (Arm) <robh@kernel.org>
^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH 07/12] drm/panel: Set sufficient voltage for panel nt37801
2025-10-24 6:00 ` yuanjiey
@ 2025-10-27 12:22 ` Dmitry Baryshkov
2025-10-29 1:58 ` yuanjiey
0 siblings, 1 reply; 77+ messages in thread
From: Dmitry Baryshkov @ 2025-10-27 12:22 UTC (permalink / raw)
To: yuanjiey
Cc: robin.clark, lumag, abhinav.kumar, sean, marijn.suijten, airlied,
simona, maarten.lankhorst, mripard, tzimmermann, robh, krzk+dt,
conor+dt, quic_mkrishn, jonathan, quic_khsieh, neil.armstrong,
linux-arm-msm, dri-devel, freedreno, devicetree, linux-kernel,
tingwei.zhang, aiqun.yu, yongxing.mou
On Fri, Oct 24, 2025 at 02:00:50PM +0800, yuanjiey wrote:
> On Thu, Oct 23, 2025 at 03:14:38PM +0300, Dmitry Baryshkov wrote:
> > On Thu, Oct 23, 2025 at 04:06:04PM +0800, yuanjie yang wrote:
> > > From: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
> > >
> > > The NT37801 Sepc V1.0 chapter "5.7.1 Power On Sequence" states
> > > VDDI=1.65V~1.95V, so set sufficient voltage for panel nt37801.
> > >
> > > Signed-off-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
> > > Signed-off-by: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
> > > ---
> > > drivers/gpu/drm/panel/panel-novatek-nt37801.c | 5 +++++
> > > 1 file changed, 5 insertions(+)
> > >
> > > diff --git a/drivers/gpu/drm/panel/panel-novatek-nt37801.c b/drivers/gpu/drm/panel/panel-novatek-nt37801.c
> > > index d6a37d7e0cc6..7eda16e0c1f9 100644
> > > --- a/drivers/gpu/drm/panel/panel-novatek-nt37801.c
> > > +++ b/drivers/gpu/drm/panel/panel-novatek-nt37801.c
> > > @@ -267,6 +267,11 @@ static int novatek_nt37801_probe(struct mipi_dsi_device *dsi)
> > > if (ret < 0)
> > > return ret;
> > >
> > > + ret = regulator_set_voltage(ctx->supplies[0].consumer,
> > > + 1650000, 1950000);
> >
> > This should be done in the DT. Limit the voltage per the user.
> Two reason:
> 1.
> I see https://patchwork.freedesktop.org/patch/354612/
>
> panel panel-novatek-nt35510.c also use regulator_set_voltage set right voltage,
> so I do the same work.
Please look for the majority rather than the exceptions. Out of all
panel drivers only two set the voltage directly.
>
> 2. Kaanapali vddio regulator:
>
> vreg_l12b_1p8: ldo12 {
> regulator-name = "vreg_l12b_1p8";
> regulator-min-microvolt = <1200000>;
> regulator-max-microvolt = <1800000>;
>
> Voltage is from 1.2~.1.8 V , So I can not set it 1.65~1.95 V from DT(1.95V is beyond the allowed range).
> So I use regulator_set_voltage to set voltage, and regulator_set_voltage will choose the appropriate voltage.
DT has to list the voltage values that work for the devices on that
particular platform. So, ldo12 should be listing 1.64 - 1.8 V.
>
>
> Thanks,
> Yuanjie
>
> > > + if (ret < 0)
> > > + return ret;
> > > +
> > > ctx->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_OUT_LOW);
> > > if (IS_ERR(ctx->reset_gpio))
> > > return dev_err_probe(dev, PTR_ERR(ctx->reset_gpio),
> > > --
> > > 2.34.1
> > >
> >
> > --
> > With best wishes
> > Dmitry
--
With best wishes
Dmitry
^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH 01/12] drm/msm/dsi/phy: Add support for Kaanapali
2025-10-24 3:27 ` yuanjiey
@ 2025-10-27 12:48 ` Konrad Dybcio
2025-10-27 13:14 ` Dmitry Baryshkov
1 sibling, 0 replies; 77+ messages in thread
From: Konrad Dybcio @ 2025-10-27 12:48 UTC (permalink / raw)
To: yuanjiey
Cc: Dmitry Baryshkov, robin.clark, lumag, abhinav.kumar, sean,
marijn.suijten, airlied, simona, maarten.lankhorst, mripard,
tzimmermann, robh, krzk+dt, conor+dt, quic_mkrishn, jonathan,
quic_khsieh, neil.armstrong, linux-arm-msm, dri-devel, freedreno,
devicetree, linux-kernel, tingwei.zhang, aiqun.yu, yongxing.mou
On 10/24/25 5:27 AM, yuanjiey wrote:
> On Thu, Oct 23, 2025 at 02:02:45PM +0200, Konrad Dybcio wrote:
>> On 10/23/25 1:48 PM, Dmitry Baryshkov wrote:
>>> On Thu, Oct 23, 2025 at 03:53:50PM +0800, yuanjie yang wrote:
>>>> From: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
>>>>
>>>> Add DSI PHY support for the Kaanapali platform.
>>>>
>>>> Signed-off-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
>>>> Signed-off-by: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
>>>> ---
>>
>> [...]
>>
>>>> + .io_start = { 0x9ac1000, 0xae97000 },
>>>
>>> These two addresses are very strange. Would you care to explain? Other
>>> than that there is no difference from SM8750 entry.
>>
>> They're correct.
>> Although they correspond to DSI_0 and DSI_2..
>>
>> Yuanjie, none of the DSI patches mention that v2.10.0 is packed with
>> new features. Please provide some more context and how that impacts
>> the hw description.
>
> Thanks for your reminder.
>
> Correct here:
> io_start = { 0x9ac1000, 0x9ac4000 } DSI_Phy0 DSI_phy1
>
> And v2.10.0 no clearly meaningful changes compared to v2.9.0.
> just some register address change.
Sorry, you're correct. v2.9 had a number of changes instead.
Konrad
^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH 01/12] drm/msm/dsi/phy: Add support for Kaanapali
2025-10-24 3:27 ` yuanjiey
2025-10-27 12:48 ` Konrad Dybcio
@ 2025-10-27 13:14 ` Dmitry Baryshkov
2025-10-27 13:20 ` Konrad Dybcio
1 sibling, 1 reply; 77+ messages in thread
From: Dmitry Baryshkov @ 2025-10-27 13:14 UTC (permalink / raw)
To: yuanjiey
Cc: Konrad Dybcio, robin.clark, lumag, abhinav.kumar, sean,
marijn.suijten, airlied, simona, maarten.lankhorst, mripard,
tzimmermann, robh, krzk+dt, conor+dt, quic_mkrishn, jonathan,
quic_khsieh, neil.armstrong, linux-arm-msm, dri-devel, freedreno,
devicetree, linux-kernel, tingwei.zhang, aiqun.yu, yongxing.mou
On Fri, Oct 24, 2025 at 11:27:53AM +0800, yuanjiey wrote:
> On Thu, Oct 23, 2025 at 02:02:45PM +0200, Konrad Dybcio wrote:
> > On 10/23/25 1:48 PM, Dmitry Baryshkov wrote:
> > > On Thu, Oct 23, 2025 at 03:53:50PM +0800, yuanjie yang wrote:
> > >> From: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
> > >>
> > >> Add DSI PHY support for the Kaanapali platform.
> > >>
> > >> Signed-off-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
> > >> Signed-off-by: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
> > >> ---
> >
> > [...]
> >
> > >> + .io_start = { 0x9ac1000, 0xae97000 },
> > >
> > > These two addresses are very strange. Would you care to explain? Other
> > > than that there is no difference from SM8750 entry.
> >
> > They're correct.
> > Although they correspond to DSI_0 and DSI_2..
> >
> > Yuanjie, none of the DSI patches mention that v2.10.0 is packed with
> > new features. Please provide some more context and how that impacts
> > the hw description.
>
> Thanks for your reminder.
>
> Correct here:
> io_start = { 0x9ac1000, 0x9ac4000 } DSI_Phy0 DSI_phy1
>
> And v2.10.0 no clearly meaningful changes compared to v2.9.0.
> just some register address change.
Addition of DSI2 is a meaningful change, which needs to be handled both
in the core and in the DSI / DSI PHY drivers.
>
> Thanks,
> Yuanjie
>
> > Konrad
--
With best wishes
Dmitry
^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH 01/12] drm/msm/dsi/phy: Add support for Kaanapali
2025-10-27 13:14 ` Dmitry Baryshkov
@ 2025-10-27 13:20 ` Konrad Dybcio
2025-10-27 13:29 ` Dmitry Baryshkov
0 siblings, 1 reply; 77+ messages in thread
From: Konrad Dybcio @ 2025-10-27 13:20 UTC (permalink / raw)
To: Dmitry Baryshkov, yuanjiey
Cc: robin.clark, lumag, abhinav.kumar, sean, marijn.suijten, airlied,
simona, maarten.lankhorst, mripard, tzimmermann, robh, krzk+dt,
conor+dt, quic_mkrishn, jonathan, quic_khsieh, neil.armstrong,
linux-arm-msm, dri-devel, freedreno, devicetree, linux-kernel,
tingwei.zhang, aiqun.yu, yongxing.mou
On 10/27/25 2:14 PM, Dmitry Baryshkov wrote:
> On Fri, Oct 24, 2025 at 11:27:53AM +0800, yuanjiey wrote:
>> On Thu, Oct 23, 2025 at 02:02:45PM +0200, Konrad Dybcio wrote:
>>> On 10/23/25 1:48 PM, Dmitry Baryshkov wrote:
>>>> On Thu, Oct 23, 2025 at 03:53:50PM +0800, yuanjie yang wrote:
>>>>> From: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
>>>>>
>>>>> Add DSI PHY support for the Kaanapali platform.
>>>>>
>>>>> Signed-off-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
>>>>> Signed-off-by: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
>>>>> ---
>>>
>>> [...]
>>>
>>>>> + .io_start = { 0x9ac1000, 0xae97000 },
>>>>
>>>> These two addresses are very strange. Would you care to explain? Other
>>>> than that there is no difference from SM8750 entry.
>>>
>>> They're correct.
>>> Although they correspond to DSI_0 and DSI_2..
>>>
>>> Yuanjie, none of the DSI patches mention that v2.10.0 is packed with
>>> new features. Please provide some more context and how that impacts
>>> the hw description.
>>
>> Thanks for your reminder.
>>
>> Correct here:
>> io_start = { 0x9ac1000, 0x9ac4000 } DSI_Phy0 DSI_phy1
>>
>> And v2.10.0 no clearly meaningful changes compared to v2.9.0.
>> just some register address change.
>
> Addition of DSI2 is a meaningful change, which needs to be handled both
> in the core and in the DSI / DSI PHY drivers.
DSI2 was introduced in 8750 already, but it was done without any
fanfare..
I see a diagram that shows an XBAR with inputs from DSI0 and DSI2,
and an output to DSI0_PHY (same thing on kaanapali - meaning this
patch is potentially wrong and should ref DSI1_PHY instead?)
Konrad
^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH 03/12] drm/msm/dpu: Compatible with Kaanapali interrupt register
2025-10-24 2:59 ` yuanjiey
@ 2025-10-27 13:21 ` Dmitry Baryshkov
2025-10-29 2:49 ` yuanjiey
0 siblings, 1 reply; 77+ messages in thread
From: Dmitry Baryshkov @ 2025-10-27 13:21 UTC (permalink / raw)
To: yuanjiey
Cc: robin.clark, lumag, abhinav.kumar, sean, marijn.suijten, airlied,
simona, maarten.lankhorst, mripard, tzimmermann, robh, krzk+dt,
conor+dt, quic_mkrishn, jonathan, quic_khsieh, neil.armstrong,
linux-arm-msm, dri-devel, freedreno, devicetree, linux-kernel,
tingwei.zhang, aiqun.yu, yongxing.mou
On Fri, Oct 24, 2025 at 10:59:07AM +0800, yuanjiey wrote:
> On Thu, Oct 23, 2025 at 02:59:12PM +0300, Dmitry Baryshkov wrote:
> > On Thu, Oct 23, 2025 at 03:53:52PM +0800, yuanjie yang wrote:
> > > From: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
> > >
> > > DPU version 13 introduces changes to the interrupt register
> > > layout. Update the driver to support these modifications for
> > > proper interrupt handling.
> >
> > So... Previous patch enabled support for the platform and it has been
> > using wrong registers for interrupts? I think that's broken.
>
> I want to express DPU 13 has different INTF register address, so need to add new
> interrupt array to let DPU 13 interrupt work fine. Maybe I should optimize my commit msg.
Make sure that patches are structured logically. You can not enable
support for the hardware if the interrupts are not (yet) handled.
--
With best wishes
Dmitry
^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH 01/12] drm/msm/dsi/phy: Add support for Kaanapali
2025-10-27 13:20 ` Konrad Dybcio
@ 2025-10-27 13:29 ` Dmitry Baryshkov
2025-10-29 3:19 ` yuanjiey
0 siblings, 1 reply; 77+ messages in thread
From: Dmitry Baryshkov @ 2025-10-27 13:29 UTC (permalink / raw)
To: Konrad Dybcio
Cc: yuanjiey, robin.clark, lumag, abhinav.kumar, sean, marijn.suijten,
airlied, simona, maarten.lankhorst, mripard, tzimmermann, robh,
krzk+dt, conor+dt, quic_mkrishn, jonathan, quic_khsieh,
neil.armstrong, linux-arm-msm, dri-devel, freedreno, devicetree,
linux-kernel, tingwei.zhang, aiqun.yu, yongxing.mou
On Mon, Oct 27, 2025 at 02:20:26PM +0100, Konrad Dybcio wrote:
> On 10/27/25 2:14 PM, Dmitry Baryshkov wrote:
> > On Fri, Oct 24, 2025 at 11:27:53AM +0800, yuanjiey wrote:
> >> On Thu, Oct 23, 2025 at 02:02:45PM +0200, Konrad Dybcio wrote:
> >>> On 10/23/25 1:48 PM, Dmitry Baryshkov wrote:
> >>>> On Thu, Oct 23, 2025 at 03:53:50PM +0800, yuanjie yang wrote:
> >>>>> From: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
> >>>>>
> >>>>> Add DSI PHY support for the Kaanapali platform.
> >>>>>
> >>>>> Signed-off-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
> >>>>> Signed-off-by: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
> >>>>> ---
> >>>
> >>> [...]
> >>>
> >>>>> + .io_start = { 0x9ac1000, 0xae97000 },
> >>>>
> >>>> These two addresses are very strange. Would you care to explain? Other
> >>>> than that there is no difference from SM8750 entry.
> >>>
> >>> They're correct.
> >>> Although they correspond to DSI_0 and DSI_2..
> >>>
> >>> Yuanjie, none of the DSI patches mention that v2.10.0 is packed with
> >>> new features. Please provide some more context and how that impacts
> >>> the hw description.
> >>
> >> Thanks for your reminder.
> >>
> >> Correct here:
> >> io_start = { 0x9ac1000, 0x9ac4000 } DSI_Phy0 DSI_phy1
> >>
> >> And v2.10.0 no clearly meaningful changes compared to v2.9.0.
> >> just some register address change.
> >
> > Addition of DSI2 is a meaningful change, which needs to be handled both
> > in the core and in the DSI / DSI PHY drivers.
>
> DSI2 was introduced in 8750 already, but it was done without any
> fanfare..
>
> I see a diagram that shows an XBAR with inputs from DSI0 and DSI2,
> and an output to DSI0_PHY (same thing on kaanapali - meaning this
> patch is potentially wrong and should ref DSI1_PHY instead?)
Most likely.
--
With best wishes
Dmitry
^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH 10/12] dt-bindings: display/msm: dsi-phy-7nm: Add Kaanapali DSi PHY
2025-10-24 6:10 ` yuanjiey
@ 2025-10-27 13:30 ` Dmitry Baryshkov
2025-10-29 2:00 ` yuanjiey
0 siblings, 1 reply; 77+ messages in thread
From: Dmitry Baryshkov @ 2025-10-27 13:30 UTC (permalink / raw)
To: yuanjiey
Cc: robin.clark, lumag, abhinav.kumar, sean, marijn.suijten, airlied,
simona, maarten.lankhorst, mripard, tzimmermann, robh, krzk+dt,
conor+dt, quic_mkrishn, jonathan, quic_khsieh, neil.armstrong,
linux-arm-msm, dri-devel, freedreno, devicetree, linux-kernel,
tingwei.zhang, aiqun.yu, yongxing.mou
On Fri, Oct 24, 2025 at 02:10:29PM +0800, yuanjiey wrote:
> On Thu, Oct 23, 2025 at 03:16:31PM +0300, Dmitry Baryshkov wrote:
> > On Thu, Oct 23, 2025 at 04:06:07PM +0800, yuanjie yang wrote:
> > > From: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
> >
> > In the subject: DSI, not DSi
> OK will note.
>
>
> > >
> > > Add DSI PHY for Kaanapali.
> >
> > Why?
>
> DSI phy for Kaanapali have no significant diiference with previous version(SM8750).
> But some register change make it imcompatible with previous version(SM8750).
It's either "no significant difference" or "register change make it
incompatible". You can't say both.
>
> I will give this reason in my next patch.
>
> Thanks
> Yuanjie.
>
--
With best wishes
Dmitry
^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH 08/12] arm64: defconfig: Enable NT37801 DSI panel driver
2025-10-23 8:06 ` [PATCH 08/12] arm64: defconfig: Enable NT37801 DSI panel driver yuanjie yang
2025-10-23 8:22 ` Konrad Dybcio
@ 2025-10-28 3:51 ` Bjorn Andersson
2025-10-29 2:37 ` yuanjiey
1 sibling, 1 reply; 77+ messages in thread
From: Bjorn Andersson @ 2025-10-28 3:51 UTC (permalink / raw)
To: yuanjie yang
Cc: robin.clark, lumag, abhinav.kumar, sean, marijn.suijten, airlied,
simona, maarten.lankhorst, mripard, tzimmermann, robh, krzk+dt,
conor+dt, quic_mkrishn, jonathan, quic_khsieh, neil.armstrong,
linux-arm-msm, dri-devel, freedreno, devicetree, linux-kernel,
tingwei.zhang, aiqun.yu, yongxing.mou
On Thu, Oct 23, 2025 at 04:06:05PM +0800, yuanjie yang wrote:
> From: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
>
> Build the NT37801 DSI panel driver as module.
>
> Signed-off-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
> Signed-off-by: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
You (Yuanjie) authored the patch, but forgot to sign-off, then Yongxing
provided certificate of origin, then you provide certificate of origin
and send it to list?
Please correct.
Also, all other patches in this series are merged by DRM maintainers,
while I'm supposed to merge this one. Please send it separately, once
it's ready to be merged.
Thanks,
Bjorn
> ---
> arch/arm64/configs/defconfig | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/arch/arm64/configs/defconfig b/arch/arm64/configs/defconfig
> index 8cfb5000fa8e..537a065db11c 100644
> --- a/arch/arm64/configs/defconfig
> +++ b/arch/arm64/configs/defconfig
> @@ -945,6 +945,7 @@ CONFIG_DRM_PANEL_SITRONIX_ST7703=m
> CONFIG_DRM_PANEL_STARTEK_KD070FHFID015=m
> CONFIG_DRM_PANEL_TRULY_NT35597_WQXGA=m
> CONFIG_DRM_PANEL_VISIONOX_VTDR6130=m
> +CONFIG_DRM_PANEL_NOVATEK_NT37801=m
> CONFIG_DRM_DISPLAY_CONNECTOR=m
> CONFIG_DRM_FSL_LDB=m
> CONFIG_DRM_ITE_IT6263=m
> --
> 2.34.1
>
^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH 03/12] drm/msm/dpu: Compatible with Kaanapali interrupt register
2025-10-23 7:53 ` [PATCH 03/12] drm/msm/dpu: Compatible with Kaanapali interrupt register yuanjie yang
2025-10-23 11:59 ` Dmitry Baryshkov
@ 2025-10-28 6:07 ` Jessica Zhang
2025-10-29 2:05 ` yuanjiey
1 sibling, 1 reply; 77+ messages in thread
From: Jessica Zhang @ 2025-10-28 6:07 UTC (permalink / raw)
To: yuanjie yang, robin.clark, lumag, abhinav.kumar, sean,
marijn.suijten, airlied, simona, maarten.lankhorst, mripard,
tzimmermann, robh, krzk+dt, conor+dt, quic_mkrishn, jonathan,
quic_khsieh, neil.armstrong
Cc: linux-arm-msm, dri-devel, freedreno, devicetree, linux-kernel,
tingwei.zhang, aiqun.yu, yongxing.mou
On 10/23/2025 12:53 AM, yuanjie yang wrote:
> From: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
Hi Yuanjie,
Can you reword the commit message title to be more clear on what this
patch *does*? "Compatible with Kaanapali interrupt register" is vague.
Something like "Add interrupt registers for DPU 13.x" is a complete
sentence and makes it clear that you're adding interrupt registers.
Thanks,
Jessica Zhang
>
> DPU version 13 introduces changes to the interrupt register
> layout. Update the driver to support these modifications for
> proper interrupt handling.
>
> Signed-off-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
> Signed-off-by: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
> ---
> .../gpu/drm/msm/disp/dpu1/dpu_hw_interrupts.c | 89 ++++++++++++++++++-
> 1 file changed, 88 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_interrupts.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_interrupts.c
> index 49bd77a755aa..8d265581f6ec 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_interrupts.c
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_interrupts.c
> @@ -40,6 +40,15 @@
> #define MDP_INTF_REV_7xxx_INTR_TEAR_STATUS(intf) (MDP_INTF_REV_7xxx_TEAR_OFF(intf) + 0x004)
> #define MDP_INTF_REV_7xxx_INTR_TEAR_CLEAR(intf) (MDP_INTF_REV_7xxx_TEAR_OFF(intf) + 0x008)
>
> +#define MDP_INTF_REV_13xx_OFF(intf) (0x18D000 + 0x1000 * (intf))
> +#define MDP_INTF_REV_13xx_INTR_EN(intf) (MDP_INTF_REV_13xx_OFF(intf) + 0x1c0)
> +#define MDP_INTF_REV_13xx_INTR_STATUS(intf) (MDP_INTF_REV_13xx_OFF(intf) + 0x1c4)
> +#define MDP_INTF_REV_13xx_INTR_CLEAR(intf) (MDP_INTF_REV_13xx_OFF(intf) + 0x1c8)
> +#define MDP_INTF_REV_13xx_TEAR_OFF(intf) (0x18D800 + 0x1000 * (intf))
> +#define MDP_INTF_REV_13xx_INTR_TEAR_EN(intf) (MDP_INTF_REV_13xx_TEAR_OFF(intf) + 0x000)
> +#define MDP_INTF_REV_13xx_INTR_TEAR_STATUS(intf) (MDP_INTF_REV_13xx_TEAR_OFF(intf) + 0x004)
> +#define MDP_INTF_REV_13xx_INTR_TEAR_CLEAR(intf) (MDP_INTF_REV_13xx_TEAR_OFF(intf) + 0x008)
> +
> /**
> * struct dpu_intr_reg - array of DPU register sets
> * @clr_off: offset to CLEAR reg
> @@ -199,6 +208,82 @@ static const struct dpu_intr_reg dpu_intr_set_7xxx[] = {
> },
> };
>
> +/*
> + * dpu_intr_set_13xx - List of DPU interrupt registers for DPU >= 13.0
> + */
> +static const struct dpu_intr_reg dpu_intr_set_13xx[] = {
> + [MDP_SSPP_TOP0_INTR] = {
> + INTR_CLEAR,
> + INTR_EN,
> + INTR_STATUS
> + },
> + [MDP_SSPP_TOP0_INTR2] = {
> + INTR2_CLEAR,
> + INTR2_EN,
> + INTR2_STATUS
> + },
> + [MDP_SSPP_TOP0_HIST_INTR] = {
> + HIST_INTR_CLEAR,
> + HIST_INTR_EN,
> + HIST_INTR_STATUS
> + },
> + [MDP_INTF0_INTR] = {
> + MDP_INTF_REV_13xx_INTR_CLEAR(0),
> + MDP_INTF_REV_13xx_INTR_EN(0),
> + MDP_INTF_REV_13xx_INTR_STATUS(0)
> + },
> + [MDP_INTF1_INTR] = {
> + MDP_INTF_REV_13xx_INTR_CLEAR(1),
> + MDP_INTF_REV_13xx_INTR_EN(1),
> + MDP_INTF_REV_13xx_INTR_STATUS(1)
> + },
> + [MDP_INTF1_TEAR_INTR] = {
> + MDP_INTF_REV_13xx_INTR_TEAR_CLEAR(1),
> + MDP_INTF_REV_13xx_INTR_TEAR_EN(1),
> + MDP_INTF_REV_13xx_INTR_TEAR_STATUS(1)
> + },
> + [MDP_INTF2_INTR] = {
> + MDP_INTF_REV_13xx_INTR_CLEAR(2),
> + MDP_INTF_REV_13xx_INTR_EN(2),
> + MDP_INTF_REV_13xx_INTR_STATUS(2)
> + },
> + [MDP_INTF2_TEAR_INTR] = {
> + MDP_INTF_REV_13xx_INTR_TEAR_CLEAR(2),
> + MDP_INTF_REV_13xx_INTR_TEAR_EN(2),
> + MDP_INTF_REV_13xx_INTR_TEAR_STATUS(2)
> + },
> + [MDP_INTF3_INTR] = {
> + MDP_INTF_REV_13xx_INTR_CLEAR(3),
> + MDP_INTF_REV_13xx_INTR_EN(3),
> + MDP_INTF_REV_13xx_INTR_STATUS(3)
> + },
> + [MDP_INTF4_INTR] = {
> + MDP_INTF_REV_13xx_INTR_CLEAR(4),
> + MDP_INTF_REV_13xx_INTR_EN(4),
> + MDP_INTF_REV_13xx_INTR_STATUS(4)
> + },
> + [MDP_INTF5_INTR] = {
> + MDP_INTF_REV_13xx_INTR_CLEAR(5),
> + MDP_INTF_REV_13xx_INTR_EN(5),
> + MDP_INTF_REV_13xx_INTR_STATUS(5)
> + },
> + [MDP_INTF6_INTR] = {
> + MDP_INTF_REV_13xx_INTR_CLEAR(6),
> + MDP_INTF_REV_13xx_INTR_EN(6),
> + MDP_INTF_REV_13xx_INTR_STATUS(6)
> + },
> + [MDP_INTF7_INTR] = {
> + MDP_INTF_REV_13xx_INTR_CLEAR(7),
> + MDP_INTF_REV_13xx_INTR_EN(7),
> + MDP_INTF_REV_13xx_INTR_STATUS(7)
> + },
> + [MDP_INTF8_INTR] = {
> + MDP_INTF_REV_13xx_INTR_CLEAR(8),
> + MDP_INTF_REV_13xx_INTR_EN(8),
> + MDP_INTF_REV_13xx_INTR_STATUS(8)
> + },
> +};
> +
> #define DPU_IRQ_MASK(irq_idx) (BIT(DPU_IRQ_BIT(irq_idx)))
>
> static inline bool dpu_core_irq_is_valid(unsigned int irq_idx)
> @@ -507,7 +592,9 @@ struct dpu_hw_intr *dpu_hw_intr_init(struct drm_device *dev,
> if (!intr)
> return ERR_PTR(-ENOMEM);
>
> - if (m->mdss_ver->core_major_ver >= 7)
> + if (m->mdss_ver->core_major_ver >= 13)
> + intr->intr_set = dpu_intr_set_13xx;
> + else if (m->mdss_ver->core_major_ver >= 7)
> intr->intr_set = dpu_intr_set_7xxx;
> else
> intr->intr_set = dpu_intr_set_legacy;
^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH 07/12] drm/panel: Set sufficient voltage for panel nt37801
2025-10-27 12:22 ` Dmitry Baryshkov
@ 2025-10-29 1:58 ` yuanjiey
2025-10-29 12:20 ` Dmitry Baryshkov
0 siblings, 1 reply; 77+ messages in thread
From: yuanjiey @ 2025-10-29 1:58 UTC (permalink / raw)
To: Dmitry Baryshkov
Cc: robin.clark, lumag, abhinav.kumar, sean, marijn.suijten, airlied,
simona, maarten.lankhorst, mripard, tzimmermann, robh, krzk+dt,
conor+dt, quic_mkrishn, jonathan, quic_khsieh, neil.armstrong,
linux-arm-msm, dri-devel, freedreno, devicetree, linux-kernel,
tingwei.zhang, aiqun.yu, yongxing.mou
On Mon, Oct 27, 2025 at 02:22:04PM +0200, Dmitry Baryshkov wrote:
> On Fri, Oct 24, 2025 at 02:00:50PM +0800, yuanjiey wrote:
> > On Thu, Oct 23, 2025 at 03:14:38PM +0300, Dmitry Baryshkov wrote:
> > > On Thu, Oct 23, 2025 at 04:06:04PM +0800, yuanjie yang wrote:
> > > > From: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
> > > >
> > > > The NT37801 Sepc V1.0 chapter "5.7.1 Power On Sequence" states
> > > > VDDI=1.65V~1.95V, so set sufficient voltage for panel nt37801.
> > > >
> > > > Signed-off-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
> > > > Signed-off-by: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
> > > > ---
> > > > drivers/gpu/drm/panel/panel-novatek-nt37801.c | 5 +++++
> > > > 1 file changed, 5 insertions(+)
> > > >
> > > > diff --git a/drivers/gpu/drm/panel/panel-novatek-nt37801.c b/drivers/gpu/drm/panel/panel-novatek-nt37801.c
> > > > index d6a37d7e0cc6..7eda16e0c1f9 100644
> > > > --- a/drivers/gpu/drm/panel/panel-novatek-nt37801.c
> > > > +++ b/drivers/gpu/drm/panel/panel-novatek-nt37801.c
> > > > @@ -267,6 +267,11 @@ static int novatek_nt37801_probe(struct mipi_dsi_device *dsi)
> > > > if (ret < 0)
> > > > return ret;
> > > >
> > > > + ret = regulator_set_voltage(ctx->supplies[0].consumer,
> > > > + 1650000, 1950000);
> > >
> > > This should be done in the DT. Limit the voltage per the user.
> > Two reason:
> > 1.
> > I see https://patchwork.freedesktop.org/patch/354612/
> >
> > panel panel-novatek-nt35510.c also use regulator_set_voltage set right voltage,
> > so I do the same work.
>
> Please look for the majority rather than the exceptions. Out of all
> panel drivers only two set the voltage directly.
>
> >
> > 2. Kaanapali vddio regulator:
> >
> > vreg_l12b_1p8: ldo12 {
> > regulator-name = "vreg_l12b_1p8";
> > regulator-min-microvolt = <1200000>;
> > regulator-max-microvolt = <1800000>;
> >
> > Voltage is from 1.2~.1.8 V , So I can not set it 1.65~1.95 V from DT(1.95V is beyond the allowed range).
> > So I use regulator_set_voltage to set voltage, and regulator_set_voltage will choose the appropriate voltage.
>
> DT has to list the voltage values that work for the devices on that
> particular platform. So, ldo12 should be listing 1.64 - 1.8 V.
get it. I check downstream DT,
dosnstream DT:
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
I test 1.8V works, So I will add 1.8V in next patch, do you think it is ok?
Thanks,
Yuanjie
> >
> >
> > Thanks,
> > Yuanjie
> >
> > > > + if (ret < 0)
> > > > + return ret;
> > > > +
> > > > ctx->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_OUT_LOW);
> > > > if (IS_ERR(ctx->reset_gpio))
> > > > return dev_err_probe(dev, PTR_ERR(ctx->reset_gpio),
> > > > --
> > > > 2.34.1
> > > >
> > >
> > > --
> > > With best wishes
> > > Dmitry
>
> --
> With best wishes
> Dmitry
^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH 10/12] dt-bindings: display/msm: dsi-phy-7nm: Add Kaanapali DSi PHY
2025-10-27 13:30 ` Dmitry Baryshkov
@ 2025-10-29 2:00 ` yuanjiey
0 siblings, 0 replies; 77+ messages in thread
From: yuanjiey @ 2025-10-29 2:00 UTC (permalink / raw)
To: Dmitry Baryshkov
Cc: robin.clark, lumag, abhinav.kumar, sean, marijn.suijten, airlied,
simona, maarten.lankhorst, mripard, tzimmermann, robh, krzk+dt,
conor+dt, quic_mkrishn, jonathan, quic_khsieh, neil.armstrong,
linux-arm-msm, dri-devel, freedreno, devicetree, linux-kernel,
tingwei.zhang, aiqun.yu, yongxing.mou
On Mon, Oct 27, 2025 at 03:30:43PM +0200, Dmitry Baryshkov wrote:
> On Fri, Oct 24, 2025 at 02:10:29PM +0800, yuanjiey wrote:
> > On Thu, Oct 23, 2025 at 03:16:31PM +0300, Dmitry Baryshkov wrote:
> > > On Thu, Oct 23, 2025 at 04:06:07PM +0800, yuanjie yang wrote:
> > > > From: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
> > >
> > > In the subject: DSI, not DSi
> > OK will note.
> >
> >
> > > >
> > > > Add DSI PHY for Kaanapali.
> > >
> > > Why?
> >
> > DSI phy for Kaanapali have no significant diiference with previous version(SM8750).
> > But some register change make it imcompatible with previous version(SM8750).
>
> It's either "no significant difference" or "register change make it
> incompatible". You can't say both.
Sure, will optimize commit message.
Thanks,
Yuanjie
> >
> > I will give this reason in my next patch.
> >
> > Thanks
> > Yuanjie.
> >
>
> --
> With best wishes
> Dmitry
^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH 03/12] drm/msm/dpu: Compatible with Kaanapali interrupt register
2025-10-28 6:07 ` Jessica Zhang
@ 2025-10-29 2:05 ` yuanjiey
0 siblings, 0 replies; 77+ messages in thread
From: yuanjiey @ 2025-10-29 2:05 UTC (permalink / raw)
To: Jessica Zhang
Cc: robin.clark, lumag, abhinav.kumar, sean, marijn.suijten, airlied,
simona, maarten.lankhorst, mripard, tzimmermann, robh, krzk+dt,
conor+dt, quic_mkrishn, jonathan, quic_khsieh, neil.armstrong,
linux-arm-msm, dri-devel, freedreno, devicetree, linux-kernel,
tingwei.zhang, aiqun.yu, yongxing.mou
On Mon, Oct 27, 2025 at 11:07:20PM -0700, Jessica Zhang wrote:
> On 10/23/2025 12:53 AM, yuanjie yang wrote:
> > From: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
>
> Hi Yuanjie,
>
> Can you reword the commit message title to be more clear on what this patch
> *does*? "Compatible with Kaanapali interrupt register" is vague.
>
> Something like "Add interrupt registers for DPU 13.x" is a complete sentence
> and makes it clear that you're adding interrupt registers.
>
Sure, will use "Add interrupt registers for DPU 13.x" for commit message.
Thanks,
Yuanjie
> Thanks,
>
> Jessica Zhang
>
> >
> > DPU version 13 introduces changes to the interrupt register
> > layout. Update the driver to support these modifications for
> > proper interrupt handling.
> >
> > Signed-off-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
> > Signed-off-by: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
> > ---
> > .../gpu/drm/msm/disp/dpu1/dpu_hw_interrupts.c | 89 ++++++++++++++++++-
> > 1 file changed, 88 insertions(+), 1 deletion(-)
> >
> > diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_interrupts.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_interrupts.c
> > index 49bd77a755aa..8d265581f6ec 100644
> > --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_interrupts.c
> > +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_interrupts.c
> > @@ -40,6 +40,15 @@
> > #define MDP_INTF_REV_7xxx_INTR_TEAR_STATUS(intf) (MDP_INTF_REV_7xxx_TEAR_OFF(intf) + 0x004)
> > #define MDP_INTF_REV_7xxx_INTR_TEAR_CLEAR(intf) (MDP_INTF_REV_7xxx_TEAR_OFF(intf) + 0x008)
> > +#define MDP_INTF_REV_13xx_OFF(intf) (0x18D000 + 0x1000 * (intf))
> > +#define MDP_INTF_REV_13xx_INTR_EN(intf) (MDP_INTF_REV_13xx_OFF(intf) + 0x1c0)
> > +#define MDP_INTF_REV_13xx_INTR_STATUS(intf) (MDP_INTF_REV_13xx_OFF(intf) + 0x1c4)
> > +#define MDP_INTF_REV_13xx_INTR_CLEAR(intf) (MDP_INTF_REV_13xx_OFF(intf) + 0x1c8)
> > +#define MDP_INTF_REV_13xx_TEAR_OFF(intf) (0x18D800 + 0x1000 * (intf))
> > +#define MDP_INTF_REV_13xx_INTR_TEAR_EN(intf) (MDP_INTF_REV_13xx_TEAR_OFF(intf) + 0x000)
> > +#define MDP_INTF_REV_13xx_INTR_TEAR_STATUS(intf) (MDP_INTF_REV_13xx_TEAR_OFF(intf) + 0x004)
> > +#define MDP_INTF_REV_13xx_INTR_TEAR_CLEAR(intf) (MDP_INTF_REV_13xx_TEAR_OFF(intf) + 0x008)
> > +
> > /**
> > * struct dpu_intr_reg - array of DPU register sets
> > * @clr_off: offset to CLEAR reg
> > @@ -199,6 +208,82 @@ static const struct dpu_intr_reg dpu_intr_set_7xxx[] = {
> > },
> > };
> > +/*
> > + * dpu_intr_set_13xx - List of DPU interrupt registers for DPU >= 13.0
> > + */
> > +static const struct dpu_intr_reg dpu_intr_set_13xx[] = {
> > + [MDP_SSPP_TOP0_INTR] = {
> > + INTR_CLEAR,
> > + INTR_EN,
> > + INTR_STATUS
> > + },
> > + [MDP_SSPP_TOP0_INTR2] = {
> > + INTR2_CLEAR,
> > + INTR2_EN,
> > + INTR2_STATUS
> > + },
> > + [MDP_SSPP_TOP0_HIST_INTR] = {
> > + HIST_INTR_CLEAR,
> > + HIST_INTR_EN,
> > + HIST_INTR_STATUS
> > + },
> > + [MDP_INTF0_INTR] = {
> > + MDP_INTF_REV_13xx_INTR_CLEAR(0),
> > + MDP_INTF_REV_13xx_INTR_EN(0),
> > + MDP_INTF_REV_13xx_INTR_STATUS(0)
> > + },
> > + [MDP_INTF1_INTR] = {
> > + MDP_INTF_REV_13xx_INTR_CLEAR(1),
> > + MDP_INTF_REV_13xx_INTR_EN(1),
> > + MDP_INTF_REV_13xx_INTR_STATUS(1)
> > + },
> > + [MDP_INTF1_TEAR_INTR] = {
> > + MDP_INTF_REV_13xx_INTR_TEAR_CLEAR(1),
> > + MDP_INTF_REV_13xx_INTR_TEAR_EN(1),
> > + MDP_INTF_REV_13xx_INTR_TEAR_STATUS(1)
> > + },
> > + [MDP_INTF2_INTR] = {
> > + MDP_INTF_REV_13xx_INTR_CLEAR(2),
> > + MDP_INTF_REV_13xx_INTR_EN(2),
> > + MDP_INTF_REV_13xx_INTR_STATUS(2)
> > + },
> > + [MDP_INTF2_TEAR_INTR] = {
> > + MDP_INTF_REV_13xx_INTR_TEAR_CLEAR(2),
> > + MDP_INTF_REV_13xx_INTR_TEAR_EN(2),
> > + MDP_INTF_REV_13xx_INTR_TEAR_STATUS(2)
> > + },
> > + [MDP_INTF3_INTR] = {
> > + MDP_INTF_REV_13xx_INTR_CLEAR(3),
> > + MDP_INTF_REV_13xx_INTR_EN(3),
> > + MDP_INTF_REV_13xx_INTR_STATUS(3)
> > + },
> > + [MDP_INTF4_INTR] = {
> > + MDP_INTF_REV_13xx_INTR_CLEAR(4),
> > + MDP_INTF_REV_13xx_INTR_EN(4),
> > + MDP_INTF_REV_13xx_INTR_STATUS(4)
> > + },
> > + [MDP_INTF5_INTR] = {
> > + MDP_INTF_REV_13xx_INTR_CLEAR(5),
> > + MDP_INTF_REV_13xx_INTR_EN(5),
> > + MDP_INTF_REV_13xx_INTR_STATUS(5)
> > + },
> > + [MDP_INTF6_INTR] = {
> > + MDP_INTF_REV_13xx_INTR_CLEAR(6),
> > + MDP_INTF_REV_13xx_INTR_EN(6),
> > + MDP_INTF_REV_13xx_INTR_STATUS(6)
> > + },
> > + [MDP_INTF7_INTR] = {
> > + MDP_INTF_REV_13xx_INTR_CLEAR(7),
> > + MDP_INTF_REV_13xx_INTR_EN(7),
> > + MDP_INTF_REV_13xx_INTR_STATUS(7)
> > + },
> > + [MDP_INTF8_INTR] = {
> > + MDP_INTF_REV_13xx_INTR_CLEAR(8),
> > + MDP_INTF_REV_13xx_INTR_EN(8),
> > + MDP_INTF_REV_13xx_INTR_STATUS(8)
> > + },
> > +};
> > +
> > #define DPU_IRQ_MASK(irq_idx) (BIT(DPU_IRQ_BIT(irq_idx)))
> > static inline bool dpu_core_irq_is_valid(unsigned int irq_idx)
> > @@ -507,7 +592,9 @@ struct dpu_hw_intr *dpu_hw_intr_init(struct drm_device *dev,
> > if (!intr)
> > return ERR_PTR(-ENOMEM);
> > - if (m->mdss_ver->core_major_ver >= 7)
> > + if (m->mdss_ver->core_major_ver >= 13)
> > + intr->intr_set = dpu_intr_set_13xx;
> > + else if (m->mdss_ver->core_major_ver >= 7)
> > intr->intr_set = dpu_intr_set_7xxx;
> > else
> > intr->intr_set = dpu_intr_set_legacy;
^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH 08/12] arm64: defconfig: Enable NT37801 DSI panel driver
2025-10-28 3:51 ` Bjorn Andersson
@ 2025-10-29 2:37 ` yuanjiey
2025-10-29 13:05 ` Krzysztof Kozlowski
0 siblings, 1 reply; 77+ messages in thread
From: yuanjiey @ 2025-10-29 2:37 UTC (permalink / raw)
To: Bjorn Andersson
Cc: robin.clark, lumag, abhinav.kumar, sean, marijn.suijten, airlied,
simona, maarten.lankhorst, mripard, tzimmermann, robh, krzk+dt,
conor+dt, quic_mkrishn, jonathan, quic_khsieh, neil.armstrong,
linux-arm-msm, dri-devel, freedreno, devicetree, linux-kernel,
tingwei.zhang, aiqun.yu, yongxing.mou
On Mon, Oct 27, 2025 at 10:51:23PM -0500, Bjorn Andersson wrote:
> On Thu, Oct 23, 2025 at 04:06:05PM +0800, yuanjie yang wrote:
> > From: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
> >
> > Build the NT37801 DSI panel driver as module.
> >
> > Signed-off-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
> > Signed-off-by: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
>
> You (Yuanjie) authored the patch, but forgot to sign-off, then Yongxing
> provided certificate of origin, then you provide certificate of origin
> and send it to list?
>
> Please correct.
All the display patches were jointly developed by Yongxing and me.
So every patch
I do sign below:
Signed-off-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
Signed-off-by: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
I am the author of these patches.
So author is me:
From: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
Do I need to fix this sign below in next patch:
Co-developed-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
Signed-off-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
Signed-off-by: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
> Also, all other patches in this series are merged by DRM maintainers,
> while I'm supposed to merge this one. Please send it separately, once
> it's ready to be merged.
Sure, I will split this patch to push.
Thanks,
Yuanjie
> Thanks,
> Bjorn
>
> > ---
> > arch/arm64/configs/defconfig | 1 +
> > 1 file changed, 1 insertion(+)
> >
> > diff --git a/arch/arm64/configs/defconfig b/arch/arm64/configs/defconfig
> > index 8cfb5000fa8e..537a065db11c 100644
> > --- a/arch/arm64/configs/defconfig
> > +++ b/arch/arm64/configs/defconfig
> > @@ -945,6 +945,7 @@ CONFIG_DRM_PANEL_SITRONIX_ST7703=m
> > CONFIG_DRM_PANEL_STARTEK_KD070FHFID015=m
> > CONFIG_DRM_PANEL_TRULY_NT35597_WQXGA=m
> > CONFIG_DRM_PANEL_VISIONOX_VTDR6130=m
> > +CONFIG_DRM_PANEL_NOVATEK_NT37801=m
> > CONFIG_DRM_DISPLAY_CONNECTOR=m
> > CONFIG_DRM_FSL_LDB=m
> > CONFIG_DRM_ITE_IT6263=m
> > --
> > 2.34.1
> >
^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH 03/12] drm/msm/dpu: Compatible with Kaanapali interrupt register
2025-10-27 13:21 ` Dmitry Baryshkov
@ 2025-10-29 2:49 ` yuanjiey
2025-10-30 18:02 ` Dmitry Baryshkov
0 siblings, 1 reply; 77+ messages in thread
From: yuanjiey @ 2025-10-29 2:49 UTC (permalink / raw)
To: Dmitry Baryshkov
Cc: robin.clark, lumag, abhinav.kumar, sean, marijn.suijten, airlied,
simona, maarten.lankhorst, mripard, tzimmermann, robh, krzk+dt,
conor+dt, quic_mkrishn, jonathan, quic_khsieh, neil.armstrong,
linux-arm-msm, dri-devel, freedreno, devicetree, linux-kernel,
tingwei.zhang, aiqun.yu, yongxing.mou
On Mon, Oct 27, 2025 at 03:21:33PM +0200, Dmitry Baryshkov wrote:
> On Fri, Oct 24, 2025 at 10:59:07AM +0800, yuanjiey wrote:
> > On Thu, Oct 23, 2025 at 02:59:12PM +0300, Dmitry Baryshkov wrote:
> > > On Thu, Oct 23, 2025 at 03:53:52PM +0800, yuanjie yang wrote:
> > > > From: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
> > > >
> > > > DPU version 13 introduces changes to the interrupt register
> > > > layout. Update the driver to support these modifications for
> > > > proper interrupt handling.
> > >
> > > So... Previous patch enabled support for the platform and it has been
> > > using wrong registers for interrupts? I think that's broken.
> >
> > I want to express DPU 13 has different INTF register address, so need to add new
> > interrupt array to let DPU 13 interrupt work fine. Maybe I should optimize my commit msg.
>
> Make sure that patches are structured logically. You can not enable
> support for the hardware if the interrupts are not (yet) handled.
Kaanapali Dpu interrupts:
INTR_IDX_VSYNC,
INTR_IDX_PINGPONG,
INTR_IDX_UNDERRUN,
INTR_IDX_CTL_START,
INTR_IDX_RDPTR,
INTR_IDX_WB_DONE,
are handled by irq handler, so here enable dpu_intr_set_13xx.
Thanks,
Yuanjie
>
> --
> With best wishes
> Dmitry
^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH 01/12] drm/msm/dsi/phy: Add support for Kaanapali
2025-10-27 13:29 ` Dmitry Baryshkov
@ 2025-10-29 3:19 ` yuanjiey
2025-10-29 9:48 ` Konrad Dybcio
2025-10-30 18:01 ` Dmitry Baryshkov
0 siblings, 2 replies; 77+ messages in thread
From: yuanjiey @ 2025-10-29 3:19 UTC (permalink / raw)
To: Dmitry Baryshkov
Cc: Konrad Dybcio, robin.clark, lumag, abhinav.kumar, sean,
marijn.suijten, airlied, simona, maarten.lankhorst, mripard,
tzimmermann, robh, krzk+dt, conor+dt, quic_mkrishn, jonathan,
quic_khsieh, neil.armstrong, linux-arm-msm, dri-devel, freedreno,
devicetree, linux-kernel, tingwei.zhang, aiqun.yu, yongxing.mou
On Mon, Oct 27, 2025 at 03:29:40PM +0200, Dmitry Baryshkov wrote:
> On Mon, Oct 27, 2025 at 02:20:26PM +0100, Konrad Dybcio wrote:
> > On 10/27/25 2:14 PM, Dmitry Baryshkov wrote:
> > > On Fri, Oct 24, 2025 at 11:27:53AM +0800, yuanjiey wrote:
> > >> On Thu, Oct 23, 2025 at 02:02:45PM +0200, Konrad Dybcio wrote:
> > >>> On 10/23/25 1:48 PM, Dmitry Baryshkov wrote:
> > >>>> On Thu, Oct 23, 2025 at 03:53:50PM +0800, yuanjie yang wrote:
> > >>>>> From: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
> > >>>>>
> > >>>>> Add DSI PHY support for the Kaanapali platform.
> > >>>>>
> > >>>>> Signed-off-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
> > >>>>> Signed-off-by: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
> > >>>>> ---
> > >>>
> > >>> [...]
> > >>>
> > >>>>> + .io_start = { 0x9ac1000, 0xae97000 },
> > >>>>
> > >>>> These two addresses are very strange. Would you care to explain? Other
> > >>>> than that there is no difference from SM8750 entry.
> > >>>
> > >>> They're correct.
> > >>> Although they correspond to DSI_0 and DSI_2..
> > >>>
> > >>> Yuanjie, none of the DSI patches mention that v2.10.0 is packed with
> > >>> new features. Please provide some more context and how that impacts
> > >>> the hw description.
> > >>
> > >> Thanks for your reminder.
> > >>
> > >> Correct here:
> > >> io_start = { 0x9ac1000, 0x9ac4000 } DSI_Phy0 DSI_phy1
> > >>
> > >> And v2.10.0 no clearly meaningful changes compared to v2.9.0.
> > >> just some register address change.
> > >
> > > Addition of DSI2 is a meaningful change, which needs to be handled both
> > > in the core and in the DSI / DSI PHY drivers.
> >
> > DSI2 was introduced in 8750 already, but it was done without any
> > fanfare..
> >
> > I see a diagram that shows an XBAR with inputs from DSI0 and DSI2,
> > and an output to DSI0_PHY (same thing on kaanapali - meaning this
> > patch is potentially wrong and should ref DSI1_PHY instead?)
>
Yes, I check ipcata Doc, I see DSI0\DSI0_PHY DSI1\DSI1_PHY DSI2\DSI2_PHY in Kaanapali,
addition of DSI2\DSI2_PHY compared to SM8650.
look like I should add: config io_start = {DSI0_PHY, DSI1_PHY, DSI2_PHY},
Do you thinks this fix is OK?
Thanks,
Yuanjie
> Most likely.
>
> --
> With best wishes
> Dmitry
^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH 01/12] drm/msm/dsi/phy: Add support for Kaanapali
2025-10-29 3:19 ` yuanjiey
@ 2025-10-29 9:48 ` Konrad Dybcio
2025-10-30 18:01 ` Dmitry Baryshkov
1 sibling, 0 replies; 77+ messages in thread
From: Konrad Dybcio @ 2025-10-29 9:48 UTC (permalink / raw)
To: yuanjiey, Dmitry Baryshkov
Cc: robin.clark, lumag, abhinav.kumar, sean, marijn.suijten, airlied,
simona, maarten.lankhorst, mripard, tzimmermann, robh, krzk+dt,
conor+dt, quic_mkrishn, jonathan, quic_khsieh, neil.armstrong,
linux-arm-msm, dri-devel, freedreno, devicetree, linux-kernel,
tingwei.zhang, aiqun.yu, yongxing.mou
On 10/29/25 4:19 AM, yuanjiey wrote:
> On Mon, Oct 27, 2025 at 03:29:40PM +0200, Dmitry Baryshkov wrote:
>> On Mon, Oct 27, 2025 at 02:20:26PM +0100, Konrad Dybcio wrote:
>>> On 10/27/25 2:14 PM, Dmitry Baryshkov wrote:
>>>> On Fri, Oct 24, 2025 at 11:27:53AM +0800, yuanjiey wrote:
>>>>> On Thu, Oct 23, 2025 at 02:02:45PM +0200, Konrad Dybcio wrote:
>>>>>> On 10/23/25 1:48 PM, Dmitry Baryshkov wrote:
>>>>>>> On Thu, Oct 23, 2025 at 03:53:50PM +0800, yuanjie yang wrote:
>>>>>>>> From: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
>>>>>>>>
>>>>>>>> Add DSI PHY support for the Kaanapali platform.
>>>>>>>>
>>>>>>>> Signed-off-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
>>>>>>>> Signed-off-by: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
>>>>>>>> ---
>>>>>>
>>>>>> [...]
>>>>>>
>>>>>>>> + .io_start = { 0x9ac1000, 0xae97000 },
>>>>>>>
>>>>>>> These two addresses are very strange. Would you care to explain? Other
>>>>>>> than that there is no difference from SM8750 entry.
>>>>>>
>>>>>> They're correct.
>>>>>> Although they correspond to DSI_0 and DSI_2..
>>>>>>
>>>>>> Yuanjie, none of the DSI patches mention that v2.10.0 is packed with
>>>>>> new features. Please provide some more context and how that impacts
>>>>>> the hw description.
>>>>>
>>>>> Thanks for your reminder.
>>>>>
>>>>> Correct here:
>>>>> io_start = { 0x9ac1000, 0x9ac4000 } DSI_Phy0 DSI_phy1
>>>>>
>>>>> And v2.10.0 no clearly meaningful changes compared to v2.9.0.
>>>>> just some register address change.
>>>>
>>>> Addition of DSI2 is a meaningful change, which needs to be handled both
>>>> in the core and in the DSI / DSI PHY drivers.
>>>
>>> DSI2 was introduced in 8750 already, but it was done without any
>>> fanfare..
>>>
>>> I see a diagram that shows an XBAR with inputs from DSI0 and DSI2,
>>> and an output to DSI0_PHY (same thing on kaanapali - meaning this
>>> patch is potentially wrong and should ref DSI1_PHY instead?)
>>
> Yes, I check ipcata Doc, I see DSI0\DSI0_PHY DSI1\DSI1_PHY DSI2\DSI2_PHY in Kaanapali,
> addition of DSI2\DSI2_PHY compared to SM8650.
>
> look like I should add: config io_start = {DSI0_PHY, DSI1_PHY, DSI2_PHY},
>
> Do you thinks this fix is OK?
The MDSS documentation says there are only two DSI PHYs, so perhaps one
is not exactly implemented. Let's get confirmation of which one that is
and keep the two functional ones.
Konrad
^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH 07/12] drm/panel: Set sufficient voltage for panel nt37801
2025-10-29 1:58 ` yuanjiey
@ 2025-10-29 12:20 ` Dmitry Baryshkov
2025-10-30 2:08 ` yuanjiey
0 siblings, 1 reply; 77+ messages in thread
From: Dmitry Baryshkov @ 2025-10-29 12:20 UTC (permalink / raw)
To: yuanjiey
Cc: robin.clark, lumag, abhinav.kumar, sean, marijn.suijten, airlied,
simona, maarten.lankhorst, mripard, tzimmermann, robh, krzk+dt,
conor+dt, quic_mkrishn, jonathan, quic_khsieh, neil.armstrong,
linux-arm-msm, dri-devel, freedreno, devicetree, linux-kernel,
tingwei.zhang, aiqun.yu, yongxing.mou
On Wed, Oct 29, 2025 at 09:58:39AM +0800, yuanjiey wrote:
> On Mon, Oct 27, 2025 at 02:22:04PM +0200, Dmitry Baryshkov wrote:
> > On Fri, Oct 24, 2025 at 02:00:50PM +0800, yuanjiey wrote:
> > > On Thu, Oct 23, 2025 at 03:14:38PM +0300, Dmitry Baryshkov wrote:
> > > > On Thu, Oct 23, 2025 at 04:06:04PM +0800, yuanjie yang wrote:
> > > > > From: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
> > > > >
> > > > > The NT37801 Sepc V1.0 chapter "5.7.1 Power On Sequence" states
> > > > > VDDI=1.65V~1.95V, so set sufficient voltage for panel nt37801.
> > > > >
> > > > > Signed-off-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
> > > > > Signed-off-by: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
> > > > > ---
> > > > > drivers/gpu/drm/panel/panel-novatek-nt37801.c | 5 +++++
> > > > > 1 file changed, 5 insertions(+)
> > > > >
> > > > > diff --git a/drivers/gpu/drm/panel/panel-novatek-nt37801.c b/drivers/gpu/drm/panel/panel-novatek-nt37801.c
> > > > > index d6a37d7e0cc6..7eda16e0c1f9 100644
> > > > > --- a/drivers/gpu/drm/panel/panel-novatek-nt37801.c
> > > > > +++ b/drivers/gpu/drm/panel/panel-novatek-nt37801.c
> > > > > @@ -267,6 +267,11 @@ static int novatek_nt37801_probe(struct mipi_dsi_device *dsi)
> > > > > if (ret < 0)
> > > > > return ret;
> > > > >
> > > > > + ret = regulator_set_voltage(ctx->supplies[0].consumer,
> > > > > + 1650000, 1950000);
> > > >
> > > > This should be done in the DT. Limit the voltage per the user.
> > > Two reason:
> > > 1.
> > > I see https://patchwork.freedesktop.org/patch/354612/
> > >
> > > panel panel-novatek-nt35510.c also use regulator_set_voltage set right voltage,
> > > so I do the same work.
> >
> > Please look for the majority rather than the exceptions. Out of all
> > panel drivers only two set the voltage directly.
> >
> > >
> > > 2. Kaanapali vddio regulator:
> > >
> > > vreg_l12b_1p8: ldo12 {
> > > regulator-name = "vreg_l12b_1p8";
> > > regulator-min-microvolt = <1200000>;
> > > regulator-max-microvolt = <1800000>;
> > >
> > > Voltage is from 1.2~.1.8 V , So I can not set it 1.65~1.95 V from DT(1.95V is beyond the allowed range).
> > > So I use regulator_set_voltage to set voltage, and regulator_set_voltage will choose the appropriate voltage.
> >
> > DT has to list the voltage values that work for the devices on that
> > particular platform. So, ldo12 should be listing 1.64 - 1.8 V.
> get it. I check downstream DT,
> dosnstream DT:
> regulator-min-microvolt = <1800000>;
> regulator-max-microvolt = <1800000>;
>
> I test 1.8V works, So I will add 1.8V in next patch, do you think it is ok?
What does panel's datasheet say?
--
With best wishes
Dmitry
^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH 08/12] arm64: defconfig: Enable NT37801 DSI panel driver
2025-10-29 2:37 ` yuanjiey
@ 2025-10-29 13:05 ` Krzysztof Kozlowski
2025-10-30 2:33 ` yuanjiey
0 siblings, 1 reply; 77+ messages in thread
From: Krzysztof Kozlowski @ 2025-10-29 13:05 UTC (permalink / raw)
To: yuanjiey, Bjorn Andersson
Cc: robin.clark, lumag, abhinav.kumar, sean, marijn.suijten, airlied,
simona, maarten.lankhorst, mripard, tzimmermann, robh, krzk+dt,
conor+dt, quic_mkrishn, jonathan, quic_khsieh, neil.armstrong,
linux-arm-msm, dri-devel, freedreno, devicetree, linux-kernel,
tingwei.zhang, aiqun.yu, yongxing.mou
On 29/10/2025 03:37, yuanjiey wrote:
> On Mon, Oct 27, 2025 at 10:51:23PM -0500, Bjorn Andersson wrote:
>> On Thu, Oct 23, 2025 at 04:06:05PM +0800, yuanjie yang wrote:
>>> From: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
>>>
>>> Build the NT37801 DSI panel driver as module.
>>>
>>> Signed-off-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
>>> Signed-off-by: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
>>
>> You (Yuanjie) authored the patch, but forgot to sign-off, then Yongxing
>> provided certificate of origin, then you provide certificate of origin
>> and send it to list?
>>
>> Please correct.
>
> All the display patches were jointly developed by Yongxing and me.
> So every patch
So two people were working on this absolutely trivial defconfig change?
I have troubles believing this.
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH 07/12] drm/panel: Set sufficient voltage for panel nt37801
2025-10-29 12:20 ` Dmitry Baryshkov
@ 2025-10-30 2:08 ` yuanjiey
2025-10-30 17:57 ` Dmitry Baryshkov
0 siblings, 1 reply; 77+ messages in thread
From: yuanjiey @ 2025-10-30 2:08 UTC (permalink / raw)
To: Dmitry Baryshkov
Cc: robin.clark, lumag, abhinav.kumar, sean, marijn.suijten, airlied,
simona, maarten.lankhorst, mripard, tzimmermann, robh, krzk+dt,
conor+dt, quic_mkrishn, jonathan, quic_khsieh, neil.armstrong,
linux-arm-msm, dri-devel, freedreno, devicetree, linux-kernel,
tingwei.zhang, aiqun.yu, yongxing.mou
On Wed, Oct 29, 2025 at 02:20:13PM +0200, Dmitry Baryshkov wrote:
> On Wed, Oct 29, 2025 at 09:58:39AM +0800, yuanjiey wrote:
> > On Mon, Oct 27, 2025 at 02:22:04PM +0200, Dmitry Baryshkov wrote:
> > > On Fri, Oct 24, 2025 at 02:00:50PM +0800, yuanjiey wrote:
> > > > On Thu, Oct 23, 2025 at 03:14:38PM +0300, Dmitry Baryshkov wrote:
> > > > > On Thu, Oct 23, 2025 at 04:06:04PM +0800, yuanjie yang wrote:
> > > > > > From: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
> > > > > >
> > > > > > The NT37801 Sepc V1.0 chapter "5.7.1 Power On Sequence" states
> > > > > > VDDI=1.65V~1.95V, so set sufficient voltage for panel nt37801.
> > > > > >
> > > > > > Signed-off-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
> > > > > > Signed-off-by: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
> > > > > > ---
> > > > > > drivers/gpu/drm/panel/panel-novatek-nt37801.c | 5 +++++
> > > > > > 1 file changed, 5 insertions(+)
> > > > > >
> > > > > > diff --git a/drivers/gpu/drm/panel/panel-novatek-nt37801.c b/drivers/gpu/drm/panel/panel-novatek-nt37801.c
> > > > > > index d6a37d7e0cc6..7eda16e0c1f9 100644
> > > > > > --- a/drivers/gpu/drm/panel/panel-novatek-nt37801.c
> > > > > > +++ b/drivers/gpu/drm/panel/panel-novatek-nt37801.c
> > > > > > @@ -267,6 +267,11 @@ static int novatek_nt37801_probe(struct mipi_dsi_device *dsi)
> > > > > > if (ret < 0)
> > > > > > return ret;
> > > > > >
> > > > > > + ret = regulator_set_voltage(ctx->supplies[0].consumer,
> > > > > > + 1650000, 1950000);
> > > > >
> > > > > This should be done in the DT. Limit the voltage per the user.
> > > > Two reason:
> > > > 1.
> > > > I see https://patchwork.freedesktop.org/patch/354612/
> > > >
> > > > panel panel-novatek-nt35510.c also use regulator_set_voltage set right voltage,
> > > > so I do the same work.
> > >
> > > Please look for the majority rather than the exceptions. Out of all
> > > panel drivers only two set the voltage directly.
> > >
> > > >
> > > > 2. Kaanapali vddio regulator:
> > > >
> > > > vreg_l12b_1p8: ldo12 {
> > > > regulator-name = "vreg_l12b_1p8";
> > > > regulator-min-microvolt = <1200000>;
> > > > regulator-max-microvolt = <1800000>;
> > > >
> > > > Voltage is from 1.2~.1.8 V , So I can not set it 1.65~1.95 V from DT(1.95V is beyond the allowed range).
> > > > So I use regulator_set_voltage to set voltage, and regulator_set_voltage will choose the appropriate voltage.
> > >
> > > DT has to list the voltage values that work for the devices on that
> > > particular platform. So, ldo12 should be listing 1.64 - 1.8 V.
> > get it. I check downstream DT,
> > dosnstream DT:
> > regulator-min-microvolt = <1800000>;
> > regulator-max-microvolt = <1800000>;
> >
> > I test 1.8V works, So I will add 1.8V in next patch, do you think it is ok?
>
> What does panel's datasheet say?
The NT37801 Sepc V1.0 chapter "5.7.1 Power On Sequence" states
VDDI=1.65V~1.95V.
So I should follow datasheet to set DT ldo12: 1.64 - 1.8V ?
if you think it is ture, I will fix it in next patch.
Thanks,
Yuanjie
> --
> With best wishes
> Dmitry
^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH 08/12] arm64: defconfig: Enable NT37801 DSI panel driver
2025-10-29 13:05 ` Krzysztof Kozlowski
@ 2025-10-30 2:33 ` yuanjiey
2025-10-30 5:37 ` Krzysztof Kozlowski
0 siblings, 1 reply; 77+ messages in thread
From: yuanjiey @ 2025-10-30 2:33 UTC (permalink / raw)
To: Krzysztof Kozlowski
Cc: Bjorn Andersson, robin.clark, lumag, abhinav.kumar, sean,
marijn.suijten, airlied, simona, maarten.lankhorst, mripard,
tzimmermann, robh, krzk+dt, conor+dt, quic_mkrishn, jonathan,
quic_khsieh, neil.armstrong, linux-arm-msm, dri-devel, freedreno,
devicetree, linux-kernel, tingwei.zhang, aiqun.yu, yongxing.mou
On Wed, Oct 29, 2025 at 02:05:20PM +0100, Krzysztof Kozlowski wrote:
> On 29/10/2025 03:37, yuanjiey wrote:
> > On Mon, Oct 27, 2025 at 10:51:23PM -0500, Bjorn Andersson wrote:
> >> On Thu, Oct 23, 2025 at 04:06:05PM +0800, yuanjie yang wrote:
> >>> From: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
> >>>
> >>> Build the NT37801 DSI panel driver as module.
> >>>
> >>> Signed-off-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
> >>> Signed-off-by: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
> >>
> >> You (Yuanjie) authored the patch, but forgot to sign-off, then Yongxing
> >> provided certificate of origin, then you provide certificate of origin
> >> and send it to list?
> >>
> >> Please correct.
> >
> > All the display patches were jointly developed by Yongxing and me.
> > So every patch
>
>
> So two people were working on this absolutely trivial defconfig change?
> I have troubles believing this.
I want to say these patches I am first author and yongxing give me support, so
I think yongxing is second author.
I want to express my gratitude for Yongxing's support in every patch, so I included
both our names in the sign-off for each one.
However, if my intention causes any trouble for maintainer, I can remove Yongxing's
sign-off from this patch.
Thanks,
Yuanjie
> Best regards,
> Krzysztof
^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH 08/12] arm64: defconfig: Enable NT37801 DSI panel driver
2025-10-30 2:33 ` yuanjiey
@ 2025-10-30 5:37 ` Krzysztof Kozlowski
2025-10-30 7:07 ` yuanjiey
0 siblings, 1 reply; 77+ messages in thread
From: Krzysztof Kozlowski @ 2025-10-30 5:37 UTC (permalink / raw)
To: yuanjiey
Cc: Bjorn Andersson, robin.clark, lumag, abhinav.kumar, sean,
marijn.suijten, airlied, simona, maarten.lankhorst, mripard,
tzimmermann, robh, krzk+dt, conor+dt, quic_mkrishn, jonathan,
quic_khsieh, neil.armstrong, linux-arm-msm, dri-devel, freedreno,
devicetree, linux-kernel, tingwei.zhang, aiqun.yu, yongxing.mou
On 30/10/2025 03:33, yuanjiey wrote:
> On Wed, Oct 29, 2025 at 02:05:20PM +0100, Krzysztof Kozlowski wrote:
>> On 29/10/2025 03:37, yuanjiey wrote:
>>> On Mon, Oct 27, 2025 at 10:51:23PM -0500, Bjorn Andersson wrote:
>>>> On Thu, Oct 23, 2025 at 04:06:05PM +0800, yuanjie yang wrote:
>>>>> From: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
>>>>>
>>>>> Build the NT37801 DSI panel driver as module.
>>>>>
>>>>> Signed-off-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
>>>>> Signed-off-by: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
>>>>
>>>> You (Yuanjie) authored the patch, but forgot to sign-off, then Yongxing
>>>> provided certificate of origin, then you provide certificate of origin
>>>> and send it to list?
>>>>
>>>> Please correct.
>>>
>>> All the display patches were jointly developed by Yongxing and me.
>>> So every patch
>>
>>
>> So two people were working on this absolutely trivial defconfig change?
>> I have troubles believing this.
> I want to say these patches I am first author and yongxing give me support, so
> I think yongxing is second author.
>
> I want to express my gratitude for Yongxing's support in every patch, so I included
> both our names in the sign-off for each one.
>
> However, if my intention causes any trouble for maintainer, I can remove Yongxing's
> sign-off from this patch.
Please read submitting patches to understand what Signed-off-by means.
Otherwise I have doubts we can accept your patches - you simply do not
understand what you are certifying.
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH 08/12] arm64: defconfig: Enable NT37801 DSI panel driver
2025-10-30 5:37 ` Krzysztof Kozlowski
@ 2025-10-30 7:07 ` yuanjiey
2025-10-30 10:43 ` Krzysztof Kozlowski
2025-10-30 18:05 ` Dmitry Baryshkov
0 siblings, 2 replies; 77+ messages in thread
From: yuanjiey @ 2025-10-30 7:07 UTC (permalink / raw)
To: Krzysztof Kozlowski
Cc: Bjorn Andersson, robin.clark, lumag, abhinav.kumar, sean,
marijn.suijten, airlied, simona, maarten.lankhorst, mripard,
tzimmermann, robh, krzk+dt, conor+dt, quic_mkrishn, jonathan,
quic_khsieh, neil.armstrong, linux-arm-msm, dri-devel, freedreno,
devicetree, linux-kernel, tingwei.zhang, aiqun.yu, yongxing.mou
On Thu, Oct 30, 2025 at 06:37:40AM +0100, Krzysztof Kozlowski wrote:
> On 30/10/2025 03:33, yuanjiey wrote:
> > On Wed, Oct 29, 2025 at 02:05:20PM +0100, Krzysztof Kozlowski wrote:
> >> On 29/10/2025 03:37, yuanjiey wrote:
> >>> On Mon, Oct 27, 2025 at 10:51:23PM -0500, Bjorn Andersson wrote:
> >>>> On Thu, Oct 23, 2025 at 04:06:05PM +0800, yuanjie yang wrote:
> >>>>> From: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
> >>>>>
> >>>>> Build the NT37801 DSI panel driver as module.
> >>>>>
> >>>>> Signed-off-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
> >>>>> Signed-off-by: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
> >>>>
> >>>> You (Yuanjie) authored the patch, but forgot to sign-off, then Yongxing
> >>>> provided certificate of origin, then you provide certificate of origin
> >>>> and send it to list?
> >>>>
> >>>> Please correct.
> >>>
> >>> All the display patches were jointly developed by Yongxing and me.
> >>> So every patch
> >>
> >>
> >> So two people were working on this absolutely trivial defconfig change?
> >> I have troubles believing this.
> > I want to say these patches I am first author and yongxing give me support, so
> > I think yongxing is second author.
> >
> > I want to express my gratitude for Yongxing's support in every patch, so I included
> > both our names in the sign-off for each one.
> >
> > However, if my intention causes any trouble for maintainer, I can remove Yongxing's
> > sign-off from this patch.
>
>
> Please read submitting patches to understand what Signed-off-by means.
> Otherwise I have doubts we can accept your patches - you simply do not
> understand what you are certifying.
Thanks for your tips, and I learn some tips from submitting patches:
https://elixir.bootlin.com/linux/v6.18-rc3/source/Documentation/process/submitting-patches.rst#L524
I thinks below sign should be true, if you also think it true, I will use it in next patches.
Co-developed-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
Signed-off-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
Signed-off-by: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
Thanks,
Yuanjie
> Best regards,
> Krzysztof
^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH 08/12] arm64: defconfig: Enable NT37801 DSI panel driver
2025-10-30 7:07 ` yuanjiey
@ 2025-10-30 10:43 ` Krzysztof Kozlowski
2025-10-31 2:28 ` yuanjiey
2025-10-30 18:05 ` Dmitry Baryshkov
1 sibling, 1 reply; 77+ messages in thread
From: Krzysztof Kozlowski @ 2025-10-30 10:43 UTC (permalink / raw)
To: yuanjiey
Cc: Bjorn Andersson, robin.clark, lumag, abhinav.kumar, sean,
marijn.suijten, airlied, simona, maarten.lankhorst, mripard,
tzimmermann, robh, krzk+dt, conor+dt, quic_mkrishn, jonathan,
quic_khsieh, neil.armstrong, linux-arm-msm, dri-devel, freedreno,
devicetree, linux-kernel, tingwei.zhang, aiqun.yu, yongxing.mou
On 30/10/2025 08:07, yuanjiey wrote:
> On Thu, Oct 30, 2025 at 06:37:40AM +0100, Krzysztof Kozlowski wrote:
>> On 30/10/2025 03:33, yuanjiey wrote:
>>> On Wed, Oct 29, 2025 at 02:05:20PM +0100, Krzysztof Kozlowski wrote:
>>>> On 29/10/2025 03:37, yuanjiey wrote:
>>>>> On Mon, Oct 27, 2025 at 10:51:23PM -0500, Bjorn Andersson wrote:
>>>>>> On Thu, Oct 23, 2025 at 04:06:05PM +0800, yuanjie yang wrote:
>>>>>>> From: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
>>>>>>>
>>>>>>> Build the NT37801 DSI panel driver as module.
>>>>>>>
>>>>>>> Signed-off-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
>>>>>>> Signed-off-by: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
>>>>>>
>>>>>> You (Yuanjie) authored the patch, but forgot to sign-off, then Yongxing
>>>>>> provided certificate of origin, then you provide certificate of origin
>>>>>> and send it to list?
>>>>>>
>>>>>> Please correct.
>>>>>
>>>>> All the display patches were jointly developed by Yongxing and me.
>>>>> So every patch
>>>>
>>>>
>>>> So two people were working on this absolutely trivial defconfig change?
>>>> I have troubles believing this.
>>> I want to say these patches I am first author and yongxing give me support, so
>>> I think yongxing is second author.
>>>
>>> I want to express my gratitude for Yongxing's support in every patch, so I included
>>> both our names in the sign-off for each one.
>>>
>>> However, if my intention causes any trouble for maintainer, I can remove Yongxing's
>>> sign-off from this patch.
>>
>>
>> Please read submitting patches to understand what Signed-off-by means.
>> Otherwise I have doubts we can accept your patches - you simply do not
>> understand what you are certifying.
> Thanks for your tips, and I learn some tips from submitting patches:
> https://elixir.bootlin.com/linux/v6.18-rc3/source/Documentation/process/submitting-patches.rst#L524
>
> I thinks below sign should be true, if you also think it true, I will use it in next patches.
>
> Co-developed-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
How does co-developing match what you wrote "give me support"?
> Signed-off-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
> Signed-off-by: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH 07/12] drm/panel: Set sufficient voltage for panel nt37801
2025-10-30 2:08 ` yuanjiey
@ 2025-10-30 17:57 ` Dmitry Baryshkov
2025-10-31 2:21 ` yuanjiey
0 siblings, 1 reply; 77+ messages in thread
From: Dmitry Baryshkov @ 2025-10-30 17:57 UTC (permalink / raw)
To: yuanjiey
Cc: robin.clark, lumag, abhinav.kumar, sean, marijn.suijten, airlied,
simona, maarten.lankhorst, mripard, tzimmermann, robh, krzk+dt,
conor+dt, quic_mkrishn, jonathan, quic_khsieh, neil.armstrong,
linux-arm-msm, dri-devel, freedreno, devicetree, linux-kernel,
tingwei.zhang, aiqun.yu, yongxing.mou
On Thu, Oct 30, 2025 at 10:08:30AM +0800, yuanjiey wrote:
> On Wed, Oct 29, 2025 at 02:20:13PM +0200, Dmitry Baryshkov wrote:
> > On Wed, Oct 29, 2025 at 09:58:39AM +0800, yuanjiey wrote:
> > > On Mon, Oct 27, 2025 at 02:22:04PM +0200, Dmitry Baryshkov wrote:
> > > > On Fri, Oct 24, 2025 at 02:00:50PM +0800, yuanjiey wrote:
> > > > > On Thu, Oct 23, 2025 at 03:14:38PM +0300, Dmitry Baryshkov wrote:
> > > > > > On Thu, Oct 23, 2025 at 04:06:04PM +0800, yuanjie yang wrote:
> > > > > > > From: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
> > > > > > >
> > > > > > > The NT37801 Sepc V1.0 chapter "5.7.1 Power On Sequence" states
> > > > > > > VDDI=1.65V~1.95V, so set sufficient voltage for panel nt37801.
> > > > > > >
> > > > > > > Signed-off-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
> > > > > > > Signed-off-by: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
> > > > > > > ---
> > > > > > > drivers/gpu/drm/panel/panel-novatek-nt37801.c | 5 +++++
> > > > > > > 1 file changed, 5 insertions(+)
> > > > > > >
> > > > > > > diff --git a/drivers/gpu/drm/panel/panel-novatek-nt37801.c b/drivers/gpu/drm/panel/panel-novatek-nt37801.c
> > > > > > > index d6a37d7e0cc6..7eda16e0c1f9 100644
> > > > > > > --- a/drivers/gpu/drm/panel/panel-novatek-nt37801.c
> > > > > > > +++ b/drivers/gpu/drm/panel/panel-novatek-nt37801.c
> > > > > > > @@ -267,6 +267,11 @@ static int novatek_nt37801_probe(struct mipi_dsi_device *dsi)
> > > > > > > if (ret < 0)
> > > > > > > return ret;
> > > > > > >
> > > > > > > + ret = regulator_set_voltage(ctx->supplies[0].consumer,
> > > > > > > + 1650000, 1950000);
> > > > > >
> > > > > > This should be done in the DT. Limit the voltage per the user.
> > > > > Two reason:
> > > > > 1.
> > > > > I see https://patchwork.freedesktop.org/patch/354612/
> > > > >
> > > > > panel panel-novatek-nt35510.c also use regulator_set_voltage set right voltage,
> > > > > so I do the same work.
> > > >
> > > > Please look for the majority rather than the exceptions. Out of all
> > > > panel drivers only two set the voltage directly.
> > > >
> > > > >
> > > > > 2. Kaanapali vddio regulator:
> > > > >
> > > > > vreg_l12b_1p8: ldo12 {
> > > > > regulator-name = "vreg_l12b_1p8";
> > > > > regulator-min-microvolt = <1200000>;
> > > > > regulator-max-microvolt = <1800000>;
> > > > >
> > > > > Voltage is from 1.2~.1.8 V , So I can not set it 1.65~1.95 V from DT(1.95V is beyond the allowed range).
> > > > > So I use regulator_set_voltage to set voltage, and regulator_set_voltage will choose the appropriate voltage.
> > > >
> > > > DT has to list the voltage values that work for the devices on that
> > > > particular platform. So, ldo12 should be listing 1.64 - 1.8 V.
> > > get it. I check downstream DT,
> > > dosnstream DT:
> > > regulator-min-microvolt = <1800000>;
> > > regulator-max-microvolt = <1800000>;
> > >
> > > I test 1.8V works, So I will add 1.8V in next patch, do you think it is ok?
> >
> > What does panel's datasheet say?
>
> The NT37801 Sepc V1.0 chapter "5.7.1 Power On Sequence" states
> VDDI=1.65V~1.95V.
>
> So I should follow datasheet to set DT ldo12: 1.64 - 1.8V ?
If the panel declares minimum voltage to 1.65 V, why are you declaring
1.64 V as the mimimal voltage for the rail?
>
> if you think it is ture, I will fix it in next patch.
--
With best wishes
Dmitry
^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH 01/12] drm/msm/dsi/phy: Add support for Kaanapali
2025-10-29 3:19 ` yuanjiey
2025-10-29 9:48 ` Konrad Dybcio
@ 2025-10-30 18:01 ` Dmitry Baryshkov
2025-10-31 2:46 ` yuanjiey
1 sibling, 1 reply; 77+ messages in thread
From: Dmitry Baryshkov @ 2025-10-30 18:01 UTC (permalink / raw)
To: yuanjiey
Cc: Konrad Dybcio, robin.clark, lumag, abhinav.kumar, sean,
marijn.suijten, airlied, simona, maarten.lankhorst, mripard,
tzimmermann, robh, krzk+dt, conor+dt, quic_mkrishn, jonathan,
quic_khsieh, neil.armstrong, linux-arm-msm, dri-devel, freedreno,
devicetree, linux-kernel, tingwei.zhang, aiqun.yu, yongxing.mou
On Wed, Oct 29, 2025 at 11:19:36AM +0800, yuanjiey wrote:
> On Mon, Oct 27, 2025 at 03:29:40PM +0200, Dmitry Baryshkov wrote:
> > On Mon, Oct 27, 2025 at 02:20:26PM +0100, Konrad Dybcio wrote:
> > > On 10/27/25 2:14 PM, Dmitry Baryshkov wrote:
> > > > On Fri, Oct 24, 2025 at 11:27:53AM +0800, yuanjiey wrote:
> > > >> On Thu, Oct 23, 2025 at 02:02:45PM +0200, Konrad Dybcio wrote:
> > > >>> On 10/23/25 1:48 PM, Dmitry Baryshkov wrote:
> > > >>>> On Thu, Oct 23, 2025 at 03:53:50PM +0800, yuanjie yang wrote:
> > > >>>>> From: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
> > > >>>>>
> > > >>>>> Add DSI PHY support for the Kaanapali platform.
> > > >>>>>
> > > >>>>> Signed-off-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
> > > >>>>> Signed-off-by: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
> > > >>>>> ---
> > > >>>
> > > >>> [...]
> > > >>>
> > > >>>>> + .io_start = { 0x9ac1000, 0xae97000 },
> > > >>>>
> > > >>>> These two addresses are very strange. Would you care to explain? Other
> > > >>>> than that there is no difference from SM8750 entry.
> > > >>>
> > > >>> They're correct.
> > > >>> Although they correspond to DSI_0 and DSI_2..
> > > >>>
> > > >>> Yuanjie, none of the DSI patches mention that v2.10.0 is packed with
> > > >>> new features. Please provide some more context and how that impacts
> > > >>> the hw description.
> > > >>
> > > >> Thanks for your reminder.
> > > >>
> > > >> Correct here:
> > > >> io_start = { 0x9ac1000, 0x9ac4000 } DSI_Phy0 DSI_phy1
> > > >>
> > > >> And v2.10.0 no clearly meaningful changes compared to v2.9.0.
> > > >> just some register address change.
> > > >
> > > > Addition of DSI2 is a meaningful change, which needs to be handled both
> > > > in the core and in the DSI / DSI PHY drivers.
> > >
> > > DSI2 was introduced in 8750 already, but it was done without any
> > > fanfare..
> > >
> > > I see a diagram that shows an XBAR with inputs from DSI0 and DSI2,
> > > and an output to DSI0_PHY (same thing on kaanapali - meaning this
> > > patch is potentially wrong and should ref DSI1_PHY instead?)
> >
> Yes, I check ipcata Doc, I see DSI0\DSI0_PHY DSI1\DSI1_PHY DSI2\DSI2_PHY in Kaanapali,
> addition of DSI2\DSI2_PHY compared to SM8650.
>
> look like I should add: config io_start = {DSI0_PHY, DSI1_PHY, DSI2_PHY},
I see DSI0, DSI1, DSI2, but DSI0_PHY and DSI1_PHY.
--
With best wishes
Dmitry
^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH 03/12] drm/msm/dpu: Compatible with Kaanapali interrupt register
2025-10-29 2:49 ` yuanjiey
@ 2025-10-30 18:02 ` Dmitry Baryshkov
2025-10-31 2:50 ` yuanjiey
0 siblings, 1 reply; 77+ messages in thread
From: Dmitry Baryshkov @ 2025-10-30 18:02 UTC (permalink / raw)
To: yuanjiey
Cc: robin.clark, lumag, abhinav.kumar, sean, marijn.suijten, airlied,
simona, maarten.lankhorst, mripard, tzimmermann, robh, krzk+dt,
conor+dt, quic_mkrishn, jonathan, quic_khsieh, neil.armstrong,
linux-arm-msm, dri-devel, freedreno, devicetree, linux-kernel,
tingwei.zhang, aiqun.yu, yongxing.mou
On Wed, Oct 29, 2025 at 10:49:32AM +0800, yuanjiey wrote:
> On Mon, Oct 27, 2025 at 03:21:33PM +0200, Dmitry Baryshkov wrote:
> > On Fri, Oct 24, 2025 at 10:59:07AM +0800, yuanjiey wrote:
> > > On Thu, Oct 23, 2025 at 02:59:12PM +0300, Dmitry Baryshkov wrote:
> > > > On Thu, Oct 23, 2025 at 03:53:52PM +0800, yuanjie yang wrote:
> > > > > From: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
> > > > >
> > > > > DPU version 13 introduces changes to the interrupt register
> > > > > layout. Update the driver to support these modifications for
> > > > > proper interrupt handling.
> > > >
> > > > So... Previous patch enabled support for the platform and it has been
> > > > using wrong registers for interrupts? I think that's broken.
> > >
> > > I want to express DPU 13 has different INTF register address, so need to add new
> > > interrupt array to let DPU 13 interrupt work fine. Maybe I should optimize my commit msg.
> >
> > Make sure that patches are structured logically. You can not enable
> > support for the hardware if the interrupts are not (yet) handled.
>
> Kaanapali Dpu interrupts:
> INTR_IDX_VSYNC,
> INTR_IDX_PINGPONG,
> INTR_IDX_UNDERRUN,
> INTR_IDX_CTL_START,
> INTR_IDX_RDPTR,
> INTR_IDX_WB_DONE,
>
> are handled by irq handler, so here enable dpu_intr_set_13xx.
You have enabled DPU 13 in the previous commit. And only now you are
adding support for interrupt registers on DPU 13.x. No, that's not good.
--
With best wishes
Dmitry
^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH 08/12] arm64: defconfig: Enable NT37801 DSI panel driver
2025-10-30 7:07 ` yuanjiey
2025-10-30 10:43 ` Krzysztof Kozlowski
@ 2025-10-30 18:05 ` Dmitry Baryshkov
1 sibling, 0 replies; 77+ messages in thread
From: Dmitry Baryshkov @ 2025-10-30 18:05 UTC (permalink / raw)
To: yuanjiey
Cc: Krzysztof Kozlowski, Bjorn Andersson, robin.clark, lumag,
abhinav.kumar, sean, marijn.suijten, airlied, simona,
maarten.lankhorst, mripard, tzimmermann, robh, krzk+dt, conor+dt,
quic_mkrishn, jonathan, quic_khsieh, neil.armstrong,
linux-arm-msm, dri-devel, freedreno, devicetree, linux-kernel,
tingwei.zhang, aiqun.yu, yongxing.mou
On Thu, Oct 30, 2025 at 03:07:59PM +0800, yuanjiey wrote:
> On Thu, Oct 30, 2025 at 06:37:40AM +0100, Krzysztof Kozlowski wrote:
> > On 30/10/2025 03:33, yuanjiey wrote:
> > > On Wed, Oct 29, 2025 at 02:05:20PM +0100, Krzysztof Kozlowski wrote:
> > >> On 29/10/2025 03:37, yuanjiey wrote:
> > >>> On Mon, Oct 27, 2025 at 10:51:23PM -0500, Bjorn Andersson wrote:
> > >>>> On Thu, Oct 23, 2025 at 04:06:05PM +0800, yuanjie yang wrote:
> > >>>>> From: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
> > >>>>>
> > >>>>> Build the NT37801 DSI panel driver as module.
> > >>>>>
> > >>>>> Signed-off-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
> > >>>>> Signed-off-by: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
> > >>>>
> > >>>> You (Yuanjie) authored the patch, but forgot to sign-off, then Yongxing
> > >>>> provided certificate of origin, then you provide certificate of origin
> > >>>> and send it to list?
> > >>>>
> > >>>> Please correct.
> > >>>
> > >>> All the display patches were jointly developed by Yongxing and me.
> > >>> So every patch
> > >>
> > >>
> > >> So two people were working on this absolutely trivial defconfig change?
> > >> I have troubles believing this.
> > > I want to say these patches I am first author and yongxing give me support, so
> > > I think yongxing is second author.
> > >
> > > I want to express my gratitude for Yongxing's support in every patch, so I included
> > > both our names in the sign-off for each one.
> > >
> > > However, if my intention causes any trouble for maintainer, I can remove Yongxing's
> > > sign-off from this patch.
> >
> >
> > Please read submitting patches to understand what Signed-off-by means.
> > Otherwise I have doubts we can accept your patches - you simply do not
> > understand what you are certifying.
> Thanks for your tips, and I learn some tips from submitting patches:
> https://elixir.bootlin.com/linux/v6.18-rc3/source/Documentation/process/submitting-patches.rst#L524
>
> I thinks below sign should be true, if you also think it true, I will use it in next patches.
>
> Co-developed-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
> Signed-off-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
> Signed-off-by: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
Does one-liner need two engineers to co-develop it?
--
With best wishes
Dmitry
^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH 07/12] drm/panel: Set sufficient voltage for panel nt37801
2025-10-30 17:57 ` Dmitry Baryshkov
@ 2025-10-31 2:21 ` yuanjiey
2025-10-31 15:43 ` Dmitry Baryshkov
0 siblings, 1 reply; 77+ messages in thread
From: yuanjiey @ 2025-10-31 2:21 UTC (permalink / raw)
To: Dmitry Baryshkov
Cc: robin.clark, lumag, abhinav.kumar, sean, marijn.suijten, airlied,
simona, maarten.lankhorst, mripard, tzimmermann, robh, krzk+dt,
conor+dt, quic_mkrishn, jonathan, quic_khsieh, neil.armstrong,
linux-arm-msm, dri-devel, freedreno, devicetree, linux-kernel,
tingwei.zhang, aiqun.yu, yongxing.mou
On Thu, Oct 30, 2025 at 07:57:46PM +0200, Dmitry Baryshkov wrote:
> On Thu, Oct 30, 2025 at 10:08:30AM +0800, yuanjiey wrote:
> > On Wed, Oct 29, 2025 at 02:20:13PM +0200, Dmitry Baryshkov wrote:
> > > On Wed, Oct 29, 2025 at 09:58:39AM +0800, yuanjiey wrote:
> > > > On Mon, Oct 27, 2025 at 02:22:04PM +0200, Dmitry Baryshkov wrote:
> > > > > On Fri, Oct 24, 2025 at 02:00:50PM +0800, yuanjiey wrote:
> > > > > > On Thu, Oct 23, 2025 at 03:14:38PM +0300, Dmitry Baryshkov wrote:
> > > > > > > On Thu, Oct 23, 2025 at 04:06:04PM +0800, yuanjie yang wrote:
> > > > > > > > From: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
> > > > > > > >
> > > > > > > > The NT37801 Sepc V1.0 chapter "5.7.1 Power On Sequence" states
> > > > > > > > VDDI=1.65V~1.95V, so set sufficient voltage for panel nt37801.
> > > > > > > >
> > > > > > > > Signed-off-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
> > > > > > > > Signed-off-by: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
> > > > > > > > ---
> > > > > > > > drivers/gpu/drm/panel/panel-novatek-nt37801.c | 5 +++++
> > > > > > > > 1 file changed, 5 insertions(+)
> > > > > > > >
> > > > > > > > diff --git a/drivers/gpu/drm/panel/panel-novatek-nt37801.c b/drivers/gpu/drm/panel/panel-novatek-nt37801.c
> > > > > > > > index d6a37d7e0cc6..7eda16e0c1f9 100644
> > > > > > > > --- a/drivers/gpu/drm/panel/panel-novatek-nt37801.c
> > > > > > > > +++ b/drivers/gpu/drm/panel/panel-novatek-nt37801.c
> > > > > > > > @@ -267,6 +267,11 @@ static int novatek_nt37801_probe(struct mipi_dsi_device *dsi)
> > > > > > > > if (ret < 0)
> > > > > > > > return ret;
> > > > > > > >
> > > > > > > > + ret = regulator_set_voltage(ctx->supplies[0].consumer,
> > > > > > > > + 1650000, 1950000);
> > > > > > >
> > > > > > > This should be done in the DT. Limit the voltage per the user.
> > > > > > Two reason:
> > > > > > 1.
> > > > > > I see https://patchwork.freedesktop.org/patch/354612/
> > > > > >
> > > > > > panel panel-novatek-nt35510.c also use regulator_set_voltage set right voltage,
> > > > > > so I do the same work.
> > > > >
> > > > > Please look for the majority rather than the exceptions. Out of all
> > > > > panel drivers only two set the voltage directly.
> > > > >
> > > > > >
> > > > > > 2. Kaanapali vddio regulator:
> > > > > >
> > > > > > vreg_l12b_1p8: ldo12 {
> > > > > > regulator-name = "vreg_l12b_1p8";
> > > > > > regulator-min-microvolt = <1200000>;
> > > > > > regulator-max-microvolt = <1800000>;
> > > > > >
> > > > > > Voltage is from 1.2~.1.8 V , So I can not set it 1.65~1.95 V from DT(1.95V is beyond the allowed range).
> > > > > > So I use regulator_set_voltage to set voltage, and regulator_set_voltage will choose the appropriate voltage.
> > > > >
> > > > > DT has to list the voltage values that work for the devices on that
> > > > > particular platform. So, ldo12 should be listing 1.64 - 1.8 V.
> > > > get it. I check downstream DT,
> > > > dosnstream DT:
> > > > regulator-min-microvolt = <1800000>;
> > > > regulator-max-microvolt = <1800000>;
> > > >
> > > > I test 1.8V works, So I will add 1.8V in next patch, do you think it is ok?
> > >
> > > What does panel's datasheet say?
> >
> > The NT37801 Sepc V1.0 chapter "5.7.1 Power On Sequence" states
> > VDDI=1.65V~1.95V.
> >
> > So I should follow datasheet to set DT ldo12: 1.64 - 1.8V ?
>
> If the panel declares minimum voltage to 1.65 V, why are you declaring
> 1.64 V as the mimimal voltage for the rail?
Corrcet here:
DT ldo12 will be 1.65 - 1.8V
Thanks,
Yuanjie
> >
> > if you think it is ture, I will fix it in next patch.
> --
> With best wishes
> Dmitry
^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH 08/12] arm64: defconfig: Enable NT37801 DSI panel driver
2025-10-30 10:43 ` Krzysztof Kozlowski
@ 2025-10-31 2:28 ` yuanjiey
2025-10-31 17:44 ` Dmitry Baryshkov
0 siblings, 1 reply; 77+ messages in thread
From: yuanjiey @ 2025-10-31 2:28 UTC (permalink / raw)
To: Krzysztof Kozlowski
Cc: Bjorn Andersson, robin.clark, lumag, abhinav.kumar, sean,
marijn.suijten, airlied, simona, maarten.lankhorst, mripard,
tzimmermann, robh, krzk+dt, conor+dt, quic_mkrishn, jonathan,
quic_khsieh, neil.armstrong, linux-arm-msm, dri-devel, freedreno,
devicetree, linux-kernel, tingwei.zhang, aiqun.yu, yongxing.mou
On Thu, Oct 30, 2025 at 11:43:49AM +0100, Krzysztof Kozlowski wrote:
> On 30/10/2025 08:07, yuanjiey wrote:
> > On Thu, Oct 30, 2025 at 06:37:40AM +0100, Krzysztof Kozlowski wrote:
> >> On 30/10/2025 03:33, yuanjiey wrote:
> >>> On Wed, Oct 29, 2025 at 02:05:20PM +0100, Krzysztof Kozlowski wrote:
> >>>> On 29/10/2025 03:37, yuanjiey wrote:
> >>>>> On Mon, Oct 27, 2025 at 10:51:23PM -0500, Bjorn Andersson wrote:
> >>>>>> On Thu, Oct 23, 2025 at 04:06:05PM +0800, yuanjie yang wrote:
> >>>>>>> From: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
> >>>>>>>
> >>>>>>> Build the NT37801 DSI panel driver as module.
> >>>>>>>
> >>>>>>> Signed-off-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
> >>>>>>> Signed-off-by: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
> >>>>>>
> >>>>>> You (Yuanjie) authored the patch, but forgot to sign-off, then Yongxing
> >>>>>> provided certificate of origin, then you provide certificate of origin
> >>>>>> and send it to list?
> >>>>>>
> >>>>>> Please correct.
> >>>>>
> >>>>> All the display patches were jointly developed by Yongxing and me.
> >>>>> So every patch
> >>>>
> >>>>
> >>>> So two people were working on this absolutely trivial defconfig change?
> >>>> I have troubles believing this.
> >>> I want to say these patches I am first author and yongxing give me support, so
> >>> I think yongxing is second author.
> >>>
> >>> I want to express my gratitude for Yongxing's support in every patch, so I included
> >>> both our names in the sign-off for each one.
> >>>
> >>> However, if my intention causes any trouble for maintainer, I can remove Yongxing's
> >>> sign-off from this patch.
> >>
> >>
> >> Please read submitting patches to understand what Signed-off-by means.
> >> Otherwise I have doubts we can accept your patches - you simply do not
> >> understand what you are certifying.
> > Thanks for your tips, and I learn some tips from submitting patches:
> > https://elixir.bootlin.com/linux/v6.18-rc3/source/Documentation/process/submitting-patches.rst#L524
> >
> > I thinks below sign should be true, if you also think it true, I will use it in next patches.
> >
> > Co-developed-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
>
> How does co-developing match what you wrote "give me support"?
OK, I will fix sign, will keep sign below in next patch:
Signed-off-by: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
Thanks,
Yuanjie
> > Signed-off-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
> > Signed-off-by: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
>
>
>
> Best regards,
> Krzysztof
^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH 01/12] drm/msm/dsi/phy: Add support for Kaanapali
2025-10-30 18:01 ` Dmitry Baryshkov
@ 2025-10-31 2:46 ` yuanjiey
0 siblings, 0 replies; 77+ messages in thread
From: yuanjiey @ 2025-10-31 2:46 UTC (permalink / raw)
To: Dmitry Baryshkov
Cc: Konrad Dybcio, robin.clark, lumag, abhinav.kumar, sean,
marijn.suijten, airlied, simona, maarten.lankhorst, mripard,
tzimmermann, robh, krzk+dt, conor+dt, quic_mkrishn, jonathan,
quic_khsieh, neil.armstrong, linux-arm-msm, dri-devel, freedreno,
devicetree, linux-kernel, tingwei.zhang, aiqun.yu, yongxing.mou
On Thu, Oct 30, 2025 at 08:01:10PM +0200, Dmitry Baryshkov wrote:
> On Wed, Oct 29, 2025 at 11:19:36AM +0800, yuanjiey wrote:
> > On Mon, Oct 27, 2025 at 03:29:40PM +0200, Dmitry Baryshkov wrote:
> > > On Mon, Oct 27, 2025 at 02:20:26PM +0100, Konrad Dybcio wrote:
> > > > On 10/27/25 2:14 PM, Dmitry Baryshkov wrote:
> > > > > On Fri, Oct 24, 2025 at 11:27:53AM +0800, yuanjiey wrote:
> > > > >> On Thu, Oct 23, 2025 at 02:02:45PM +0200, Konrad Dybcio wrote:
> > > > >>> On 10/23/25 1:48 PM, Dmitry Baryshkov wrote:
> > > > >>>> On Thu, Oct 23, 2025 at 03:53:50PM +0800, yuanjie yang wrote:
> > > > >>>>> From: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
> > > > >>>>>
> > > > >>>>> Add DSI PHY support for the Kaanapali platform.
> > > > >>>>>
> > > > >>>>> Signed-off-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
> > > > >>>>> Signed-off-by: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
> > > > >>>>> ---
> > > > >>>
> > > > >>> [...]
> > > > >>>
> > > > >>>>> + .io_start = { 0x9ac1000, 0xae97000 },
> > > > >>>>
> > > > >>>> These two addresses are very strange. Would you care to explain? Other
> > > > >>>> than that there is no difference from SM8750 entry.
> > > > >>>
> > > > >>> They're correct.
> > > > >>> Although they correspond to DSI_0 and DSI_2..
> > > > >>>
> > > > >>> Yuanjie, none of the DSI patches mention that v2.10.0 is packed with
> > > > >>> new features. Please provide some more context and how that impacts
> > > > >>> the hw description.
> > > > >>
> > > > >> Thanks for your reminder.
> > > > >>
> > > > >> Correct here:
> > > > >> io_start = { 0x9ac1000, 0x9ac4000 } DSI_Phy0 DSI_phy1
> > > > >>
> > > > >> And v2.10.0 no clearly meaningful changes compared to v2.9.0.
> > > > >> just some register address change.
> > > > >
> > > > > Addition of DSI2 is a meaningful change, which needs to be handled both
> > > > > in the core and in the DSI / DSI PHY drivers.
> > > >
> > > > DSI2 was introduced in 8750 already, but it was done without any
> > > > fanfare..
> > > >
> > > > I see a diagram that shows an XBAR with inputs from DSI0 and DSI2,
> > > > and an output to DSI0_PHY (same thing on kaanapali - meaning this
> > > > patch is potentially wrong and should ref DSI1_PHY instead?)
> > >
> > Yes, I check ipcata Doc, I see DSI0\DSI0_PHY DSI1\DSI1_PHY DSI2\DSI2_PHY in Kaanapali,
> > addition of DSI2\DSI2_PHY compared to SM8650.
> >
> > look like I should add: config io_start = {DSI0_PHY, DSI1_PHY, DSI2_PHY},
>
> I see DSI0, DSI1, DSI2, but DSI0_PHY and DSI1_PHY.
1. From HPG MDSS 13.0.0 chapter 1.6 Architecture
I see DSI0 DSI1 DSI2, and only DSI0_PHY DSI1_PHY
2. From ipcatalog memory map address:
I can see:
DSI0: 0x09AC0000 DSI0_PHY: 0x09AC1000
DSI1: 0x09AC3000 DSI1_PHY: 0x09AC4000
DSI2: 0x09AC6000 DSI2_PHY: 0x09AC7000
Look like there are three DSI_PHY, but only DSI0_PHY DSI1_PHY work.
Thanks,
Yuanjie
> --
> With best wishes
> Dmitry
^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH 03/12] drm/msm/dpu: Compatible with Kaanapali interrupt register
2025-10-30 18:02 ` Dmitry Baryshkov
@ 2025-10-31 2:50 ` yuanjiey
2025-10-31 17:41 ` Dmitry Baryshkov
0 siblings, 1 reply; 77+ messages in thread
From: yuanjiey @ 2025-10-31 2:50 UTC (permalink / raw)
To: Dmitry Baryshkov
Cc: robin.clark, lumag, abhinav.kumar, sean, marijn.suijten, airlied,
simona, maarten.lankhorst, mripard, tzimmermann, robh, krzk+dt,
conor+dt, quic_mkrishn, jonathan, quic_khsieh, neil.armstrong,
linux-arm-msm, dri-devel, freedreno, devicetree, linux-kernel,
tingwei.zhang, aiqun.yu, yongxing.mou
On Thu, Oct 30, 2025 at 08:02:13PM +0200, Dmitry Baryshkov wrote:
> On Wed, Oct 29, 2025 at 10:49:32AM +0800, yuanjiey wrote:
> > On Mon, Oct 27, 2025 at 03:21:33PM +0200, Dmitry Baryshkov wrote:
> > > On Fri, Oct 24, 2025 at 10:59:07AM +0800, yuanjiey wrote:
> > > > On Thu, Oct 23, 2025 at 02:59:12PM +0300, Dmitry Baryshkov wrote:
> > > > > On Thu, Oct 23, 2025 at 03:53:52PM +0800, yuanjie yang wrote:
> > > > > > From: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
> > > > > >
> > > > > > DPU version 13 introduces changes to the interrupt register
> > > > > > layout. Update the driver to support these modifications for
> > > > > > proper interrupt handling.
> > > > >
> > > > > So... Previous patch enabled support for the platform and it has been
> > > > > using wrong registers for interrupts? I think that's broken.
> > > >
> > > > I want to express DPU 13 has different INTF register address, so need to add new
> > > > interrupt array to let DPU 13 interrupt work fine. Maybe I should optimize my commit msg.
> > >
> > > Make sure that patches are structured logically. You can not enable
> > > support for the hardware if the interrupts are not (yet) handled.
> >
> > Kaanapali Dpu interrupts:
> > INTR_IDX_VSYNC,
> > INTR_IDX_PINGPONG,
> > INTR_IDX_UNDERRUN,
> > INTR_IDX_CTL_START,
> > INTR_IDX_RDPTR,
> > INTR_IDX_WB_DONE,
> >
> > are handled by irq handler, so here enable dpu_intr_set_13xx.
>
> You have enabled DPU 13 in the previous commit. And only now you are
> adding support for interrupt registers on DPU 13.x. No, that's not good.
OK, I think I should merge this patch into the DPU 13 enablement patch.
Thanks,
Yuanjie
> --
> With best wishes
> Dmitry
^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH 07/12] drm/panel: Set sufficient voltage for panel nt37801
2025-10-31 2:21 ` yuanjiey
@ 2025-10-31 15:43 ` Dmitry Baryshkov
0 siblings, 0 replies; 77+ messages in thread
From: Dmitry Baryshkov @ 2025-10-31 15:43 UTC (permalink / raw)
To: yuanjiey
Cc: robin.clark, lumag, abhinav.kumar, sean, marijn.suijten, airlied,
simona, maarten.lankhorst, mripard, tzimmermann, robh, krzk+dt,
conor+dt, quic_mkrishn, jonathan, quic_khsieh, neil.armstrong,
linux-arm-msm, dri-devel, freedreno, devicetree, linux-kernel,
tingwei.zhang, aiqun.yu, yongxing.mou
On 31/10/2025 04:21, yuanjiey wrote:
> On Thu, Oct 30, 2025 at 07:57:46PM +0200, Dmitry Baryshkov wrote:
>> On Thu, Oct 30, 2025 at 10:08:30AM +0800, yuanjiey wrote:
>>> On Wed, Oct 29, 2025 at 02:20:13PM +0200, Dmitry Baryshkov wrote:
>>>> On Wed, Oct 29, 2025 at 09:58:39AM +0800, yuanjiey wrote:
>>>>> On Mon, Oct 27, 2025 at 02:22:04PM +0200, Dmitry Baryshkov wrote:
>>>>>> On Fri, Oct 24, 2025 at 02:00:50PM +0800, yuanjiey wrote:
>>>>>>> On Thu, Oct 23, 2025 at 03:14:38PM +0300, Dmitry Baryshkov wrote:
>>>>>>>> On Thu, Oct 23, 2025 at 04:06:04PM +0800, yuanjie yang wrote:
>>>>>>>>> From: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
>>>>>>>>>
>>>>>>>>> The NT37801 Sepc V1.0 chapter "5.7.1 Power On Sequence" states
>>>>>>>>> VDDI=1.65V~1.95V, so set sufficient voltage for panel nt37801.
>>>>>>>>>
>>>>>>>>> Signed-off-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
>>>>>>>>> Signed-off-by: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
>>>>>>>>> ---
>>>>>>>>> drivers/gpu/drm/panel/panel-novatek-nt37801.c | 5 +++++
>>>>>>>>> 1 file changed, 5 insertions(+)
>>>>>>>>>
>>>>>>>>> diff --git a/drivers/gpu/drm/panel/panel-novatek-nt37801.c b/drivers/gpu/drm/panel/panel-novatek-nt37801.c
>>>>>>>>> index d6a37d7e0cc6..7eda16e0c1f9 100644
>>>>>>>>> --- a/drivers/gpu/drm/panel/panel-novatek-nt37801.c
>>>>>>>>> +++ b/drivers/gpu/drm/panel/panel-novatek-nt37801.c
>>>>>>>>> @@ -267,6 +267,11 @@ static int novatek_nt37801_probe(struct mipi_dsi_device *dsi)
>>>>>>>>> if (ret < 0)
>>>>>>>>> return ret;
>>>>>>>>>
>>>>>>>>> + ret = regulator_set_voltage(ctx->supplies[0].consumer,
>>>>>>>>> + 1650000, 1950000);
>>>>>>>>
>>>>>>>> This should be done in the DT. Limit the voltage per the user.
>>>>>>> Two reason:
>>>>>>> 1.
>>>>>>> I see https://patchwork.freedesktop.org/patch/354612/
>>>>>>>
>>>>>>> panel panel-novatek-nt35510.c also use regulator_set_voltage set right voltage,
>>>>>>> so I do the same work.
>>>>>>
>>>>>> Please look for the majority rather than the exceptions. Out of all
>>>>>> panel drivers only two set the voltage directly.
>>>>>>
>>>>>>>
>>>>>>> 2. Kaanapali vddio regulator:
>>>>>>>
>>>>>>> vreg_l12b_1p8: ldo12 {
>>>>>>> regulator-name = "vreg_l12b_1p8";
>>>>>>> regulator-min-microvolt = <1200000>;
>>>>>>> regulator-max-microvolt = <1800000>;
>>>>>>>
>>>>>>> Voltage is from 1.2~.1.8 V , So I can not set it 1.65~1.95 V from DT(1.95V is beyond the allowed range).
>>>>>>> So I use regulator_set_voltage to set voltage, and regulator_set_voltage will choose the appropriate voltage.
>>>>>>
>>>>>> DT has to list the voltage values that work for the devices on that
>>>>>> particular platform. So, ldo12 should be listing 1.64 - 1.8 V.
>>>>> get it. I check downstream DT,
>>>>> dosnstream DT:
>>>>> regulator-min-microvolt = <1800000>;
>>>>> regulator-max-microvolt = <1800000>;
>>>>>
>>>>> I test 1.8V works, So I will add 1.8V in next patch, do you think it is ok?
>>>>
>>>> What does panel's datasheet say?
>>>
>>> The NT37801 Sepc V1.0 chapter "5.7.1 Power On Sequence" states
>>> VDDI=1.65V~1.95V.
>>>
>>> So I should follow datasheet to set DT ldo12: 1.64 - 1.8V ?
>>
>> If the panel declares minimum voltage to 1.65 V, why are you declaring
>> 1.64 V as the mimimal voltage for the rail?
>
> Corrcet here:
>
> DT ldo12 will be 1.65 - 1.8V
Yep.
>
> Thanks,
> Yuanjie
>
>
>>>
>>> if you think it is ture, I will fix it in next patch.
>> --
>> With best wishes
>> Dmitry
--
With best wishes
Dmitry
^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH 03/12] drm/msm/dpu: Compatible with Kaanapali interrupt register
2025-10-31 2:50 ` yuanjiey
@ 2025-10-31 17:41 ` Dmitry Baryshkov
0 siblings, 0 replies; 77+ messages in thread
From: Dmitry Baryshkov @ 2025-10-31 17:41 UTC (permalink / raw)
To: yuanjiey
Cc: robin.clark, lumag, abhinav.kumar, sean, marijn.suijten, airlied,
simona, maarten.lankhorst, mripard, tzimmermann, robh, krzk+dt,
conor+dt, quic_mkrishn, jonathan, quic_khsieh, neil.armstrong,
linux-arm-msm, dri-devel, freedreno, devicetree, linux-kernel,
tingwei.zhang, aiqun.yu, yongxing.mou
On Fri, Oct 31, 2025 at 10:50:47AM +0800, yuanjiey wrote:
> On Thu, Oct 30, 2025 at 08:02:13PM +0200, Dmitry Baryshkov wrote:
> > On Wed, Oct 29, 2025 at 10:49:32AM +0800, yuanjiey wrote:
> > > On Mon, Oct 27, 2025 at 03:21:33PM +0200, Dmitry Baryshkov wrote:
> > > > On Fri, Oct 24, 2025 at 10:59:07AM +0800, yuanjiey wrote:
> > > > > On Thu, Oct 23, 2025 at 02:59:12PM +0300, Dmitry Baryshkov wrote:
> > > > > > On Thu, Oct 23, 2025 at 03:53:52PM +0800, yuanjie yang wrote:
> > > > > > > From: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
> > > > > > >
> > > > > > > DPU version 13 introduces changes to the interrupt register
> > > > > > > layout. Update the driver to support these modifications for
> > > > > > > proper interrupt handling.
> > > > > >
> > > > > > So... Previous patch enabled support for the platform and it has been
> > > > > > using wrong registers for interrupts? I think that's broken.
> > > > >
> > > > > I want to express DPU 13 has different INTF register address, so need to add new
> > > > > interrupt array to let DPU 13 interrupt work fine. Maybe I should optimize my commit msg.
> > > >
> > > > Make sure that patches are structured logically. You can not enable
> > > > support for the hardware if the interrupts are not (yet) handled.
> > >
> > > Kaanapali Dpu interrupts:
> > > INTR_IDX_VSYNC,
> > > INTR_IDX_PINGPONG,
> > > INTR_IDX_UNDERRUN,
> > > INTR_IDX_CTL_START,
> > > INTR_IDX_RDPTR,
> > > INTR_IDX_WB_DONE,
> > >
> > > are handled by irq handler, so here enable dpu_intr_set_13xx.
> >
> > You have enabled DPU 13 in the previous commit. And only now you are
> > adding support for interrupt registers on DPU 13.x. No, that's not good.
>
> OK, I think I should merge this patch into the DPU 13 enablement patch.
No, just change the order of the patches: first you add necessary driver
bits, then you add catalog entry.
>
> Thanks,
> Yuanjie
>
> > --
> > With best wishes
> > Dmitry
--
With best wishes
Dmitry
^ permalink raw reply [flat|nested] 77+ messages in thread
* Re: [PATCH 08/12] arm64: defconfig: Enable NT37801 DSI panel driver
2025-10-31 2:28 ` yuanjiey
@ 2025-10-31 17:44 ` Dmitry Baryshkov
0 siblings, 0 replies; 77+ messages in thread
From: Dmitry Baryshkov @ 2025-10-31 17:44 UTC (permalink / raw)
To: yuanjiey
Cc: Krzysztof Kozlowski, Bjorn Andersson, robin.clark, lumag,
abhinav.kumar, sean, marijn.suijten, airlied, simona,
maarten.lankhorst, mripard, tzimmermann, robh, krzk+dt, conor+dt,
quic_mkrishn, jonathan, quic_khsieh, neil.armstrong,
linux-arm-msm, dri-devel, freedreno, devicetree, linux-kernel,
tingwei.zhang, aiqun.yu, yongxing.mou
On Fri, Oct 31, 2025 at 10:28:12AM +0800, yuanjiey wrote:
> On Thu, Oct 30, 2025 at 11:43:49AM +0100, Krzysztof Kozlowski wrote:
> > On 30/10/2025 08:07, yuanjiey wrote:
> > > On Thu, Oct 30, 2025 at 06:37:40AM +0100, Krzysztof Kozlowski wrote:
> > >> On 30/10/2025 03:33, yuanjiey wrote:
> > >>> On Wed, Oct 29, 2025 at 02:05:20PM +0100, Krzysztof Kozlowski wrote:
> > >>>> On 29/10/2025 03:37, yuanjiey wrote:
> > >>>>> On Mon, Oct 27, 2025 at 10:51:23PM -0500, Bjorn Andersson wrote:
> > >>>>>> On Thu, Oct 23, 2025 at 04:06:05PM +0800, yuanjie yang wrote:
> > >>>>>>> From: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
> > >>>>>>>
> > >>>>>>> Build the NT37801 DSI panel driver as module.
> > >>>>>>>
> > >>>>>>> Signed-off-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
> > >>>>>>> Signed-off-by: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
> > >>>>>>
> > >>>>>> You (Yuanjie) authored the patch, but forgot to sign-off, then Yongxing
> > >>>>>> provided certificate of origin, then you provide certificate of origin
> > >>>>>> and send it to list?
> > >>>>>>
> > >>>>>> Please correct.
> > >>>>>
> > >>>>> All the display patches were jointly developed by Yongxing and me.
> > >>>>> So every patch
> > >>>>
> > >>>>
> > >>>> So two people were working on this absolutely trivial defconfig change?
> > >>>> I have troubles believing this.
> > >>> I want to say these patches I am first author and yongxing give me support, so
> > >>> I think yongxing is second author.
> > >>>
> > >>> I want to express my gratitude for Yongxing's support in every patch, so I included
> > >>> both our names in the sign-off for each one.
> > >>>
> > >>> However, if my intention causes any trouble for maintainer, I can remove Yongxing's
> > >>> sign-off from this patch.
> > >>
> > >>
> > >> Please read submitting patches to understand what Signed-off-by means.
> > >> Otherwise I have doubts we can accept your patches - you simply do not
> > >> understand what you are certifying.
> > > Thanks for your tips, and I learn some tips from submitting patches:
> > > https://elixir.bootlin.com/linux/v6.18-rc3/source/Documentation/process/submitting-patches.rst#L524
> > >
> > > I thinks below sign should be true, if you also think it true, I will use it in next patches.
> > >
> > > Co-developed-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
> >
> > How does co-developing match what you wrote "give me support"?
> OK, I will fix sign, will keep sign below in next patch:
>
> Signed-off-by: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
There was already one and it doesn't help, because co-developing means
actually developing together or one after another. "giving support" is
not co-developing-by.
>
> Thanks,
> Yuanjie
>
> > > Signed-off-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
> > > Signed-off-by: Yuanjie Yang <yuanjie.yang@oss.qualcomm.com>
> >
> >
> >
> > Best regards,
> > Krzysztof
--
With best wishes
Dmitry
^ permalink raw reply [flat|nested] 77+ messages in thread
end of thread, other threads:[~2025-10-31 17:44 UTC | newest]
Thread overview: 77+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-10-23 7:53 [PATCH 00/12] drm/msm: Add support for Kaanapali yuanjie yang
2025-10-23 7:53 ` [PATCH 01/12] drm/msm/dsi/phy: " yuanjie yang
2025-10-23 11:48 ` Dmitry Baryshkov
2025-10-23 12:02 ` Konrad Dybcio
2025-10-24 3:27 ` yuanjiey
2025-10-27 12:48 ` Konrad Dybcio
2025-10-27 13:14 ` Dmitry Baryshkov
2025-10-27 13:20 ` Konrad Dybcio
2025-10-27 13:29 ` Dmitry Baryshkov
2025-10-29 3:19 ` yuanjiey
2025-10-29 9:48 ` Konrad Dybcio
2025-10-30 18:01 ` Dmitry Baryshkov
2025-10-31 2:46 ` yuanjiey
2025-10-23 7:53 ` [PATCH 02/12] drm/msm/dpu: Add support for Kaanapali DPU yuanjie yang
2025-10-23 11:56 ` Dmitry Baryshkov
2025-10-24 2:53 ` yuanjiey
2025-10-23 7:53 ` [PATCH 03/12] drm/msm/dpu: Compatible with Kaanapali interrupt register yuanjie yang
2025-10-23 11:59 ` Dmitry Baryshkov
2025-10-24 2:59 ` yuanjiey
2025-10-27 13:21 ` Dmitry Baryshkov
2025-10-29 2:49 ` yuanjiey
2025-10-30 18:02 ` Dmitry Baryshkov
2025-10-31 2:50 ` yuanjiey
2025-10-31 17:41 ` Dmitry Baryshkov
2025-10-28 6:07 ` Jessica Zhang
2025-10-29 2:05 ` yuanjiey
2025-10-23 7:53 ` [PATCH 04/12] drm/msm/mdss: Add support for Kaanapali yuanjie yang
2025-10-23 12:01 ` Dmitry Baryshkov
2025-10-24 3:05 ` yuanjiey
2025-10-23 7:53 ` [PATCH 05/12] drm/msm/dsi: " yuanjie yang
2025-10-23 12:01 ` Dmitry Baryshkov
2025-10-23 8:06 ` [PATCH 06/12] drm/msm/dpu: Add Kaanapali SSPP sub-block support yuanjie yang
2025-10-23 8:06 ` [PATCH 07/12] drm/panel: Set sufficient voltage for panel nt37801 yuanjie yang
2025-10-23 8:22 ` Konrad Dybcio
2025-10-23 8:57 ` yuanjiey
2025-10-23 12:14 ` Dmitry Baryshkov
2025-10-24 6:00 ` yuanjiey
2025-10-27 12:22 ` Dmitry Baryshkov
2025-10-29 1:58 ` yuanjiey
2025-10-29 12:20 ` Dmitry Baryshkov
2025-10-30 2:08 ` yuanjiey
2025-10-30 17:57 ` Dmitry Baryshkov
2025-10-31 2:21 ` yuanjiey
2025-10-31 15:43 ` Dmitry Baryshkov
2025-10-23 8:06 ` [PATCH 08/12] arm64: defconfig: Enable NT37801 DSI panel driver yuanjie yang
2025-10-23 8:22 ` Konrad Dybcio
2025-10-23 9:02 ` yuanjiey
2025-10-28 3:51 ` Bjorn Andersson
2025-10-29 2:37 ` yuanjiey
2025-10-29 13:05 ` Krzysztof Kozlowski
2025-10-30 2:33 ` yuanjiey
2025-10-30 5:37 ` Krzysztof Kozlowski
2025-10-30 7:07 ` yuanjiey
2025-10-30 10:43 ` Krzysztof Kozlowski
2025-10-31 2:28 ` yuanjiey
2025-10-31 17:44 ` Dmitry Baryshkov
2025-10-30 18:05 ` Dmitry Baryshkov
2025-10-23 8:06 ` [PATCH 09/12] dt-bindings: display/msm: qcom,kaanapali-dpu: Add Kaanapali yuanjie yang
2025-10-26 22:34 ` Rob Herring (Arm)
2025-10-23 8:06 ` [PATCH 10/12] dt-bindings: display/msm: dsi-phy-7nm: Add Kaanapali DSi PHY yuanjie yang
2025-10-23 12:16 ` Dmitry Baryshkov
2025-10-24 6:10 ` yuanjiey
2025-10-27 13:30 ` Dmitry Baryshkov
2025-10-29 2:00 ` yuanjiey
2025-10-23 8:06 ` [PATCH 11/12] dt-bindings: display/msm: dsi-controller-main: Add Kaanapali yuanjie yang
2025-10-23 12:16 ` Dmitry Baryshkov
2025-10-24 6:08 ` yuanjiey
2025-10-23 12:14 ` [PATCH 06/12] drm/msm/dpu: Add Kaanapali SSPP sub-block support Dmitry Baryshkov
2025-10-24 5:49 ` yuanjiey
2025-10-23 8:17 ` [PATCH 12/12] dt-bindings: display/msm: qcom,kaanapali-mdss: Add Kaanapali yuanjie yang
2025-10-23 9:34 ` Rob Herring (Arm)
2025-10-23 9:36 ` Konrad Dybcio
2025-10-23 9:52 ` yuanjiey
2025-10-23 12:17 ` Dmitry Baryshkov
2025-10-24 6:16 ` yuanjiey
2025-10-23 11:46 ` [PATCH 00/12] drm/msm: Add support for Kaanapali Dmitry Baryshkov
2025-10-24 2:32 ` yuanjiey
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).