Skip to content

Commit

Permalink
arm64: dts: sm8150: Optimize frequency tables and energy model
Browse files Browse the repository at this point in the history
Each cluster's minimum frequency is now its most efficient frequency by
ULPMark-CM [1] score (CoreMark [2] iterations per millijoule of energy)
and the energy model has been recalculated to accomodate for the
frequency changes. All measurements and tuning have been done for
SM8150-AA (Snapdragon 855), but some accomodations have been made for
SM8150-AC (Snapdragon 855+) as well.

Inefficient intermediate frequencies have been removed for performance
and power reasons. The maximum frequency for each cluster, however
inefficient, has been retained for maximum peak performance. Efficient
frequency selection has been performed based on ULPMark-CM scores (I/mJ)
and manual discretion.

Power and performance measurements were made using my freqbench [3]
benchmark, which isolates, offlines, and disables the timer tick on
test CPUs to maximize accuracy.

Normalized DMIPS/MHz capacity scale values for each CPU have also been
updated to reflect measurements. Instead of using DMIPS/MHz, we use
CoreMarks/MHz (CoreMark iterations per second per MHz), which serves the
same purpose. For each CPU, the final capacity-dmips-mhz value is the
CM/MHz value of its maximum frequency normalized to SCHED_CAPACITY_SCALE
(1024) for the fastest CPU on the system.

All human-readable source data and energy model results are included
below. All benchmark data, including the raw samples in machine-readable
JSON format, can be found in the freqbench repository [4].

IF YOU HAVE SM8150-AC, replace the energy model with one created for
the AC variant from below and remove the excess frequencies.

------------------------------------------------------------------------

New efficient frequency tables with power and performance stats:

===== CPU 1 =====
Frequencies: 300 403 499 576 672 768 844 940 1036 1113 1209 1305 1382 1478 1555 1632 1708 1785

1708:  6345     3.7 C/MHz    137 mW    5.4 J   46.3 I/mJ    39.4 s
1785:  6630     3.7 C/MHz    146 mW    5.5 J   45.5 I/mJ    37.7 s

===== CPU 4 =====
Frequencies: 710 825 940 1056 1171 1286 1401 1497 1612 1708 1804 1920 2016 2131 2227 2323 2419

1401: 10918     7.8 C/MHz    311 mW    7.1 J   35.1 I/mJ    22.9 s
1708: 13320     7.8 C/MHz    398 mW    7.5 J   33.5 I/mJ    18.8 s
1804: 14069     7.8 C/MHz    456 mW    8.1 J   30.9 I/mJ    17.8 s
1920: 14909     7.8 C/MHz    507 mW    8.5 J   29.4 I/mJ    16.8 s
2016: 15706     7.8 C/MHz    558 mW    8.9 J   28.1 I/mJ    15.9 s
2323: 18088     7.8 C/MHz    717 mW    9.9 J   25.2 I/mJ    13.8 s
2419: 18835     7.8 C/MHz    845 mW   11.2 J   22.3 I/mJ    13.3 s

===== CPU 7 =====
Frequencies: 825 940 1056 1171 1286 1401 1497 1612 1708 1804 1920 2016 2131 2227 2323 2419 2534 2649 2745 2841 2956

1804: 14062     7.8 C/MHz    446 mW    7.9 J   31.5 I/mJ    17.8 s
2016: 15711     7.8 C/MHz    513 mW    8.2 J   30.6 I/mJ    15.9 s
2227: 17353     7.8 C/MHz    622 mW    9.0 J   27.9 I/mJ    14.4 s
2323: 18095     7.8 C/MHz    704 mW    9.7 J   25.7 I/mJ    13.8 s
2534: 19761     7.8 C/MHz    824 mW   10.4 J   23.9 I/mJ    12.7 s
2841: 22147     7.8 C/MHz   1092 mW   12.3 J   20.3 I/mJ    11.3 s
2956: 23039     7.8 C/MHz   1285 mW   14.0 J   17.9 I/mJ    10.9 s

------------------------------------------------------------------------

Source data for SM8150-AA:

Frequency domains: cpu1 cpu4 cpu7
Offline CPUs: cpu1 cpu2 cpu3 cpu4 cpu5 cpu6 cpu7
Baseline power usage: 1400 mW

===== CPU 1 =====
Frequencies: 300 403 499 576 672 768 844 940 1036 1113 1209 1305 1382 1478 1555 1632 1708 1785

 300:  1114     3.7 C/MHz     52 mW   11.8 J   21.3 I/mJ   224.4 s
 403:  1497     3.7 C/MHz     57 mW    9.5 J   26.2 I/mJ   167.0 s
 499:  1854     3.7 C/MHz     73 mW    9.8 J   25.5 I/mJ   134.9 s
 576:  2139     3.7 C/MHz     83 mW    9.7 J   25.8 I/mJ   116.9 s
 672:  2495     3.7 C/MHz     65 mW    6.5 J   38.6 I/mJ   100.2 s
 768:  2852     3.7 C/MHz     72 mW    6.3 J   39.4 I/mJ    87.7 s
 844:  3137     3.7 C/MHz     77 mW    6.2 J   40.5 I/mJ    79.7 s
 940:  3493     3.7 C/MHz     84 mW    6.0 J   41.8 I/mJ    71.6 s
1036:  3850     3.7 C/MHz     91 mW    5.9 J   42.5 I/mJ    64.9 s
1113:  4135     3.7 C/MHz     96 mW    5.8 J   43.2 I/mJ    60.5 s
1209:  4491     3.7 C/MHz    102 mW    5.7 J   44.2 I/mJ    55.7 s
1305:  4848     3.7 C/MHz    110 mW    5.7 J   44.0 I/mJ    51.6 s
1382:  5133     3.7 C/MHz    114 mW    5.5 J   45.2 I/mJ    48.7 s
1478:  5490     3.7 C/MHz    120 mW    5.5 J   45.7 I/mJ    45.5 s
1555:  5775     3.7 C/MHz    126 mW    5.5 J   45.8 I/mJ    43.3 s
1632:  6060     3.7 C/MHz    131 mW    5.4 J   46.1 I/mJ    41.3 s
1708:  6345     3.7 C/MHz    137 mW    5.4 J   46.3 I/mJ    39.4 s
1785:  6630     3.7 C/MHz    146 mW    5.5 J   45.5 I/mJ    37.7 s

===== CPU 4 =====
Frequencies: 710 825 940 1056 1171 1286 1401 1497 1612 1708 1804 1920 2016 2131 2227 2323 2419

 710:  2765     3.9 C/MHz    126 mW   11.4 J   22.0 I/mJ    90.4 s
 825:  6432     7.8 C/MHz    206 mW    8.0 J   31.2 I/mJ    38.9 s
 940:  7331     7.8 C/MHz    227 mW    7.7 J   32.3 I/mJ    34.1 s
1056:  8227     7.8 C/MHz    249 mW    7.6 J   33.0 I/mJ    30.4 s
1171:  9127     7.8 C/MHz    261 mW    7.2 J   34.9 I/mJ    27.4 s
1286: 10020     7.8 C/MHz    289 mW    7.2 J   34.6 I/mJ    25.0 s
1401: 10918     7.8 C/MHz    311 mW    7.1 J   35.1 I/mJ    22.9 s
1497: 11663     7.8 C/MHz    336 mW    7.2 J   34.7 I/mJ    21.4 s
1612: 12546     7.8 C/MHz    375 mW    7.5 J   33.5 I/mJ    19.9 s
1708: 13320     7.8 C/MHz    398 mW    7.5 J   33.5 I/mJ    18.8 s
1804: 14069     7.8 C/MHz    456 mW    8.1 J   30.9 I/mJ    17.8 s
1920: 14909     7.8 C/MHz    507 mW    8.5 J   29.4 I/mJ    16.8 s
2016: 15706     7.8 C/MHz    558 mW    8.9 J   28.1 I/mJ    15.9 s
2131: 16612     7.8 C/MHz    632 mW    9.5 J   26.3 I/mJ    15.1 s
2227: 17349     7.8 C/MHz    698 mW   10.1 J   24.8 I/mJ    14.4 s
2323: 18088     7.8 C/MHz    717 mW    9.9 J   25.2 I/mJ    13.8 s
2419: 18835     7.8 C/MHz    845 mW   11.2 J   22.3 I/mJ    13.3 s

===== CPU 7 =====
Frequencies: 825 940 1056 1171 1286 1401 1497 1612 1708 1804 1920 2016 2131 2227 2323 2419 2534 2649 2745 2841

 825:  3215     3.9 C/MHz    158 mW   12.3 J   20.3 I/mJ    77.8 s
 940:  7330     7.8 C/MHz    269 mW    9.2 J   27.3 I/mJ    34.1 s
1056:  8227     7.8 C/MHz    291 mW    8.8 J   28.2 I/mJ    30.4 s
1171:  9125     7.8 C/MHz    316 mW    8.7 J   28.9 I/mJ    27.4 s
1286: 10024     7.8 C/MHz    338 mW    8.4 J   29.6 I/mJ    25.0 s
1401: 10922     7.8 C/MHz    365 mW    8.4 J   29.9 I/mJ    22.9 s
1497: 11674     7.8 C/MHz    383 mW    8.2 J   30.4 I/mJ    21.4 s
1612: 12564     7.8 C/MHz    406 mW    8.1 J   30.9 I/mJ    19.9 s
1708: 13317     7.8 C/MHz    427 mW    8.0 J   31.2 I/mJ    18.8 s
1804: 14062     7.8 C/MHz    446 mW    7.9 J   31.5 I/mJ    17.8 s
1920: 14966     7.8 C/MHz    498 mW    8.3 J   30.1 I/mJ    16.7 s
2016: 15711     7.8 C/MHz    513 mW    8.2 J   30.6 I/mJ    15.9 s
2131: 16599     7.8 C/MHz    599 mW    9.0 J   27.7 I/mJ    15.1 s
2227: 17353     7.8 C/MHz    622 mW    9.0 J   27.9 I/mJ    14.4 s
2323: 18095     7.8 C/MHz    704 mW    9.7 J   25.7 I/mJ    13.8 s
2419: 18849     7.8 C/MHz    738 mW    9.8 J   25.5 I/mJ    13.3 s
2534: 19761     7.8 C/MHz    824 mW   10.4 J   23.9 I/mJ    12.7 s
2649: 20658     7.8 C/MHz    882 mW   10.7 J   23.4 I/mJ    12.1 s
2745: 21400     7.8 C/MHz   1003 mW   11.7 J   21.3 I/mJ    11.7 s
2841: 22147     7.8 C/MHz   1092 mW   12.3 J   20.3 I/mJ    11.3 s

------------------------------------------------------------------------

Source data for SM8150-AC:

Frequency domains: cpu1 cpu4 cpu7
Offline CPUs: cpu1 cpu2 cpu3 cpu4 cpu5 cpu6 cpu7
Baseline power usage: 1305 mW

===== CPU 1 =====
Frequencies: 300 403 499 576 672 768 844 940 1036 1113 1209 1305 1382 1478 1555 1632 1708 1785

 300:  1114     3.7 C/MHz     80 mW   18.0 J   13.9 I/mJ   224.5 s
 403:  1497     3.7 C/MHz     82 mW   13.8 J   18.1 I/mJ   167.0 s
 499:  1854     3.7 C/MHz     92 mW   12.5 J   20.0 I/mJ   134.9 s
 576:  2139     3.7 C/MHz    101 mW   11.8 J   21.3 I/mJ   116.9 s
 672:  2495     3.7 C/MHz    101 mW   10.1 J   24.7 I/mJ   100.2 s
 768:  2852     3.7 C/MHz    136 mW   11.9 J   21.0 I/mJ    87.7 s
 844:  3137     3.7 C/MHz    111 mW    8.8 J   28.3 I/mJ    79.7 s
 940:  3494     3.7 C/MHz    118 mW    8.5 J   29.5 I/mJ    71.6 s
1036:  3850     3.7 C/MHz    124 mW    8.1 J   31.0 I/mJ    64.9 s
1113:  4135     3.7 C/MHz    126 mW    7.6 J   32.8 I/mJ    60.5 s
1209:  4491     3.7 C/MHz    133 mW    7.4 J   33.7 I/mJ    55.7 s
1305:  4848     3.7 C/MHz    150 mW    7.7 J   32.4 I/mJ    51.6 s
1382:  5133     3.7 C/MHz    149 mW    7.3 J   34.4 I/mJ    48.7 s
1478:  5490     3.7 C/MHz    154 mW    7.0 J   35.7 I/mJ    45.5 s
1555:  5775     3.7 C/MHz    166 mW    7.2 J   34.8 I/mJ    43.3 s
1632:  6060     3.7 C/MHz    170 mW    7.0 J   35.6 I/mJ    41.3 s
1708:  6345     3.7 C/MHz    178 mW    7.0 J   35.7 I/mJ    39.4 s
1785:  6630     3.7 C/MHz    187 mW    7.0 J   35.5 I/mJ    37.7 s

===== CPU 4 =====
Frequencies: 710 825 940 1056 1171 1286 1401 1497 1612 1708 1804 1920 2016 2131 2227 2323 2419

 710:  2767     3.9 C/MHz    139 mW   12.6 J   19.9 I/mJ    90.4 s
 825:  6437     7.8 C/MHz    192 mW    7.4 J   33.6 I/mJ    38.9 s
 940:  7331     7.8 C/MHz    218 mW    7.4 J   33.6 I/mJ    34.1 s
1056:  8231     7.8 C/MHz    245 mW    7.4 J   33.6 I/mJ    30.4 s
1171:  9128     7.8 C/MHz    278 mW    7.6 J   32.8 I/mJ    27.4 s
1286: 10021     7.8 C/MHz    313 mW    7.8 J   32.0 I/mJ    25.0 s
1401: 10926     7.8 C/MHz    339 mW    7.8 J   32.2 I/mJ    22.9 s
1497: 11669     7.8 C/MHz    380 mW    8.1 J   30.7 I/mJ    21.4 s
1612: 12570     7.8 C/MHz    404 mW    8.0 J   31.1 I/mJ    19.9 s
1708: 13320     7.8 C/MHz    443 mW    8.3 J   30.0 I/mJ    18.8 s
1804: 14067     7.8 C/MHz    511 mW    9.1 J   27.5 I/mJ    17.8 s
1920: 14972     7.8 C/MHz    553 mW    9.3 J   27.0 I/mJ    16.7 s
2016: 15684     7.8 C/MHz    595 mW    9.5 J   26.3 I/mJ    16.0 s
2131: 16609     7.8 C/MHz    697 mW   10.5 J   23.8 I/mJ    15.1 s
2227: 17353     7.8 C/MHz    772 mW   11.1 J   22.4 I/mJ    14.4 s
2323: 18100     7.8 C/MHz    862 mW   11.9 J   21.0 I/mJ    13.8 s
2419: 18845     7.8 C/MHz    966 mW   12.8 J   19.5 I/mJ    13.3 s

===== CPU 7 =====
Frequencies: 825 940 1056 1171 1286 1401 1497 1612 1708 1804 1920 2016 2131 2227 2323 2419 2534 2649 2745 2841 2956

 825:  3217     3.9 C/MHz    171 mW   13.3 J   18.8 I/mJ    77.7 s
 940:  7331     7.8 C/MHz    245 mW    8.4 J   29.9 I/mJ    34.1 s
1056:  8214     7.8 C/MHz    269 mW    8.2 J   30.5 I/mJ    30.5 s
1171:  9118     7.8 C/MHz    292 mW    8.0 J   31.2 I/mJ    27.4 s
1286: 10024     7.8 C/MHz    322 mW    8.0 J   31.1 I/mJ    25.0 s
1401: 10921     7.8 C/MHz    351 mW    8.0 J   31.1 I/mJ    22.9 s
1497: 11665     7.8 C/MHz    389 mW    8.3 J   30.0 I/mJ    21.4 s
1612: 12571     7.8 C/MHz    431 mW    8.6 J   29.2 I/mJ    19.9 s
1708: 13316     7.8 C/MHz    464 mW    8.7 J   28.7 I/mJ    18.8 s
1804: 14058     7.8 C/MHz    490 mW    8.7 J   28.6 I/mJ    17.8 s
1920: 14963     7.8 C/MHz    544 mW    9.1 J   27.5 I/mJ    16.7 s
2016: 15711     7.8 C/MHz    576 mW    9.2 J   27.2 I/mJ    15.9 s
2131: 16601     7.8 C/MHz    672 mW   10.1 J   24.7 I/mJ    15.1 s
2227: 17356     7.8 C/MHz    711 mW   10.3 J   24.4 I/mJ    14.4 s
2323: 18108     7.8 C/MHz    741 mW   10.2 J   24.4 I/mJ    13.8 s
2419: 18842     7.8 C/MHz    811 mW   10.8 J   23.2 I/mJ    13.3 s
2534: 19743     7.8 C/MHz    883 mW   11.2 J   22.3 I/mJ    12.7 s
2649: 20644     7.8 C/MHz    979 mW   11.9 J   21.1 I/mJ    12.1 s
2745: 21391     7.8 C/MHz   1042 mW   12.2 J   20.5 I/mJ    11.7 s
2841: 22147     7.8 C/MHz   1079 mW   12.2 J   20.5 I/mJ    11.3 s
2956: 23039     7.8 C/MHz   1285 mW   14.0 J   17.9 I/mJ    10.9 s

------------------------------------------------------------------------

Energy model for SM8150-AA by capacity:

/*
 * Auto-generated EAS energy model for incorporation in SoC device tree.
 * Generated by freqbench postprocessing scripts using freqbench results.
 * More info at https://github.com/kdrag0n/freqbench
 */

/*
 * Auto-generated legacy EAS energy model for incorporation in SoC device tree.
 * Generated by freqbench postprocessing scripts using freqbench results.
 * More info at https://github.com/kdrag0n/freqbench
 */

/ {
	cpus {
		cpu@0 {
			efficiency = <488>;
			capacity-dmips-mhz = <488>;
		};

		cpu@4 {
			efficiency = <1024>;
			capacity-dmips-mhz = <1024>;
		};

		cpu@7 {
			efficiency = <1024>;
			capacity-dmips-mhz = <1024>;
		};
	};

	energy_costs: energy-costs {
		compatible = "sched-energy";

		CPU_COST_0: core-cost0 {
			busy-cost-data = <
				  52   52
				  69   57
				  86   73
				  99   83
				 115   65
				 132   72
				 145   77
				 162   84
				 178   91
				 191   96
				 208  102
				 224  110
				 237  114
				 254  120
				 267  126
				 280  131
				 293  137
				 307  146
			>;

			idle-cost-data = <
				18 14 12
			>;
		};

		CPU_COST_1: core-cost1 {
			busy-cost-data = <
				 128  126
				 297  206
				 339  227
				 380  249
				 422  261
				 463  289
				 505  311
				 539  336
				 580  375
				 616  398
				 650  456
				 689  507
				 726  558
				 768  632
				 802  698
				 836  717
				 871  845
			>;

			idle-cost-data = <
				80 60 40
			>;
		};

		CPU_COST_2: core-cost2 {
			busy-cost-data = <
				 149  158
				 339  269
				 380  291
				 422  316
				 463  338
				 505  365
				 540  383
				 581  406
				 616  427
				 650  446
				 692  498
				 726  513
				 767  599
				 802  622
				 837  704
				 872  738
				 914  824
				 955  882
				 989 1003
				1024 1092
			>;

			idle-cost-data = <
				110 90 70
			>;
		};

		CLUSTER_COST_0: cluster-cost0 {
			busy-cost-data = <
				  52    3
				  69    4
				  86    4
				  99    4
				 115    5
				 132    5
				 145    6
				 162    7
				 178    8
				 191    9
				 208   10
				 224   11
				 237   12
				 254   13
				 267   14
				 280   15
				 293   16
				 307   17
			>;
			idle-cost-data = <
				3 2 1
			>;
		};

		CLUSTER_COST_1: cluster-cost1 {
			busy-cost-data = <
				 128   25
				 297   26
				 339   27
				 380   28
				 422   29
				 463   30
				 505   32
				 539   34
				 580   37
				 616   40
				 650   45
				 689   50
				 726   57
				 768   64
				 802   74
				 836   90
				 871  106
			>;
			idle-cost-data = <
				3 2 1
			>;
		};

		CLUSTER_COST_2: cluster-cost2 {
			busy-cost-data = <
				 149   30
				 339   33
				 380   36
				 422   39
				 463   42
				 505   46
				 540   49
				 581   55
				 616   67
				 650   77
				 692   87
				 726  100
				 767  110
				 802  120
				 837  128
				 872  135
				 914  140
				 955  147
				 989  160
				1024  180
			>;
			idle-cost-data = <
				3 2 1
			>;
		};
	};
};

------------------------------------------------------------------------

Energy model for SM8150-AA by frequency:

/*
 * Auto-generated legacy EAS energy model for incorporation in SoC device tree.
 * Generated by freqbench postprocessing scripts using freqbench results.
 * More info at https://github.com/kdrag0n/freqbench
 */

/ {
	cpus {
		cpu@0 {
			efficiency = <488>;
			capacity-dmips-mhz = <488>;
		};

		cpu@4 {
			efficiency = <1024>;
			capacity-dmips-mhz = <1024>;
		};

		cpu@7 {
			efficiency = <1024>;
			capacity-dmips-mhz = <1024>;
		};
	};

	energy_costs: energy-costs {
		compatible = "sched-energy";

		CPU_COST_0: core-cost0 {
			busy-cost-data = <
				 300000   52
				 403200   57
				 499200   73
				 576000   83
				 672000   65
				 768000   72
				 844800   77
				 940800   84
				1036800   91
				1113600   96
				1209600  102
				1305600  110
				1382400  114
				1478400  120
				1555200  126
				1632000  131
				1708800  137
				1785600  146
			>;

			idle-cost-data = <
				18 14 12
			>;
		};

		CPU_COST_1: core-cost1 {
			busy-cost-data = <
				 710400  126
				 825600  206
				 940800  227
				1056000  249
				1171200  261
				1286400  289
				1401600  311
				1497600  336
				1612800  375
				1708800  398
				1804800  456
				1920000  507
				2016000  558
				2131200  632
				2227200  698
				2323200  717
				2419200  845
			>;

			idle-cost-data = <
				80 60 40
			>;
		};

		CPU_COST_2: core-cost2 {
			busy-cost-data = <
				 825600  158
				 940800  269
				1056000  291
				1171200  316
				1286400  338
				1401600  365
				1497600  383
				1612800  406
				1708800  427
				1804800  446
				1920000  498
				2016000  513
				2131200  599
				2227200  622
				2323200  704
				2419200  738
				2534400  824
				2649600  882
				2745600 1003
				2841600 1092
			>;

			idle-cost-data = <
				110 90 70
			>;
		};

		CLUSTER_COST_0: cluster-cost0 {
			busy-cost-data = <
				300000    3
				403200    4
				499200    4
				576000    4
				672000    5
				768000    5
				844800    6
				940800    7
				1036800    8
				1113600    9
				1209600   10
				1305600   11
				1382400   12
				1478400   13
				1555200   14
				1632000   15
				1708800   16
				1785600   17
			>;
			idle-cost-data = <
				3 2 1
			>;
		};

		CLUSTER_COST_1: cluster-cost1 {
			busy-cost-data = <
				710400   25
				825600   26
				940800   27
				1056000   28
				1171200   29
				1286400   30
				1401600   32
				1497600   34
				1612800   37
				1708800   40
				1804800   45
				1920000   50
				2016000   57
				2131200   64
				2227200   74
				2323200   90
				2419200  106
			>;
			idle-cost-data = <
				3 2 1
			>;
		};

		CLUSTER_COST_2: cluster-cost2 {
			busy-cost-data = <
				825600   30
				940800   33
				1056000   36
				1171200   39
				1286400   42
				1401600   46
				1497600   49
				1612800   55
				1708800   67
				1804800   77
				1920000   87
				2016000  100
				2131200  110
				2227200  120
				2323200  128
				2419200  135
				2534400  140
				2649600  147
				2745600  160
				2841600  180
			>;
			idle-cost-data = <
				3 2 1
			>;
		};
	};
};

------------------------------------------------------------------------

Energy model for SM8150-AC by capacity:

/*
 * Auto-generated legacy EAS energy model for incorporation in SoC device tree.
 * Generated by freqbench postprocessing scripts using freqbench results.
 * More info at https://github.com/kdrag0n/freqbench
 */

/ {
	cpus {
		cpu@0 {
			efficiency = <488>;
			capacity-dmips-mhz = <488>;
		};

		cpu@4 {
			efficiency = <1024>;
			capacity-dmips-mhz = <1024>;
		};

		cpu@7 {
			efficiency = <1024>;
			capacity-dmips-mhz = <1024>;
		};
	};

	energy_costs: energy-costs {
		compatible = "sched-energy";

		CPU_COST_0: core-cost0 {
			busy-cost-data = <
				  50   80
				  67   82
				  82   92
				  95  101
				 111  101
				 127  136
				 139  111
				 155  118
				 171  124
				 184  126
				 200  133
				 215  150
				 228  149
				 244  154
				 257  166
				 269  170
				 282  178
				 295  187
			>;

			idle-cost-data = <
				18 14 12
			>;
		};

		CPU_COST_1: core-cost1 {
			busy-cost-data = <
				 123  139
				 286  192
				 326  218
				 366  245
				 406  278
				 445  313
				 486  339
				 519  380
				 559  404
				 592  443
				 625  511
				 665  553
				 697  595
				 738  697
				 771  772
				 804  862
				 838  966
			>;

			idle-cost-data = <
				80 60 40
			>;
		};

		CPU_COST_2: core-cost2 {
			busy-cost-data = <
				 143  171
				 326  245
				 365  269
				 405  292
				 446  322
				 485  351
				 518  389
				 559  431
				 592  464
				 625  490
				 665  544
				 698  576
				 738  672
				 771  711
				 805  741
				 837  811
				 877  883
				 918  979
				 951 1042
				 984 1079
				1024 1285
			>;

			idle-cost-data = <
				110 90 70
			>;
		};

		CLUSTER_COST_0: cluster-cost0 {
			busy-cost-data = <
				  50    3
				  67    4
				  82    4
				  95    4
				 111    5
				 127    5
				 139    6
				 155    7
				 171    8
				 184    9
				 200   10
				 215   11
				 228   12
				 244   13
				 257   14
				 269   15
				 282   16
				 295   17
			>;
			idle-cost-data = <
				3 2 1
			>;
		};

		CLUSTER_COST_1: cluster-cost1 {
			busy-cost-data = <
				 123   25
				 286   26
				 326   27
				 366   28
				 406   29
				 445   30
				 486   32
				 519   34
				 559   37
				 592   40
				 625   45
				 665   50
				 697   57
				 738   64
				 771   74
				 804   90
				 838  106
			>;
			idle-cost-data = <
				3 2 1
			>;
		};

		CLUSTER_COST_2: cluster-cost2 {
			busy-cost-data = <
				 143   30
				 326   33
				 365   36
				 405   39
				 446   42
				 485   46
				 518   49
				 559   55
				 592   67
				 625   77
				 665   87
				 698  100
				 738  110
				 771  120
				 805  128
				 837  135
				 877  140
				 918  147
				 951  160
				 984  180
				1024  197
			>;
			idle-cost-data = <
				3 2 1
			>;
		};
	};
};

------------------------------------------------------------------------

Energy model for SM8150-AC by frequency:

/*
 * Auto-generated legacy EAS energy model for incorporation in SoC device tree.
 * Generated by freqbench postprocessing scripts using freqbench results.
 * More info at https://github.com/kdrag0n/freqbench
 */

/ {
	cpus {
		cpu@0 {
			efficiency = <488>;
			capacity-dmips-mhz = <488>;
		};

		cpu@4 {
			efficiency = <1024>;
			capacity-dmips-mhz = <1024>;
		};

		cpu@7 {
			efficiency = <1024>;
			capacity-dmips-mhz = <1024>;
		};
	};

	energy_costs: energy-costs {
		compatible = "sched-energy";

		CPU_COST_0: core-cost0 {
			busy-cost-data = <
				 300000   80
				 403200   82
				 499200   92
				 576000  101
				 672000  101
				 768000  136
				 844800  111
				 940800  118
				1036800  124
				1113600  126
				1209600  133
				1305600  150
				1382400  149
				1478400  154
				1555200  166
				1632000  170
				1708800  178
				1785600  187
			>;

			idle-cost-data = <
				18 14 12
			>;
		};

		CPU_COST_1: core-cost1 {
			busy-cost-data = <
				 710400  139
				 825600  192
				 940800  218
				1056000  245
				1171200  278
				1286400  313
				1401600  339
				1497600  380
				1612800  404
				1708800  443
				1804800  511
				1920000  553
				2016000  595
				2131200  697
				2227200  772
				2323200  862
				2419200  966
			>;

			idle-cost-data = <
				80 60 40
			>;
		};

		CPU_COST_2: core-cost2 {
			busy-cost-data = <
				 825600  171
				 940800  245
				1056000  269
				1171200  292
				1286400  322
				1401600  351
				1497600  389
				1612800  431
				1708800  464
				1804800  490
				1920000  544
				2016000  576
				2131200  672
				2227200  711
				2323200  741
				2419200  811
				2534400  883
				2649600  979
				2745600 1042
				2841600 1079
				2956800 1285
			>;

			idle-cost-data = <
				110 90 70
			>;
		};

		CLUSTER_COST_0: cluster-cost0 {
			busy-cost-data = <
				300000    3
				403200    4
				499200    4
				576000    4
				672000    5
				768000    5
				844800    6
				940800    7
				1036800    8
				1113600    9
				1209600   10
				1305600   11
				1382400   12
				1478400   13
				1555200   14
				1632000   15
				1708800   16
				1785600   17
			>;
			idle-cost-data = <
				3 2 1
			>;
		};

		CLUSTER_COST_1: cluster-cost1 {
			busy-cost-data = <
				710400   25
				825600   26
				940800   27
				1056000   28
				1171200   29
				1286400   30
				1401600   32
				1497600   34
				1612800   37
				1708800   40
				1804800   45
				1920000   50
				2016000   57
				2131200   64
				2227200   74
				2323200   90
				2419200  106
			>;
			idle-cost-data = <
				3 2 1
			>;
		};

		CLUSTER_COST_2: cluster-cost2 {
			busy-cost-data = <
				825600   30
				940800   33
				1056000   36
				1171200   39
				1286400   42
				1401600   46
				1497600   49
				1612800   55
				1708800   67
				1804800   77
				1920000   87
				2016000  100
				2131200  110
				2227200  120
				2323200  128
				2419200  135
				2534400  140
				2649600  147
				2745600  160
				2841600  180
				2956800  197
			>;
			idle-cost-data = <
				3 2 1
			>;
		};
	};
};

------------------------------------------------------------------------

[1] https://www.eembc.org/ulpmark/#cm
[2] https://www.eembc.org/coremark/
[3] https://github.com/kdrag0n/freqbench
[4] https://github.com/kdrag0n/freqbench/tree/master/results

Signed-off-by: Danny Lin <danny@kdrag0n.dev>
  • Loading branch information
kdrag0n authored and kondors1995 committed Dec 10, 2020
1 parent d90cb1e commit dc0f00e
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 154 deletions.
180 changes: 30 additions & 150 deletions arch/arm64/boot/dts/qcom/sm8150-v2.dtsi
Expand Up @@ -31,64 +31,24 @@

&clock_cpucc {
qcom,cpufreq-table-0 =
< 300000>,
< 403200>,
< 499200>,
< 576000>,
< 672000>,
< 768000>,
< 844800>,
< 940800>,
<1036800>,
<1113600>,
<1209600>,
<1305600>,
<1382400>,
<1478400>,
<1555200>,
<1632000>,
<1708800>,
<1785600>;

qcom,cpufreq-table-4 =
< 710400>,
< 825600>,
< 940800>,
<1056000>,
<1171200>,
<1286400>,
<1401600>,
<1497600>,
<1612800>,
<1708800>,
<1804800>,
<1920000>,
<2016000>,
<2131200>,
<2227200>,
<2323200>,
<2419200>;

qcom,cpufreq-table-7 =
< 825600>,
< 940800>,
<1056000>,
<1171200>,
<1286400>,
<1401600>,
<1497600>,
<1612800>,
<1708800>,
<1804800>,
<1920000>,
<2016000>,
<2131200>,
<2227200>,
<2323200>,
<2419200>,
<2534400>,
<2649600>,
<2745600>,
<2841600>,
<2956800>;
};
Expand Down Expand Up @@ -487,24 +447,8 @@
&energy_costs {
CPU_COST_0: core-cost0 {
busy-cost-data = <
46 24
63 25
78 27
90 29
105 33
120 37
132 42
147 47
162 54
174 59
189 66
204 73
217 79
232 88
244 96
256 105
268 115
280 128
293 137
306 146
>;
idle-cost-data = <
18 14 12
Expand All @@ -513,23 +457,13 @@

CPU_COST_1: core-cost1 {
busy-cost-data = <
252 165
297 195
338 228
380 264
422 301
463 339
505 378
539 411
581 453
615 491
650 534
692 594
726 654
768 740
802 825
837 920
872 1022
505 311
616 398
650 456
689 507
726 558
836 717
871 845
>;
idle-cost-data = <
80 60 40
Expand All @@ -538,26 +472,12 @@

CPU_COST_2: core-cost2 {
busy-cost-data = <
297 227
338 262
380 302
421 348
463 398
504 451
539 498
581 556
615 606
650 655
691 716
726 766
767 826
802 878
837 933
871 992
913 1075
954 1179
989 1288
1024 1427
650 446
726 513
802 622
837 704
914 824
1024 1092
>;
idle-cost-data = <
110 90 70
Expand All @@ -566,24 +486,8 @@

CLUSTER_COST_0: cluster-cost0 {
busy-cost-data = <
46 3
63 4
78 4
90 4
105 5
120 5
132 6
147 7
162 8
174 9
189 10
204 11
217 12
232 13
244 14
256 15
268 16
280 17
293 16
306 17
>;
idle-cost-data = <
3 2 1
Expand All @@ -592,23 +496,13 @@

CLUSTER_COST_1: cluster-cost1 {
busy-cost-data = <
252 25
297 26
338 27
380 28
422 29
463 30
505 32
539 34
581 37
615 40
650 45
692 50
726 57
768 64
802 74
837 90
872 106
505 32
616 40
650 45
689 50
726 57
836 90
871 106
>;
idle-cost-data = <
3 2 1
Expand All @@ -617,26 +511,12 @@

CLUSTER_COST_2: cluster-cost2 {
busy-cost-data = <
297 30
338 33
380 36
421 39
463 42
504 46
539 49
581 55
615 67
650 77
691 87
726 100
767 110
802 120
837 128
871 135
913 140
954 147
989 160
1024 180
650 77
726 100
802 120
837 128
914 140
1024 180
>;
idle-cost-data = <
3 2 1
Expand Down
9 changes: 5 additions & 4 deletions arch/arm64/boot/dts/qcom/sm8150.dtsi
Expand Up @@ -76,7 +76,7 @@
compatible = "arm,armv8";
reg = <0x0 0x0>;
enable-method = "psci";
capacity-dmips-mhz = <446>;
capacity-dmips-mhz = <488>;
next-level-cache = <&L2_0>;
sched-energy-costs = <&CPU_COST_0 &CLUSTER_COST_0>;
qcom,lmh-dcvs = <&lmh_dcvs0>;
Expand Down Expand Up @@ -112,7 +112,7 @@
compatible = "arm,armv8";
reg = <0x0 0x100>;
enable-method = "psci";
capacity-dmips-mhz = <446>;
capacity-dmips-mhz = <488>;
next-level-cache = <&L2_1>;
sched-energy-costs = <&CPU_COST_0 &CLUSTER_COST_0>;
qcom,lmh-dcvs = <&lmh_dcvs0>;
Expand Down Expand Up @@ -143,7 +143,7 @@
compatible = "arm,armv8";
reg = <0x0 0x200>;
enable-method = "psci";
capacity-dmips-mhz = <446>;
capacity-dmips-mhz = <488>;
next-level-cache = <&L2_2>;
sched-energy-costs = <&CPU_COST_0 &CLUSTER_COST_0>;
qcom,lmh-dcvs = <&lmh_dcvs0>;
Expand Down Expand Up @@ -174,7 +174,8 @@
compatible = "arm,armv8";
reg = <0x0 0x300>;
enable-method = "psci";
capacity-dmips-mhz = <446>;
capacity-dmips-mhz = <488>;
cache-size = <0x8000>;
next-level-cache = <&L2_3>;
sched-energy-costs = <&CPU_COST_0 &CLUSTER_COST_0>;
qcom,lmh-dcvs = <&lmh_dcvs0>;
Expand Down

0 comments on commit dc0f00e

Please sign in to comment.