162306a36Sopenharmony_ci#!/bin/bash 262306a36Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0 362306a36Sopenharmony_ci 462306a36Sopenharmony_ci# protect against multiple inclusion 562306a36Sopenharmony_ciif [ $FILE_CPUFREQ ]; then 662306a36Sopenharmony_ci return 0 762306a36Sopenharmony_cielse 862306a36Sopenharmony_ci FILE_CPUFREQ=DONE 962306a36Sopenharmony_cifi 1062306a36Sopenharmony_ci 1162306a36Sopenharmony_cisource cpu.sh 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_ci# $1: cpu 1562306a36Sopenharmony_cicpu_should_have_cpufreq_directory() 1662306a36Sopenharmony_ci{ 1762306a36Sopenharmony_ci if [ ! -d $CPUROOT/$1/cpufreq ]; then 1862306a36Sopenharmony_ci printf "Warning: No cpufreq directory present for $1\n" 1962306a36Sopenharmony_ci fi 2062306a36Sopenharmony_ci} 2162306a36Sopenharmony_ci 2262306a36Sopenharmony_cicpu_should_not_have_cpufreq_directory() 2362306a36Sopenharmony_ci{ 2462306a36Sopenharmony_ci if [ -d $CPUROOT/$1/cpufreq ]; then 2562306a36Sopenharmony_ci printf "Warning: cpufreq directory present for $1\n" 2662306a36Sopenharmony_ci fi 2762306a36Sopenharmony_ci} 2862306a36Sopenharmony_ci 2962306a36Sopenharmony_cifor_each_policy() 3062306a36Sopenharmony_ci{ 3162306a36Sopenharmony_ci policies=$(ls $CPUFREQROOT| grep "policy[0-9].*") 3262306a36Sopenharmony_ci for policy in $policies; do 3362306a36Sopenharmony_ci $@ $policy 3462306a36Sopenharmony_ci done 3562306a36Sopenharmony_ci} 3662306a36Sopenharmony_ci 3762306a36Sopenharmony_cifor_each_policy_concurrent() 3862306a36Sopenharmony_ci{ 3962306a36Sopenharmony_ci policies=$(ls $CPUFREQROOT| grep "policy[0-9].*") 4062306a36Sopenharmony_ci for policy in $policies; do 4162306a36Sopenharmony_ci $@ $policy & 4262306a36Sopenharmony_ci done 4362306a36Sopenharmony_ci} 4462306a36Sopenharmony_ci 4562306a36Sopenharmony_ci# $1: Path 4662306a36Sopenharmony_ciread_cpufreq_files_in_dir() 4762306a36Sopenharmony_ci{ 4862306a36Sopenharmony_ci local files=`ls $1` 4962306a36Sopenharmony_ci 5062306a36Sopenharmony_ci printf "Printing directory: $1\n\n" 5162306a36Sopenharmony_ci 5262306a36Sopenharmony_ci for file in $files; do 5362306a36Sopenharmony_ci if [ -f $1/$file ]; then 5462306a36Sopenharmony_ci printf "$file:" 5562306a36Sopenharmony_ci cat $1/$file 5662306a36Sopenharmony_ci else 5762306a36Sopenharmony_ci printf "\n" 5862306a36Sopenharmony_ci read_cpufreq_files_in_dir "$1/$file" 5962306a36Sopenharmony_ci fi 6062306a36Sopenharmony_ci done 6162306a36Sopenharmony_ci printf "\n" 6262306a36Sopenharmony_ci} 6362306a36Sopenharmony_ci 6462306a36Sopenharmony_ci 6562306a36Sopenharmony_ciread_all_cpufreq_files() 6662306a36Sopenharmony_ci{ 6762306a36Sopenharmony_ci printf "** Test: Running ${FUNCNAME[0]} **\n\n" 6862306a36Sopenharmony_ci 6962306a36Sopenharmony_ci read_cpufreq_files_in_dir $CPUFREQROOT 7062306a36Sopenharmony_ci 7162306a36Sopenharmony_ci printf "%s\n\n" "------------------------------------------------" 7262306a36Sopenharmony_ci} 7362306a36Sopenharmony_ci 7462306a36Sopenharmony_ci 7562306a36Sopenharmony_ci# UPDATE CPUFREQ FILES 7662306a36Sopenharmony_ci 7762306a36Sopenharmony_ci# $1: directory path 7862306a36Sopenharmony_ciupdate_cpufreq_files_in_dir() 7962306a36Sopenharmony_ci{ 8062306a36Sopenharmony_ci local files=`ls $1` 8162306a36Sopenharmony_ci 8262306a36Sopenharmony_ci printf "Updating directory: $1\n\n" 8362306a36Sopenharmony_ci 8462306a36Sopenharmony_ci for file in $files; do 8562306a36Sopenharmony_ci if [ -f $1/$file ]; then 8662306a36Sopenharmony_ci # file is writable ? 8762306a36Sopenharmony_ci local wfile=$(ls -l $1/$file | awk '$1 ~ /^.*w.*/ { print $NF; }') 8862306a36Sopenharmony_ci 8962306a36Sopenharmony_ci if [ ! -z $wfile ]; then 9062306a36Sopenharmony_ci # scaling_setspeed is a special file and we 9162306a36Sopenharmony_ci # should skip updating it 9262306a36Sopenharmony_ci if [ $file != "scaling_setspeed" ]; then 9362306a36Sopenharmony_ci local val=$(cat $1/$file) 9462306a36Sopenharmony_ci printf "Writing $val to: $file\n" 9562306a36Sopenharmony_ci echo $val > $1/$file 9662306a36Sopenharmony_ci fi 9762306a36Sopenharmony_ci fi 9862306a36Sopenharmony_ci else 9962306a36Sopenharmony_ci printf "\n" 10062306a36Sopenharmony_ci update_cpufreq_files_in_dir "$1/$file" 10162306a36Sopenharmony_ci fi 10262306a36Sopenharmony_ci done 10362306a36Sopenharmony_ci 10462306a36Sopenharmony_ci printf "\n" 10562306a36Sopenharmony_ci} 10662306a36Sopenharmony_ci 10762306a36Sopenharmony_ci# Update all writable files with their existing values 10862306a36Sopenharmony_ciupdate_all_cpufreq_files() 10962306a36Sopenharmony_ci{ 11062306a36Sopenharmony_ci printf "** Test: Running ${FUNCNAME[0]} **\n\n" 11162306a36Sopenharmony_ci 11262306a36Sopenharmony_ci update_cpufreq_files_in_dir $CPUFREQROOT 11362306a36Sopenharmony_ci 11462306a36Sopenharmony_ci printf "%s\n\n" "------------------------------------------------" 11562306a36Sopenharmony_ci} 11662306a36Sopenharmony_ci 11762306a36Sopenharmony_ci 11862306a36Sopenharmony_ci# CHANGE CPU FREQUENCIES 11962306a36Sopenharmony_ci 12062306a36Sopenharmony_ci# $1: policy 12162306a36Sopenharmony_cifind_current_freq() 12262306a36Sopenharmony_ci{ 12362306a36Sopenharmony_ci cat $CPUFREQROOT/$1/scaling_cur_freq 12462306a36Sopenharmony_ci} 12562306a36Sopenharmony_ci 12662306a36Sopenharmony_ci# $1: policy 12762306a36Sopenharmony_ci# $2: frequency 12862306a36Sopenharmony_ciset_cpu_frequency() 12962306a36Sopenharmony_ci{ 13062306a36Sopenharmony_ci printf "Change frequency for $1 to $2\n" 13162306a36Sopenharmony_ci echo $2 > $CPUFREQROOT/$1/scaling_setspeed 13262306a36Sopenharmony_ci} 13362306a36Sopenharmony_ci 13462306a36Sopenharmony_ci# $1: policy 13562306a36Sopenharmony_citest_all_frequencies() 13662306a36Sopenharmony_ci{ 13762306a36Sopenharmony_ci local filepath="$CPUFREQROOT/$1" 13862306a36Sopenharmony_ci 13962306a36Sopenharmony_ci backup_governor $1 14062306a36Sopenharmony_ci 14162306a36Sopenharmony_ci local found=$(switch_governor $1 "userspace") 14262306a36Sopenharmony_ci if [ $found = 1 ]; then 14362306a36Sopenharmony_ci printf "${FUNCNAME[0]}: userspace governor not available for: $1\n" 14462306a36Sopenharmony_ci return; 14562306a36Sopenharmony_ci fi 14662306a36Sopenharmony_ci 14762306a36Sopenharmony_ci printf "Switched governor for $1 to userspace\n\n" 14862306a36Sopenharmony_ci 14962306a36Sopenharmony_ci local freqs=$(cat $filepath/scaling_available_frequencies) 15062306a36Sopenharmony_ci printf "Available frequencies for $1: $freqs\n\n" 15162306a36Sopenharmony_ci 15262306a36Sopenharmony_ci # Set all frequencies one-by-one 15362306a36Sopenharmony_ci for freq in $freqs; do 15462306a36Sopenharmony_ci set_cpu_frequency $1 $freq 15562306a36Sopenharmony_ci done 15662306a36Sopenharmony_ci 15762306a36Sopenharmony_ci printf "\n" 15862306a36Sopenharmony_ci 15962306a36Sopenharmony_ci restore_governor $1 16062306a36Sopenharmony_ci} 16162306a36Sopenharmony_ci 16262306a36Sopenharmony_ci# $1: loop count 16362306a36Sopenharmony_cishuffle_frequency_for_all_cpus() 16462306a36Sopenharmony_ci{ 16562306a36Sopenharmony_ci printf "** Test: Running ${FUNCNAME[0]} for $1 loops **\n\n" 16662306a36Sopenharmony_ci 16762306a36Sopenharmony_ci for i in `seq 1 $1`; do 16862306a36Sopenharmony_ci for_each_policy test_all_frequencies 16962306a36Sopenharmony_ci done 17062306a36Sopenharmony_ci printf "\n%s\n\n" "------------------------------------------------" 17162306a36Sopenharmony_ci} 17262306a36Sopenharmony_ci 17362306a36Sopenharmony_ci# Basic cpufreq tests 17462306a36Sopenharmony_cicpufreq_basic_tests() 17562306a36Sopenharmony_ci{ 17662306a36Sopenharmony_ci printf "*** RUNNING CPUFREQ SANITY TESTS ***\n" 17762306a36Sopenharmony_ci printf "====================================\n\n" 17862306a36Sopenharmony_ci 17962306a36Sopenharmony_ci count=$(count_cpufreq_managed_cpus) 18062306a36Sopenharmony_ci if [ $count = 0 ]; then 18162306a36Sopenharmony_ci printf "No cpu is managed by cpufreq core, exiting\n" 18262306a36Sopenharmony_ci exit; 18362306a36Sopenharmony_ci else 18462306a36Sopenharmony_ci printf "CPUFreq manages: $count CPUs\n\n" 18562306a36Sopenharmony_ci fi 18662306a36Sopenharmony_ci 18762306a36Sopenharmony_ci # Detect & print which CPUs are not managed by cpufreq 18862306a36Sopenharmony_ci print_unmanaged_cpus 18962306a36Sopenharmony_ci 19062306a36Sopenharmony_ci # read/update all cpufreq files 19162306a36Sopenharmony_ci read_all_cpufreq_files 19262306a36Sopenharmony_ci update_all_cpufreq_files 19362306a36Sopenharmony_ci 19462306a36Sopenharmony_ci # hotplug cpus 19562306a36Sopenharmony_ci reboot_cpus 5 19662306a36Sopenharmony_ci 19762306a36Sopenharmony_ci # Test all frequencies 19862306a36Sopenharmony_ci shuffle_frequency_for_all_cpus 2 19962306a36Sopenharmony_ci 20062306a36Sopenharmony_ci # Test all governors 20162306a36Sopenharmony_ci shuffle_governors_for_all_cpus 1 20262306a36Sopenharmony_ci} 20362306a36Sopenharmony_ci 20462306a36Sopenharmony_ci# Suspend/resume 20562306a36Sopenharmony_ci# $1: "suspend" or "hibernate", $2: loop count 20662306a36Sopenharmony_cido_suspend() 20762306a36Sopenharmony_ci{ 20862306a36Sopenharmony_ci printf "** Test: Running ${FUNCNAME[0]}: Trying $1 for $2 loops **\n\n" 20962306a36Sopenharmony_ci 21062306a36Sopenharmony_ci # Is the directory available 21162306a36Sopenharmony_ci if [ ! -d $SYSFS/power/ -o ! -f $SYSFS/power/state ]; then 21262306a36Sopenharmony_ci printf "$SYSFS/power/state not available\n" 21362306a36Sopenharmony_ci return 1 21462306a36Sopenharmony_ci fi 21562306a36Sopenharmony_ci 21662306a36Sopenharmony_ci if [ $1 = "suspend" ]; then 21762306a36Sopenharmony_ci filename="mem" 21862306a36Sopenharmony_ci elif [ $1 = "hibernate" ]; then 21962306a36Sopenharmony_ci filename="disk" 22062306a36Sopenharmony_ci else 22162306a36Sopenharmony_ci printf "$1 is not a valid option\n" 22262306a36Sopenharmony_ci return 1 22362306a36Sopenharmony_ci fi 22462306a36Sopenharmony_ci 22562306a36Sopenharmony_ci if [ -n $filename ]; then 22662306a36Sopenharmony_ci present=$(cat $SYSFS/power/state | grep $filename) 22762306a36Sopenharmony_ci 22862306a36Sopenharmony_ci if [ -z "$present" ]; then 22962306a36Sopenharmony_ci printf "Tried to $1 but $filename isn't present in $SYSFS/power/state\n" 23062306a36Sopenharmony_ci return 1; 23162306a36Sopenharmony_ci fi 23262306a36Sopenharmony_ci 23362306a36Sopenharmony_ci for i in `seq 1 $2`; do 23462306a36Sopenharmony_ci printf "Starting $1\n" 23562306a36Sopenharmony_ci echo $filename > $SYSFS/power/state 23662306a36Sopenharmony_ci printf "Came out of $1\n" 23762306a36Sopenharmony_ci 23862306a36Sopenharmony_ci printf "Do basic tests after finishing $1 to verify cpufreq state\n\n" 23962306a36Sopenharmony_ci cpufreq_basic_tests 24062306a36Sopenharmony_ci done 24162306a36Sopenharmony_ci fi 24262306a36Sopenharmony_ci} 243