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