It has been concluded off-list that the Global Clock Controller needs to
scale the RPMh CX power domain, otherwise some of the subsystems might
crash or be unstable. So adding the RPMh CX power domain to the clock
controller which will result in all GDSCs being parented by CX. This way,
the vote from the consumers of each GDSC will trickle all the way to CX.
So document the power domain and the required opp to that end.
Fixes: ee2d967030fe ("dt-bindings: clock: qcom: document the Glymur Global Clock Controller")
Signed-off-by: Abel Vesa <abel.vesa@oss.qualcomm.com>
---
.../devicetree/bindings/clock/qcom,glymur-gcc.yaml | 14 ++++++++++++++
1 file changed, 14 insertions(+)
diff --git a/Documentation/devicetree/bindings/clock/qcom,glymur-gcc.yaml b/Documentation/devicetree/bindings/clock/qcom,glymur-gcc.yaml
index b05b0e6c4483..94a911855776 100644
--- a/Documentation/devicetree/bindings/clock/qcom,glymur-gcc.yaml
+++ b/Documentation/devicetree/bindings/clock/qcom,glymur-gcc.yaml
@@ -65,9 +65,20 @@ properties:
- description: USB4 PHY 2 pcie pipe clock source
- description: USB4 PHY 2 Max pipe clock source
+ power-domains:
+ description:
+ A phandle and PM domain specifier for the CX power domain.
+ maxItems: 1
+
+ required-opps:
+ description:
+ A phandle to an OPP node describing required CX performance point.
+ maxItems: 1
+
required:
- compatible
- clocks
+ - power-domains
- '#power-domain-cells'
allOf:
@@ -78,6 +89,7 @@ unevaluatedProperties: false
examples:
- |
#include <dt-bindings/clock/qcom,rpmh.h>
+ #include <dt-bindings/power/qcom-rpmpd.h>
clock-controller@100000 {
compatible = "qcom,glymur-gcc";
reg = <0x100000 0x1f9000>;
@@ -113,6 +125,8 @@ examples:
<&usb4_phy_0_pcie_pipe>, <&usb4_phy_0_max_pipe>,
<&usb4_phy_1_pcie_pipe>, <&usb4_phy_1_max_pipe>,
<&usb4_phy_2_pcie_pipe>, <&usb4_phy_2_max_pipe>;
+ power-domains = <&rpmhpd RPMHPD_CX>;
+ required-opps = <&rpmhpd_opp_nom>;
#clock-cells = <1>;
#reset-cells = <1>;
#power-domain-cells = <1>;
--
2.48.1
On 3/9/2026 3:36 PM, Abel Vesa wrote:
> It has been concluded off-list that the Global Clock Controller needs to
> scale the RPMh CX power domain, otherwise some of the subsystems might
> crash or be unstable. So adding the RPMh CX power domain to the clock
> controller which will result in all GDSCs being parented by CX. This way,
> the vote from the consumers of each GDSC will trickle all the way to CX.
>
Are the consumers not taking care to vote on clocks to take care?
GDSCs from design of hardware, never requires a vote to operate. It is
the clocks which has a voltage requirements.
> So document the power domain and the required opp to that end.
>
> Fixes: ee2d967030fe ("dt-bindings: clock: qcom: document the Glymur Global Clock Controller")
> Signed-off-by: Abel Vesa <abel.vesa@oss.qualcomm.com>
> ---
> .../devicetree/bindings/clock/qcom,glymur-gcc.yaml | 14 ++++++++++++++
> 1 file changed, 14 insertions(+)
>
> diff --git a/Documentation/devicetree/bindings/clock/qcom,glymur-gcc.yaml b/Documentation/devicetree/bindings/clock/qcom,glymur-gcc.yaml
> index b05b0e6c4483..94a911855776 100644
> --- a/Documentation/devicetree/bindings/clock/qcom,glymur-gcc.yaml
> +++ b/Documentation/devicetree/bindings/clock/qcom,glymur-gcc.yaml
> @@ -65,9 +65,20 @@ properties:
> - description: USB4 PHY 2 pcie pipe clock source
> - description: USB4 PHY 2 Max pipe clock source
>
> + power-domains:
> + description:
> + A phandle and PM domain specifier for the CX power domain.
> + maxItems: 1
> +
> + required-opps:
> + description:
> + A phandle to an OPP node describing required CX performance point.
> + maxItems: 1
> +
> required:
> - compatible
> - clocks
> + - power-domains
> - '#power-domain-cells'
>
> allOf:
> @@ -78,6 +89,7 @@ unevaluatedProperties: false
> examples:
> - |
> #include <dt-bindings/clock/qcom,rpmh.h>
> + #include <dt-bindings/power/qcom-rpmpd.h>
> clock-controller@100000 {
> compatible = "qcom,glymur-gcc";
> reg = <0x100000 0x1f9000>;
> @@ -113,6 +125,8 @@ examples:
> <&usb4_phy_0_pcie_pipe>, <&usb4_phy_0_max_pipe>,
> <&usb4_phy_1_pcie_pipe>, <&usb4_phy_1_max_pipe>,
> <&usb4_phy_2_pcie_pipe>, <&usb4_phy_2_max_pipe>;
> + power-domains = <&rpmhpd RPMHPD_CX>;
> + required-opps = <&rpmhpd_opp_nom>;
> #clock-cells = <1>;
> #reset-cells = <1>;
> #power-domain-cells = <1>;
>
--
Thanks,
Taniya Das
On Mon, Mar 09, 2026 at 12:06:17PM +0200, Abel Vesa wrote:
> It has been concluded off-list that the Global Clock Controller needs to
> scale the RPMh CX power domain, otherwise some of the subsystems might
> crash or be unstable. So adding the RPMh CX power domain to the clock
Which subsystems?
> controller which will result in all GDSCs being parented by CX. This way,
> the vote from the consumers of each GDSC will trickle all the way to CX.
>
> So document the power domain and the required opp to that end.
>
> Fixes: ee2d967030fe ("dt-bindings: clock: qcom: document the Glymur Global Clock Controller")
> Signed-off-by: Abel Vesa <abel.vesa@oss.qualcomm.com>
> ---
> .../devicetree/bindings/clock/qcom,glymur-gcc.yaml | 14 ++++++++++++++
> 1 file changed, 14 insertions(+)
>
> diff --git a/Documentation/devicetree/bindings/clock/qcom,glymur-gcc.yaml b/Documentation/devicetree/bindings/clock/qcom,glymur-gcc.yaml
> index b05b0e6c4483..94a911855776 100644
> --- a/Documentation/devicetree/bindings/clock/qcom,glymur-gcc.yaml
> +++ b/Documentation/devicetree/bindings/clock/qcom,glymur-gcc.yaml
> @@ -65,9 +65,20 @@ properties:
> - description: USB4 PHY 2 pcie pipe clock source
> - description: USB4 PHY 2 Max pipe clock source
>
> + power-domains:
> + description:
> + A phandle and PM domain specifier for the CX power domain.
> + maxItems: 1
> +
> + required-opps:
> + description:
> + A phandle to an OPP node describing required CX performance point.
> + maxItems: 1
If you only need to use CX as a parent to GDSCs (BTW: now all GDSCs have
CX as a parent, is it expected?), then why do you also need to case a
vote on CX?
> +
> required:
> - compatible
> - clocks
> + - power-domains
> - '#power-domain-cells'
>
> allOf:
> @@ -78,6 +89,7 @@ unevaluatedProperties: false
> examples:
> - |
> #include <dt-bindings/clock/qcom,rpmh.h>
> + #include <dt-bindings/power/qcom-rpmpd.h>
> clock-controller@100000 {
> compatible = "qcom,glymur-gcc";
> reg = <0x100000 0x1f9000>;
> @@ -113,6 +125,8 @@ examples:
> <&usb4_phy_0_pcie_pipe>, <&usb4_phy_0_max_pipe>,
> <&usb4_phy_1_pcie_pipe>, <&usb4_phy_1_max_pipe>,
> <&usb4_phy_2_pcie_pipe>, <&usb4_phy_2_max_pipe>;
> + power-domains = <&rpmhpd RPMHPD_CX>;
= <&rpmhpd_cx>;
No need to import another header.
> + required-opps = <&rpmhpd_opp_nom>;
> #clock-cells = <1>;
> #reset-cells = <1>;
> #power-domain-cells = <1>;
>
> --
> 2.48.1
>
--
With best wishes
Dmitry
© 2016 - 2026 Red Hat, Inc.