* [PATCH v3 1/3] dt-bindings: display: msm: Add INT2 GDSC to Kaanapali DPU
2026-10-14 4:38 [PATCH v3 0/3] drm/msm/dpu: Add INT2 GDSC power domain support for Kaanapali Yongxing Mou
@ 2026-10-14 4:38 ` Yongxing Mou
2026-10-14 11:31 ` Krzysztof Kozlowski
2026-10-14 4:38 ` [PATCH v3 2/3] drm/msm/dpu: Attach CORE and INT2 power domains on Kaanapali Yongxing Mou
2026-10-14 4:38 ` [PATCH v3 3/3] arm64: dts: qcom: Add INT2 GDSC to Kaanapali DPU Yongxing Mou
2 siblings, 1 reply; 6+ messages in thread
From: Yongxing Mou @ 2026-10-14 4:38 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.
Restrict the two-domain schema to the Kaanapali DPU compatible, so other
platforms sharing qcom,sm8650-dpu.yaml retain the existing single
power-domain constraint.
Signed-off-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
---
.../devicetree/bindings/display/msm/dpu-common.yaml | 19 +++++++++++++++++--
.../bindings/display/msm/qcom,kaanapali-mdss.yaml | 4 +++-
.../bindings/display/msm/qcom,sm8650-dpu.yaml | 21 +++++++++++++++++++++
3 files changed, 41 insertions(+), 3 deletions(-)
diff --git a/Documentation/devicetree/bindings/display/msm/dpu-common.yaml b/Documentation/devicetree/bindings/display/msm/dpu-common.yaml
index 3f953aa5e694..19b791a857b5 100644
--- a/Documentation/devicetree/bindings/display/msm/dpu-common.yaml
+++ b/Documentation/devicetree/bindings/display/msm/dpu-common.yaml
@@ -25,8 +25,7 @@ properties:
interrupts:
maxItems: 1
- power-domains:
- maxItems: 1
+ power-domains: true
operating-points-v2: true
opp-table:
@@ -53,4 +52,20 @@ required:
- operating-points-v2
- ports
+allOf:
+ - if:
+ properties:
+ compatible:
+ contains:
+ const: qcom,kaanapali-dpu
+ then:
+ properties:
+ power-domains:
+ minItems: 2
+ maxItems: 2
+ else:
+ properties:
+ power-domains:
+ maxItems: 1
+
additionalProperties: true
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,sm8650-dpu.yaml b/Documentation/devicetree/bindings/display/msm/qcom,sm8650-dpu.yaml
index aa0cf0ec5b93..512143402083 100644
--- a/Documentation/devicetree/bindings/display/msm/qcom,sm8650-dpu.yaml
+++ b/Documentation/devicetree/bindings/display/msm/qcom,sm8650-dpu.yaml
@@ -61,6 +61,27 @@ required:
- clocks
- clock-names
+allOf:
+ - if:
+ properties:
+ compatible:
+ contains:
+ const: qcom,kaanapali-dpu
+ then:
+ properties:
+ power-domains:
+ items:
+ - description: CORE GDSC power domain
+ - description: INT2 GDSC power domain
+
+ power-domain-names:
+ items:
+ - const: core
+ - const: int2
+
+ required:
+ - power-domain-names
+
unevaluatedProperties: false
examples:
--
2.43.0
^ permalink raw reply [flat|nested] 6+ messages in thread* Re: [PATCH v3 1/3] dt-bindings: display: msm: Add INT2 GDSC to Kaanapali DPU
2026-10-14 4:38 ` [PATCH v3 1/3] dt-bindings: display: msm: Add INT2 GDSC to Kaanapali DPU Yongxing Mou
@ 2026-10-14 11:31 ` Krzysztof Kozlowski
2026-10-15 10:29 ` Yongxing Mou
0 siblings, 1 reply; 6+ messages in thread
From: Krzysztof Kozlowski @ 2026-10-14 11:31 UTC (permalink / raw)
To: Yongxing Mou
Cc: 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, linux-arm-msm,
dri-devel, freedreno, devicetree, linux-kernel
On Wed, Oct 14, 2026 at 12:38:16PM +0800, Yongxing Mou wrote:
> 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.
>
> Restrict the two-domain schema to the Kaanapali DPU compatible, so other
> platforms sharing qcom,sm8650-dpu.yaml retain the existing single
> power-domain constraint.
>
> Signed-off-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
> ---
> .../devicetree/bindings/display/msm/dpu-common.yaml | 19 +++++++++++++++++--
> .../bindings/display/msm/qcom,kaanapali-mdss.yaml | 4 +++-
> .../bindings/display/msm/qcom,sm8650-dpu.yaml | 21 +++++++++++++++++++++
> 3 files changed, 41 insertions(+), 3 deletions(-)
>
> diff --git a/Documentation/devicetree/bindings/display/msm/dpu-common.yaml b/Documentation/devicetree/bindings/display/msm/dpu-common.yaml
> index 3f953aa5e694..19b791a857b5 100644
> --- a/Documentation/devicetree/bindings/display/msm/dpu-common.yaml
> +++ b/Documentation/devicetree/bindings/display/msm/dpu-common.yaml
> @@ -25,8 +25,7 @@ properties:
> interrupts:
> maxItems: 1
>
> - power-domains:
> - maxItems: 1
> + power-domains: true
No, widest constraints always stay here. Look at other bindings.
>
> operating-points-v2: true
> opp-table:
> @@ -53,4 +52,20 @@ required:
> - operating-points-v2
> - ports
>
> +allOf:
> + - if:
> + properties:
> + compatible:
> + contains:
> + const: qcom,kaanapali-dpu
There is no such compatible. Open this file and point me to it. Why are
you adding this compatible to common schema? Is there any prior art
doing something like this?
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH v3 1/3] dt-bindings: display: msm: Add INT2 GDSC to Kaanapali DPU
2026-10-14 11:31 ` Krzysztof Kozlowski
@ 2026-10-15 10:29 ` Yongxing Mou
0 siblings, 0 replies; 6+ messages in thread
From: Yongxing Mou @ 2026-10-15 10:29 UTC (permalink / raw)
To: Krzysztof Kozlowski
Cc: 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, linux-arm-msm,
dri-devel, freedreno, devicetree, linux-kernel
On 10/14/2026 7:31 PM, Krzysztof Kozlowski wrote:
> On Wed, Oct 14, 2026 at 12:38:16PM +0800, Yongxing Mou wrote:
>> 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.
>>
>> Restrict the two-domain schema to the Kaanapali DPU compatible, so other
>> platforms sharing qcom,sm8650-dpu.yaml retain the existing single
>> power-domain constraint.
>>
>> Signed-off-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
>> ---
>> .../devicetree/bindings/display/msm/dpu-common.yaml | 19 +++++++++++++++++--
>> .../bindings/display/msm/qcom,kaanapali-mdss.yaml | 4 +++-
>> .../bindings/display/msm/qcom,sm8650-dpu.yaml | 21 +++++++++++++++++++++
>> 3 files changed, 41 insertions(+), 3 deletions(-)
>>
>> diff --git a/Documentation/devicetree/bindings/display/msm/dpu-common.yaml b/Documentation/devicetree/bindings/display/msm/dpu-common.yaml
>> index 3f953aa5e694..19b791a857b5 100644
>> --- a/Documentation/devicetree/bindings/display/msm/dpu-common.yaml
>> +++ b/Documentation/devicetree/bindings/display/msm/dpu-common.yaml
>> @@ -25,8 +25,7 @@ properties:
>> interrupts:
>> maxItems: 1
>>
>> - power-domains:
>> - maxItems: 1
>> + power-domains: true
>
> No, widest constraints always stay here. Look at other bindings.
>
Got it. Thanks. So here mean allowing up to two power domains in
dpu-common.yaml, requiring two for Kaanapali in qcom,sm8650-dpu.yaml,
and adding maxItems: 1 to the other DPU bindings to preserve their
existing constraints?>>
>> operating-points-v2: true
>> opp-table:
>> @@ -53,4 +52,20 @@ required:
>> - operating-points-v2
>> - ports
>>
>> +allOf:
>> + - if:
>> + properties:
>> + compatible:
>> + contains:
>> + const: qcom,kaanapali-dpu
>
> There is no such compatible. Open this file and point me to it. Why are
> you adding this compatible to common schema? Is there any prior art
> doing something like this?
>
Thanks for pointing this out. I will move the Kaanapali-specific
constraint to qcom,sm8650-dpu.yaml, where qcom,kaanapali-dpu is defined.
> Best regards,
> Krzysztof
>
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH v3 2/3] drm/msm/dpu: Attach CORE and INT2 power domains on Kaanapali
2026-10-14 4:38 [PATCH v3 0/3] drm/msm/dpu: Add INT2 GDSC power domain support for Kaanapali Yongxing Mou
2026-10-14 4:38 ` [PATCH v3 1/3] dt-bindings: display: msm: Add INT2 GDSC to Kaanapali DPU Yongxing Mou
@ 2026-10-14 4:38 ` Yongxing Mou
2026-10-14 4:38 ` [PATCH v3 3/3] arm64: dts: qcom: Add INT2 GDSC to Kaanapali DPU Yongxing Mou
2 siblings, 0 replies; 6+ messages in thread
From: Yongxing Mou @ 2026-10-14 4:38 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] 6+ messages in thread* [PATCH v3 3/3] arm64: dts: qcom: Add INT2 GDSC to Kaanapali DPU
2026-10-14 4:38 [PATCH v3 0/3] drm/msm/dpu: Add INT2 GDSC power domain support for Kaanapali Yongxing Mou
2026-10-14 4:38 ` [PATCH v3 1/3] dt-bindings: display: msm: Add INT2 GDSC to Kaanapali DPU Yongxing Mou
2026-10-14 4:38 ` [PATCH v3 2/3] drm/msm/dpu: Attach CORE and INT2 power domains on Kaanapali Yongxing Mou
@ 2026-10-14 4:38 ` Yongxing Mou
2 siblings, 0 replies; 6+ messages in thread
From: Yongxing Mou @ 2026-10-14 4:38 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] 6+ messages in thread