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