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 Worker# Modules specific tests cases 5*053f45beSAndroid Build Coastguard Worker 6*053f45beSAndroid Build Coastguard Worker# protect against multiple inclusion 7*053f45beSAndroid Build Coastguard Workerif [ $FILE_MODULE ]; then 8*053f45beSAndroid Build Coastguard Worker return 0 9*053f45beSAndroid Build Coastguard Workerelse 10*053f45beSAndroid Build Coastguard Worker FILE_MODULE=DONE 11*053f45beSAndroid Build Coastguard Workerfi 12*053f45beSAndroid Build Coastguard Worker 13*053f45beSAndroid Build Coastguard Workersource cpu.sh 14*053f45beSAndroid Build Coastguard Workersource cpufreq.sh 15*053f45beSAndroid Build Coastguard Workersource governor.sh 16*053f45beSAndroid Build Coastguard Worker 17*053f45beSAndroid Build Coastguard Worker# Check basic insmod/rmmod 18*053f45beSAndroid Build Coastguard Worker# $1: module 19*053f45beSAndroid Build Coastguard Workertest_basic_insmod_rmmod() 20*053f45beSAndroid Build Coastguard Worker{ 21*053f45beSAndroid Build Coastguard Worker printf "** Test: Running ${FUNCNAME[0]} **\n\n" 22*053f45beSAndroid Build Coastguard Worker 23*053f45beSAndroid Build Coastguard Worker printf "Inserting $1 module\n" 24*053f45beSAndroid Build Coastguard Worker # insert module 25*053f45beSAndroid Build Coastguard Worker insmod $1 26*053f45beSAndroid Build Coastguard Worker if [ $? != 0 ]; then 27*053f45beSAndroid Build Coastguard Worker printf "Insmod $1 failed\n" 28*053f45beSAndroid Build Coastguard Worker exit; 29*053f45beSAndroid Build Coastguard Worker fi 30*053f45beSAndroid Build Coastguard Worker 31*053f45beSAndroid Build Coastguard Worker printf "Removing $1 module\n" 32*053f45beSAndroid Build Coastguard Worker # remove module 33*053f45beSAndroid Build Coastguard Worker rmmod $1 34*053f45beSAndroid Build Coastguard Worker if [ $? != 0 ]; then 35*053f45beSAndroid Build Coastguard Worker printf "rmmod $1 failed\n" 36*053f45beSAndroid Build Coastguard Worker exit; 37*053f45beSAndroid Build Coastguard Worker fi 38*053f45beSAndroid Build Coastguard Worker 39*053f45beSAndroid Build Coastguard Worker printf "\n" 40*053f45beSAndroid Build Coastguard Worker} 41*053f45beSAndroid Build Coastguard Worker 42*053f45beSAndroid Build Coastguard Worker# Insert cpufreq driver module and perform basic tests 43*053f45beSAndroid Build Coastguard Worker# $1: cpufreq-driver module to insert 44*053f45beSAndroid Build Coastguard Worker# $2: If we want to play with CPUs (1) or not (0) 45*053f45beSAndroid Build Coastguard Workermodule_driver_test_single() 46*053f45beSAndroid Build Coastguard Worker{ 47*053f45beSAndroid Build Coastguard Worker printf "** Test: Running ${FUNCNAME[0]} for driver $1 and cpus_hotplug=$2 **\n\n" 48*053f45beSAndroid Build Coastguard Worker 49*053f45beSAndroid Build Coastguard Worker if [ $2 -eq 1 ]; then 50*053f45beSAndroid Build Coastguard Worker # offline all non-boot CPUs 51*053f45beSAndroid Build Coastguard Worker for_each_non_boot_cpu offline_cpu 52*053f45beSAndroid Build Coastguard Worker printf "\n" 53*053f45beSAndroid Build Coastguard Worker fi 54*053f45beSAndroid Build Coastguard Worker 55*053f45beSAndroid Build Coastguard Worker # insert module 56*053f45beSAndroid Build Coastguard Worker printf "Inserting $1 module\n\n" 57*053f45beSAndroid Build Coastguard Worker insmod $1 58*053f45beSAndroid Build Coastguard Worker if [ $? != 0 ]; then 59*053f45beSAndroid Build Coastguard Worker printf "Insmod $1 failed\n" 60*053f45beSAndroid Build Coastguard Worker return; 61*053f45beSAndroid Build Coastguard Worker fi 62*053f45beSAndroid Build Coastguard Worker 63*053f45beSAndroid Build Coastguard Worker if [ $2 -eq 1 ]; then 64*053f45beSAndroid Build Coastguard Worker # online all non-boot CPUs 65*053f45beSAndroid Build Coastguard Worker for_each_non_boot_cpu online_cpu 66*053f45beSAndroid Build Coastguard Worker printf "\n" 67*053f45beSAndroid Build Coastguard Worker fi 68*053f45beSAndroid Build Coastguard Worker 69*053f45beSAndroid Build Coastguard Worker # run basic tests 70*053f45beSAndroid Build Coastguard Worker cpufreq_basic_tests 71*053f45beSAndroid Build Coastguard Worker 72*053f45beSAndroid Build Coastguard Worker # remove module 73*053f45beSAndroid Build Coastguard Worker printf "Removing $1 module\n\n" 74*053f45beSAndroid Build Coastguard Worker rmmod $1 75*053f45beSAndroid Build Coastguard Worker if [ $? != 0 ]; then 76*053f45beSAndroid Build Coastguard Worker printf "rmmod $1 failed\n" 77*053f45beSAndroid Build Coastguard Worker return; 78*053f45beSAndroid Build Coastguard Worker fi 79*053f45beSAndroid Build Coastguard Worker 80*053f45beSAndroid Build Coastguard Worker # There shouldn't be any cpufreq directories now. 81*053f45beSAndroid Build Coastguard Worker for_each_cpu cpu_should_not_have_cpufreq_directory 82*053f45beSAndroid Build Coastguard Worker printf "\n" 83*053f45beSAndroid Build Coastguard Worker} 84*053f45beSAndroid Build Coastguard Worker 85*053f45beSAndroid Build Coastguard Worker# $1: cpufreq-driver module to insert 86*053f45beSAndroid Build Coastguard Workermodule_driver_test() 87*053f45beSAndroid Build Coastguard Worker{ 88*053f45beSAndroid Build Coastguard Worker printf "** Test: Running ${FUNCNAME[0]} **\n\n" 89*053f45beSAndroid Build Coastguard Worker 90*053f45beSAndroid Build Coastguard Worker # check if module is present or not 91*053f45beSAndroid Build Coastguard Worker ls $1 > /dev/null 92*053f45beSAndroid Build Coastguard Worker if [ $? != 0 ]; then 93*053f45beSAndroid Build Coastguard Worker printf "$1: not present in `pwd` folder\n" 94*053f45beSAndroid Build Coastguard Worker return; 95*053f45beSAndroid Build Coastguard Worker fi 96*053f45beSAndroid Build Coastguard Worker 97*053f45beSAndroid Build Coastguard Worker # test basic module tests 98*053f45beSAndroid Build Coastguard Worker test_basic_insmod_rmmod $1 99*053f45beSAndroid Build Coastguard Worker 100*053f45beSAndroid Build Coastguard Worker # Do simple module test 101*053f45beSAndroid Build Coastguard Worker module_driver_test_single $1 0 102*053f45beSAndroid Build Coastguard Worker 103*053f45beSAndroid Build Coastguard Worker # Remove CPUs before inserting module and then bring them back 104*053f45beSAndroid Build Coastguard Worker module_driver_test_single $1 1 105*053f45beSAndroid Build Coastguard Worker printf "\n" 106*053f45beSAndroid Build Coastguard Worker} 107*053f45beSAndroid Build Coastguard Worker 108*053f45beSAndroid Build Coastguard Worker# find governor name based on governor module name 109*053f45beSAndroid Build Coastguard Worker# $1: governor module name 110*053f45beSAndroid Build Coastguard Workerfind_gov_name() 111*053f45beSAndroid Build Coastguard Worker{ 112*053f45beSAndroid Build Coastguard Worker if [ $1 = "cpufreq_ondemand.ko" ]; then 113*053f45beSAndroid Build Coastguard Worker printf "ondemand" 114*053f45beSAndroid Build Coastguard Worker elif [ $1 = "cpufreq_conservative.ko" ]; then 115*053f45beSAndroid Build Coastguard Worker printf "conservative" 116*053f45beSAndroid Build Coastguard Worker elif [ $1 = "cpufreq_userspace.ko" ]; then 117*053f45beSAndroid Build Coastguard Worker printf "userspace" 118*053f45beSAndroid Build Coastguard Worker elif [ $1 = "cpufreq_performance.ko" ]; then 119*053f45beSAndroid Build Coastguard Worker printf "performance" 120*053f45beSAndroid Build Coastguard Worker elif [ $1 = "cpufreq_powersave.ko" ]; then 121*053f45beSAndroid Build Coastguard Worker printf "powersave" 122*053f45beSAndroid Build Coastguard Worker elif [ $1 = "cpufreq_schedutil.ko" ]; then 123*053f45beSAndroid Build Coastguard Worker printf "schedutil" 124*053f45beSAndroid Build Coastguard Worker fi 125*053f45beSAndroid Build Coastguard Worker} 126*053f45beSAndroid Build Coastguard Worker 127*053f45beSAndroid Build Coastguard Worker# $1: governor string, $2: governor module, $3: policy 128*053f45beSAndroid Build Coastguard Worker# example: module_governor_test_single "ondemand" "cpufreq_ondemand.ko" 2 129*053f45beSAndroid Build Coastguard Workermodule_governor_test_single() 130*053f45beSAndroid Build Coastguard Worker{ 131*053f45beSAndroid Build Coastguard Worker printf "** Test: Running ${FUNCNAME[0]} for $3 **\n\n" 132*053f45beSAndroid Build Coastguard Worker 133*053f45beSAndroid Build Coastguard Worker backup_governor $3 134*053f45beSAndroid Build Coastguard Worker 135*053f45beSAndroid Build Coastguard Worker # switch to new governor 136*053f45beSAndroid Build Coastguard Worker printf "Switch from $CUR_GOV to $1\n" 137*053f45beSAndroid Build Coastguard Worker switch_show_governor $3 $1 138*053f45beSAndroid Build Coastguard Worker 139*053f45beSAndroid Build Coastguard Worker # try removing module, it should fail as governor is used 140*053f45beSAndroid Build Coastguard Worker printf "Removing $2 module\n\n" 141*053f45beSAndroid Build Coastguard Worker rmmod $2 142*053f45beSAndroid Build Coastguard Worker if [ $? = 0 ]; then 143*053f45beSAndroid Build Coastguard Worker printf "WARN: rmmod $2 succeeded even if governor is used\n" 144*053f45beSAndroid Build Coastguard Worker insmod $2 145*053f45beSAndroid Build Coastguard Worker else 146*053f45beSAndroid Build Coastguard Worker printf "Pass: unable to remove $2 while it is being used\n\n" 147*053f45beSAndroid Build Coastguard Worker fi 148*053f45beSAndroid Build Coastguard Worker 149*053f45beSAndroid Build Coastguard Worker # switch back to old governor 150*053f45beSAndroid Build Coastguard Worker printf "Switchback to $CUR_GOV from $1\n" 151*053f45beSAndroid Build Coastguard Worker restore_governor $3 152*053f45beSAndroid Build Coastguard Worker printf "\n" 153*053f45beSAndroid Build Coastguard Worker} 154*053f45beSAndroid Build Coastguard Worker 155*053f45beSAndroid Build Coastguard Worker# Insert cpufreq governor module and perform basic tests 156*053f45beSAndroid Build Coastguard Worker# $1: cpufreq-governor module to insert 157*053f45beSAndroid Build Coastguard Workermodule_governor_test() 158*053f45beSAndroid Build Coastguard Worker{ 159*053f45beSAndroid Build Coastguard Worker printf "** Test: Running ${FUNCNAME[0]} **\n\n" 160*053f45beSAndroid Build Coastguard Worker 161*053f45beSAndroid Build Coastguard Worker # check if module is present or not 162*053f45beSAndroid Build Coastguard Worker ls $1 > /dev/null 163*053f45beSAndroid Build Coastguard Worker if [ $? != 0 ]; then 164*053f45beSAndroid Build Coastguard Worker printf "$1: not present in `pwd` folder\n" 165*053f45beSAndroid Build Coastguard Worker return; 166*053f45beSAndroid Build Coastguard Worker fi 167*053f45beSAndroid Build Coastguard Worker 168*053f45beSAndroid Build Coastguard Worker # test basic module tests 169*053f45beSAndroid Build Coastguard Worker test_basic_insmod_rmmod $1 170*053f45beSAndroid Build Coastguard Worker 171*053f45beSAndroid Build Coastguard Worker # insert module 172*053f45beSAndroid Build Coastguard Worker printf "Inserting $1 module\n\n" 173*053f45beSAndroid Build Coastguard Worker insmod $1 174*053f45beSAndroid Build Coastguard Worker if [ $? != 0 ]; then 175*053f45beSAndroid Build Coastguard Worker printf "Insmod $1 failed\n" 176*053f45beSAndroid Build Coastguard Worker return; 177*053f45beSAndroid Build Coastguard Worker fi 178*053f45beSAndroid Build Coastguard Worker 179*053f45beSAndroid Build Coastguard Worker # switch to new governor for each cpu 180*053f45beSAndroid Build Coastguard Worker for_each_policy module_governor_test_single $(find_gov_name $1) $1 181*053f45beSAndroid Build Coastguard Worker 182*053f45beSAndroid Build Coastguard Worker # remove module 183*053f45beSAndroid Build Coastguard Worker printf "Removing $1 module\n\n" 184*053f45beSAndroid Build Coastguard Worker rmmod $1 185*053f45beSAndroid Build Coastguard Worker if [ $? != 0 ]; then 186*053f45beSAndroid Build Coastguard Worker printf "rmmod $1 failed\n" 187*053f45beSAndroid Build Coastguard Worker return; 188*053f45beSAndroid Build Coastguard Worker fi 189*053f45beSAndroid Build Coastguard Worker printf "\n" 190*053f45beSAndroid Build Coastguard Worker} 191*053f45beSAndroid Build Coastguard Worker 192*053f45beSAndroid Build Coastguard Worker# test modules: driver and governor 193*053f45beSAndroid Build Coastguard Worker# $1: driver module, $2: governor module 194*053f45beSAndroid Build Coastguard Workermodule_test() 195*053f45beSAndroid Build Coastguard Worker{ 196*053f45beSAndroid Build Coastguard Worker printf "** Test: Running ${FUNCNAME[0]} **\n\n" 197*053f45beSAndroid Build Coastguard Worker 198*053f45beSAndroid Build Coastguard Worker # check if modules are present or not 199*053f45beSAndroid Build Coastguard Worker ls $1 $2 > /dev/null 200*053f45beSAndroid Build Coastguard Worker if [ $? != 0 ]; then 201*053f45beSAndroid Build Coastguard Worker printf "$1 or $2: is not present in `pwd` folder\n" 202*053f45beSAndroid Build Coastguard Worker return; 203*053f45beSAndroid Build Coastguard Worker fi 204*053f45beSAndroid Build Coastguard Worker 205*053f45beSAndroid Build Coastguard Worker # TEST1: Insert gov after driver 206*053f45beSAndroid Build Coastguard Worker # insert driver module 207*053f45beSAndroid Build Coastguard Worker printf "Inserting $1 module\n\n" 208*053f45beSAndroid Build Coastguard Worker insmod $1 209*053f45beSAndroid Build Coastguard Worker if [ $? != 0 ]; then 210*053f45beSAndroid Build Coastguard Worker printf "Insmod $1 failed\n" 211*053f45beSAndroid Build Coastguard Worker return; 212*053f45beSAndroid Build Coastguard Worker fi 213*053f45beSAndroid Build Coastguard Worker 214*053f45beSAndroid Build Coastguard Worker # run governor tests 215*053f45beSAndroid Build Coastguard Worker module_governor_test $2 216*053f45beSAndroid Build Coastguard Worker 217*053f45beSAndroid Build Coastguard Worker # remove driver module 218*053f45beSAndroid Build Coastguard Worker printf "Removing $1 module\n\n" 219*053f45beSAndroid Build Coastguard Worker rmmod $1 220*053f45beSAndroid Build Coastguard Worker if [ $? != 0 ]; then 221*053f45beSAndroid Build Coastguard Worker printf "rmmod $1 failed\n" 222*053f45beSAndroid Build Coastguard Worker return; 223*053f45beSAndroid Build Coastguard Worker fi 224*053f45beSAndroid Build Coastguard Worker 225*053f45beSAndroid Build Coastguard Worker # TEST2: Insert driver after governor 226*053f45beSAndroid Build Coastguard Worker # insert governor module 227*053f45beSAndroid Build Coastguard Worker printf "Inserting $2 module\n\n" 228*053f45beSAndroid Build Coastguard Worker insmod $2 229*053f45beSAndroid Build Coastguard Worker if [ $? != 0 ]; then 230*053f45beSAndroid Build Coastguard Worker printf "Insmod $2 failed\n" 231*053f45beSAndroid Build Coastguard Worker return; 232*053f45beSAndroid Build Coastguard Worker fi 233*053f45beSAndroid Build Coastguard Worker 234*053f45beSAndroid Build Coastguard Worker # run governor tests 235*053f45beSAndroid Build Coastguard Worker module_driver_test $1 236*053f45beSAndroid Build Coastguard Worker 237*053f45beSAndroid Build Coastguard Worker # remove driver module 238*053f45beSAndroid Build Coastguard Worker printf "Removing $2 module\n\n" 239*053f45beSAndroid Build Coastguard Worker rmmod $2 240*053f45beSAndroid Build Coastguard Worker if [ $? != 0 ]; then 241*053f45beSAndroid Build Coastguard Worker printf "rmmod $2 failed\n" 242*053f45beSAndroid Build Coastguard Worker return; 243*053f45beSAndroid Build Coastguard Worker fi 244*053f45beSAndroid Build Coastguard Worker} 245