From 5ae6c94265a112badb6ef1d7793d367eedb9a41c Mon Sep 17 00:00:00 2001
From: PA4WDH
Date: Sat, 20 May 2023 14:11:46 +0200
Subject: Initial commit, POC shell script

---
 poc/cputemp2maxfreq.sh | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 55 insertions(+)
 create mode 100755 poc/cputemp2maxfreq.sh

(limited to 'poc')

diff --git a/poc/cputemp2maxfreq.sh b/poc/cputemp2maxfreq.sh
new file mode 100755
index 0000000..f2da851
--- /dev/null
+++ b/poc/cputemp2maxfreq.sh
@@ -0,0 +1,55 @@
+#!/bin/sh
+
+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
-- 
cgit v1.2.3