xref: /aosp_15_r20/external/linux-kselftest/tools/testing/selftests/cpufreq/special-tests.sh (revision 053f45be4e351dfd5e965df293cd45b779f579ee)
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# Special test cases reported by people
5*053f45beSAndroid Build Coastguard Worker
6*053f45beSAndroid Build Coastguard Worker# Testcase 1: Reported here: http://marc.info/?l=linux-pm&m=140618592709858&w=2
7*053f45beSAndroid Build Coastguard Worker
8*053f45beSAndroid Build Coastguard Worker# protect against multiple inclusion
9*053f45beSAndroid Build Coastguard Workerif [ $FILE_SPECIAL ]; then
10*053f45beSAndroid Build Coastguard Worker	return 0
11*053f45beSAndroid Build Coastguard Workerelse
12*053f45beSAndroid Build Coastguard Worker	FILE_SPECIAL=DONE
13*053f45beSAndroid Build Coastguard Workerfi
14*053f45beSAndroid Build Coastguard Worker
15*053f45beSAndroid Build Coastguard Workersource cpu.sh
16*053f45beSAndroid Build Coastguard Workersource cpufreq.sh
17*053f45beSAndroid Build Coastguard Workersource governor.sh
18*053f45beSAndroid Build Coastguard Worker
19*053f45beSAndroid Build Coastguard Worker# Test 1
20*053f45beSAndroid Build Coastguard Worker# $1: policy
21*053f45beSAndroid Build Coastguard Worker__simple_lockdep()
22*053f45beSAndroid Build Coastguard Worker{
23*053f45beSAndroid Build Coastguard Worker	# switch to ondemand
24*053f45beSAndroid Build Coastguard Worker	__switch_governor $1 "ondemand"
25*053f45beSAndroid Build Coastguard Worker
26*053f45beSAndroid Build Coastguard Worker	# cat ondemand files
27*053f45beSAndroid Build Coastguard Worker	local ondir=$(find_gov_directory $1 "ondemand")
28*053f45beSAndroid Build Coastguard Worker	if [ -z $ondir ]; then
29*053f45beSAndroid Build Coastguard Worker		printf "${FUNCNAME[0]}Ondemand directory not created, quit"
30*053f45beSAndroid Build Coastguard Worker		return
31*053f45beSAndroid Build Coastguard Worker	fi
32*053f45beSAndroid Build Coastguard Worker
33*053f45beSAndroid Build Coastguard Worker	cat $ondir/*
34*053f45beSAndroid Build Coastguard Worker
35*053f45beSAndroid Build Coastguard Worker	# switch to conservative
36*053f45beSAndroid Build Coastguard Worker	__switch_governor $1 "conservative"
37*053f45beSAndroid Build Coastguard Worker}
38*053f45beSAndroid Build Coastguard Worker
39*053f45beSAndroid Build Coastguard Workersimple_lockdep()
40*053f45beSAndroid Build Coastguard Worker{
41*053f45beSAndroid Build Coastguard Worker	printf "** Test: Running ${FUNCNAME[0]} **\n"
42*053f45beSAndroid Build Coastguard Worker
43*053f45beSAndroid Build Coastguard Worker	for_each_policy __simple_lockdep
44*053f45beSAndroid Build Coastguard Worker}
45*053f45beSAndroid Build Coastguard Worker
46*053f45beSAndroid Build Coastguard Worker# Test 2
47*053f45beSAndroid Build Coastguard Worker# $1: policy
48*053f45beSAndroid Build Coastguard Worker__concurrent_lockdep()
49*053f45beSAndroid Build Coastguard Worker{
50*053f45beSAndroid Build Coastguard Worker	for i in `seq 0 100`; do
51*053f45beSAndroid Build Coastguard Worker		__simple_lockdep $1
52*053f45beSAndroid Build Coastguard Worker	done
53*053f45beSAndroid Build Coastguard Worker}
54*053f45beSAndroid Build Coastguard Worker
55*053f45beSAndroid Build Coastguard Workerconcurrent_lockdep()
56*053f45beSAndroid Build Coastguard Worker{
57*053f45beSAndroid Build Coastguard Worker	printf "** Test: Running ${FUNCNAME[0]} **\n"
58*053f45beSAndroid Build Coastguard Worker
59*053f45beSAndroid Build Coastguard Worker	for_each_policy_concurrent __concurrent_lockdep
60*053f45beSAndroid Build Coastguard Worker}
61*053f45beSAndroid Build Coastguard Worker
62*053f45beSAndroid Build Coastguard Worker# Test 3
63*053f45beSAndroid Build Coastguard Workerquick_shuffle()
64*053f45beSAndroid Build Coastguard Worker{
65*053f45beSAndroid Build Coastguard Worker	# this is called concurrently from governor_race
66*053f45beSAndroid Build Coastguard Worker	for I in `seq 1000`
67*053f45beSAndroid Build Coastguard Worker	do
68*053f45beSAndroid Build Coastguard Worker		echo ondemand | sudo tee $CPUFREQROOT/policy*/scaling_governor &
69*053f45beSAndroid Build Coastguard Worker		echo userspace | sudo tee $CPUFREQROOT/policy*/scaling_governor &
70*053f45beSAndroid Build Coastguard Worker	done
71*053f45beSAndroid Build Coastguard Worker}
72*053f45beSAndroid Build Coastguard Worker
73*053f45beSAndroid Build Coastguard Workergovernor_race()
74*053f45beSAndroid Build Coastguard Worker{
75*053f45beSAndroid Build Coastguard Worker	printf "** Test: Running ${FUNCNAME[0]} **\n"
76*053f45beSAndroid Build Coastguard Worker
77*053f45beSAndroid Build Coastguard Worker	# run 8 concurrent instances
78*053f45beSAndroid Build Coastguard Worker	for I in `seq 8`
79*053f45beSAndroid Build Coastguard Worker	do
80*053f45beSAndroid Build Coastguard Worker		quick_shuffle &
81*053f45beSAndroid Build Coastguard Worker	done
82*053f45beSAndroid Build Coastguard Worker}
83*053f45beSAndroid Build Coastguard Worker
84*053f45beSAndroid Build Coastguard Worker# Test 4
85*053f45beSAndroid Build Coastguard Worker# $1: cpu
86*053f45beSAndroid Build Coastguard Workerhotplug_with_updates_cpu()
87*053f45beSAndroid Build Coastguard Worker{
88*053f45beSAndroid Build Coastguard Worker	local filepath="$CPUROOT/$1/cpufreq"
89*053f45beSAndroid Build Coastguard Worker
90*053f45beSAndroid Build Coastguard Worker	# switch to ondemand
91*053f45beSAndroid Build Coastguard Worker	__switch_governor_for_cpu $1 "ondemand"
92*053f45beSAndroid Build Coastguard Worker
93*053f45beSAndroid Build Coastguard Worker	for i in `seq 1 5000`
94*053f45beSAndroid Build Coastguard Worker	do
95*053f45beSAndroid Build Coastguard Worker		reboot_cpu $1
96*053f45beSAndroid Build Coastguard Worker	done &
97*053f45beSAndroid Build Coastguard Worker
98*053f45beSAndroid Build Coastguard Worker	local freqs=$(cat $filepath/scaling_available_frequencies)
99*053f45beSAndroid Build Coastguard Worker	local oldfreq=$(cat $filepath/scaling_min_freq)
100*053f45beSAndroid Build Coastguard Worker
101*053f45beSAndroid Build Coastguard Worker	for j in `seq 1 5000`
102*053f45beSAndroid Build Coastguard Worker	do
103*053f45beSAndroid Build Coastguard Worker		# Set all frequencies one-by-one
104*053f45beSAndroid Build Coastguard Worker		for freq in $freqs; do
105*053f45beSAndroid Build Coastguard Worker			echo $freq > $filepath/scaling_min_freq
106*053f45beSAndroid Build Coastguard Worker		done
107*053f45beSAndroid Build Coastguard Worker	done
108*053f45beSAndroid Build Coastguard Worker
109*053f45beSAndroid Build Coastguard Worker	# restore old freq
110*053f45beSAndroid Build Coastguard Worker	echo $oldfreq > $filepath/scaling_min_freq
111*053f45beSAndroid Build Coastguard Worker}
112*053f45beSAndroid Build Coastguard Worker
113*053f45beSAndroid Build Coastguard Workerhotplug_with_updates()
114*053f45beSAndroid Build Coastguard Worker{
115*053f45beSAndroid Build Coastguard Worker	for_each_non_boot_cpu hotplug_with_updates_cpu
116*053f45beSAndroid Build Coastguard Worker}
117