You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
92 lines
2.3 KiB
92 lines
2.3 KiB
#!/bin/bash
|
|
|
|
# defines
|
|
FREQ=0 #percent
|
|
SERVICES=(perfd thermal-engine thermald mpdecision)
|
|
DIR="/sys/class/kgsl/kgsl-3d0"
|
|
|
|
|
|
###################### SETUP ######################
|
|
|
|
# helper functions
|
|
fileexists() {
|
|
[ `adb shell "[ -f $1 ] && echo found"` ]
|
|
}
|
|
getprop() {
|
|
if fileexists $1; then
|
|
echo `adb shell cat $1 | tr -d '\r'`
|
|
else
|
|
echo "FILE $1 NOT FOUND"
|
|
fi
|
|
}
|
|
setprop() {
|
|
if fileexists $1; then
|
|
adb shell "echo -n $2 > $1"
|
|
else
|
|
echo "FILE $1 NOT FOUND"
|
|
fi
|
|
}
|
|
|
|
# use passed in percent frequency
|
|
if [[ $# -eq 1 ]]; then
|
|
FREQ=$1
|
|
fi
|
|
|
|
# setup
|
|
if [[ "`adb shell id | tr -d '\r' | awk -F'[()]' '{print $2}'`" != "root" ]]; then
|
|
adb root
|
|
fi
|
|
adb wait-for-device
|
|
|
|
# device name
|
|
echo Device: `adb shell getprop ro.product.model`
|
|
|
|
# get available gpu frequencies in sorted order
|
|
if fileexists $DIR/devfreq/available_frequencies; then
|
|
frequencies=(`getprop $DIR/devfreq/available_frequencies`)
|
|
elif fileexists $DIR/gpu_available_frequencies; then
|
|
frequencies=(`getprop $DIR/gpu_available_frequencies`)
|
|
elif fileexists /d/clock/gbus/possible_rates; then
|
|
frequencies=(`getprop /d/clock/gbus/possible_rates`)
|
|
else
|
|
echo "Unable to find available GPU frequencies"
|
|
echo
|
|
exit
|
|
fi
|
|
frequencies=( `printf "%s\n" "${frequencies[@]}" | sort -n` )
|
|
if [ ${frequencies[0]} == "(kHz)" ]; then
|
|
frequencies=(`printf "%s000\n" "${frequencies[@]:1}"`)
|
|
fi
|
|
minFreq=${frequencies[0]}
|
|
maxFreq=${frequencies[-1]}
|
|
echo Frequencies: ${frequencies[@]}
|
|
|
|
# find closest frequency
|
|
targetFreq=$(( FREQ * ( maxFreq - minFreq ) / 100 + minFreq ))
|
|
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}'`
|
|
echo Selected: $freq
|
|
|
|
echo
|
|
|
|
# freeze system
|
|
for service in ${SERVICES[@]}; do
|
|
adb shell stop $service
|
|
done
|
|
|
|
# set GPU properties if possible
|
|
setprop $DIR/bus_split 0
|
|
setprop $DIR/devfreq/governor performance
|
|
setprop $DIR/force_bus_on 1
|
|
setprop $DIR/force_rail_on 1
|
|
setprop $DIR/force_clk_on 1
|
|
setprop $DIR/idle_timer 1000000
|
|
setprop $DIR/max_gpuclk $freq
|
|
setprop $DIR/gpuclk $freq
|
|
setprop /d/clock/override.gbus/state 1
|
|
setprop /d/clock/override.gbus/rate $freq
|
|
|
|
# final message
|
|
echo "GPU Frequency set to $freq"
|
|
|
|
|