1e66d5b67SViresh Kumar#!/bin/bash 2b2441318SGreg Kroah-Hartman# SPDX-License-Identifier: GPL-2.0 3e66d5b67SViresh Kumar 4e66d5b67SViresh Kumar# protect against multiple inclusion 5e66d5b67SViresh Kumarif [ $FILE_CPUFREQ ]; then 6e66d5b67SViresh Kumar return 0 7e66d5b67SViresh Kumarelse 8e66d5b67SViresh Kumar FILE_CPUFREQ=DONE 9e66d5b67SViresh Kumarfi 10e66d5b67SViresh Kumar 11e66d5b67SViresh Kumarsource cpu.sh 12e66d5b67SViresh Kumar 13e66d5b67SViresh Kumar 14e66d5b67SViresh Kumar# $1: cpu 15e66d5b67SViresh Kumarcpu_should_have_cpufreq_directory() 16e66d5b67SViresh Kumar{ 17e66d5b67SViresh Kumar if [ ! -d $CPUROOT/$1/cpufreq ]; then 18e66d5b67SViresh Kumar printf "Warning: No cpufreq directory present for $1\n" 19e66d5b67SViresh Kumar fi 20e66d5b67SViresh Kumar} 21e66d5b67SViresh Kumar 22e66d5b67SViresh Kumarcpu_should_not_have_cpufreq_directory() 23e66d5b67SViresh Kumar{ 24e66d5b67SViresh Kumar if [ -d $CPUROOT/$1/cpufreq ]; then 25e66d5b67SViresh Kumar printf "Warning: cpufreq directory present for $1\n" 26e66d5b67SViresh Kumar fi 27e66d5b67SViresh Kumar} 28e66d5b67SViresh Kumar 29e66d5b67SViresh Kumarfor_each_policy() 30e66d5b67SViresh Kumar{ 31e66d5b67SViresh Kumar policies=$(ls $CPUFREQROOT| grep "policy[0-9].*") 32e66d5b67SViresh Kumar for policy in $policies; do 33e66d5b67SViresh Kumar $@ $policy 34e66d5b67SViresh Kumar done 35e66d5b67SViresh Kumar} 36e66d5b67SViresh Kumar 37e66d5b67SViresh Kumarfor_each_policy_concurrent() 38e66d5b67SViresh Kumar{ 39e66d5b67SViresh Kumar policies=$(ls $CPUFREQROOT| grep "policy[0-9].*") 40e66d5b67SViresh Kumar for policy in $policies; do 41e66d5b67SViresh Kumar $@ $policy & 42e66d5b67SViresh Kumar done 43e66d5b67SViresh Kumar} 44e66d5b67SViresh Kumar 45e66d5b67SViresh Kumar# $1: Path 46e66d5b67SViresh Kumarread_cpufreq_files_in_dir() 47e66d5b67SViresh Kumar{ 48e66d5b67SViresh Kumar local files=`ls $1` 49e66d5b67SViresh Kumar 50e66d5b67SViresh Kumar printf "Printing directory: $1\n\n" 51e66d5b67SViresh Kumar 52e66d5b67SViresh Kumar for file in $files; do 53e66d5b67SViresh Kumar if [ -f $1/$file ]; then 54e66d5b67SViresh Kumar printf "$file:" 55e66d5b67SViresh Kumar cat $1/$file 56e66d5b67SViresh Kumar else 57e66d5b67SViresh Kumar printf "\n" 58e66d5b67SViresh Kumar read_cpufreq_files_in_dir "$1/$file" 59e66d5b67SViresh Kumar fi 60e66d5b67SViresh Kumar done 61e66d5b67SViresh Kumar printf "\n" 62e66d5b67SViresh Kumar} 63e66d5b67SViresh Kumar 64e66d5b67SViresh Kumar 65e66d5b67SViresh Kumarread_all_cpufreq_files() 66e66d5b67SViresh Kumar{ 67e66d5b67SViresh Kumar printf "** Test: Running ${FUNCNAME[0]} **\n\n" 68e66d5b67SViresh Kumar 69e66d5b67SViresh Kumar read_cpufreq_files_in_dir $CPUFREQROOT 70e66d5b67SViresh Kumar 71e66d5b67SViresh Kumar printf "%s\n\n" "------------------------------------------------" 72e66d5b67SViresh Kumar} 73e66d5b67SViresh Kumar 74e66d5b67SViresh Kumar 75e66d5b67SViresh Kumar# UPDATE CPUFREQ FILES 76e66d5b67SViresh Kumar 77e66d5b67SViresh Kumar# $1: directory path 78e66d5b67SViresh Kumarupdate_cpufreq_files_in_dir() 79e66d5b67SViresh Kumar{ 80e66d5b67SViresh Kumar local files=`ls $1` 81e66d5b67SViresh Kumar 82e66d5b67SViresh Kumar printf "Updating directory: $1\n\n" 83e66d5b67SViresh Kumar 84e66d5b67SViresh Kumar for file in $files; do 85e66d5b67SViresh Kumar if [ -f $1/$file ]; then 86e66d5b67SViresh Kumar # file is writable ? 87e66d5b67SViresh Kumar local wfile=$(ls -l $1/$file | awk '$1 ~ /^.*w.*/ { print $NF; }') 88e66d5b67SViresh Kumar 89e66d5b67SViresh Kumar if [ ! -z $wfile ]; then 90e66d5b67SViresh Kumar # scaling_setspeed is a special file and we 91e66d5b67SViresh Kumar # should skip updating it 92e66d5b67SViresh Kumar if [ $file != "scaling_setspeed" ]; then 93e66d5b67SViresh Kumar local val=$(cat $1/$file) 94e66d5b67SViresh Kumar printf "Writing $val to: $file\n" 95e66d5b67SViresh Kumar echo $val > $1/$file 96e66d5b67SViresh Kumar fi 97e66d5b67SViresh Kumar fi 98e66d5b67SViresh Kumar else 99e66d5b67SViresh Kumar printf "\n" 100e66d5b67SViresh Kumar update_cpufreq_files_in_dir "$1/$file" 101e66d5b67SViresh Kumar fi 102e66d5b67SViresh Kumar done 103e66d5b67SViresh Kumar 104e66d5b67SViresh Kumar printf "\n" 105e66d5b67SViresh Kumar} 106e66d5b67SViresh Kumar 107e66d5b67SViresh Kumar# Update all writable files with their existing values 108e66d5b67SViresh Kumarupdate_all_cpufreq_files() 109e66d5b67SViresh Kumar{ 110e66d5b67SViresh Kumar printf "** Test: Running ${FUNCNAME[0]} **\n\n" 111e66d5b67SViresh Kumar 112e66d5b67SViresh Kumar update_cpufreq_files_in_dir $CPUFREQROOT 113e66d5b67SViresh Kumar 114e66d5b67SViresh Kumar printf "%s\n\n" "------------------------------------------------" 115e66d5b67SViresh Kumar} 116e66d5b67SViresh Kumar 117e66d5b67SViresh Kumar 118e66d5b67SViresh Kumar# CHANGE CPU FREQUENCIES 119e66d5b67SViresh Kumar 120e66d5b67SViresh Kumar# $1: policy 121e66d5b67SViresh Kumarfind_current_freq() 122e66d5b67SViresh Kumar{ 123e66d5b67SViresh Kumar cat $CPUFREQROOT/$1/scaling_cur_freq 124e66d5b67SViresh Kumar} 125e66d5b67SViresh Kumar 126e66d5b67SViresh Kumar# $1: policy 127e66d5b67SViresh Kumar# $2: frequency 128e66d5b67SViresh Kumarset_cpu_frequency() 129e66d5b67SViresh Kumar{ 130e66d5b67SViresh Kumar printf "Change frequency for $1 to $2\n" 131e66d5b67SViresh Kumar echo $2 > $CPUFREQROOT/$1/scaling_setspeed 132e66d5b67SViresh Kumar} 133e66d5b67SViresh Kumar 134e66d5b67SViresh Kumar# $1: policy 135e66d5b67SViresh Kumartest_all_frequencies() 136e66d5b67SViresh Kumar{ 137e66d5b67SViresh Kumar local filepath="$CPUFREQROOT/$1" 138e66d5b67SViresh Kumar 139e66d5b67SViresh Kumar backup_governor $1 140e66d5b67SViresh Kumar 141e66d5b67SViresh Kumar local found=$(switch_governor $1 "userspace") 142e66d5b67SViresh Kumar if [ $found = 1 ]; then 143e66d5b67SViresh Kumar printf "${FUNCNAME[0]}: userspace governor not available for: $1\n" 144e66d5b67SViresh Kumar return; 145e66d5b67SViresh Kumar fi 146e66d5b67SViresh Kumar 147e66d5b67SViresh Kumar printf "Switched governor for $1 to userspace\n\n" 148e66d5b67SViresh Kumar 149e66d5b67SViresh Kumar local freqs=$(cat $filepath/scaling_available_frequencies) 150e66d5b67SViresh Kumar printf "Available frequencies for $1: $freqs\n\n" 151e66d5b67SViresh Kumar 152e66d5b67SViresh Kumar # Set all frequencies one-by-one 153e66d5b67SViresh Kumar for freq in $freqs; do 154e66d5b67SViresh Kumar set_cpu_frequency $1 $freq 155e66d5b67SViresh Kumar done 156e66d5b67SViresh Kumar 157e66d5b67SViresh Kumar printf "\n" 158e66d5b67SViresh Kumar 159e66d5b67SViresh Kumar restore_governor $1 160e66d5b67SViresh Kumar} 161e66d5b67SViresh Kumar 162e66d5b67SViresh Kumar# $1: loop count 163e66d5b67SViresh Kumarshuffle_frequency_for_all_cpus() 164e66d5b67SViresh Kumar{ 165e66d5b67SViresh Kumar printf "** Test: Running ${FUNCNAME[0]} for $1 loops **\n\n" 166e66d5b67SViresh Kumar 167e66d5b67SViresh Kumar for i in `seq 1 $1`; do 168e66d5b67SViresh Kumar for_each_policy test_all_frequencies 169e66d5b67SViresh Kumar done 170e66d5b67SViresh Kumar printf "\n%s\n\n" "------------------------------------------------" 171e66d5b67SViresh Kumar} 172e66d5b67SViresh Kumar 173e66d5b67SViresh Kumar# Basic cpufreq tests 174e66d5b67SViresh Kumarcpufreq_basic_tests() 175e66d5b67SViresh Kumar{ 176e66d5b67SViresh Kumar printf "*** RUNNING CPUFREQ SANITY TESTS ***\n" 177e66d5b67SViresh Kumar printf "====================================\n\n" 178e66d5b67SViresh Kumar 179e66d5b67SViresh Kumar count=$(count_cpufreq_managed_cpus) 180e66d5b67SViresh Kumar if [ $count = 0 ]; then 181e66d5b67SViresh Kumar printf "No cpu is managed by cpufreq core, exiting\n" 182e66d5b67SViresh Kumar exit; 183e66d5b67SViresh Kumar else 184e66d5b67SViresh Kumar printf "CPUFreq manages: $count CPUs\n\n" 185e66d5b67SViresh Kumar fi 186e66d5b67SViresh Kumar 187e66d5b67SViresh Kumar # Detect & print which CPUs are not managed by cpufreq 188e66d5b67SViresh Kumar print_unmanaged_cpus 189e66d5b67SViresh Kumar 190e66d5b67SViresh Kumar # read/update all cpufreq files 191e66d5b67SViresh Kumar read_all_cpufreq_files 192e66d5b67SViresh Kumar update_all_cpufreq_files 193e66d5b67SViresh Kumar 194e66d5b67SViresh Kumar # hotplug cpus 195e66d5b67SViresh Kumar reboot_cpus 5 196e66d5b67SViresh Kumar 197e66d5b67SViresh Kumar # Test all frequencies 198e66d5b67SViresh Kumar shuffle_frequency_for_all_cpus 2 199e66d5b67SViresh Kumar 200e66d5b67SViresh Kumar # Test all governors 201e66d5b67SViresh Kumar shuffle_governors_for_all_cpus 1 202e66d5b67SViresh Kumar} 203b03eaf8dSViresh Kumar 204b03eaf8dSViresh Kumar# Suspend/resume 205b03eaf8dSViresh Kumar# $1: "suspend" or "hibernate", $2: loop count 206b03eaf8dSViresh Kumardo_suspend() 207b03eaf8dSViresh Kumar{ 208b03eaf8dSViresh Kumar printf "** Test: Running ${FUNCNAME[0]}: Trying $1 for $2 loops **\n\n" 209b03eaf8dSViresh Kumar 210b03eaf8dSViresh Kumar # Is the directory available 211b03eaf8dSViresh Kumar if [ ! -d $SYSFS/power/ -o ! -f $SYSFS/power/state ]; then 212b03eaf8dSViresh Kumar printf "$SYSFS/power/state not available\n" 213b03eaf8dSViresh Kumar return 1 214b03eaf8dSViresh Kumar fi 215b03eaf8dSViresh Kumar 216b03eaf8dSViresh Kumar if [ $1 = "suspend" ]; then 217b03eaf8dSViresh Kumar filename="mem" 218b03eaf8dSViresh Kumar elif [ $1 = "hibernate" ]; then 219b03eaf8dSViresh Kumar filename="disk" 220b03eaf8dSViresh Kumar else 221b03eaf8dSViresh Kumar printf "$1 is not a valid option\n" 222b03eaf8dSViresh Kumar return 1 223b03eaf8dSViresh Kumar fi 224b03eaf8dSViresh Kumar 225b03eaf8dSViresh Kumar if [ -n $filename ]; then 226b03eaf8dSViresh Kumar present=$(cat $SYSFS/power/state | grep $filename) 227b03eaf8dSViresh Kumar 228b03eaf8dSViresh Kumar if [ -z "$present" ]; then 229b03eaf8dSViresh Kumar printf "Tried to $1 but $filename isn't present in $SYSFS/power/state\n" 230b03eaf8dSViresh Kumar return 1; 231b03eaf8dSViresh Kumar fi 232b03eaf8dSViresh Kumar 233b03eaf8dSViresh Kumar for i in `seq 1 $2`; do 234b03eaf8dSViresh Kumar printf "Starting $1\n" 235b03eaf8dSViresh Kumar echo $filename > $SYSFS/power/state 236b03eaf8dSViresh Kumar printf "Came out of $1\n" 237b03eaf8dSViresh Kumar 238b03eaf8dSViresh Kumar printf "Do basic tests after finishing $1 to verify cpufreq state\n\n" 239b03eaf8dSViresh Kumar cpufreq_basic_tests 240b03eaf8dSViresh Kumar done 241b03eaf8dSViresh Kumar fi 242b03eaf8dSViresh Kumar} 243