Path: blob/master/tools/testing/selftests/cpufreq/governor.sh
26302 views
#!/bin/bash1# SPDX-License-Identifier: GPL-2.02#3# Test governors45# protect against multiple inclusion6if [ $FILE_GOVERNOR ]; then7return 08else9FILE_GOVERNOR=DONE10fi1112source cpu.sh13source cpufreq.sh1415CUR_GOV=16CUR_FREQ=1718# Find governor's directory path19# $1: policy, $2: governor20find_gov_directory()21{22if [ -d $CPUFREQROOT/$2 ]; then23printf "$CPUFREQROOT/$2\n"24elif [ -d $CPUFREQROOT/$1/$2 ]; then25printf "$CPUFREQROOT/$1/$2\n"26else27printf "INVALID\n"28fi29}3031# $1: policy32find_current_governor()33{34cat $CPUFREQROOT/$1/scaling_governor35}3637# $1: policy38backup_governor()39{40CUR_GOV=$(find_current_governor $1)4142printf "Governor backup done for $1: $CUR_GOV\n"4344if [ $CUR_GOV == "userspace" ]; then45CUR_FREQ=$(find_current_freq $1)46printf "Governor frequency backup done for $1: $CUR_FREQ\n"47fi4849printf "\n"50}5152# $1: policy53restore_governor()54{55__switch_governor $1 $CUR_GOV5657printf "Governor restored for $1 to $CUR_GOV\n"5859if [ $CUR_GOV == "userspace" ]; then60set_cpu_frequency $1 $CUR_FREQ61printf "Governor frequency restored for $1: $CUR_FREQ\n"62fi6364printf "\n"65}6667# param:68# $1: policy, $2: governor69__switch_governor()70{71echo $2 > $CPUFREQROOT/$1/scaling_governor72}7374# param:75# $1: cpu, $2: governor76__switch_governor_for_cpu()77{78echo $2 > $CPUROOT/$1/cpufreq/scaling_governor79}8081# SWITCH GOVERNORS8283# $1: cpu, $2: governor84switch_governor()85{86local filepath=$CPUFREQROOT/$1/scaling_available_governors8788# check if governor is available89local found=$(cat $filepath | grep $2 | wc -l)90if [ $found = 0 ]; then91echo 1;92return93fi9495__switch_governor $1 $296echo 0;97}9899# $1: policy, $2: governor100switch_show_governor()101{102cur_gov=find_current_governor103if [ $cur_gov == "userspace" ]; then104cur_freq=find_current_freq105fi106107# switch governor108__switch_governor $1 $2109110printf "\nSwitched governor for $1 to $2\n\n"111112if [ $2 == "userspace" -o $2 == "powersave" -o $2 == "performance" ]; then113printf "No files to read for $2 governor\n\n"114return115fi116117# show governor files118local govpath=$(find_gov_directory $1 $2)119read_cpufreq_files_in_dir $govpath120}121122# $1: function to be called, $2: policy123call_for_each_governor()124{125local filepath=$CPUFREQROOT/$2/scaling_available_governors126127# Exit if cpu isn't managed by cpufreq core128if [ ! -f $filepath ]; then129return;130fi131132backup_governor $2133134local governors=$(cat $filepath)135printf "Available governors for $2: $governors\n"136137for governor in $governors; do138$1 $2 $governor139done140141restore_governor $2142}143144# $1: loop count145shuffle_governors_for_all_cpus()146{147printf "** Test: Running ${FUNCNAME[0]} for $1 loops **\n\n"148149for i in `seq 1 $1`; do150for_each_policy call_for_each_governor switch_show_governor151done152printf "%s\n\n" "------------------------------------------------"153}154155156