Input: wm97xx: add new AC97 bus support
[sfrench/cifs-2.6.git] / tools / testing / selftests / cpufreq / governor.sh
1 #!/bin/bash
2 #
3 # Test governors
4
5 # protect against multiple inclusion
6 if [ $FILE_GOVERNOR ]; then
7         return 0
8 else
9         FILE_GOVERNOR=DONE
10 fi
11
12 source cpu.sh
13 source cpufreq.sh
14
15 CUR_GOV=
16 CUR_FREQ=
17
18 # Find governor's directory path
19 # $1: policy, $2: governor
20 find_gov_directory()
21 {
22         if [ -d $CPUFREQROOT/$2 ]; then
23                 printf "$CPUFREQROOT/$2\n"
24         elif [ -d $CPUFREQROOT/$1/$2 ]; then
25                 printf "$CPUFREQROOT/$1/$2\n"
26         else
27                 printf "INVALID\n"
28         fi
29 }
30
31 # $1: policy
32 find_current_governor()
33 {
34         cat $CPUFREQROOT/$1/scaling_governor
35 }
36
37 # $1: policy
38 backup_governor()
39 {
40         CUR_GOV=$(find_current_governor $1)
41
42         printf "Governor backup done for $1: $CUR_GOV\n"
43
44         if [ $CUR_GOV == "userspace" ]; then
45                 CUR_FREQ=$(find_current_freq $1)
46                 printf "Governor frequency backup done for $1: $CUR_FREQ\n"
47         fi
48
49         printf "\n"
50 }
51
52 # $1: policy
53 restore_governor()
54 {
55         __switch_governor $1 $CUR_GOV
56
57         printf "Governor restored for $1 to $CUR_GOV\n"
58
59         if [ $CUR_GOV == "userspace" ]; then
60                 set_cpu_frequency $1 $CUR_FREQ
61                 printf "Governor frequency restored for $1: $CUR_FREQ\n"
62         fi
63
64         printf "\n"
65 }
66
67 # param:
68 # $1: policy, $2: governor
69 __switch_governor()
70 {
71         echo $2 > $CPUFREQROOT/$1/scaling_governor
72 }
73
74 # param:
75 # $1: cpu, $2: governor
76 __switch_governor_for_cpu()
77 {
78         echo $2 > $CPUROOT/$1/cpufreq/scaling_governor
79 }
80
81 # SWITCH GOVERNORS
82
83 # $1: cpu, $2: governor
84 switch_governor()
85 {
86         local filepath=$CPUFREQROOT/$1/scaling_available_governors
87
88         # check if governor is available
89         local found=$(cat $filepath | grep $2 | wc -l)
90         if [ $found = 0 ]; then
91                 echo 1;
92                 return
93         fi
94
95         __switch_governor $1 $2
96         echo 0;
97 }
98
99 # $1: policy, $2: governor
100 switch_show_governor()
101 {
102         cur_gov=find_current_governor
103         if [ $cur_gov == "userspace" ]; then
104                 cur_freq=find_current_freq
105         fi
106
107         # switch governor
108         __switch_governor $1 $2
109
110         printf "\nSwitched governor for $1 to $2\n\n"
111
112         if [ $2 == "userspace" -o $2 == "powersave" -o $2 == "performance" ]; then
113                 printf "No files to read for $2 governor\n\n"
114                 return
115         fi
116
117         # show governor files
118         local govpath=$(find_gov_directory $1 $2)
119         read_cpufreq_files_in_dir $govpath
120 }
121
122 # $1: function to be called, $2: policy
123 call_for_each_governor()
124 {
125         local filepath=$CPUFREQROOT/$2/scaling_available_governors
126
127         # Exit if cpu isn't managed by cpufreq core
128         if [ ! -f $filepath ]; then
129                 return;
130         fi
131
132         backup_governor $2
133
134         local governors=$(cat $filepath)
135         printf "Available governors for $2: $governors\n"
136
137         for governor in $governors; do
138                 $1 $2 $governor
139         done
140
141         restore_governor $2
142 }
143
144 # $1: loop count
145 shuffle_governors_for_all_cpus()
146 {
147         printf "** Test: Running ${FUNCNAME[0]} for $1 loops **\n\n"
148
149         for i in `seq 1 $1`; do
150                 for_each_policy call_for_each_governor switch_show_governor
151         done
152         printf "%s\n\n" "------------------------------------------------"
153 }