#!/bin/sh # # This file is part of cputemp2maxfreq. # # Copyright (C) 2023, 2024 pa4wdh # # cputemp2maxfreq is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # cputemp2maxfreq is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with cputemp2maxfreq. If not, see . # TEMP_INPUT=/sys/devices/virtual/thermal/thermal_zone0/temp TEMP_MAX=70000 FREQ_STEP=100000 read CPU_MIN < /sys/devices/system/cpu/cpufreq/policy0/cpuinfo_min_freq read CPU_MAX < /sys/devices/system/cpu/cpufreq/policy0/cpuinfo_max_freq read GOV_MAX < /sys/devices/system/cpu/cpufreq/policy0/scaling_max_freq CPUS=`find /sys/devices/system/cpu -name "cpufreq" -type l` set_max_freq() { local NEWFREQ=$1 for CPU in $CPUS do echo "$NEWFREQ" > "$CPU/scaling_max_freq" done sleep 0.1 read GOV_MAX < /sys/devices/system/cpu/cpufreq/policy0/scaling_max_freq } while true do read TEMP < /sys/devices/virtual/thermal/thermal_zone0/temp read CPU_CUR < /sys/devices/system/cpu/cpufreq/policy0/scaling_cur_freq printf "$TEMP $TEMP_MAX $CPU_MAX $GOV_MAX $CPU_CUR" if [ "$TEMP" -lt "$TEMP_MAX" -a "$GOV_MAX" -lt "$CPU_MAX" ] then DIFF=$(((TEMP_MAX-TEMP)/1000)) NEWFREQ=$((GOV_MAX+(FREQ_STEP*DIFF))) if [ "$NEWFREQ" -gt "$CPU_MAX" ] then NEWFREQ=$CPU_MAX fi printf " Increase GOV_MAX to $NEWFREQ" set_max_freq $NEWFREQ fi if [ "$TEMP" -gt "$TEMP_MAX" -a "$GOV_MAX" -gt "$CPU_MIN" ] then DIFF=$(((TEMP-TEMP_MAX)/1000)) NEWFREQ=$((GOV_MAX-(FREQ_STEP*DIFF))) if [ "$NEWFREQ" -lt "$CPU_MIN" ] then NEWFREQ=$CPU_MIN fi printf " Decrease GOV_MAX to $NEWFREQ" set_max_freq $NEWFREQ fi echo "" sleep 10 done