162306a36Sopenharmony_ci#!/bin/bash 262306a36Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0 362306a36Sopenharmony_ci 462306a36Sopenharmony_cisource cpu.sh 562306a36Sopenharmony_cisource cpufreq.sh 662306a36Sopenharmony_cisource governor.sh 762306a36Sopenharmony_cisource module.sh 862306a36Sopenharmony_cisource special-tests.sh 962306a36Sopenharmony_ci 1062306a36Sopenharmony_ciFUNC=basic # do basic tests by default 1162306a36Sopenharmony_ciOUTFILE=cpufreq_selftest 1262306a36Sopenharmony_ciSYSFS= 1362306a36Sopenharmony_ciCPUROOT= 1462306a36Sopenharmony_ciCPUFREQROOT= 1562306a36Sopenharmony_ci 1662306a36Sopenharmony_ci# Kselftest framework requirement - SKIP code is 4. 1762306a36Sopenharmony_ciksft_skip=4 1862306a36Sopenharmony_ci 1962306a36Sopenharmony_cihelpme() 2062306a36Sopenharmony_ci{ 2162306a36Sopenharmony_ci printf "Usage: $0 [-h] [-todg args] 2262306a36Sopenharmony_ci [-h <help>] 2362306a36Sopenharmony_ci [-o <output-file-for-dump>] 2462306a36Sopenharmony_ci [-t <basic: Basic cpufreq testing 2562306a36Sopenharmony_ci suspend: suspend/resume, 2662306a36Sopenharmony_ci hibernate: hibernate/resume, 2762306a36Sopenharmony_ci modtest: test driver or governor modules. Only to be used with -d or -g options, 2862306a36Sopenharmony_ci sptest1: Simple governor switch to produce lockdep. 2962306a36Sopenharmony_ci sptest2: Concurrent governor switch to produce lockdep. 3062306a36Sopenharmony_ci sptest3: Governor races, shuffle between governors quickly. 3162306a36Sopenharmony_ci sptest4: CPU hotplugs with updates to cpufreq files.>] 3262306a36Sopenharmony_ci [-d <driver's module name: only with \"-t modtest>\"] 3362306a36Sopenharmony_ci [-g <governor's module name: only with \"-t modtest>\"] 3462306a36Sopenharmony_ci \n" 3562306a36Sopenharmony_ci exit 2 3662306a36Sopenharmony_ci} 3762306a36Sopenharmony_ci 3862306a36Sopenharmony_ciprerequisite() 3962306a36Sopenharmony_ci{ 4062306a36Sopenharmony_ci msg="skip all tests:" 4162306a36Sopenharmony_ci 4262306a36Sopenharmony_ci if [ $UID != 0 ]; then 4362306a36Sopenharmony_ci echo $msg must be run as root >&2 4462306a36Sopenharmony_ci exit $ksft_skip 4562306a36Sopenharmony_ci fi 4662306a36Sopenharmony_ci 4762306a36Sopenharmony_ci taskset -p 01 $$ 4862306a36Sopenharmony_ci 4962306a36Sopenharmony_ci SYSFS=`mount -t sysfs | head -1 | awk '{ print $3 }'` 5062306a36Sopenharmony_ci 5162306a36Sopenharmony_ci if [ ! -d "$SYSFS" ]; then 5262306a36Sopenharmony_ci echo $msg sysfs is not mounted >&2 5362306a36Sopenharmony_ci exit 2 5462306a36Sopenharmony_ci fi 5562306a36Sopenharmony_ci 5662306a36Sopenharmony_ci CPUROOT=$SYSFS/devices/system/cpu 5762306a36Sopenharmony_ci CPUFREQROOT="$CPUROOT/cpufreq" 5862306a36Sopenharmony_ci 5962306a36Sopenharmony_ci if ! ls $CPUROOT/cpu* > /dev/null 2>&1; then 6062306a36Sopenharmony_ci echo $msg cpus not available in sysfs >&2 6162306a36Sopenharmony_ci exit 2 6262306a36Sopenharmony_ci fi 6362306a36Sopenharmony_ci 6462306a36Sopenharmony_ci if ! ls $CPUROOT/cpufreq > /dev/null 2>&1; then 6562306a36Sopenharmony_ci echo $msg cpufreq directory not available in sysfs >&2 6662306a36Sopenharmony_ci exit 2 6762306a36Sopenharmony_ci fi 6862306a36Sopenharmony_ci} 6962306a36Sopenharmony_ci 7062306a36Sopenharmony_ciparse_arguments() 7162306a36Sopenharmony_ci{ 7262306a36Sopenharmony_ci while getopts ht:o:d:g: arg 7362306a36Sopenharmony_ci do 7462306a36Sopenharmony_ci case $arg in 7562306a36Sopenharmony_ci h) # --help 7662306a36Sopenharmony_ci helpme 7762306a36Sopenharmony_ci ;; 7862306a36Sopenharmony_ci 7962306a36Sopenharmony_ci t) # --func_type (Function to perform: basic, suspend, hibernate, modtest, sptest1/2/3/4 (default: basic)) 8062306a36Sopenharmony_ci FUNC=$OPTARG 8162306a36Sopenharmony_ci ;; 8262306a36Sopenharmony_ci 8362306a36Sopenharmony_ci o) # --output-file (Output file to store dumps) 8462306a36Sopenharmony_ci OUTFILE=$OPTARG 8562306a36Sopenharmony_ci ;; 8662306a36Sopenharmony_ci 8762306a36Sopenharmony_ci d) # --driver-mod-name (Name of the driver module) 8862306a36Sopenharmony_ci DRIVER_MOD=$OPTARG 8962306a36Sopenharmony_ci ;; 9062306a36Sopenharmony_ci 9162306a36Sopenharmony_ci g) # --governor-mod-name (Name of the governor module) 9262306a36Sopenharmony_ci GOVERNOR_MOD=$OPTARG 9362306a36Sopenharmony_ci ;; 9462306a36Sopenharmony_ci 9562306a36Sopenharmony_ci \?) 9662306a36Sopenharmony_ci helpme 9762306a36Sopenharmony_ci ;; 9862306a36Sopenharmony_ci esac 9962306a36Sopenharmony_ci done 10062306a36Sopenharmony_ci} 10162306a36Sopenharmony_ci 10262306a36Sopenharmony_cido_test() 10362306a36Sopenharmony_ci{ 10462306a36Sopenharmony_ci # Check if CPUs are managed by cpufreq or not 10562306a36Sopenharmony_ci count=$(count_cpufreq_managed_cpus) 10662306a36Sopenharmony_ci 10762306a36Sopenharmony_ci if [ $count = 0 -a $FUNC != "modtest" ]; then 10862306a36Sopenharmony_ci echo "No cpu is managed by cpufreq core, exiting" 10962306a36Sopenharmony_ci exit 2; 11062306a36Sopenharmony_ci fi 11162306a36Sopenharmony_ci 11262306a36Sopenharmony_ci case "$FUNC" in 11362306a36Sopenharmony_ci "basic") 11462306a36Sopenharmony_ci cpufreq_basic_tests 11562306a36Sopenharmony_ci ;; 11662306a36Sopenharmony_ci 11762306a36Sopenharmony_ci "suspend") 11862306a36Sopenharmony_ci do_suspend "suspend" 1 11962306a36Sopenharmony_ci ;; 12062306a36Sopenharmony_ci 12162306a36Sopenharmony_ci "hibernate") 12262306a36Sopenharmony_ci do_suspend "hibernate" 1 12362306a36Sopenharmony_ci ;; 12462306a36Sopenharmony_ci 12562306a36Sopenharmony_ci "modtest") 12662306a36Sopenharmony_ci # Do we have modules in place? 12762306a36Sopenharmony_ci if [ -z $DRIVER_MOD ] && [ -z $GOVERNOR_MOD ]; then 12862306a36Sopenharmony_ci echo "No driver or governor module passed with -d or -g" 12962306a36Sopenharmony_ci exit 2; 13062306a36Sopenharmony_ci fi 13162306a36Sopenharmony_ci 13262306a36Sopenharmony_ci if [ $DRIVER_MOD ]; then 13362306a36Sopenharmony_ci if [ $GOVERNOR_MOD ]; then 13462306a36Sopenharmony_ci module_test $DRIVER_MOD $GOVERNOR_MOD 13562306a36Sopenharmony_ci else 13662306a36Sopenharmony_ci module_driver_test $DRIVER_MOD 13762306a36Sopenharmony_ci fi 13862306a36Sopenharmony_ci else 13962306a36Sopenharmony_ci if [ $count = 0 ]; then 14062306a36Sopenharmony_ci echo "No cpu is managed by cpufreq core, exiting" 14162306a36Sopenharmony_ci exit 2; 14262306a36Sopenharmony_ci fi 14362306a36Sopenharmony_ci 14462306a36Sopenharmony_ci module_governor_test $GOVERNOR_MOD 14562306a36Sopenharmony_ci fi 14662306a36Sopenharmony_ci ;; 14762306a36Sopenharmony_ci 14862306a36Sopenharmony_ci "sptest1") 14962306a36Sopenharmony_ci simple_lockdep 15062306a36Sopenharmony_ci ;; 15162306a36Sopenharmony_ci 15262306a36Sopenharmony_ci "sptest2") 15362306a36Sopenharmony_ci concurrent_lockdep 15462306a36Sopenharmony_ci ;; 15562306a36Sopenharmony_ci 15662306a36Sopenharmony_ci "sptest3") 15762306a36Sopenharmony_ci governor_race 15862306a36Sopenharmony_ci ;; 15962306a36Sopenharmony_ci 16062306a36Sopenharmony_ci "sptest4") 16162306a36Sopenharmony_ci hotplug_with_updates 16262306a36Sopenharmony_ci ;; 16362306a36Sopenharmony_ci 16462306a36Sopenharmony_ci *) 16562306a36Sopenharmony_ci echo "Invalid [-f] function type" 16662306a36Sopenharmony_ci helpme 16762306a36Sopenharmony_ci ;; 16862306a36Sopenharmony_ci esac 16962306a36Sopenharmony_ci} 17062306a36Sopenharmony_ci 17162306a36Sopenharmony_ci# clear dumps 17262306a36Sopenharmony_ci# $1: file name 17362306a36Sopenharmony_ciclear_dumps() 17462306a36Sopenharmony_ci{ 17562306a36Sopenharmony_ci echo "" > $1.txt 17662306a36Sopenharmony_ci echo "" > $1.dmesg_cpufreq.txt 17762306a36Sopenharmony_ci echo "" > $1.dmesg_full.txt 17862306a36Sopenharmony_ci} 17962306a36Sopenharmony_ci 18062306a36Sopenharmony_ci# $1: output file name 18162306a36Sopenharmony_cidmesg_dumps() 18262306a36Sopenharmony_ci{ 18362306a36Sopenharmony_ci dmesg | grep cpufreq >> $1.dmesg_cpufreq.txt 18462306a36Sopenharmony_ci 18562306a36Sopenharmony_ci # We may need the full logs as well 18662306a36Sopenharmony_ci dmesg >> $1.dmesg_full.txt 18762306a36Sopenharmony_ci} 18862306a36Sopenharmony_ci 18962306a36Sopenharmony_ci# Parse arguments 19062306a36Sopenharmony_ciparse_arguments $@ 19162306a36Sopenharmony_ci 19262306a36Sopenharmony_ci# Make sure all requirements are met 19362306a36Sopenharmony_ciprerequisite 19462306a36Sopenharmony_ci 19562306a36Sopenharmony_ci# Run requested functions 19662306a36Sopenharmony_ciclear_dumps $OUTFILE 19762306a36Sopenharmony_cido_test | tee -a $OUTFILE.txt 19862306a36Sopenharmony_cidmesg_dumps $OUTFILE 199