Merge tag 'trace-printf-v6.13' of git://git.kernel.org/pub/scm/linux/kernel/git/trace...
[drm/drm-misc.git] / tools / testing / selftests / cpufreq / main.sh
blobf12ff7416e416ffd607e85391cf773e8611da423
1 #!/bin/bash
2 # SPDX-License-Identifier: GPL-2.0
4 source cpu.sh
5 source cpufreq.sh
6 source governor.sh
7 source module.sh
8 source special-tests.sh
10 DIR="$(dirname $(readlink -f "$0"))"
11 source "${DIR}"/../kselftest/ktap_helpers.sh
13 FUNC=basic # do basic tests by default
14 OUTFILE=cpufreq_selftest
15 SYSFS=
16 CPUROOT=
17 CPUFREQROOT=
19 helpme()
21 printf "Usage: $0 [-h] [-todg args]
22 [-h <help>]
23 [-o <output-file-for-dump>]
24 [-t <basic: Basic cpufreq testing
25 suspend: suspend/resume,
26 hibernate: hibernate/resume,
27 suspend_rtc: suspend/resume back using the RTC wakeup alarm,
28 hibernate_rtc: hibernate/resume back using the RTC wakeup alarm,
29 modtest: test driver or governor modules. Only to be used with -d or -g options,
30 sptest1: Simple governor switch to produce lockdep.
31 sptest2: Concurrent governor switch to produce lockdep.
32 sptest3: Governor races, shuffle between governors quickly.
33 sptest4: CPU hotplugs with updates to cpufreq files.>]
34 [-d <driver's module name: only with \"-t modtest>\"]
35 [-g <governor's module name: only with \"-t modtest>\"]
36 \n"
37 exit "${KSFT_FAIL}"
40 prerequisite()
42 msg="skip all tests:"
44 if [ $UID != 0 ]; then
45 ktap_skip_all "$msg must be run as root"
46 exit "${KSFT_SKIP}"
49 taskset -p 01 $$
51 SYSFS=`mount -t sysfs | head -1 | awk '{ print $3 }'`
53 if [ ! -d "$SYSFS" ]; then
54 ktap_skip_all "$msg sysfs is not mounted"
55 exit "${KSFT_SKIP}"
58 CPUROOT=$SYSFS/devices/system/cpu
59 CPUFREQROOT="$CPUROOT/cpufreq"
61 if ! ls $CPUROOT/cpu* > /dev/null 2>&1; then
62 ktap_skip_all "$msg cpus not available in sysfs"
63 exit "${KSFT_SKIP}"
66 if ! ls $CPUROOT/cpufreq > /dev/null 2>&1; then
67 ktap_skip_all "$msg cpufreq directory not available in sysfs"
68 exit "${KSFT_SKIP}"
72 parse_arguments()
74 while getopts ht:o:d:g: arg
76 case $arg in
77 h) # --help
78 helpme
81 t) # --func_type (Function to perform: basic, suspend, hibernate,
82 # suspend_rtc, hibernate_rtc, modtest, sptest1/2/3/4 (default: basic))
83 FUNC=$OPTARG
86 o) # --output-file (Output file to store dumps)
87 OUTFILE=$OPTARG
90 d) # --driver-mod-name (Name of the driver module)
91 DRIVER_MOD=$OPTARG
94 g) # --governor-mod-name (Name of the governor module)
95 GOVERNOR_MOD=$OPTARG
98 \?)
99 helpme
101 esac
102 done
105 do_test()
107 # Check if CPUs are managed by cpufreq or not
108 count=$(count_cpufreq_managed_cpus)
110 if [ $count = 0 -a $FUNC != "modtest" ]; then
111 ktap_exit_fail_msg "No cpu is managed by cpufreq core, exiting"
114 case "$FUNC" in
115 "basic")
116 cpufreq_basic_tests
119 "suspend")
120 do_suspend "suspend" 1
123 "hibernate")
124 do_suspend "hibernate" 1
127 "suspend_rtc")
128 do_suspend "suspend" 1 rtc
131 "hibernate_rtc")
132 do_suspend "hibernate" 1 rtc
135 "modtest")
136 # Do we have modules in place?
137 if [ -z $DRIVER_MOD ] && [ -z $GOVERNOR_MOD ]; then
138 ktap_exit_fail_msg "No driver or governor module passed with -d or -g"
141 if [ $DRIVER_MOD ]; then
142 if [ $GOVERNOR_MOD ]; then
143 module_test $DRIVER_MOD $GOVERNOR_MOD
144 else
145 module_driver_test $DRIVER_MOD
147 else
148 if [ $count = 0 ]; then
149 ktap_exit_fail_msg "No cpu is managed by cpufreq core, exiting"
152 module_governor_test $GOVERNOR_MOD
156 "sptest1")
157 simple_lockdep
160 "sptest2")
161 concurrent_lockdep
164 "sptest3")
165 governor_race
168 "sptest4")
169 hotplug_with_updates
173 ktap_print_msg "Invalid [-f] function type"
174 helpme
176 esac
179 # clear dumps
180 # $1: file name
181 clear_dumps()
183 echo "" > $1.txt
184 echo "" > $1.dmesg_cpufreq.txt
185 echo "" > $1.dmesg_full.txt
188 # $1: output file name
189 dmesg_dumps()
191 dmesg | grep cpufreq >> $1.dmesg_cpufreq.txt
193 # We may need the full logs as well
194 dmesg >> $1.dmesg_full.txt
197 ktap_print_header
199 # Parse arguments
200 parse_arguments $@
202 ktap_set_plan 1
204 # Make sure all requirements are met
205 prerequisite
207 # Run requested functions
208 clear_dumps $OUTFILE
209 do_test | tee -a $OUTFILE.txt
210 if [ "${PIPESTATUS[0]}" -ne 0 ]; then
211 exit ${PIPESTATUS[0]};
213 dmesg_dumps $OUTFILE
215 ktap_test_pass "Completed successfully"
217 ktap_print_totals
218 exit "${KSFT_PASS}"