2017-01-13 12:06:45 +05:30
#!/bin/bash
source cpu.sh
source cpufreq.sh
source governor.sh
2017-01-13 12:06:47 +05:30
source module.sh
2017-01-13 12:06:45 +05:30
FUNC = basic # do basic tests by default
OUTFILE = cpufreq_selftest
SYSFS =
CPUROOT =
CPUFREQROOT =
helpme( )
{
2017-01-13 12:06:47 +05:30
printf " Usage: $0 [-h] [-todg args]
2017-01-13 12:06:45 +05:30
[ -h <help>]
[ -o <output-file-for-dump>]
2017-01-13 12:06:46 +05:30
[ -t <basic: Basic cpufreq testing
suspend: suspend/resume,
2017-01-13 12:06:47 +05:30
hibernate: hibernate/resume,
modtest: test driver or governor modules. Only to be used with -d or -g options>]
[ -d <driver' s module name: only with \" -t modtest>\" ]
[ -g <governor' s module name: only with \" -t modtest>\" ]
2017-01-13 12:06:45 +05:30
\n "
exit 2
}
prerequisite( )
{
msg = "skip all tests:"
if [ $UID != 0 ] ; then
echo $msg must be run as root >& 2
exit 2
fi
taskset -p 01 $$
SYSFS = ` mount -t sysfs | head -1 | awk '{ print $3 }' `
if [ ! -d " $SYSFS " ] ; then
echo $msg sysfs is not mounted >& 2
exit 2
fi
CPUROOT = $SYSFS /devices/system/cpu
CPUFREQROOT = " $CPUROOT /cpufreq "
if ! ls $CPUROOT /cpu* > /dev/null 2>& 1; then
echo $msg cpus not available in sysfs >& 2
exit 2
fi
if ! ls $CPUROOT /cpufreq > /dev/null 2>& 1; then
echo $msg cpufreq directory not available in sysfs >& 2
exit 2
fi
}
parse_arguments( )
{
2017-01-13 12:06:47 +05:30
while getopts ht:o:d:g: arg
2017-01-13 12:06:45 +05:30
do
case $arg in
h) # --help
helpme
; ;
2017-01-13 12:06:47 +05:30
t) # --func_type (Function to perform: basic, suspend, hibernate, modtest (default: basic))
2017-01-13 12:06:45 +05:30
FUNC = $OPTARG
; ;
o) # --output-file (Output file to store dumps)
OUTFILE = $OPTARG
; ;
2017-01-13 12:06:47 +05:30
d) # --driver-mod-name (Name of the driver module)
DRIVER_MOD = $OPTARG
; ;
g) # --governor-mod-name (Name of the governor module)
GOVERNOR_MOD = $OPTARG
; ;
2017-01-13 12:06:45 +05:30
\? )
helpme
; ;
esac
done
}
do_test( )
{
# Check if CPUs are managed by cpufreq or not
count = $( count_cpufreq_managed_cpus)
2017-01-13 12:06:47 +05:30
if [ $count = 0 -a $FUNC != "modtest" ] ; then
2017-01-13 12:06:45 +05:30
echo "No cpu is managed by cpufreq core, exiting"
exit 2;
fi
case " $FUNC " in
"basic" )
cpufreq_basic_tests
; ;
2017-01-13 12:06:46 +05:30
"suspend" )
do_suspend "suspend" 1
; ;
"hibernate" )
do_suspend "hibernate" 1
; ;
2017-01-13 12:06:47 +05:30
"modtest" )
# Do we have modules in place?
if [ -z $DRIVER_MOD ] && [ -z $GOVERNOR_MOD ] ; then
echo "No driver or governor module passed with -d or -g"
exit 2;
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
echo "No cpu is managed by cpufreq core, exiting"
exit 2;
fi
module_governor_test $GOVERNOR_MOD
fi
; ;
2017-01-13 12:06:45 +05:30
*)
echo "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
}
# Parse arguments
parse_arguments $@
# Make sure all requirements are met
prerequisite
# Run requested functions
clear_dumps $OUTFILE
do_test >> $OUTFILE .txt
dmesg_dumps $OUTFILE