distribution/packages/sysutils/powerstate/profile.d/030-powerfunctions

157 lines
3.8 KiB
Text
Raw Normal View History

#!/bin/bash
# SPDX-License-Identifier: GPL-2.0
# Copyright (C) 2023 JELOS (https://github.com/JustEnoughLinuxOS)
get_gpu_power_profile() {
cat /sys/class/drm/card0/device/power_dpm_state 2>/dev/null
}
gpu_power_profile() {
for card in /sys/class/drm/card*/device/power_dpm_state
do
if [ -e "${card}" ]
then
echo ${1} >${card} 2>/dev/null
fi
done
}
get_gpu_performance_level() {
case ${HW_ARCH} in
x86_64)
cat /sys/class/drm/card0/device/power_dpm_force_performance_level 2>/dev/null
;;
aarch64)
get_setting system.gpuperf
;;
esac
}
gpu_performance_level() {
case ${HW_ARCH} in
x86_64)
for card in /sys/class/drm/card*/device/power_dpm_force_performance_level
do
if [ -e "${card}" ]
then
echo ${1} >${card} 2>/dev/null
fi
done
;;
aarch64)
case ${1} in
profile_peak)
set_gpu_gov performance
;;
auto|profile_standard)
set_gpu_gov ondemand
;;
low)
set_gpu_gov powersave
;;
esac
;;
esac
}
pcie_aspm_policy() {
PCIEPOWERSAVE=$(get_setting system.power.pcie)
POWERSAVEENABLED=$(get_setting system.powersave)
if [ "${PCIEPOWERSAVE}" = "1" ] &&
[ "${POWERSAVEENABLED}" = "1" ]
then
if [ -e "/sys/module/pcie_aspm/parameters/policy" ]
then
echo ${1} >/sys/module/pcie_aspm/parameters/policy 2>/dev/null
fi
fi
}
cpu_perftune() {
CPUPOWERSAVE=$(get_setting system.power.cpu)
POWERSAVEENABLED=$(get_setting system.powersave)
if [ "${CPUPOWERSAVE}" = "1" ] && \
[ "${POWERSAVEENABLED}" = "1" ]
then
CPU="$(awk '/vendor_id/ {print $3;exit}' /proc/cpuinfo)"
if [ "${CPU}" = "AuthenticAMD" ]
then
if [ "${1}" = "battery" ]
then
ryzenadj --power-saving >/dev/null 2>&1
else
ryzenadj --max-performance >/dev/null 2>&1
fi
elif [ "${CPU}" = "GenuineIntel" ]
then
for policy in $(find /sys/devices/system/cpu/cpufreq/policy*/ -name energy_performance_preference)
do
if [ "${1}" = "battery" ]
then
echo power >${policy} >/dev/null 2>&1
else
echo performance >${policy} >/dev/null 2>&1
fi
done
fi
fi
}
audio_powersave() {
POWERSAVEENABLED=$(get_setting system.powersave)
AUDIOPOWERSAVE=$(get_setting system.power.audio)
if [ "${AUDIOPOWERSAVE}" = "1" ] &&
[ "${POWERSAVEENABLED}" = "1" ]
then
for MODULE in snd_hda_intel snd_ac97_codec
do
if [ -e "/sys/module/${MODULE}/parameters/power_save" ]
then
echo ${1} >/sys/module/${MODULE}/parameters/power_save 2>/dev/null
fi
done
fi
}
runtime_power_management() {
POWERSAVEENABLED=$(get_setting system.powersave)
RTPM=$(get_setting system.power.rtpm)
if [ "${RTPM}" = "1" ] &&
[ "${POWERSAVEENABLED}" = "1" ]
then
find /sys/devices/{platform,pci*} -type f -name control -print0 2>/dev/null | \
while read -r -d '' DEVICE
do
echo ${1} >"${DEVICE}" 2>/dev/null
echo ${2} >"${DEVICE/control/autosuspend_delay_ms}" 2>/dev/null
done
fi
}
scsi_link_power_management() {
POWERSAVEENABLED=$(get_setting system.powersave)
RTPM=$(get_setting system.power.rtpm)
if [ "${RTPM}" = "1" ] &&
[ "${POWERSAVEENABLED}" = "1" ]
then
find /sys/class/scsi_host/host*/ -type f -name link_power_management_policy -print0 2>/dev/null | \
while read -r -d '' DEVICE
do
echo "${1}" >"${DEVICE}" 2>/dev/null
done
fi
}
wake_events() {
POWERSAVEENABLED=$(get_setting system.powersave)
WAKEEVENTS=$(get_setting system.power.wakeevents)
if [ "${WAKEEVENTS}" = "1" ] && \
[ "${POWERSAVEENABLED}" = "1" ]
then
for device in $(find /sys/devices/{platform,pci*} -type f -name wakeup 2>/dev/null)
do
echo ${1} >${device} 2>/dev/null
done
fi
}