2 # SPDX-License-Identifier: GPL-2.0
4 # protect against multiple inclusion
5 if [ $FILE_CPUFREQ ]; then
15 cpu_should_have_cpufreq_directory
()
17 if [ ! -d $CPUROOT/$1/cpufreq
]; then
18 printf "Warning: No cpufreq directory present for $1\n"
22 cpu_should_not_have_cpufreq_directory
()
24 if [ -d $CPUROOT/$1/cpufreq
]; then
25 printf "Warning: cpufreq directory present for $1\n"
31 policies
=$
(ls $CPUFREQROOT|
grep "policy[0-9].*")
32 for policy
in $policies; do
37 for_each_policy_concurrent
()
39 policies
=$
(ls $CPUFREQROOT|
grep "policy[0-9].*")
40 for policy
in $policies; do
46 read_cpufreq_files_in_dir
()
50 printf "Printing directory: $1\n\n"
52 for file in $files; do
53 if [ -f $1/$file ]; then
58 read_cpufreq_files_in_dir
"$1/$file"
65 read_all_cpufreq_files
()
67 printf "** Test: Running ${FUNCNAME[0]} **\n\n"
69 read_cpufreq_files_in_dir
$CPUFREQROOT
71 printf "%s\n\n" "------------------------------------------------"
75 # UPDATE CPUFREQ FILES
78 update_cpufreq_files_in_dir
()
82 printf "Updating directory: $1\n\n"
84 for file in $files; do
85 if [ -f $1/$file ]; then
87 local wfile
=$
(ls -l $1/$file |
awk '$1 ~ /^.*w.*/ { print $NF; }')
89 if [ ! -z $wfile ]; then
90 # scaling_setspeed is a special file and we
91 # should skip updating it
92 if [ $file != "scaling_setspeed" ]; then
93 local val
=$
(cat $1/$file)
94 printf "Writing $val to: $file\n"
100 update_cpufreq_files_in_dir
"$1/$file"
107 # Update all writable files with their existing values
108 update_all_cpufreq_files
()
110 printf "** Test: Running ${FUNCNAME[0]} **\n\n"
112 update_cpufreq_files_in_dir
$CPUFREQROOT
114 printf "%s\n\n" "------------------------------------------------"
118 # CHANGE CPU FREQUENCIES
123 cat $CPUFREQROOT/$1/scaling_cur_freq
130 printf "Change frequency for $1 to $2\n"
131 echo $2 > $CPUFREQROOT/$1/scaling_setspeed
135 test_all_frequencies
()
137 local filepath
="$CPUFREQROOT/$1"
141 local found
=$
(switch_governor
$1 "userspace")
142 if [ $found = 1 ]; then
143 printf "${FUNCNAME[0]}: userspace governor not available for: $1\n"
147 printf "Switched governor for $1 to userspace\n\n"
149 local freqs
=$
(cat $filepath/scaling_available_frequencies
)
150 printf "Available frequencies for $1: $freqs\n\n"
152 # Set all frequencies one-by-one
153 for freq
in $freqs; do
154 set_cpu_frequency
$1 $freq
163 shuffle_frequency_for_all_cpus
()
165 printf "** Test: Running ${FUNCNAME[0]} for $1 loops **\n\n"
167 for i
in `seq 1 $1`; do
168 for_each_policy test_all_frequencies
170 printf "\n%s\n\n" "------------------------------------------------"
173 # Basic cpufreq tests
174 cpufreq_basic_tests
()
176 printf "*** RUNNING CPUFREQ SANITY TESTS ***\n"
177 printf "====================================\n\n"
179 count
=$
(count_cpufreq_managed_cpus
)
180 if [ $count = 0 ]; then
181 ktap_exit_fail_msg
"No cpu is managed by cpufreq core, exiting\n"
183 printf "CPUFreq manages: $count CPUs\n\n"
186 # Detect & print which CPUs are not managed by cpufreq
189 # read/update all cpufreq files
190 read_all_cpufreq_files
191 update_all_cpufreq_files
196 # Test all frequencies
197 shuffle_frequency_for_all_cpus
2
200 shuffle_governors_for_all_cpus
1
204 # $1: "suspend" or "hibernate", $2: loop count
207 printf "** Test: Running ${FUNCNAME[0]}: Trying $1 for $2 loops **\n\n"
209 # Is the directory available
210 if [ ! -d $SYSFS/power
/ -o ! -f $SYSFS/power
/state
]; then
211 printf "$SYSFS/power/state not available\n"
215 if [ $1 = "suspend" ]; then
217 elif [ $1 = "hibernate" ]; then
220 printf "$1 is not a valid option\n"
224 if [ -n $filename ]; then
225 present
=$
(cat $SYSFS/power
/state |
grep $filename)
227 if [ -z "$present" ]; then
228 printf "Tried to $1 but $filename isn't present in $SYSFS/power/state\n"
232 for i
in `seq 1 $2`; do
233 printf "Starting $1\n"
235 if [ "$3" = "rtc" ]; then
236 if ! command -v rtcwake
&> /dev
/null
; then
237 printf "rtcwake could not be found, please install it.\n"
241 rtcwake
-m $filename -s 15
243 if [ $?
-ne 0 ]; then
244 printf "Failed to suspend using RTC wake alarm\n"
249 echo $filename > $SYSFS/power
/state
250 printf "Came out of $1\n"
252 printf "Do basic tests after finishing $1 to verify cpufreq state\n\n"