xref: /aosp_15_r20/frameworks/rs/perf-test-scripts/set-gpu-freq (revision e1eccf28f96817838ad6867f7f39d2351ec11f56)
1*e1eccf28SAndroid Build Coastguard Worker#!/bin/bash
2*e1eccf28SAndroid Build Coastguard Worker
3*e1eccf28SAndroid Build Coastguard Worker# defines
4*e1eccf28SAndroid Build Coastguard WorkerFREQ=0 #percent
5*e1eccf28SAndroid Build Coastguard WorkerSERVICES=(perfd thermal-engine thermald mpdecision)
6*e1eccf28SAndroid Build Coastguard WorkerDIR="/sys/class/kgsl/kgsl-3d0"
7*e1eccf28SAndroid Build Coastguard Worker
8*e1eccf28SAndroid Build Coastguard Worker
9*e1eccf28SAndroid Build Coastguard Worker###################### SETUP ######################
10*e1eccf28SAndroid Build Coastguard Worker
11*e1eccf28SAndroid Build Coastguard Worker# helper functions
12*e1eccf28SAndroid Build Coastguard Workerfileexists() {
13*e1eccf28SAndroid Build Coastguard Worker  [ `adb shell "[ -f $1 ] && echo found"` ]
14*e1eccf28SAndroid Build Coastguard Worker}
15*e1eccf28SAndroid Build Coastguard Workergetprop() {
16*e1eccf28SAndroid Build Coastguard Worker  if fileexists $1; then
17*e1eccf28SAndroid Build Coastguard Worker    echo `adb shell cat $1 | tr -d '\r'`
18*e1eccf28SAndroid Build Coastguard Worker  else
19*e1eccf28SAndroid Build Coastguard Worker    echo "FILE $1 NOT FOUND"
20*e1eccf28SAndroid Build Coastguard Worker  fi
21*e1eccf28SAndroid Build Coastguard Worker}
22*e1eccf28SAndroid Build Coastguard Workersetprop() {
23*e1eccf28SAndroid Build Coastguard Worker  if fileexists $1; then
24*e1eccf28SAndroid Build Coastguard Worker    adb shell "echo -n $2 > $1"
25*e1eccf28SAndroid Build Coastguard Worker  else
26*e1eccf28SAndroid Build Coastguard Worker    echo "FILE $1 NOT FOUND"
27*e1eccf28SAndroid Build Coastguard Worker  fi
28*e1eccf28SAndroid Build Coastguard Worker}
29*e1eccf28SAndroid Build Coastguard Worker
30*e1eccf28SAndroid Build Coastguard Worker# use passed in percent frequency
31*e1eccf28SAndroid Build Coastguard Workerif [[ $# -eq 1 ]]; then
32*e1eccf28SAndroid Build Coastguard Worker  FREQ=$1
33*e1eccf28SAndroid Build Coastguard Workerfi
34*e1eccf28SAndroid Build Coastguard Worker
35*e1eccf28SAndroid Build Coastguard Worker# setup
36*e1eccf28SAndroid Build Coastguard Workerif [[ "`adb shell id | tr -d '\r' | awk -F'[()]' '{print $2}'`" != "root" ]]; then
37*e1eccf28SAndroid Build Coastguard Worker  adb root
38*e1eccf28SAndroid Build Coastguard Workerfi
39*e1eccf28SAndroid Build Coastguard Workeradb wait-for-device
40*e1eccf28SAndroid Build Coastguard Worker
41*e1eccf28SAndroid Build Coastguard Worker# device name
42*e1eccf28SAndroid Build Coastguard Workerecho Device: `adb shell getprop ro.product.model`
43*e1eccf28SAndroid Build Coastguard Worker
44*e1eccf28SAndroid Build Coastguard Worker# get available gpu frequencies in sorted order
45*e1eccf28SAndroid Build Coastguard Workerif fileexists $DIR/devfreq/available_frequencies; then
46*e1eccf28SAndroid Build Coastguard Worker  frequencies=(`getprop $DIR/devfreq/available_frequencies`)
47*e1eccf28SAndroid Build Coastguard Workerelif fileexists $DIR/gpu_available_frequencies; then
48*e1eccf28SAndroid Build Coastguard Worker  frequencies=(`getprop $DIR/gpu_available_frequencies`)
49*e1eccf28SAndroid Build Coastguard Workerelif fileexists /d/clock/gbus/possible_rates; then
50*e1eccf28SAndroid Build Coastguard Worker  frequencies=(`getprop /d/clock/gbus/possible_rates`)
51*e1eccf28SAndroid Build Coastguard Workerelse
52*e1eccf28SAndroid Build Coastguard Worker  echo "Unable to find available GPU frequencies"
53*e1eccf28SAndroid Build Coastguard Worker  echo
54*e1eccf28SAndroid Build Coastguard Worker  exit
55*e1eccf28SAndroid Build Coastguard Workerfi
56*e1eccf28SAndroid Build Coastguard Workerfrequencies=( `printf "%s\n" "${frequencies[@]}" | sort -n` )
57*e1eccf28SAndroid Build Coastguard Workerif [ ${frequencies[0]} == "(kHz)" ]; then
58*e1eccf28SAndroid Build Coastguard Worker  frequencies=(`printf "%s000\n" "${frequencies[@]:1}"`)
59*e1eccf28SAndroid Build Coastguard Workerfi
60*e1eccf28SAndroid Build Coastguard WorkerminFreq=${frequencies[0]}
61*e1eccf28SAndroid Build Coastguard WorkermaxFreq=${frequencies[-1]}
62*e1eccf28SAndroid Build Coastguard Workerecho Frequencies: ${frequencies[@]}
63*e1eccf28SAndroid Build Coastguard Worker
64*e1eccf28SAndroid Build Coastguard Worker# find closest frequency
65*e1eccf28SAndroid Build Coastguard WorkertargetFreq=$(( FREQ * ( maxFreq - minFreq ) / 100 + minFreq ))
66*e1eccf28SAndroid Build Coastguard Workerfreq=`printf "%d\n" "${frequencies[@]}" | awk -v closest=${frequencies[0]} -v target=$targetFreq 'BEGIN{diff=$0-target;if(diff<0)diff=-diff;lowest=diff};{diff=$0-target;if(diff<0)diff=-diff;if(diff<lowest){lowest=diff;closest=$0}};END{print closest}'`
67*e1eccf28SAndroid Build Coastguard Workerecho Selected: $freq
68*e1eccf28SAndroid Build Coastguard Worker
69*e1eccf28SAndroid Build Coastguard Workerecho
70*e1eccf28SAndroid Build Coastguard Worker
71*e1eccf28SAndroid Build Coastguard Worker# freeze system
72*e1eccf28SAndroid Build Coastguard Workerfor service in ${SERVICES[@]}; do
73*e1eccf28SAndroid Build Coastguard Worker  adb shell stop $service
74*e1eccf28SAndroid Build Coastguard Workerdone
75*e1eccf28SAndroid Build Coastguard Worker
76*e1eccf28SAndroid Build Coastguard Worker# set GPU properties if possible
77*e1eccf28SAndroid Build Coastguard Workersetprop $DIR/bus_split 0
78*e1eccf28SAndroid Build Coastguard Workersetprop $DIR/devfreq/governor performance
79*e1eccf28SAndroid Build Coastguard Workersetprop $DIR/force_bus_on 1
80*e1eccf28SAndroid Build Coastguard Workersetprop $DIR/force_rail_on 1
81*e1eccf28SAndroid Build Coastguard Workersetprop $DIR/force_clk_on 1
82*e1eccf28SAndroid Build Coastguard Workersetprop $DIR/idle_timer 1000000
83*e1eccf28SAndroid Build Coastguard Workersetprop $DIR/max_gpuclk $freq
84*e1eccf28SAndroid Build Coastguard Workersetprop $DIR/gpuclk $freq
85*e1eccf28SAndroid Build Coastguard Workersetprop /d/clock/override.gbus/state 1
86*e1eccf28SAndroid Build Coastguard Workersetprop /d/clock/override.gbus/rate $freq
87*e1eccf28SAndroid Build Coastguard Worker
88*e1eccf28SAndroid Build Coastguard Worker# final message
89*e1eccf28SAndroid Build Coastguard Workerecho "GPU Frequency set to $freq"
90*e1eccf28SAndroid Build Coastguard Worker
91*e1eccf28SAndroid Build Coastguard Worker
92