162306a36Sopenharmony_ci#!/bin/bash 262306a36Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0 362306a36Sopenharmony_ci# 462306a36Sopenharmony_ci# Test governors 562306a36Sopenharmony_ci 662306a36Sopenharmony_ci# protect against multiple inclusion 762306a36Sopenharmony_ciif [ $FILE_GOVERNOR ]; then 862306a36Sopenharmony_ci return 0 962306a36Sopenharmony_cielse 1062306a36Sopenharmony_ci FILE_GOVERNOR=DONE 1162306a36Sopenharmony_cifi 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_cisource cpu.sh 1462306a36Sopenharmony_cisource cpufreq.sh 1562306a36Sopenharmony_ci 1662306a36Sopenharmony_ciCUR_GOV= 1762306a36Sopenharmony_ciCUR_FREQ= 1862306a36Sopenharmony_ci 1962306a36Sopenharmony_ci# Find governor's directory path 2062306a36Sopenharmony_ci# $1: policy, $2: governor 2162306a36Sopenharmony_cifind_gov_directory() 2262306a36Sopenharmony_ci{ 2362306a36Sopenharmony_ci if [ -d $CPUFREQROOT/$2 ]; then 2462306a36Sopenharmony_ci printf "$CPUFREQROOT/$2\n" 2562306a36Sopenharmony_ci elif [ -d $CPUFREQROOT/$1/$2 ]; then 2662306a36Sopenharmony_ci printf "$CPUFREQROOT/$1/$2\n" 2762306a36Sopenharmony_ci else 2862306a36Sopenharmony_ci printf "INVALID\n" 2962306a36Sopenharmony_ci fi 3062306a36Sopenharmony_ci} 3162306a36Sopenharmony_ci 3262306a36Sopenharmony_ci# $1: policy 3362306a36Sopenharmony_cifind_current_governor() 3462306a36Sopenharmony_ci{ 3562306a36Sopenharmony_ci cat $CPUFREQROOT/$1/scaling_governor 3662306a36Sopenharmony_ci} 3762306a36Sopenharmony_ci 3862306a36Sopenharmony_ci# $1: policy 3962306a36Sopenharmony_cibackup_governor() 4062306a36Sopenharmony_ci{ 4162306a36Sopenharmony_ci CUR_GOV=$(find_current_governor $1) 4262306a36Sopenharmony_ci 4362306a36Sopenharmony_ci printf "Governor backup done for $1: $CUR_GOV\n" 4462306a36Sopenharmony_ci 4562306a36Sopenharmony_ci if [ $CUR_GOV == "userspace" ]; then 4662306a36Sopenharmony_ci CUR_FREQ=$(find_current_freq $1) 4762306a36Sopenharmony_ci printf "Governor frequency backup done for $1: $CUR_FREQ\n" 4862306a36Sopenharmony_ci fi 4962306a36Sopenharmony_ci 5062306a36Sopenharmony_ci printf "\n" 5162306a36Sopenharmony_ci} 5262306a36Sopenharmony_ci 5362306a36Sopenharmony_ci# $1: policy 5462306a36Sopenharmony_cirestore_governor() 5562306a36Sopenharmony_ci{ 5662306a36Sopenharmony_ci __switch_governor $1 $CUR_GOV 5762306a36Sopenharmony_ci 5862306a36Sopenharmony_ci printf "Governor restored for $1 to $CUR_GOV\n" 5962306a36Sopenharmony_ci 6062306a36Sopenharmony_ci if [ $CUR_GOV == "userspace" ]; then 6162306a36Sopenharmony_ci set_cpu_frequency $1 $CUR_FREQ 6262306a36Sopenharmony_ci printf "Governor frequency restored for $1: $CUR_FREQ\n" 6362306a36Sopenharmony_ci fi 6462306a36Sopenharmony_ci 6562306a36Sopenharmony_ci printf "\n" 6662306a36Sopenharmony_ci} 6762306a36Sopenharmony_ci 6862306a36Sopenharmony_ci# param: 6962306a36Sopenharmony_ci# $1: policy, $2: governor 7062306a36Sopenharmony_ci__switch_governor() 7162306a36Sopenharmony_ci{ 7262306a36Sopenharmony_ci echo $2 > $CPUFREQROOT/$1/scaling_governor 7362306a36Sopenharmony_ci} 7462306a36Sopenharmony_ci 7562306a36Sopenharmony_ci# param: 7662306a36Sopenharmony_ci# $1: cpu, $2: governor 7762306a36Sopenharmony_ci__switch_governor_for_cpu() 7862306a36Sopenharmony_ci{ 7962306a36Sopenharmony_ci echo $2 > $CPUROOT/$1/cpufreq/scaling_governor 8062306a36Sopenharmony_ci} 8162306a36Sopenharmony_ci 8262306a36Sopenharmony_ci# SWITCH GOVERNORS 8362306a36Sopenharmony_ci 8462306a36Sopenharmony_ci# $1: cpu, $2: governor 8562306a36Sopenharmony_ciswitch_governor() 8662306a36Sopenharmony_ci{ 8762306a36Sopenharmony_ci local filepath=$CPUFREQROOT/$1/scaling_available_governors 8862306a36Sopenharmony_ci 8962306a36Sopenharmony_ci # check if governor is available 9062306a36Sopenharmony_ci local found=$(cat $filepath | grep $2 | wc -l) 9162306a36Sopenharmony_ci if [ $found = 0 ]; then 9262306a36Sopenharmony_ci echo 1; 9362306a36Sopenharmony_ci return 9462306a36Sopenharmony_ci fi 9562306a36Sopenharmony_ci 9662306a36Sopenharmony_ci __switch_governor $1 $2 9762306a36Sopenharmony_ci echo 0; 9862306a36Sopenharmony_ci} 9962306a36Sopenharmony_ci 10062306a36Sopenharmony_ci# $1: policy, $2: governor 10162306a36Sopenharmony_ciswitch_show_governor() 10262306a36Sopenharmony_ci{ 10362306a36Sopenharmony_ci cur_gov=find_current_governor 10462306a36Sopenharmony_ci if [ $cur_gov == "userspace" ]; then 10562306a36Sopenharmony_ci cur_freq=find_current_freq 10662306a36Sopenharmony_ci fi 10762306a36Sopenharmony_ci 10862306a36Sopenharmony_ci # switch governor 10962306a36Sopenharmony_ci __switch_governor $1 $2 11062306a36Sopenharmony_ci 11162306a36Sopenharmony_ci printf "\nSwitched governor for $1 to $2\n\n" 11262306a36Sopenharmony_ci 11362306a36Sopenharmony_ci if [ $2 == "userspace" -o $2 == "powersave" -o $2 == "performance" ]; then 11462306a36Sopenharmony_ci printf "No files to read for $2 governor\n\n" 11562306a36Sopenharmony_ci return 11662306a36Sopenharmony_ci fi 11762306a36Sopenharmony_ci 11862306a36Sopenharmony_ci # show governor files 11962306a36Sopenharmony_ci local govpath=$(find_gov_directory $1 $2) 12062306a36Sopenharmony_ci read_cpufreq_files_in_dir $govpath 12162306a36Sopenharmony_ci} 12262306a36Sopenharmony_ci 12362306a36Sopenharmony_ci# $1: function to be called, $2: policy 12462306a36Sopenharmony_cicall_for_each_governor() 12562306a36Sopenharmony_ci{ 12662306a36Sopenharmony_ci local filepath=$CPUFREQROOT/$2/scaling_available_governors 12762306a36Sopenharmony_ci 12862306a36Sopenharmony_ci # Exit if cpu isn't managed by cpufreq core 12962306a36Sopenharmony_ci if [ ! -f $filepath ]; then 13062306a36Sopenharmony_ci return; 13162306a36Sopenharmony_ci fi 13262306a36Sopenharmony_ci 13362306a36Sopenharmony_ci backup_governor $2 13462306a36Sopenharmony_ci 13562306a36Sopenharmony_ci local governors=$(cat $filepath) 13662306a36Sopenharmony_ci printf "Available governors for $2: $governors\n" 13762306a36Sopenharmony_ci 13862306a36Sopenharmony_ci for governor in $governors; do 13962306a36Sopenharmony_ci $1 $2 $governor 14062306a36Sopenharmony_ci done 14162306a36Sopenharmony_ci 14262306a36Sopenharmony_ci restore_governor $2 14362306a36Sopenharmony_ci} 14462306a36Sopenharmony_ci 14562306a36Sopenharmony_ci# $1: loop count 14662306a36Sopenharmony_cishuffle_governors_for_all_cpus() 14762306a36Sopenharmony_ci{ 14862306a36Sopenharmony_ci printf "** Test: Running ${FUNCNAME[0]} for $1 loops **\n\n" 14962306a36Sopenharmony_ci 15062306a36Sopenharmony_ci for i in `seq 1 $1`; do 15162306a36Sopenharmony_ci for_each_policy call_for_each_governor switch_show_governor 15262306a36Sopenharmony_ci done 15362306a36Sopenharmony_ci printf "%s\n\n" "------------------------------------------------" 15462306a36Sopenharmony_ci} 155