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