Add power management for ryzen apus
- set CPU TDP to 10W on battery & 45W on AC
This commit is contained in:
parent
0a36bfc203
commit
499b6f77b3
4 changed files with 105 additions and 32 deletions
6
flake.lock
generated
6
flake.lock
generated
|
@ -69,11 +69,11 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1701680013,
|
"lastModified": 1701334333,
|
||||||
"narHash": "sha256-H8uAiSr//UhEdTTRDJwP6LCTq7d1sXF1IKpe8GDW3PA=",
|
"narHash": "sha256-rsJ11xznoc2JSmM57bstxyas8xq8ZaEqNhQuQWyoQ/A=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "emacs-overlay",
|
"repo": "emacs-overlay",
|
||||||
"rev": "1ff5471880b6e48f63ec5fa668486ab1268c2b22",
|
"rev": "913e44a13636fd111139ee683a6741ccb4c28672",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
|
|
@ -22,6 +22,7 @@
|
||||||
driSupport = true;
|
driSupport = true;
|
||||||
driSupport32Bit = true;
|
driSupport32Bit = true;
|
||||||
extraPackages = with pkgs; [
|
extraPackages = with pkgs; [
|
||||||
|
amdvlk
|
||||||
rocm-opencl-icd
|
rocm-opencl-icd
|
||||||
rocm-opencl-runtime
|
rocm-opencl-runtime
|
||||||
];
|
];
|
||||||
|
|
90
os-mods/ryzenapu/default.nix
Normal file
90
os-mods/ryzenapu/default.nix
Normal file
|
@ -0,0 +1,90 @@
|
||||||
|
{ config
|
||||||
|
, lib
|
||||||
|
, pkgs
|
||||||
|
, system
|
||||||
|
, inputs
|
||||||
|
, ...
|
||||||
|
}: {
|
||||||
|
# This automatically sets the ryzen apu TDP to 45 W on AC and 10W on battery
|
||||||
|
# addionally it enables and configures some general power management stuff like powertop
|
||||||
|
|
||||||
|
environment.systemPackages = with pkgs.unstable-os; [
|
||||||
|
ryzenadj
|
||||||
|
(writers.writeDashBin "set_tdp" ''
|
||||||
|
set -efux
|
||||||
|
watt=$1
|
||||||
|
value=$(( $watt * 1000 ))
|
||||||
|
${ryzenadj}/bin/ryzenadj --stapm-limit="$value" --fast-limit="$value" --slow-limit="$value" --tctl-temp=85
|
||||||
|
'')
|
||||||
|
];
|
||||||
|
|
||||||
|
systemd = {
|
||||||
|
services = {
|
||||||
|
desktop-power-maximum-tdp = {
|
||||||
|
description = "Change TDP to maximum TDP when on AC power";
|
||||||
|
wantedBy = [ "ac.target" ];
|
||||||
|
unitConfig = {
|
||||||
|
RefuseManualStart = true;
|
||||||
|
};
|
||||||
|
path = with pkgs.unstable-os; [
|
||||||
|
coreutils
|
||||||
|
ryzenadj
|
||||||
|
];
|
||||||
|
serviceConfig.Type = "oneshot";
|
||||||
|
preStart = "sleep 2";
|
||||||
|
script = ''
|
||||||
|
ryzenadj --stapm-limit=45000 --fast-limit=45000 --slow-limit=45000 --tctl-temp=85
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
portable-power-saving-tdp = {
|
||||||
|
description = "Change TDP to power saving TDP when on battery power";
|
||||||
|
wantedBy = [ "battery.target" ];
|
||||||
|
unitConfig = { RefuseManualStart = true; };
|
||||||
|
path = with pkgs.unstable-os; [
|
||||||
|
coreutils
|
||||||
|
ryzenadj
|
||||||
|
];
|
||||||
|
serviceConfig.Type = "oneshot";
|
||||||
|
preStart = "sleep 2";
|
||||||
|
script = ''
|
||||||
|
ryzenadj --stapm-limit=10000 --fast-limit=10000 --slow-limit=10000 --tctl-temp=85
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
# Do not manage HID devices to prevent annoying keyboard/mouse sleeps
|
||||||
|
powertop.postStart = ''
|
||||||
|
HIDDEVICES=$(ls /sys/bus/usb/drivers/usbhid | grep -oE '^[0-9]+-[0-9\.]+' | sort -u)
|
||||||
|
for i in $HIDDEVICES; do
|
||||||
|
echo -n "Enabling " | cat - /sys/bus/usb/devices/$i/product
|
||||||
|
echo 'on' > /sys/bus/usb/devices/$i/power/control
|
||||||
|
done
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
targets = {
|
||||||
|
ac = {
|
||||||
|
conflicts = [ "battery.target" ];
|
||||||
|
description = "On AC power";
|
||||||
|
unitConfig = { DefaultDependencies = "false"; };
|
||||||
|
};
|
||||||
|
|
||||||
|
battery = {
|
||||||
|
conflicts = [ "ac.target" ];
|
||||||
|
description = "On battery power";
|
||||||
|
unitConfig = { DefaultDependencies = "false"; };
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
services = {
|
||||||
|
power-profiles-daemon.enable = true;
|
||||||
|
udev.extraRules = ''
|
||||||
|
SUBSYSTEM=="power_supply", ENV{POWER_SUPPLY_NAME}=="AC0", ENV{POWER_SUPPLY_ONLINE}=="1", RUN+="${pkgs.systemd}/bin/systemctl --no-block start ac.target"
|
||||||
|
SUBSYSTEM=="power_supply", ENV{POWER_SUPPLY_NAME}=="AC0", ENV{POWER_SUPPLY_ONLINE}=="0", RUN+="${pkgs.systemd}/bin/systemctl --no-block start battery.target"
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
# energy saving stuff
|
||||||
|
powerManagement.powertop.enable = true;
|
||||||
|
}
|
|
@ -13,6 +13,7 @@
|
||||||
../../os-mods/common
|
../../os-mods/common
|
||||||
../../os-mods/desktop
|
../../os-mods/desktop
|
||||||
../../os-mods/network
|
../../os-mods/network
|
||||||
|
../../os-mods/ryzenapu
|
||||||
../../os-mods/virt
|
../../os-mods/virt
|
||||||
../../users
|
../../users
|
||||||
./disko.nix
|
./disko.nix
|
||||||
|
@ -27,6 +28,7 @@
|
||||||
"gccarch-x86-64-v3"
|
"gccarch-x86-64-v3"
|
||||||
"gccarch-znver2"
|
"gccarch-znver2"
|
||||||
];
|
];
|
||||||
|
|
||||||
boot = {
|
boot = {
|
||||||
kernelPackages = pkgs.pkgsx86_64_v3.linuxPackages_cachyos;
|
kernelPackages = pkgs.pkgsx86_64_v3.linuxPackages_cachyos;
|
||||||
kernelPatches = [ ];
|
kernelPatches = [ ];
|
||||||
|
@ -121,20 +123,6 @@
|
||||||
|
|
||||||
systemd = {
|
systemd = {
|
||||||
services = {
|
services = {
|
||||||
tailord = {
|
|
||||||
enable = true;
|
|
||||||
description = "Tuxedo Tailor hardware control service";
|
|
||||||
after = [ "systemd-logind.service" ];
|
|
||||||
wantedBy = [ "multi-user.target" ];
|
|
||||||
|
|
||||||
serviceConfig = {
|
|
||||||
Type = "dbus";
|
|
||||||
BusName = "com.tux.Tailor";
|
|
||||||
ExecStart = "${pkgs.unstable-os.tuxedo-rs}/bin/tailord";
|
|
||||||
Environment = "RUST_BACKTRACE=1";
|
|
||||||
Restart = "on-failure";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
# This manually configures the automatically created network-adresses service to be more flexible
|
# This manually configures the automatically created network-adresses service to be more flexible
|
||||||
# regarding booting without the the device being available on boot
|
# regarding booting without the the device being available on boot
|
||||||
# It prevents slow timeouts & errors on boot while preserving Plug & Play ability
|
# It prevents slow timeouts & errors on boot while preserving Plug & Play ability
|
||||||
|
@ -142,29 +130,18 @@
|
||||||
ConditionPathExists = "/sys/class/net/enp5s0f4u1u1c2";
|
ConditionPathExists = "/sys/class/net/enp5s0f4u1u1c2";
|
||||||
BindsTo = lib.mkForce null;
|
BindsTo = lib.mkForce null;
|
||||||
};
|
};
|
||||||
|
|
||||||
powertop.postStart = ''
|
|
||||||
HIDDEVICES=$(ls /sys/bus/usb/drivers/usbhid | grep -oE '^[0-9]+-[0-9\.]+' | sort -u)
|
|
||||||
for i in $HIDDEVICES; do
|
|
||||||
echo -n "Enabling " | cat - /sys/bus/usb/devices/$i/product
|
|
||||||
echo 'on' > /sys/bus/usb/devices/$i/power/control
|
|
||||||
done
|
|
||||||
'';
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
services.power-profiles-daemon.enable = true;
|
|
||||||
services.udev.extraRules = ''
|
services.udev.extraRules = ''
|
||||||
ACTION=="add", KERNEL=="enp5s0f4u1u1c2", TAG+="systemd", ENV{SYSTEMD_WANTS}="network-addresses-enp5s0f4u1u1c2.service"
|
ACTION=="add", KERNEL=="enp5s0f4u1u1c2", TAG+="systemd", ENV{SYSTEMD_WANTS}="network-addresses-enp5s0f4u1u1c2.service"
|
||||||
ACTION=="remove", KERNEL=="enp5s0f4u1u1c2", RUN+="${pkgs.systemd}/bin/systemctl stop network-addresses-enp5s0f4u1u1c2.service"
|
ACTION=="remove", KERNEL=="enp5s0f4u1u1c2", RUN+="${pkgs.systemd}/bin/systemctl stop network-addresses-enp5s0f4u1u1c2.service"
|
||||||
SUBSYSTEM=="pci", ATTR{power/control}="auto"
|
SUBSYSTEM=="pci", ATTR{power/control}="auto"
|
||||||
'';
|
'';
|
||||||
|
|
||||||
# energy saving stuff
|
environment.systemPackages = with pkgs.unstable-os; [
|
||||||
powerManagement.powertop.enable = true;
|
android-tools
|
||||||
|
android-udev-rules
|
||||||
environment.systemPackages = with pkgs.unstable-os; [ android-tools android-udev-rules tuxedo-rs tailor-gui ryzenadj ];
|
];
|
||||||
|
|
||||||
services.dbus.packages = [ pkgs.unstable-os.tuxedo-rs ];
|
|
||||||
|
|
||||||
hardware = {
|
hardware = {
|
||||||
enableRedistributableFirmware = true;
|
enableRedistributableFirmware = true;
|
||||||
|
@ -172,6 +149,11 @@
|
||||||
tuxedo-keyboard.enable = true;
|
tuxedo-keyboard.enable = true;
|
||||||
|
|
||||||
cpu.amd.updateMicrocode = true;
|
cpu.amd.updateMicrocode = true;
|
||||||
|
sensor.iio.enable = true;
|
||||||
|
tuxedo-rs = {
|
||||||
|
enable = true;
|
||||||
|
tailor-gui.enable = true;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
zramSwap.enable = true;
|
zramSwap.enable = true;
|
||||||
|
|
Loading…
Add table
Reference in a new issue