155 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			155 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/bin/bash
 | |
| # SPDX-License-Identifier: GPL-2.0
 | |
| #
 | |
| # Test governors
 | |
| 
 | |
| # protect against multiple inclusion
 | |
| if [ $FILE_GOVERNOR ]; then
 | |
| 	return 0
 | |
| else
 | |
| 	FILE_GOVERNOR=DONE
 | |
| fi
 | |
| 
 | |
| source cpu.sh
 | |
| source cpufreq.sh
 | |
| 
 | |
| CUR_GOV=
 | |
| CUR_FREQ=
 | |
| 
 | |
| # Find governor's directory path
 | |
| # $1: policy, $2: governor
 | |
| find_gov_directory()
 | |
| {
 | |
| 	if [ -d $CPUFREQROOT/$2 ]; then
 | |
| 		printf "$CPUFREQROOT/$2\n"
 | |
| 	elif [ -d $CPUFREQROOT/$1/$2 ]; then
 | |
| 		printf "$CPUFREQROOT/$1/$2\n"
 | |
| 	else
 | |
| 		printf "INVALID\n"
 | |
| 	fi
 | |
| }
 | |
| 
 | |
| # $1: policy
 | |
| find_current_governor()
 | |
| {
 | |
| 	cat $CPUFREQROOT/$1/scaling_governor
 | |
| }
 | |
| 
 | |
| # $1: policy
 | |
| backup_governor()
 | |
| {
 | |
| 	CUR_GOV=$(find_current_governor $1)
 | |
| 
 | |
| 	printf "Governor backup done for $1: $CUR_GOV\n"
 | |
| 
 | |
| 	if [ $CUR_GOV == "userspace" ]; then
 | |
| 		CUR_FREQ=$(find_current_freq $1)
 | |
| 		printf "Governor frequency backup done for $1: $CUR_FREQ\n"
 | |
| 	fi
 | |
| 
 | |
| 	printf "\n"
 | |
| }
 | |
| 
 | |
| # $1: policy
 | |
| restore_governor()
 | |
| {
 | |
| 	__switch_governor $1 $CUR_GOV
 | |
| 
 | |
| 	printf "Governor restored for $1 to $CUR_GOV\n"
 | |
| 
 | |
| 	if [ $CUR_GOV == "userspace" ]; then
 | |
| 		set_cpu_frequency $1 $CUR_FREQ
 | |
| 		printf "Governor frequency restored for $1: $CUR_FREQ\n"
 | |
| 	fi
 | |
| 
 | |
| 	printf "\n"
 | |
| }
 | |
| 
 | |
| # param:
 | |
| # $1: policy, $2: governor
 | |
| __switch_governor()
 | |
| {
 | |
| 	echo $2 > $CPUFREQROOT/$1/scaling_governor
 | |
| }
 | |
| 
 | |
| # param:
 | |
| # $1: cpu, $2: governor
 | |
| __switch_governor_for_cpu()
 | |
| {
 | |
| 	echo $2 > $CPUROOT/$1/cpufreq/scaling_governor
 | |
| }
 | |
| 
 | |
| # SWITCH GOVERNORS
 | |
| 
 | |
| # $1: cpu, $2: governor
 | |
| switch_governor()
 | |
| {
 | |
| 	local filepath=$CPUFREQROOT/$1/scaling_available_governors
 | |
| 
 | |
| 	# check if governor is available
 | |
| 	local found=$(cat $filepath | grep $2 | wc -l)
 | |
| 	if [ $found = 0 ]; then
 | |
| 		echo 1;
 | |
| 		return
 | |
| 	fi
 | |
| 
 | |
| 	__switch_governor $1 $2
 | |
| 	echo 0;
 | |
| }
 | |
| 
 | |
| # $1: policy, $2: governor
 | |
| switch_show_governor()
 | |
| {
 | |
| 	cur_gov=find_current_governor
 | |
| 	if [ $cur_gov == "userspace" ]; then
 | |
| 		cur_freq=find_current_freq
 | |
| 	fi
 | |
| 
 | |
| 	# switch governor
 | |
| 	__switch_governor $1 $2
 | |
| 
 | |
| 	printf "\nSwitched governor for $1 to $2\n\n"
 | |
| 
 | |
| 	if [ $2 == "userspace" -o $2 == "powersave" -o $2 == "performance" ]; then
 | |
| 		printf "No files to read for $2 governor\n\n"
 | |
| 		return
 | |
| 	fi
 | |
| 
 | |
| 	# show governor files
 | |
| 	local govpath=$(find_gov_directory $1 $2)
 | |
| 	read_cpufreq_files_in_dir $govpath
 | |
| }
 | |
| 
 | |
| # $1: function to be called, $2: policy
 | |
| call_for_each_governor()
 | |
| {
 | |
| 	local filepath=$CPUFREQROOT/$2/scaling_available_governors
 | |
| 
 | |
| 	# Exit if cpu isn't managed by cpufreq core
 | |
| 	if [ ! -f $filepath ]; then
 | |
| 		return;
 | |
| 	fi
 | |
| 
 | |
| 	backup_governor $2
 | |
| 
 | |
| 	local governors=$(cat $filepath)
 | |
| 	printf "Available governors for $2: $governors\n"
 | |
| 
 | |
| 	for governor in $governors; do
 | |
| 		$1 $2 $governor
 | |
| 	done
 | |
| 
 | |
| 	restore_governor $2
 | |
| }
 | |
| 
 | |
| # $1: loop count
 | |
| shuffle_governors_for_all_cpus()
 | |
| {
 | |
| 	printf "** Test: Running ${FUNCNAME[0]} for $1 loops **\n\n"
 | |
| 
 | |
| 	for i in `seq 1 $1`; do
 | |
| 		for_each_policy call_for_each_governor switch_show_governor
 | |
| 	done
 | |
| 	printf "%s\n\n" "------------------------------------------------"
 | |
| }
 | 
