I want to reduce the power consumption of the i.MX8MP without shutting down the cores. To achieve this, I believe there are two ways:
- Lowering the voltage
- Lowering the frequency
I noticed that the i.MX8MP.dtsi file provides three OPP (Operating Performance Points) related nodes: 1800000, 1600000, and 1200000. Since we are using an industrial-grade SoC, when I check the available CPU frequencies using the 'cat sys/xxx/scaling_available_freq' command, I only see two options, 1600000 and 1200000. Now, I want to reduce the CPU frequency as much as possible, so I need to create new OPP nodes.
I have a few questions:
- The datasheet mentions that the ARM_PLL range is 800MHz to 1.6GHz. Does this mean that the lowest OPP node can only be 800MHz?
- The datasheet only mentions voltage values for 1.2GHz (0.85V) and 1.6GHz (1.6V), but there is no table for other frequencies. Can you provide the voltage values for other frequencies if available?
- The OPP nodes have an 'opp-supported-hw' attribute. What does this attribute mean? Could you provide a table mapping 'cpufreq,' 'voltage,' and 'opp-supported-hw' values?
I modified the device tree by adding an 800MHz node. Since I don't know the voltage value, I used 0.85V, and I also used the 'opp-supported-hw' value from the 1200000 node. While I can see the added frequency in '/sys/xxx/cpux/freq/xxx' and set it successfully, I feel like it might be a coincidence. I still want to find the most accurate way to set this up. Even though I was able to set the frequency successfully, power consumption is closely related to voltage. It seems that just lowering the frequency without reducing the voltage doesn't significantly reduce power consumption. So, please provide the most optimal solution.
a53_opp_table: opp-table {
compatible = "operating-points-v2";
opp-shared;
++ opp-800000000 {
++ opp-hz = /bits/ 64 <800000000>;
++ opp-microvolt = <850000>;
++ opp-supported-hw = <0x8a0>, <0x7>;
++ clock-latency-ns = <150000>;
++ opp-suspend;
++ };
opp-1200000000 {
opp-hz = /bits/ 64 <1200000000>;
opp-microvolt = <850000>;
opp-supported-hw = <0x8a0>, <0x7>;
clock-latency-ns = <150000>;
opp-suspend;
};
opp-1600000000 {
opp-hz = /bits/ 64 <1600000000>;
opp-microvolt = <950000>;
opp-supported-hw = <0xa0>, <0x7>;
clock-latency-ns = <150000>;
opp-suspend;
};