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