DVFS

This section includes the following two parts:

CPU DVFS Configuration

Dynamic Voltage and Frequency Scaling is a framework to change the frequency and/or operating voltage of a processor(s) based on system performance requirements at the given point of time. Frequency scaling is achieved using CPUFreq framework.

OPP List

Operating Performance Point (OPP) is a tuple consisting a frequency value and voltage required to run at the frequency. OPP table contains OPPs with a cpu/device name they are applicable to and an availability flag. OPP information of each device is added to OPP list.

Linux4.4 kernel puts the frequency and voltage-related configurations in device tree, and we call the node composed of these configuration information as OPP Table. OPP Table nodes include OPP nodes describing frequency and voltage, leakage related configuration attributes, PVTM related configuration attributes, etc.

The following code block is the JH-7110 DevKit opp-table:
cluster0_opp: opp-table-0 {
            compatible = "operating-points-v2";
            opp-shared;
            opp-375000000 {
                    opp-hz = /bits/ 64 <375000000>;   # Unit: Hz
                    opp-microvolt = <800000>;    # Unit: uV
            };
            opp-500000000 {
                    opp-hz = /bits/ 64 <500000000>;   # Unit: Hz
                    opp-microvolt = <800000>;   # Unit: uV
            };
            opp-750000000 {
                    opp-hz = /bits/ 64 <750000000>;   # Unit: Hz
                    opp-microvolt = <800000>;    # Unit: uV
                    opp-suspend;
            };
            opp-1500000000 {
                    opp-hz = /bits/ 64 <1500000000>;   # Unit: Hz
                    opp-microvolt = <1040000>;    # Unit: uV
            };

            /* CPU opp table for 1.25GHz */
            opp-312500000 {
                    opp-hz = /bits/ 64 <312500000>;    # Unit: Hz
                    opp-microvolt = <800000>;    # Unit: uV
            };
            opp-417000000 {
                    opp-hz = /bits/ 64 <417000000>;    # Unit: Hz
                    opp-microvolt = <800000>;     # Unit: uV
            };
            opp-625000000 {
                    opp-hz = /bits/ 64 <625000000>;    # Unit: Hz
                    opp-microvolt = <800000>;    # Unit: uV
                    opp-suspend;
            };
            opp-1250000000 {
                    opp-hz = /bits/ 64 <1250000000>;    # Unit: Hz
                    opp-microvolt = <1000000>;    # Unit: uV
            };
    };