1*4882a593Smuzhiyun#!/bin/bash 2*4882a593Smuzhiyun# SPDX-License-Identifier: GPL-2.0 3*4882a593Smuzhiyun# 4*4882a593Smuzhiyun# Test governors 5*4882a593Smuzhiyun 6*4882a593Smuzhiyun# protect against multiple inclusion 7*4882a593Smuzhiyunif [ $FILE_GOVERNOR ]; then 8*4882a593Smuzhiyun return 0 9*4882a593Smuzhiyunelse 10*4882a593Smuzhiyun FILE_GOVERNOR=DONE 11*4882a593Smuzhiyunfi 12*4882a593Smuzhiyun 13*4882a593Smuzhiyunsource cpu.sh 14*4882a593Smuzhiyunsource cpufreq.sh 15*4882a593Smuzhiyun 16*4882a593SmuzhiyunCUR_GOV= 17*4882a593SmuzhiyunCUR_FREQ= 18*4882a593Smuzhiyun 19*4882a593Smuzhiyun# Find governor's directory path 20*4882a593Smuzhiyun# $1: policy, $2: governor 21*4882a593Smuzhiyunfind_gov_directory() 22*4882a593Smuzhiyun{ 23*4882a593Smuzhiyun if [ -d $CPUFREQROOT/$2 ]; then 24*4882a593Smuzhiyun printf "$CPUFREQROOT/$2\n" 25*4882a593Smuzhiyun elif [ -d $CPUFREQROOT/$1/$2 ]; then 26*4882a593Smuzhiyun printf "$CPUFREQROOT/$1/$2\n" 27*4882a593Smuzhiyun else 28*4882a593Smuzhiyun printf "INVALID\n" 29*4882a593Smuzhiyun fi 30*4882a593Smuzhiyun} 31*4882a593Smuzhiyun 32*4882a593Smuzhiyun# $1: policy 33*4882a593Smuzhiyunfind_current_governor() 34*4882a593Smuzhiyun{ 35*4882a593Smuzhiyun cat $CPUFREQROOT/$1/scaling_governor 36*4882a593Smuzhiyun} 37*4882a593Smuzhiyun 38*4882a593Smuzhiyun# $1: policy 39*4882a593Smuzhiyunbackup_governor() 40*4882a593Smuzhiyun{ 41*4882a593Smuzhiyun CUR_GOV=$(find_current_governor $1) 42*4882a593Smuzhiyun 43*4882a593Smuzhiyun printf "Governor backup done for $1: $CUR_GOV\n" 44*4882a593Smuzhiyun 45*4882a593Smuzhiyun if [ $CUR_GOV == "userspace" ]; then 46*4882a593Smuzhiyun CUR_FREQ=$(find_current_freq $1) 47*4882a593Smuzhiyun printf "Governor frequency backup done for $1: $CUR_FREQ\n" 48*4882a593Smuzhiyun fi 49*4882a593Smuzhiyun 50*4882a593Smuzhiyun printf "\n" 51*4882a593Smuzhiyun} 52*4882a593Smuzhiyun 53*4882a593Smuzhiyun# $1: policy 54*4882a593Smuzhiyunrestore_governor() 55*4882a593Smuzhiyun{ 56*4882a593Smuzhiyun __switch_governor $1 $CUR_GOV 57*4882a593Smuzhiyun 58*4882a593Smuzhiyun printf "Governor restored for $1 to $CUR_GOV\n" 59*4882a593Smuzhiyun 60*4882a593Smuzhiyun if [ $CUR_GOV == "userspace" ]; then 61*4882a593Smuzhiyun set_cpu_frequency $1 $CUR_FREQ 62*4882a593Smuzhiyun printf "Governor frequency restored for $1: $CUR_FREQ\n" 63*4882a593Smuzhiyun fi 64*4882a593Smuzhiyun 65*4882a593Smuzhiyun printf "\n" 66*4882a593Smuzhiyun} 67*4882a593Smuzhiyun 68*4882a593Smuzhiyun# param: 69*4882a593Smuzhiyun# $1: policy, $2: governor 70*4882a593Smuzhiyun__switch_governor() 71*4882a593Smuzhiyun{ 72*4882a593Smuzhiyun echo $2 > $CPUFREQROOT/$1/scaling_governor 73*4882a593Smuzhiyun} 74*4882a593Smuzhiyun 75*4882a593Smuzhiyun# param: 76*4882a593Smuzhiyun# $1: cpu, $2: governor 77*4882a593Smuzhiyun__switch_governor_for_cpu() 78*4882a593Smuzhiyun{ 79*4882a593Smuzhiyun echo $2 > $CPUROOT/$1/cpufreq/scaling_governor 80*4882a593Smuzhiyun} 81*4882a593Smuzhiyun 82*4882a593Smuzhiyun# SWITCH GOVERNORS 83*4882a593Smuzhiyun 84*4882a593Smuzhiyun# $1: cpu, $2: governor 85*4882a593Smuzhiyunswitch_governor() 86*4882a593Smuzhiyun{ 87*4882a593Smuzhiyun local filepath=$CPUFREQROOT/$1/scaling_available_governors 88*4882a593Smuzhiyun 89*4882a593Smuzhiyun # check if governor is available 90*4882a593Smuzhiyun local found=$(cat $filepath | grep $2 | wc -l) 91*4882a593Smuzhiyun if [ $found = 0 ]; then 92*4882a593Smuzhiyun echo 1; 93*4882a593Smuzhiyun return 94*4882a593Smuzhiyun fi 95*4882a593Smuzhiyun 96*4882a593Smuzhiyun __switch_governor $1 $2 97*4882a593Smuzhiyun echo 0; 98*4882a593Smuzhiyun} 99*4882a593Smuzhiyun 100*4882a593Smuzhiyun# $1: policy, $2: governor 101*4882a593Smuzhiyunswitch_show_governor() 102*4882a593Smuzhiyun{ 103*4882a593Smuzhiyun cur_gov=find_current_governor 104*4882a593Smuzhiyun if [ $cur_gov == "userspace" ]; then 105*4882a593Smuzhiyun cur_freq=find_current_freq 106*4882a593Smuzhiyun fi 107*4882a593Smuzhiyun 108*4882a593Smuzhiyun # switch governor 109*4882a593Smuzhiyun __switch_governor $1 $2 110*4882a593Smuzhiyun 111*4882a593Smuzhiyun printf "\nSwitched governor for $1 to $2\n\n" 112*4882a593Smuzhiyun 113*4882a593Smuzhiyun if [ $2 == "userspace" -o $2 == "powersave" -o $2 == "performance" ]; then 114*4882a593Smuzhiyun printf "No files to read for $2 governor\n\n" 115*4882a593Smuzhiyun return 116*4882a593Smuzhiyun fi 117*4882a593Smuzhiyun 118*4882a593Smuzhiyun # show governor files 119*4882a593Smuzhiyun local govpath=$(find_gov_directory $1 $2) 120*4882a593Smuzhiyun read_cpufreq_files_in_dir $govpath 121*4882a593Smuzhiyun} 122*4882a593Smuzhiyun 123*4882a593Smuzhiyun# $1: function to be called, $2: policy 124*4882a593Smuzhiyuncall_for_each_governor() 125*4882a593Smuzhiyun{ 126*4882a593Smuzhiyun local filepath=$CPUFREQROOT/$2/scaling_available_governors 127*4882a593Smuzhiyun 128*4882a593Smuzhiyun # Exit if cpu isn't managed by cpufreq core 129*4882a593Smuzhiyun if [ ! -f $filepath ]; then 130*4882a593Smuzhiyun return; 131*4882a593Smuzhiyun fi 132*4882a593Smuzhiyun 133*4882a593Smuzhiyun backup_governor $2 134*4882a593Smuzhiyun 135*4882a593Smuzhiyun local governors=$(cat $filepath) 136*4882a593Smuzhiyun printf "Available governors for $2: $governors\n" 137*4882a593Smuzhiyun 138*4882a593Smuzhiyun for governor in $governors; do 139*4882a593Smuzhiyun $1 $2 $governor 140*4882a593Smuzhiyun done 141*4882a593Smuzhiyun 142*4882a593Smuzhiyun restore_governor $2 143*4882a593Smuzhiyun} 144*4882a593Smuzhiyun 145*4882a593Smuzhiyun# $1: loop count 146*4882a593Smuzhiyunshuffle_governors_for_all_cpus() 147*4882a593Smuzhiyun{ 148*4882a593Smuzhiyun printf "** Test: Running ${FUNCNAME[0]} for $1 loops **\n\n" 149*4882a593Smuzhiyun 150*4882a593Smuzhiyun for i in `seq 1 $1`; do 151*4882a593Smuzhiyun for_each_policy call_for_each_governor switch_show_governor 152*4882a593Smuzhiyun done 153*4882a593Smuzhiyun printf "%s\n\n" "------------------------------------------------" 154*4882a593Smuzhiyun} 155