Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags   |
#!/bin/bash
# SPDX-License-Identifier: GPL-2.0
# protect against multiple inclusion
if [ $FILE_CPUFREQ ]; then
<------>return 0
else
<------>FILE_CPUFREQ=DONE
fi
source cpu.sh
# $1: cpu
cpu_should_have_cpufreq_directory()
{
<------>if [ ! -d $CPUROOT/$1/cpufreq ]; then
<------><------>printf "Warning: No cpufreq directory present for $1\n"
<------>fi
}
cpu_should_not_have_cpufreq_directory()
{
<------>if [ -d $CPUROOT/$1/cpufreq ]; then
<------><------>printf "Warning: cpufreq directory present for $1\n"
<------>fi
}
for_each_policy()
{
<------>policies=$(ls $CPUFREQROOT| grep "policy[0-9].*")
<------>for policy in $policies; do
<------><------>$@ $policy
<------>done
}
for_each_policy_concurrent()
{
<------>policies=$(ls $CPUFREQROOT| grep "policy[0-9].*")
<------>for policy in $policies; do
<------><------>$@ $policy &
<------>done
}
# $1: Path
read_cpufreq_files_in_dir()
{
<------>local files=`ls $1`
<------>printf "Printing directory: $1\n\n"
<------>for file in $files; do
<------><------>if [ -f $1/$file ]; then
<------><------><------>printf "$file:"
<------><------><------>cat $1/$file
<------><------>else
<------><------><------>printf "\n"
<------><------><------>read_cpufreq_files_in_dir "$1/$file"
<------><------>fi
<------>done
<------>printf "\n"
}
read_all_cpufreq_files()
{
<------>printf "** Test: Running ${FUNCNAME[0]} **\n\n"
<------>read_cpufreq_files_in_dir $CPUFREQROOT
<------>printf "%s\n\n" "------------------------------------------------"
}
# UPDATE CPUFREQ FILES
# $1: directory path
update_cpufreq_files_in_dir()
{
<------>local files=`ls $1`
<------>printf "Updating directory: $1\n\n"
<------>for file in $files; do
<------><------>if [ -f $1/$file ]; then
<------><------><------># file is writable ?
<------><------><------>local wfile=$(ls -l $1/$file | awk '$1 ~ /^.*w.*/ { print $NF; }')
<------><------><------>if [ ! -z $wfile ]; then
<------><------><------><------># scaling_setspeed is a special file and we
<------><------><------><------># should skip updating it
<------><------><------><------>if [ $file != "scaling_setspeed" ]; then
<------><------><------><------><------>local val=$(cat $1/$file)
<------><------><------><------><------>printf "Writing $val to: $file\n"
<------><------><------><------><------>echo $val > $1/$file
<------><------><------><------>fi
<------><------><------>fi
<------><------>else
<------><------><------>printf "\n"
<------><------><------>update_cpufreq_files_in_dir "$1/$file"
<------><------>fi
<------>done
<------>printf "\n"
}
# Update all writable files with their existing values
update_all_cpufreq_files()
{
<------>printf "** Test: Running ${FUNCNAME[0]} **\n\n"
<------>update_cpufreq_files_in_dir $CPUFREQROOT
<------>printf "%s\n\n" "------------------------------------------------"
}
# CHANGE CPU FREQUENCIES
# $1: policy
find_current_freq()
{
<------>cat $CPUFREQROOT/$1/scaling_cur_freq
}
# $1: policy
# $2: frequency
set_cpu_frequency()
{
<------>printf "Change frequency for $1 to $2\n"
<------>echo $2 > $CPUFREQROOT/$1/scaling_setspeed
}
# $1: policy
test_all_frequencies()
{
<------>local filepath="$CPUFREQROOT/$1"
<------>backup_governor $1
<------>local found=$(switch_governor $1 "userspace")
<------>if [ $found = 1 ]; then
<------><------>printf "${FUNCNAME[0]}: userspace governor not available for: $1\n"
<------><------>return;
<------>fi
<------>printf "Switched governor for $1 to userspace\n\n"
<------>local freqs=$(cat $filepath/scaling_available_frequencies)
<------>printf "Available frequencies for $1: $freqs\n\n"
<------># Set all frequencies one-by-one
<------>for freq in $freqs; do
<------><------>set_cpu_frequency $1 $freq
<------>done
<------>printf "\n"
<------>restore_governor $1
}
# $1: loop count
shuffle_frequency_for_all_cpus()
{
<------>printf "** Test: Running ${FUNCNAME[0]} for $1 loops **\n\n"
<------>for i in `seq 1 $1`; do
<------><------>for_each_policy test_all_frequencies
<------>done
<------>printf "\n%s\n\n" "------------------------------------------------"
}
# Basic cpufreq tests
cpufreq_basic_tests()
{
<------>printf "*** RUNNING CPUFREQ SANITY TESTS ***\n"
<------>printf "====================================\n\n"
<------>count=$(count_cpufreq_managed_cpus)
<------>if [ $count = 0 ]; then
<------><------>printf "No cpu is managed by cpufreq core, exiting\n"
<------><------>exit;
<------>else
<------><------>printf "CPUFreq manages: $count CPUs\n\n"
<------>fi
<------># Detect & print which CPUs are not managed by cpufreq
<------>print_unmanaged_cpus
<------># read/update all cpufreq files
<------>read_all_cpufreq_files
<------>update_all_cpufreq_files
<------># hotplug cpus
<------>reboot_cpus 5
<------># Test all frequencies
<------>shuffle_frequency_for_all_cpus 2
<------># Test all governors
<------>shuffle_governors_for_all_cpus 1
}
# Suspend/resume
# $1: "suspend" or "hibernate", $2: loop count
do_suspend()
{
<------>printf "** Test: Running ${FUNCNAME[0]}: Trying $1 for $2 loops **\n\n"
<------># Is the directory available
<------>if [ ! -d $SYSFS/power/ -o ! -f $SYSFS/power/state ]; then
<------><------>printf "$SYSFS/power/state not available\n"
<------><------>return 1
<------>fi
<------>if [ $1 = "suspend" ]; then
<------><------>filename="mem"
<------>elif [ $1 = "hibernate" ]; then
<------><------>filename="disk"
<------>else
<------><------>printf "$1 is not a valid option\n"
<------><------>return 1
<------>fi
<------>if [ -n $filename ]; then
<------><------>present=$(cat $SYSFS/power/state | grep $filename)
<------><------>if [ -z "$present" ]; then
<------><------><------>printf "Tried to $1 but $filename isn't present in $SYSFS/power/state\n"
<------><------><------>return 1;
<------><------>fi
<------><------>for i in `seq 1 $2`; do
<------><------><------>printf "Starting $1\n"
<------><------><------>echo $filename > $SYSFS/power/state
<------><------><------>printf "Came out of $1\n"
<------><------><------>printf "Do basic tests after finishing $1 to verify cpufreq state\n\n"
<------><------><------>cpufreq_basic_tests
<------><------>done
<------>fi
}