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