* [PATCH] rockchip: dts: rk3588: add missing OPP nodes for lower frequencies
@ 2025-04-03 9:18 Daniele Briguglio
2025-04-03 9:24 ` Heiko Stübner
0 siblings, 1 reply; 3+ messages in thread
From: Daniele Briguglio @ 2025-04-03 9:18 UTC (permalink / raw)
To: devicetree
Cc: robh, krzk+dt, conor+dt, heiko, alchark, linux-arm-kernel,
linux-rockchip, linux-kernel, Daniele Briguglio,
Daniele Briguglio
From: Daniele Briguglio <daniele.briguglio@icloud.com>
This Patch adds missing Operating Performance Point (OPP) nodes for lower
frequencies to the RK3588 device tree. These additions improve power
management by enabling the CPU clusters to scale down to lower
frequencies when under light loads, which should improve energy
efficiency and reduce power consumption.
The changes add OPP nodes for 408MHz, 600MHz, 816MHz, and 1008MHz
(for cluster1 and cluster2 only, as cluster0 already had 1008MHz)
with appropriate voltage settings across all three CPU clusters in
the RK3588 SoC.
Signed-off-by: Daniele Briguglio <hello@superkali.me>
---
arch/arm64/boot/dts/rockchip/rk3588-opp.dtsi | 58 ++++++++++++++++++++
1 file changed, 58 insertions(+)
diff --git a/arch/arm64/boot/dts/rockchip/rk3588-opp.dtsi b/arch/arm64/boot/dts/rockchip/rk3588-opp.dtsi
index 0f1a77697351..1b018823d5d3 100644
--- a/arch/arm64/boot/dts/rockchip/rk3588-opp.dtsi
+++ b/arch/arm64/boot/dts/rockchip/rk3588-opp.dtsi
@@ -5,6 +5,22 @@ cluster0_opp_table: opp-table-cluster0 {
compatible = "operating-points-v2";
opp-shared;
+ opp-408000000 {
+ opp-hz = /bits/ 64 <408000000>;
+ opp-microvolt = <675000 675000 950000>;
+ clock-latency-ns = <40000>;
+ opp-suspend;
+ };
+ opp-600000000 {
+ opp-hz = /bits/ 64 <600000000>;
+ opp-microvolt = <675000 675000 950000>;
+ clock-latency-ns = <40000>;
+ };
+ opp-816000000 {
+ opp-hz = /bits/ 64 <816000000>;
+ opp-microvolt = <675000 675000 950000>;
+ clock-latency-ns = <40000>;
+ };
opp-1008000000 {
opp-hz = /bits/ 64 <1008000000>;
opp-microvolt = <675000 675000 950000>;
@@ -37,6 +53,27 @@ cluster1_opp_table: opp-table-cluster1 {
compatible = "operating-points-v2";
opp-shared;
+ opp-408000000 {
+ opp-hz = /bits/ 64 <408000000>;
+ opp-microvolt = <675000 675000 1000000>;
+ clock-latency-ns = <40000>;
+ opp-suspend;
+ };
+ opp-600000000 {
+ opp-hz = /bits/ 64 <600000000>;
+ opp-microvolt = <675000 675000 1000000>;
+ clock-latency-ns = <40000>;
+ };
+ opp-816000000 {
+ opp-hz = /bits/ 64 <816000000>;
+ opp-microvolt = <675000 675000 1000000>;
+ clock-latency-ns = <40000>;
+ };
+ opp-1008000000 {
+ opp-hz = /bits/ 64 <1008000000>;
+ opp-microvolt = <675000 675000 1000000>;
+ clock-latency-ns = <40000>;
+ };
opp-1200000000 {
opp-hz = /bits/ 64 <1200000000>;
opp-microvolt = <675000 675000 1000000>;
@@ -78,6 +115,27 @@ cluster2_opp_table: opp-table-cluster2 {
compatible = "operating-points-v2";
opp-shared;
+ opp-408000000 {
+ opp-hz = /bits/ 64 <408000000>;
+ opp-microvolt = <675000 675000 1000000>;
+ clock-latency-ns = <40000>;
+ opp-suspend;
+ };
+ opp-600000000 {
+ opp-hz = /bits/ 64 <600000000>;
+ opp-microvolt = <675000 675000 1000000>;
+ clock-latency-ns = <40000>;
+ };
+ opp-816000000 {
+ opp-hz = /bits/ 64 <816000000>;
+ opp-microvolt = <675000 675000 1000000>;
+ clock-latency-ns = <40000>;
+ };
+ opp-1008000000 {
+ opp-hz = /bits/ 64 <1008000000>;
+ opp-microvolt = <675000 675000 1000000>;
+ clock-latency-ns = <40000>;
+ };
opp-1200000000 {
opp-hz = /bits/ 64 <1200000000>;
opp-microvolt = <675000 675000 1000000>;
--
2.34.1
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH] rockchip: dts: rk3588: add missing OPP nodes for lower frequencies
2025-04-03 9:18 [PATCH] rockchip: dts: rk3588: add missing OPP nodes for lower frequencies Daniele Briguglio
@ 2025-04-03 9:24 ` Heiko Stübner
2025-04-03 9:41 ` Daniele Briguglio
0 siblings, 1 reply; 3+ messages in thread
From: Heiko Stübner @ 2025-04-03 9:24 UTC (permalink / raw)
To: devicetree, Daniele Briguglio
Cc: robh, krzk+dt, conor+dt, alchark, linux-arm-kernel,
linux-rockchip, linux-kernel, Daniele Briguglio,
Daniele Briguglio
Hi,
Am Donnerstag, 3. April 2025, 11:18:40 MESZ schrieb Daniele Briguglio:
> From: Daniele Briguglio <daniele.briguglio@icloud.com>
>
> This Patch adds missing Operating Performance Point (OPP) nodes for lower
> frequencies to the RK3588 device tree. These additions improve power
> management by enabling the CPU clusters to scale down to lower
> frequencies when under light loads, which should improve energy
> efficiency and reduce power consumption.
>
> The changes add OPP nodes for 408MHz, 600MHz, 816MHz, and 1008MHz
> (for cluster1 and cluster2 only, as cluster0 already had 1008MHz)
> with appropriate voltage settings across all three CPU clusters in
> the RK3588 SoC.
the general consensus is that you don't save energy when you're not
reducing the voltage together with the frequency.
For example cluster0 @1GHz runs at 675mV already, so reducing just the
frequency, when you're not allowed to reduce the voltage with it won't
save energy, just make things slow.
Heiko
> Signed-off-by: Daniele Briguglio <hello@superkali.me>
> ---
> arch/arm64/boot/dts/rockchip/rk3588-opp.dtsi | 58 ++++++++++++++++++++
> 1 file changed, 58 insertions(+)
>
> diff --git a/arch/arm64/boot/dts/rockchip/rk3588-opp.dtsi b/arch/arm64/boot/dts/rockchip/rk3588-opp.dtsi
> index 0f1a77697351..1b018823d5d3 100644
> --- a/arch/arm64/boot/dts/rockchip/rk3588-opp.dtsi
> +++ b/arch/arm64/boot/dts/rockchip/rk3588-opp.dtsi
> @@ -5,6 +5,22 @@ cluster0_opp_table: opp-table-cluster0 {
> compatible = "operating-points-v2";
> opp-shared;
>
> + opp-408000000 {
> + opp-hz = /bits/ 64 <408000000>;
> + opp-microvolt = <675000 675000 950000>;
> + clock-latency-ns = <40000>;
> + opp-suspend;
> + };
> + opp-600000000 {
> + opp-hz = /bits/ 64 <600000000>;
> + opp-microvolt = <675000 675000 950000>;
> + clock-latency-ns = <40000>;
> + };
> + opp-816000000 {
> + opp-hz = /bits/ 64 <816000000>;
> + opp-microvolt = <675000 675000 950000>;
> + clock-latency-ns = <40000>;
> + };
> opp-1008000000 {
> opp-hz = /bits/ 64 <1008000000>;
> opp-microvolt = <675000 675000 950000>;
> @@ -37,6 +53,27 @@ cluster1_opp_table: opp-table-cluster1 {
> compatible = "operating-points-v2";
> opp-shared;
>
> + opp-408000000 {
> + opp-hz = /bits/ 64 <408000000>;
> + opp-microvolt = <675000 675000 1000000>;
> + clock-latency-ns = <40000>;
> + opp-suspend;
> + };
> + opp-600000000 {
> + opp-hz = /bits/ 64 <600000000>;
> + opp-microvolt = <675000 675000 1000000>;
> + clock-latency-ns = <40000>;
> + };
> + opp-816000000 {
> + opp-hz = /bits/ 64 <816000000>;
> + opp-microvolt = <675000 675000 1000000>;
> + clock-latency-ns = <40000>;
> + };
> + opp-1008000000 {
> + opp-hz = /bits/ 64 <1008000000>;
> + opp-microvolt = <675000 675000 1000000>;
> + clock-latency-ns = <40000>;
> + };
> opp-1200000000 {
> opp-hz = /bits/ 64 <1200000000>;
> opp-microvolt = <675000 675000 1000000>;
> @@ -78,6 +115,27 @@ cluster2_opp_table: opp-table-cluster2 {
> compatible = "operating-points-v2";
> opp-shared;
>
> + opp-408000000 {
> + opp-hz = /bits/ 64 <408000000>;
> + opp-microvolt = <675000 675000 1000000>;
> + clock-latency-ns = <40000>;
> + opp-suspend;
> + };
> + opp-600000000 {
> + opp-hz = /bits/ 64 <600000000>;
> + opp-microvolt = <675000 675000 1000000>;
> + clock-latency-ns = <40000>;
> + };
> + opp-816000000 {
> + opp-hz = /bits/ 64 <816000000>;
> + opp-microvolt = <675000 675000 1000000>;
> + clock-latency-ns = <40000>;
> + };
> + opp-1008000000 {
> + opp-hz = /bits/ 64 <1008000000>;
> + opp-microvolt = <675000 675000 1000000>;
> + clock-latency-ns = <40000>;
> + };
> opp-1200000000 {
> opp-hz = /bits/ 64 <1200000000>;
> opp-microvolt = <675000 675000 1000000>;
>
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] rockchip: dts: rk3588: add missing OPP nodes for lower frequencies
2025-04-03 9:24 ` Heiko Stübner
@ 2025-04-03 9:41 ` Daniele Briguglio
0 siblings, 0 replies; 3+ messages in thread
From: Daniele Briguglio @ 2025-04-03 9:41 UTC (permalink / raw)
To: Heiko Stübner
Cc: devicetree, robh, krzk+dt, conor+dt, alchark, linux-arm-kernel,
linux-rockchip, linux-kernel, Daniele Briguglio
Hi Heiko,
Thank you for your feedback. I misunderstood how power savings work in
CPUs - I incorrectly assumed that simply reducing the frequency would
save significant energy, even without reducing voltage. I now understand
why that's not the case.
My main purpose in adding these OPP nodes was to allow the system to
operate at lower frequencies like 408MHz, 600MHz, and 816MHz, which are
currently unavailable. I thought this would improve energy efficiency,
but I see now that keeping the same voltage (675mV) while only lowering
frequency won't achieve meaningful power savings.
Do you have any guidance on lower voltage values that might be safe and
stable for these lower frequencies on the RK3588? I've seen some
overlays that maintain 675mV as the minimum even for lower frequencies,
but if there are tested lower voltages available, I'd be happy to
include those in an updated version of the patch.
Thanks,
Daniele
On 03/04/2025 11:24, Heiko Stübner wrote:
> Hi,
>
> Am Donnerstag, 3. April 2025, 11:18:40 MESZ schrieb Daniele Briguglio:
>> From: Daniele Briguglio <daniele.briguglio@icloud.com>
>>
>> This Patch adds missing Operating Performance Point (OPP) nodes for
>> lower
>> frequencies to the RK3588 device tree. These additions improve power
>> management by enabling the CPU clusters to scale down to lower
>> frequencies when under light loads, which should improve energy
>> efficiency and reduce power consumption.
>>
>> The changes add OPP nodes for 408MHz, 600MHz, 816MHz, and 1008MHz
>> (for cluster1 and cluster2 only, as cluster0 already had 1008MHz)
>> with appropriate voltage settings across all three CPU clusters in
>> the RK3588 SoC.
>
> the general consensus is that you don't save energy when you're not
> reducing the voltage together with the frequency.
>
> For example cluster0 @1GHz runs at 675mV already, so reducing just the
> frequency, when you're not allowed to reduce the voltage with it won't
> save energy, just make things slow.
>
>
> Heiko
>
>> Signed-off-by: Daniele Briguglio <hello@superkali.me>
>> ---
>> arch/arm64/boot/dts/rockchip/rk3588-opp.dtsi | 58
>> ++++++++++++++++++++
>> 1 file changed, 58 insertions(+)
>>
>> diff --git a/arch/arm64/boot/dts/rockchip/rk3588-opp.dtsi
>> b/arch/arm64/boot/dts/rockchip/rk3588-opp.dtsi
>> index 0f1a77697351..1b018823d5d3 100644
>> --- a/arch/arm64/boot/dts/rockchip/rk3588-opp.dtsi
>> +++ b/arch/arm64/boot/dts/rockchip/rk3588-opp.dtsi
>> @@ -5,6 +5,22 @@ cluster0_opp_table: opp-table-cluster0 {
>> compatible = "operating-points-v2";
>> opp-shared;
>>
>> + opp-408000000 {
>> + opp-hz = /bits/ 64 <408000000>;
>> + opp-microvolt = <675000 675000 950000>;
>> + clock-latency-ns = <40000>;
>> + opp-suspend;
>> + };
>> + opp-600000000 {
>> + opp-hz = /bits/ 64 <600000000>;
>> + opp-microvolt = <675000 675000 950000>;
>> + clock-latency-ns = <40000>;
>> + };
>> + opp-816000000 {
>> + opp-hz = /bits/ 64 <816000000>;
>> + opp-microvolt = <675000 675000 950000>;
>> + clock-latency-ns = <40000>;
>> + };
>> opp-1008000000 {
>> opp-hz = /bits/ 64 <1008000000>;
>> opp-microvolt = <675000 675000 950000>;
>> @@ -37,6 +53,27 @@ cluster1_opp_table: opp-table-cluster1 {
>> compatible = "operating-points-v2";
>> opp-shared;
>>
>> + opp-408000000 {
>> + opp-hz = /bits/ 64 <408000000>;
>> + opp-microvolt = <675000 675000 1000000>;
>> + clock-latency-ns = <40000>;
>> + opp-suspend;
>> + };
>> + opp-600000000 {
>> + opp-hz = /bits/ 64 <600000000>;
>> + opp-microvolt = <675000 675000 1000000>;
>> + clock-latency-ns = <40000>;
>> + };
>> + opp-816000000 {
>> + opp-hz = /bits/ 64 <816000000>;
>> + opp-microvolt = <675000 675000 1000000>;
>> + clock-latency-ns = <40000>;
>> + };
>> + opp-1008000000 {
>> + opp-hz = /bits/ 64 <1008000000>;
>> + opp-microvolt = <675000 675000 1000000>;
>> + clock-latency-ns = <40000>;
>> + };
>> opp-1200000000 {
>> opp-hz = /bits/ 64 <1200000000>;
>> opp-microvolt = <675000 675000 1000000>;
>> @@ -78,6 +115,27 @@ cluster2_opp_table: opp-table-cluster2 {
>> compatible = "operating-points-v2";
>> opp-shared;
>>
>> + opp-408000000 {
>> + opp-hz = /bits/ 64 <408000000>;
>> + opp-microvolt = <675000 675000 1000000>;
>> + clock-latency-ns = <40000>;
>> + opp-suspend;
>> + };
>> + opp-600000000 {
>> + opp-hz = /bits/ 64 <600000000>;
>> + opp-microvolt = <675000 675000 1000000>;
>> + clock-latency-ns = <40000>;
>> + };
>> + opp-816000000 {
>> + opp-hz = /bits/ 64 <816000000>;
>> + opp-microvolt = <675000 675000 1000000>;
>> + clock-latency-ns = <40000>;
>> + };
>> + opp-1008000000 {
>> + opp-hz = /bits/ 64 <1008000000>;
>> + opp-microvolt = <675000 675000 1000000>;
>> + clock-latency-ns = <40000>;
>> + };
>> opp-1200000000 {
>> opp-hz = /bits/ 64 <1200000000>;
>> opp-microvolt = <675000 675000 1000000>;
>>
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2025-04-03 10:25 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-04-03 9:18 [PATCH] rockchip: dts: rk3588: add missing OPP nodes for lower frequencies Daniele Briguglio
2025-04-03 9:24 ` Heiko Stübner
2025-04-03 9:41 ` Daniele Briguglio
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).