1*053f45beSAndroid Build Coastguard Worker#!/bin/bash 2*053f45beSAndroid Build Coastguard Worker# SPDX-License-Identifier: GPL-2.0 3*053f45beSAndroid Build Coastguard Worker 4*053f45beSAndroid Build Coastguard Workersource cpu.sh 5*053f45beSAndroid Build Coastguard Workersource cpufreq.sh 6*053f45beSAndroid Build Coastguard Workersource governor.sh 7*053f45beSAndroid Build Coastguard Workersource module.sh 8*053f45beSAndroid Build Coastguard Workersource special-tests.sh 9*053f45beSAndroid Build Coastguard Worker 10*053f45beSAndroid Build Coastguard WorkerFUNC=basic # do basic tests by default 11*053f45beSAndroid Build Coastguard WorkerOUTFILE=cpufreq_selftest 12*053f45beSAndroid Build Coastguard WorkerSYSFS= 13*053f45beSAndroid Build Coastguard WorkerCPUROOT= 14*053f45beSAndroid Build Coastguard WorkerCPUFREQROOT= 15*053f45beSAndroid Build Coastguard Worker 16*053f45beSAndroid Build Coastguard Worker# Kselftest framework requirement - SKIP code is 4. 17*053f45beSAndroid Build Coastguard Workerksft_skip=4 18*053f45beSAndroid Build Coastguard Worker 19*053f45beSAndroid Build Coastguard Workerhelpme() 20*053f45beSAndroid Build Coastguard Worker{ 21*053f45beSAndroid Build Coastguard Worker printf "Usage: $0 [-h] [-todg args] 22*053f45beSAndroid Build Coastguard Worker [-h <help>] 23*053f45beSAndroid Build Coastguard Worker [-o <output-file-for-dump>] 24*053f45beSAndroid Build Coastguard Worker [-t <basic: Basic cpufreq testing 25*053f45beSAndroid Build Coastguard Worker suspend: suspend/resume, 26*053f45beSAndroid Build Coastguard Worker hibernate: hibernate/resume, 27*053f45beSAndroid Build Coastguard Worker modtest: test driver or governor modules. Only to be used with -d or -g options, 28*053f45beSAndroid Build Coastguard Worker sptest1: Simple governor switch to produce lockdep. 29*053f45beSAndroid Build Coastguard Worker sptest2: Concurrent governor switch to produce lockdep. 30*053f45beSAndroid Build Coastguard Worker sptest3: Governor races, shuffle between governors quickly. 31*053f45beSAndroid Build Coastguard Worker sptest4: CPU hotplugs with updates to cpufreq files.>] 32*053f45beSAndroid Build Coastguard Worker [-d <driver's module name: only with \"-t modtest>\"] 33*053f45beSAndroid Build Coastguard Worker [-g <governor's module name: only with \"-t modtest>\"] 34*053f45beSAndroid Build Coastguard Worker \n" 35*053f45beSAndroid Build Coastguard Worker exit 2 36*053f45beSAndroid Build Coastguard Worker} 37*053f45beSAndroid Build Coastguard Worker 38*053f45beSAndroid Build Coastguard Workerprerequisite() 39*053f45beSAndroid Build Coastguard Worker{ 40*053f45beSAndroid Build Coastguard Worker msg="skip all tests:" 41*053f45beSAndroid Build Coastguard Worker 42*053f45beSAndroid Build Coastguard Worker if [ $UID != 0 ]; then 43*053f45beSAndroid Build Coastguard Worker echo $msg must be run as root >&2 44*053f45beSAndroid Build Coastguard Worker exit $ksft_skip 45*053f45beSAndroid Build Coastguard Worker fi 46*053f45beSAndroid Build Coastguard Worker 47*053f45beSAndroid Build Coastguard Worker taskset -p 01 $$ 48*053f45beSAndroid Build Coastguard Worker 49*053f45beSAndroid Build Coastguard Worker SYSFS=`mount -t sysfs | head -1 | awk '{ print $3 }'` 50*053f45beSAndroid Build Coastguard Worker 51*053f45beSAndroid Build Coastguard Worker if [ ! -d "$SYSFS" ]; then 52*053f45beSAndroid Build Coastguard Worker echo $msg sysfs is not mounted >&2 53*053f45beSAndroid Build Coastguard Worker exit 2 54*053f45beSAndroid Build Coastguard Worker fi 55*053f45beSAndroid Build Coastguard Worker 56*053f45beSAndroid Build Coastguard Worker CPUROOT=$SYSFS/devices/system/cpu 57*053f45beSAndroid Build Coastguard Worker CPUFREQROOT="$CPUROOT/cpufreq" 58*053f45beSAndroid Build Coastguard Worker 59*053f45beSAndroid Build Coastguard Worker if ! ls $CPUROOT/cpu* > /dev/null 2>&1; then 60*053f45beSAndroid Build Coastguard Worker echo $msg cpus not available in sysfs >&2 61*053f45beSAndroid Build Coastguard Worker exit 2 62*053f45beSAndroid Build Coastguard Worker fi 63*053f45beSAndroid Build Coastguard Worker 64*053f45beSAndroid Build Coastguard Worker if ! ls $CPUROOT/cpufreq > /dev/null 2>&1; then 65*053f45beSAndroid Build Coastguard Worker echo $msg cpufreq directory not available in sysfs >&2 66*053f45beSAndroid Build Coastguard Worker exit 2 67*053f45beSAndroid Build Coastguard Worker fi 68*053f45beSAndroid Build Coastguard Worker} 69*053f45beSAndroid Build Coastguard Worker 70*053f45beSAndroid Build Coastguard Workerparse_arguments() 71*053f45beSAndroid Build Coastguard Worker{ 72*053f45beSAndroid Build Coastguard Worker while getopts ht:o:d:g: arg 73*053f45beSAndroid Build Coastguard Worker do 74*053f45beSAndroid Build Coastguard Worker case $arg in 75*053f45beSAndroid Build Coastguard Worker h) # --help 76*053f45beSAndroid Build Coastguard Worker helpme 77*053f45beSAndroid Build Coastguard Worker ;; 78*053f45beSAndroid Build Coastguard Worker 79*053f45beSAndroid Build Coastguard Worker t) # --func_type (Function to perform: basic, suspend, hibernate, modtest, sptest1/2/3/4 (default: basic)) 80*053f45beSAndroid Build Coastguard Worker FUNC=$OPTARG 81*053f45beSAndroid Build Coastguard Worker ;; 82*053f45beSAndroid Build Coastguard Worker 83*053f45beSAndroid Build Coastguard Worker o) # --output-file (Output file to store dumps) 84*053f45beSAndroid Build Coastguard Worker OUTFILE=$OPTARG 85*053f45beSAndroid Build Coastguard Worker ;; 86*053f45beSAndroid Build Coastguard Worker 87*053f45beSAndroid Build Coastguard Worker d) # --driver-mod-name (Name of the driver module) 88*053f45beSAndroid Build Coastguard Worker DRIVER_MOD=$OPTARG 89*053f45beSAndroid Build Coastguard Worker ;; 90*053f45beSAndroid Build Coastguard Worker 91*053f45beSAndroid Build Coastguard Worker g) # --governor-mod-name (Name of the governor module) 92*053f45beSAndroid Build Coastguard Worker GOVERNOR_MOD=$OPTARG 93*053f45beSAndroid Build Coastguard Worker ;; 94*053f45beSAndroid Build Coastguard Worker 95*053f45beSAndroid Build Coastguard Worker \?) 96*053f45beSAndroid Build Coastguard Worker helpme 97*053f45beSAndroid Build Coastguard Worker ;; 98*053f45beSAndroid Build Coastguard Worker esac 99*053f45beSAndroid Build Coastguard Worker done 100*053f45beSAndroid Build Coastguard Worker} 101*053f45beSAndroid Build Coastguard Worker 102*053f45beSAndroid Build Coastguard Workerdo_test() 103*053f45beSAndroid Build Coastguard Worker{ 104*053f45beSAndroid Build Coastguard Worker # Check if CPUs are managed by cpufreq or not 105*053f45beSAndroid Build Coastguard Worker count=$(count_cpufreq_managed_cpus) 106*053f45beSAndroid Build Coastguard Worker 107*053f45beSAndroid Build Coastguard Worker if [ $count = 0 -a $FUNC != "modtest" ]; then 108*053f45beSAndroid Build Coastguard Worker echo "No cpu is managed by cpufreq core, exiting" 109*053f45beSAndroid Build Coastguard Worker exit 2; 110*053f45beSAndroid Build Coastguard Worker fi 111*053f45beSAndroid Build Coastguard Worker 112*053f45beSAndroid Build Coastguard Worker case "$FUNC" in 113*053f45beSAndroid Build Coastguard Worker "basic") 114*053f45beSAndroid Build Coastguard Worker cpufreq_basic_tests 115*053f45beSAndroid Build Coastguard Worker ;; 116*053f45beSAndroid Build Coastguard Worker 117*053f45beSAndroid Build Coastguard Worker "suspend") 118*053f45beSAndroid Build Coastguard Worker do_suspend "suspend" 1 119*053f45beSAndroid Build Coastguard Worker ;; 120*053f45beSAndroid Build Coastguard Worker 121*053f45beSAndroid Build Coastguard Worker "hibernate") 122*053f45beSAndroid Build Coastguard Worker do_suspend "hibernate" 1 123*053f45beSAndroid Build Coastguard Worker ;; 124*053f45beSAndroid Build Coastguard Worker 125*053f45beSAndroid Build Coastguard Worker "modtest") 126*053f45beSAndroid Build Coastguard Worker # Do we have modules in place? 127*053f45beSAndroid Build Coastguard Worker if [ -z $DRIVER_MOD ] && [ -z $GOVERNOR_MOD ]; then 128*053f45beSAndroid Build Coastguard Worker echo "No driver or governor module passed with -d or -g" 129*053f45beSAndroid Build Coastguard Worker exit 2; 130*053f45beSAndroid Build Coastguard Worker fi 131*053f45beSAndroid Build Coastguard Worker 132*053f45beSAndroid Build Coastguard Worker if [ $DRIVER_MOD ]; then 133*053f45beSAndroid Build Coastguard Worker if [ $GOVERNOR_MOD ]; then 134*053f45beSAndroid Build Coastguard Worker module_test $DRIVER_MOD $GOVERNOR_MOD 135*053f45beSAndroid Build Coastguard Worker else 136*053f45beSAndroid Build Coastguard Worker module_driver_test $DRIVER_MOD 137*053f45beSAndroid Build Coastguard Worker fi 138*053f45beSAndroid Build Coastguard Worker else 139*053f45beSAndroid Build Coastguard Worker if [ $count = 0 ]; then 140*053f45beSAndroid Build Coastguard Worker echo "No cpu is managed by cpufreq core, exiting" 141*053f45beSAndroid Build Coastguard Worker exit 2; 142*053f45beSAndroid Build Coastguard Worker fi 143*053f45beSAndroid Build Coastguard Worker 144*053f45beSAndroid Build Coastguard Worker module_governor_test $GOVERNOR_MOD 145*053f45beSAndroid Build Coastguard Worker fi 146*053f45beSAndroid Build Coastguard Worker ;; 147*053f45beSAndroid Build Coastguard Worker 148*053f45beSAndroid Build Coastguard Worker "sptest1") 149*053f45beSAndroid Build Coastguard Worker simple_lockdep 150*053f45beSAndroid Build Coastguard Worker ;; 151*053f45beSAndroid Build Coastguard Worker 152*053f45beSAndroid Build Coastguard Worker "sptest2") 153*053f45beSAndroid Build Coastguard Worker concurrent_lockdep 154*053f45beSAndroid Build Coastguard Worker ;; 155*053f45beSAndroid Build Coastguard Worker 156*053f45beSAndroid Build Coastguard Worker "sptest3") 157*053f45beSAndroid Build Coastguard Worker governor_race 158*053f45beSAndroid Build Coastguard Worker ;; 159*053f45beSAndroid Build Coastguard Worker 160*053f45beSAndroid Build Coastguard Worker "sptest4") 161*053f45beSAndroid Build Coastguard Worker hotplug_with_updates 162*053f45beSAndroid Build Coastguard Worker ;; 163*053f45beSAndroid Build Coastguard Worker 164*053f45beSAndroid Build Coastguard Worker *) 165*053f45beSAndroid Build Coastguard Worker echo "Invalid [-f] function type" 166*053f45beSAndroid Build Coastguard Worker helpme 167*053f45beSAndroid Build Coastguard Worker ;; 168*053f45beSAndroid Build Coastguard Worker esac 169*053f45beSAndroid Build Coastguard Worker} 170*053f45beSAndroid Build Coastguard Worker 171*053f45beSAndroid Build Coastguard Worker# clear dumps 172*053f45beSAndroid Build Coastguard Worker# $1: file name 173*053f45beSAndroid Build Coastguard Workerclear_dumps() 174*053f45beSAndroid Build Coastguard Worker{ 175*053f45beSAndroid Build Coastguard Worker echo "" > $1.txt 176*053f45beSAndroid Build Coastguard Worker echo "" > $1.dmesg_cpufreq.txt 177*053f45beSAndroid Build Coastguard Worker echo "" > $1.dmesg_full.txt 178*053f45beSAndroid Build Coastguard Worker} 179*053f45beSAndroid Build Coastguard Worker 180*053f45beSAndroid Build Coastguard Worker# $1: output file name 181*053f45beSAndroid Build Coastguard Workerdmesg_dumps() 182*053f45beSAndroid Build Coastguard Worker{ 183*053f45beSAndroid Build Coastguard Worker dmesg | grep cpufreq >> $1.dmesg_cpufreq.txt 184*053f45beSAndroid Build Coastguard Worker 185*053f45beSAndroid Build Coastguard Worker # We may need the full logs as well 186*053f45beSAndroid Build Coastguard Worker dmesg >> $1.dmesg_full.txt 187*053f45beSAndroid Build Coastguard Worker} 188*053f45beSAndroid Build Coastguard Worker 189*053f45beSAndroid Build Coastguard Worker# Parse arguments 190*053f45beSAndroid Build Coastguard Workerparse_arguments $@ 191*053f45beSAndroid Build Coastguard Worker 192*053f45beSAndroid Build Coastguard Worker# Make sure all requirements are met 193*053f45beSAndroid Build Coastguard Workerprerequisite 194*053f45beSAndroid Build Coastguard Worker 195*053f45beSAndroid Build Coastguard Worker# Run requested functions 196*053f45beSAndroid Build Coastguard Workerclear_dumps $OUTFILE 197*053f45beSAndroid Build Coastguard Workerdo_test | tee -a $OUTFILE.txt 198*053f45beSAndroid Build Coastguard Workerdmesg_dumps $OUTFILE 199