mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-08-17 01:39:34 +00:00

Add RTC wakeup alarm for devices to resume after specific time interval. This improvement in the test will help in enabling this test in the CI systems and will eliminate the need of manual intervention for resuming back the devices after suspend/hibernation. Signed-off-by: Shreeya Patel <shreeya.patel@collabora.com> Acked-by: Viresh Kumar <viresh.kumar@linaro.org> Signed-off-by: Shuah Khan <skhan@linuxfoundation.org>
219 lines
4.1 KiB
Bash
Executable File
219 lines
4.1 KiB
Bash
Executable File
#!/bin/bash
|
|
# SPDX-License-Identifier: GPL-2.0
|
|
|
|
source cpu.sh
|
|
source cpufreq.sh
|
|
source governor.sh
|
|
source module.sh
|
|
source special-tests.sh
|
|
|
|
DIR="$(dirname $(readlink -f "$0"))"
|
|
source "${DIR}"/../kselftest/ktap_helpers.sh
|
|
|
|
FUNC=basic # do basic tests by default
|
|
OUTFILE=cpufreq_selftest
|
|
SYSFS=
|
|
CPUROOT=
|
|
CPUFREQROOT=
|
|
|
|
helpme()
|
|
{
|
|
printf "Usage: $0 [-h] [-todg args]
|
|
[-h <help>]
|
|
[-o <output-file-for-dump>]
|
|
[-t <basic: Basic cpufreq testing
|
|
suspend: suspend/resume,
|
|
hibernate: hibernate/resume,
|
|
suspend_rtc: suspend/resume back using the RTC wakeup alarm,
|
|
hibernate_rtc: hibernate/resume back using the RTC wakeup alarm,
|
|
modtest: test driver or governor modules. Only to be used with -d or -g options,
|
|
sptest1: Simple governor switch to produce lockdep.
|
|
sptest2: Concurrent governor switch to produce lockdep.
|
|
sptest3: Governor races, shuffle between governors quickly.
|
|
sptest4: CPU hotplugs with updates to cpufreq files.>]
|
|
[-d <driver's module name: only with \"-t modtest>\"]
|
|
[-g <governor's module name: only with \"-t modtest>\"]
|
|
\n"
|
|
exit "${KSFT_FAIL}"
|
|
}
|
|
|
|
prerequisite()
|
|
{
|
|
msg="skip all tests:"
|
|
|
|
if [ $UID != 0 ]; then
|
|
ktap_skip_all "$msg must be run as root"
|
|
exit "${KSFT_SKIP}"
|
|
fi
|
|
|
|
taskset -p 01 $$
|
|
|
|
SYSFS=`mount -t sysfs | head -1 | awk '{ print $3 }'`
|
|
|
|
if [ ! -d "$SYSFS" ]; then
|
|
ktap_skip_all "$msg sysfs is not mounted"
|
|
exit "${KSFT_SKIP}"
|
|
fi
|
|
|
|
CPUROOT=$SYSFS/devices/system/cpu
|
|
CPUFREQROOT="$CPUROOT/cpufreq"
|
|
|
|
if ! ls $CPUROOT/cpu* > /dev/null 2>&1; then
|
|
ktap_skip_all "$msg cpus not available in sysfs"
|
|
exit "${KSFT_SKIP}"
|
|
fi
|
|
|
|
if ! ls $CPUROOT/cpufreq > /dev/null 2>&1; then
|
|
ktap_skip_all "$msg cpufreq directory not available in sysfs"
|
|
exit "${KSFT_SKIP}"
|
|
fi
|
|
}
|
|
|
|
parse_arguments()
|
|
{
|
|
while getopts ht:o:d:g: arg
|
|
do
|
|
case $arg in
|
|
h) # --help
|
|
helpme
|
|
;;
|
|
|
|
t) # --func_type (Function to perform: basic, suspend, hibernate,
|
|
# suspend_rtc, hibernate_rtc, modtest, sptest1/2/3/4 (default: basic))
|
|
FUNC=$OPTARG
|
|
;;
|
|
|
|
o) # --output-file (Output file to store dumps)
|
|
OUTFILE=$OPTARG
|
|
;;
|
|
|
|
d) # --driver-mod-name (Name of the driver module)
|
|
DRIVER_MOD=$OPTARG
|
|
;;
|
|
|
|
g) # --governor-mod-name (Name of the governor module)
|
|
GOVERNOR_MOD=$OPTARG
|
|
;;
|
|
|
|
\?)
|
|
helpme
|
|
;;
|
|
esac
|
|
done
|
|
}
|
|
|
|
do_test()
|
|
{
|
|
# Check if CPUs are managed by cpufreq or not
|
|
count=$(count_cpufreq_managed_cpus)
|
|
|
|
if [ $count = 0 -a $FUNC != "modtest" ]; then
|
|
ktap_exit_fail_msg "No cpu is managed by cpufreq core, exiting"
|
|
fi
|
|
|
|
case "$FUNC" in
|
|
"basic")
|
|
cpufreq_basic_tests
|
|
;;
|
|
|
|
"suspend")
|
|
do_suspend "suspend" 1
|
|
;;
|
|
|
|
"hibernate")
|
|
do_suspend "hibernate" 1
|
|
;;
|
|
|
|
"suspend_rtc")
|
|
do_suspend "suspend" 1 rtc
|
|
;;
|
|
|
|
"hibernate_rtc")
|
|
do_suspend "hibernate" 1 rtc
|
|
;;
|
|
|
|
"modtest")
|
|
# Do we have modules in place?
|
|
if [ -z $DRIVER_MOD ] && [ -z $GOVERNOR_MOD ]; then
|
|
ktap_exit_fail_msg "No driver or governor module passed with -d or -g"
|
|
fi
|
|
|
|
if [ $DRIVER_MOD ]; then
|
|
if [ $GOVERNOR_MOD ]; then
|
|
module_test $DRIVER_MOD $GOVERNOR_MOD
|
|
else
|
|
module_driver_test $DRIVER_MOD
|
|
fi
|
|
else
|
|
if [ $count = 0 ]; then
|
|
ktap_exit_fail_msg "No cpu is managed by cpufreq core, exiting"
|
|
fi
|
|
|
|
module_governor_test $GOVERNOR_MOD
|
|
fi
|
|
;;
|
|
|
|
"sptest1")
|
|
simple_lockdep
|
|
;;
|
|
|
|
"sptest2")
|
|
concurrent_lockdep
|
|
;;
|
|
|
|
"sptest3")
|
|
governor_race
|
|
;;
|
|
|
|
"sptest4")
|
|
hotplug_with_updates
|
|
;;
|
|
|
|
*)
|
|
ktap_print_msg "Invalid [-f] function type"
|
|
helpme
|
|
;;
|
|
esac
|
|
}
|
|
|
|
# clear dumps
|
|
# $1: file name
|
|
clear_dumps()
|
|
{
|
|
echo "" > $1.txt
|
|
echo "" > $1.dmesg_cpufreq.txt
|
|
echo "" > $1.dmesg_full.txt
|
|
}
|
|
|
|
# $1: output file name
|
|
dmesg_dumps()
|
|
{
|
|
dmesg | grep cpufreq >> $1.dmesg_cpufreq.txt
|
|
|
|
# We may need the full logs as well
|
|
dmesg >> $1.dmesg_full.txt
|
|
}
|
|
|
|
ktap_print_header
|
|
|
|
# Parse arguments
|
|
parse_arguments $@
|
|
|
|
ktap_set_plan 1
|
|
|
|
# Make sure all requirements are met
|
|
prerequisite
|
|
|
|
# Run requested functions
|
|
clear_dumps $OUTFILE
|
|
do_test | tee -a $OUTFILE.txt
|
|
if [ "${PIPESTATUS[0]}" -ne 0 ]; then
|
|
exit ${PIPESTATUS[0]};
|
|
fi
|
|
dmesg_dumps $OUTFILE
|
|
|
|
ktap_test_pass "Completed successfully"
|
|
|
|
ktap_print_totals
|
|
exit "${KSFT_PASS}"
|