* [PATCH v4 1/3] dt-bindings: display: msm: Add INT2 GDSC to Kaanapali DPU
2026-10-23 8:13 [PATCH v4 0/3] drm/msm/dpu: Add INT2 GDSC power domain support for Kaanapali Yongxing Mou
@ 2026-10-23 8:13 ` Yongxing Mou
2026-10-23 8:13 ` [PATCH v4 2/3] drm/msm/dpu: Attach CORE and INT2 power domains on Kaanapali Yongxing Mou
2026-10-23 8:13 ` [PATCH v4 3/3] arm64: dts: qcom: Add INT2 GDSC to Kaanapali DPU Yongxing Mou
2 siblings, 0 replies; 5+ messages in thread
From: Yongxing Mou @ 2026-10-23 8:13 UTC (permalink / raw)
To: Rob Clark, Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang,
Sean Paul, Marijn Suijten, David Airlie, Simona Vetter,
Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Krishna Manikandan, Abel Vesa,
Yuanjie Yang, Bjorn Andersson, Konrad Dybcio
Cc: linux-arm-msm, dri-devel, freedreno, devicetree, linux-kernel,
Yongxing Mou
Kaanapali (SM8850) has two display GDSCs. CORE_GDSC supplies shared
MDSS hardware and most of the DPU, while INT2 GDSC supplies the
VIG2/VIG3/DMA5 source pipes. Without INT2 GDSC, these source pipes
remain inaccessible.
Describe CORE and INT2 as power domains of the DPU device, matching
the hardware partitioning. INT2 only supplies DPU-local source pipes,
while CORE also remains attached to the parent MDSS device because it
supplies shared MDSS hardware. DPU performance-state votes on CORE are
propagated through the genpd hierarchy to its parent MMCX domain.
Keep the widest valid power-domain constraint in dpu-common.yaml and
narrow it in each platform-specific binding. Require two domains and
their names for Kaanapali, while retaining the existing single-domain
constraint for all other DPU platforms.
Signed-off-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
---
.../bindings/display/msm/dpu-common.yaml | 3 ++-
.../bindings/display/msm/qcom,kaanapali-mdss.yaml | 4 +++-
.../bindings/display/msm/qcom,msm8998-dpu.yaml | 3 +++
.../bindings/display/msm/qcom,qcm2290-dpu.yaml | 3 +++
.../bindings/display/msm/qcom,sc7180-dpu.yaml | 3 +++
.../bindings/display/msm/qcom,sc7280-dpu.yaml | 3 +++
.../bindings/display/msm/qcom,sc8180x-dpu.yaml | 3 +++
.../bindings/display/msm/qcom,sdm845-dpu.yaml | 3 +++
.../bindings/display/msm/qcom,sm6115-dpu.yaml | 3 +++
.../bindings/display/msm/qcom,sm6150-dpu.yaml | 3 +++
.../bindings/display/msm/qcom,sm7150-dpu.yaml | 3 +++
.../bindings/display/msm/qcom,sm8150-dpu.yaml | 3 +++
.../bindings/display/msm/qcom,sm8650-dpu.yaml | 26 ++++++++++++++++++++++
13 files changed, 61 insertions(+), 2 deletions(-)
diff --git a/Documentation/devicetree/bindings/display/msm/dpu-common.yaml b/Documentation/devicetree/bindings/display/msm/dpu-common.yaml
index 3f953aa5e694..c67199011f26 100644
--- a/Documentation/devicetree/bindings/display/msm/dpu-common.yaml
+++ b/Documentation/devicetree/bindings/display/msm/dpu-common.yaml
@@ -26,7 +26,8 @@ properties:
maxItems: 1
power-domains:
- maxItems: 1
+ minItems: 1
+ maxItems: 2
operating-points-v2: true
opp-table:
diff --git a/Documentation/devicetree/bindings/display/msm/qcom,kaanapali-mdss.yaml b/Documentation/devicetree/bindings/display/msm/qcom,kaanapali-mdss.yaml
index 9f935defd6b1..6d6391970d6b 100644
--- a/Documentation/devicetree/bindings/display/msm/qcom,kaanapali-mdss.yaml
+++ b/Documentation/devicetree/bindings/display/msm/qcom,kaanapali-mdss.yaml
@@ -125,7 +125,9 @@ examples:
operating-points-v2 = <&mdp_opp_table>;
- power-domains = <&rpmhpd RPMHPD_MMCX>;
+ power-domains = <&mdss_gdsc>,
+ <&mdss_int2_gdsc>;
+ power-domain-names = "core", "int2";
ports {
#address-cells = <1>;
diff --git a/Documentation/devicetree/bindings/display/msm/qcom,msm8998-dpu.yaml b/Documentation/devicetree/bindings/display/msm/qcom,msm8998-dpu.yaml
index d5a64c8a921f..bded43a34b87 100644
--- a/Documentation/devicetree/bindings/display/msm/qcom,msm8998-dpu.yaml
+++ b/Documentation/devicetree/bindings/display/msm/qcom,msm8998-dpu.yaml
@@ -15,6 +15,9 @@ properties:
compatible:
const: qcom,msm8998-dpu
+ power-domains:
+ maxItems: 1
+
reg:
items:
- description: Address offset and size for mdp register set
diff --git a/Documentation/devicetree/bindings/display/msm/qcom,qcm2290-dpu.yaml b/Documentation/devicetree/bindings/display/msm/qcom,qcm2290-dpu.yaml
index 034d3df8d247..6c1476a0faaf 100644
--- a/Documentation/devicetree/bindings/display/msm/qcom,qcm2290-dpu.yaml
+++ b/Documentation/devicetree/bindings/display/msm/qcom,qcm2290-dpu.yaml
@@ -19,6 +19,9 @@ properties:
- const: qcom,shikra-dpu
- const: qcom,qcm2290-dpu
+ power-domains:
+ maxItems: 1
+
reg:
items:
- description: Address offset and size for mdp register set
diff --git a/Documentation/devicetree/bindings/display/msm/qcom,sc7180-dpu.yaml b/Documentation/devicetree/bindings/display/msm/qcom,sc7180-dpu.yaml
index 8137618237ce..3fa0f02f4489 100644
--- a/Documentation/devicetree/bindings/display/msm/qcom,sc7180-dpu.yaml
+++ b/Documentation/devicetree/bindings/display/msm/qcom,sc7180-dpu.yaml
@@ -19,6 +19,9 @@ properties:
- qcom,sm6350-dpu
- qcom,sm6375-dpu
+ power-domains:
+ maxItems: 1
+
reg:
items:
- description: Address offset and size for mdp register set
diff --git a/Documentation/devicetree/bindings/display/msm/qcom,sc7280-dpu.yaml b/Documentation/devicetree/bindings/display/msm/qcom,sc7280-dpu.yaml
index df9ec15ad6c3..7703d9b017cf 100644
--- a/Documentation/devicetree/bindings/display/msm/qcom,sc7280-dpu.yaml
+++ b/Documentation/devicetree/bindings/display/msm/qcom,sc7280-dpu.yaml
@@ -24,6 +24,9 @@ properties:
- qcom,sm8450-dpu
- qcom,sm8550-dpu
+ power-domains:
+ maxItems: 1
+
reg:
items:
- description: Address offset and size for mdp register set
diff --git a/Documentation/devicetree/bindings/display/msm/qcom,sc8180x-dpu.yaml b/Documentation/devicetree/bindings/display/msm/qcom,sc8180x-dpu.yaml
index a411126708b8..8e10f9e0d176 100644
--- a/Documentation/devicetree/bindings/display/msm/qcom,sc8180x-dpu.yaml
+++ b/Documentation/devicetree/bindings/display/msm/qcom,sc8180x-dpu.yaml
@@ -15,6 +15,9 @@ properties:
compatible:
const: qcom,sc8180x-dpu
+ power-domains:
+ maxItems: 1
+
reg:
items:
- description: Address offset and size for mdp register set
diff --git a/Documentation/devicetree/bindings/display/msm/qcom,sdm845-dpu.yaml b/Documentation/devicetree/bindings/display/msm/qcom,sdm845-dpu.yaml
index dc11fd421a27..9dafe1d827e1 100644
--- a/Documentation/devicetree/bindings/display/msm/qcom,sdm845-dpu.yaml
+++ b/Documentation/devicetree/bindings/display/msm/qcom,sdm845-dpu.yaml
@@ -17,6 +17,9 @@ properties:
- qcom,sdm670-dpu
- qcom,sdm845-dpu
+ power-domains:
+ maxItems: 1
+
reg:
items:
- description: Address offset and size for mdp register set
diff --git a/Documentation/devicetree/bindings/display/msm/qcom,sm6115-dpu.yaml b/Documentation/devicetree/bindings/display/msm/qcom,sm6115-dpu.yaml
index 510eb6c19364..173c2f034241 100644
--- a/Documentation/devicetree/bindings/display/msm/qcom,sm6115-dpu.yaml
+++ b/Documentation/devicetree/bindings/display/msm/qcom,sm6115-dpu.yaml
@@ -15,6 +15,9 @@ properties:
compatible:
const: qcom,sm6115-dpu
+ power-domains:
+ maxItems: 1
+
reg:
items:
- description: MDP register set
diff --git a/Documentation/devicetree/bindings/display/msm/qcom,sm6150-dpu.yaml b/Documentation/devicetree/bindings/display/msm/qcom,sm6150-dpu.yaml
index 8cbf99f9fcba..b8344ff8895a 100644
--- a/Documentation/devicetree/bindings/display/msm/qcom,sm6150-dpu.yaml
+++ b/Documentation/devicetree/bindings/display/msm/qcom,sm6150-dpu.yaml
@@ -16,6 +16,9 @@ properties:
compatible:
const: qcom,sm6150-dpu
+ power-domains:
+ maxItems: 1
+
reg:
items:
- description: Address offset and size for mdp register set
diff --git a/Documentation/devicetree/bindings/display/msm/qcom,sm7150-dpu.yaml b/Documentation/devicetree/bindings/display/msm/qcom,sm7150-dpu.yaml
index c79b2d442800..8e50942f3e1f 100644
--- a/Documentation/devicetree/bindings/display/msm/qcom,sm7150-dpu.yaml
+++ b/Documentation/devicetree/bindings/display/msm/qcom,sm7150-dpu.yaml
@@ -15,6 +15,9 @@ properties:
compatible:
const: qcom,sm7150-dpu
+ power-domains:
+ maxItems: 1
+
reg:
items:
- description: Address offset and size for mdp register set
diff --git a/Documentation/devicetree/bindings/display/msm/qcom,sm8150-dpu.yaml b/Documentation/devicetree/bindings/display/msm/qcom,sm8150-dpu.yaml
index a88d22f30a60..b407bc399462 100644
--- a/Documentation/devicetree/bindings/display/msm/qcom,sm8150-dpu.yaml
+++ b/Documentation/devicetree/bindings/display/msm/qcom,sm8150-dpu.yaml
@@ -17,6 +17,9 @@ properties:
- qcom,sm8150-dpu
- qcom,sm8250-dpu
+ power-domains:
+ maxItems: 1
+
reg:
items:
- description: Address offset and size for mdp register set
diff --git a/Documentation/devicetree/bindings/display/msm/qcom,sm8650-dpu.yaml b/Documentation/devicetree/bindings/display/msm/qcom,sm8650-dpu.yaml
index aa0cf0ec5b93..7f8e52d52078 100644
--- a/Documentation/devicetree/bindings/display/msm/qcom,sm8650-dpu.yaml
+++ b/Documentation/devicetree/bindings/display/msm/qcom,sm8650-dpu.yaml
@@ -61,6 +61,32 @@ required:
- clocks
- clock-names
+allOf:
+ - if:
+ properties:
+ compatible:
+ const: qcom,kaanapali-dpu
+ required:
+ - compatible
+ then:
+ properties:
+ power-domains:
+ minItems: 2
+
+ power-domain-names:
+ items:
+ - const: core
+ - const: int2
+
+ required:
+ - power-domain-names
+ else:
+ properties:
+ power-domains:
+ maxItems: 1
+
+ power-domain-names: false
+
unevaluatedProperties: false
examples:
--
2.43.0
^ permalink raw reply [flat|nested] 5+ messages in thread* [PATCH v4 2/3] drm/msm/dpu: Attach CORE and INT2 power domains on Kaanapali
2026-10-23 8:13 [PATCH v4 0/3] drm/msm/dpu: Add INT2 GDSC power domain support for Kaanapali Yongxing Mou
2026-10-23 8:13 ` [PATCH v4 1/3] dt-bindings: display: msm: Add INT2 GDSC to Kaanapali DPU Yongxing Mou
@ 2026-10-23 8:13 ` Yongxing Mou
2026-10-23 8:13 ` [PATCH v4 3/3] arm64: dts: qcom: Add INT2 GDSC to Kaanapali DPU Yongxing Mou
2 siblings, 0 replies; 5+ messages in thread
From: Yongxing Mou @ 2026-10-23 8:13 UTC (permalink / raw)
To: Rob Clark, Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang,
Sean Paul, Marijn Suijten, David Airlie, Simona Vetter,
Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Krishna Manikandan, Abel Vesa,
Yuanjie Yang, Bjorn Andersson, Konrad Dybcio
Cc: linux-arm-msm, dri-devel, freedreno, devicetree, linux-kernel,
Yongxing Mou, Dmitry Baryshkov
Kaanapali's DPU is supplied by both CORE and INT2 GDSCs. The
power-domain core only auto-attaches a single domain; with multiple
domains the device is left unattached, so both domains must be attached
explicitly.
The DPU OPP table also needs to continue controlling the MMCX
performance state. Mark CORE as the required OPP domain so its vote is
propagated through the genpd hierarchy to MMCX. INT2 has no OPP of its
own and is attached as a regular runtime-PM supplier.
Platforms with a single power domain remain unaffected and continue to
use the existing automatic attachment.
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
Signed-off-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
---
drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c | 32 ++++++++++++++++++++++++++++++++
1 file changed, 32 insertions(+)
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
index da3556eb6ecc..502e50ea5aca 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
@@ -12,6 +12,7 @@
#include <linux/debugfs.h>
#include <linux/dma-buf.h>
#include <linux/of_irq.h>
+#include <linux/pm_domain.h>
#include <linux/pm_opp.h>
#include <drm/drm_crtc.h>
@@ -1376,6 +1377,33 @@ static int dpu_kms_mmap_dpu(struct dpu_kms *dpu_kms)
return 0;
}
+static int dpu_kms_attach_power_domains(struct device *dev)
+{
+ static const char * const core_names[] = { "core" };
+ static const char * const int2_names[] = { "int2" };
+ const struct dev_pm_domain_attach_data core_pd = {
+ .pd_names = core_names,
+ .num_pd_names = ARRAY_SIZE(core_names),
+ .pd_flags = PD_FLAG_REQUIRED_OPP,
+ };
+ const struct dev_pm_domain_attach_data int2_pd = {
+ .pd_names = int2_names,
+ .num_pd_names = ARRAY_SIZE(int2_names),
+ };
+ struct dev_pm_domain_list *core_list, *int2_list;
+ int ret;
+
+ if (of_count_phandle_with_args(dev->of_node, "power-domains",
+ "#power-domain-cells") <= 1)
+ return 0;
+
+ ret = devm_pm_domain_attach_list(dev, &core_pd, &core_list);
+ if (ret < 0)
+ return ret;
+
+ return devm_pm_domain_attach_list(dev, &int2_pd, &int2_list);
+}
+
static int dpu_dev_probe(struct platform_device *pdev)
{
struct device *dev = &pdev->dev;
@@ -1392,6 +1420,10 @@ static int dpu_dev_probe(struct platform_device *pdev)
dpu_kms->pdev = pdev;
+ ret = dpu_kms_attach_power_domains(dev);
+ if (ret < 0)
+ return dev_err_probe(dev, ret, "failed to attach power domains\n");
+
ret = devm_pm_opp_set_clkname(dev, "core");
if (ret)
return ret;
--
2.43.0
^ permalink raw reply [flat|nested] 5+ messages in thread* [PATCH v4 3/3] arm64: dts: qcom: Add INT2 GDSC to Kaanapali DPU
2026-10-23 8:13 [PATCH v4 0/3] drm/msm/dpu: Add INT2 GDSC power domain support for Kaanapali Yongxing Mou
2026-10-23 8:13 ` [PATCH v4 1/3] dt-bindings: display: msm: Add INT2 GDSC to Kaanapali DPU Yongxing Mou
2026-10-23 8:13 ` [PATCH v4 2/3] drm/msm/dpu: Attach CORE and INT2 power domains on Kaanapali Yongxing Mou
@ 2026-10-23 8:13 ` Yongxing Mou
2026-10-23 10:03 ` Konrad Dybcio
2 siblings, 1 reply; 5+ messages in thread
From: Yongxing Mou @ 2026-10-23 8:13 UTC (permalink / raw)
To: Rob Clark, Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang,
Sean Paul, Marijn Suijten, David Airlie, Simona Vetter,
Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Krishna Manikandan, Abel Vesa,
Yuanjie Yang, Bjorn Andersson, Konrad Dybcio
Cc: linux-arm-msm, dri-devel, freedreno, devicetree, linux-kernel,
Yongxing Mou, Abel Vesa
The INT2 GDSC on Kaanapali (SM8850) powers the VIG2, VIG3 and DMA5
source pipes. Without enabling it, these pipes remain inaccessible.
The DPU is supplied by both CORE and INT2, so describe both GDSCs as
its power domains rather than attaching the DPU directly to their
parent MMCX domain.
Keep CORE attached to the parent MDSS device because it also supplies
shared MDSS hardware outside the DPU.
Reviewed-by: Abel Vesa <abel.vesa@oss.qualcomm.com>
Signed-off-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
---
arch/arm64/boot/dts/qcom/kaanapali.dtsi | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/arch/arm64/boot/dts/qcom/kaanapali.dtsi b/arch/arm64/boot/dts/qcom/kaanapali.dtsi
index e48a179d0722..98d367b9dac7 100644
--- a/arch/arm64/boot/dts/qcom/kaanapali.dtsi
+++ b/arch/arm64/boot/dts/qcom/kaanapali.dtsi
@@ -3674,7 +3674,9 @@ mdss_mdp: display-controller@9801000 {
operating-points-v2 = <&mdp_opp_table>;
- power-domains = <&rpmhpd RPMHPD_MMCX>;
+ power-domains = <&dispcc DISP_CC_MDSS_CORE_GDSC>,
+ <&dispcc DISP_CC_MDSS_CORE_INT2_GDSC>;
+ power-domain-names = "core", "int2";
ports {
#address-cells = <1>;
--
2.43.0
^ permalink raw reply [flat|nested] 5+ messages in thread