summaryrefslogtreecommitdiffstats
path: root/lenovo
diff options
context:
space:
mode:
authorAlberto Berti <alberto@metapensiero.it>2018-06-03 01:31:17 +0200
committerAlberto Berti <alberto@metapensiero.it>2018-06-03 01:31:17 +0200
commit654262071f8b9f0c15704d4da195c60739707e4b (patch)
treeabc19259447fa4f10a6efbed5921f4258395c78b /lenovo
parent5dd535392df4ed2299ed39c4500bbd432e62cff0 (diff)
Add the temporary fix for the cpu-throttling issue
See https://wiki.archlinux.org/index.php/Lenovo_ThinkPad_X1_Carbon_(Gen_6)#Power_management.2FThrottling_issues
Diffstat (limited to 'lenovo')
-rw-r--r--lenovo/thinkpad/x1/6th-gen/default.nix38
1 files changed, 38 insertions, 0 deletions
diff --git a/lenovo/thinkpad/x1/6th-gen/default.nix b/lenovo/thinkpad/x1/6th-gen/default.nix
index ea63de0..848cc00 100644
--- a/lenovo/thinkpad/x1/6th-gen/default.nix
+++ b/lenovo/thinkpad/x1/6th-gen/default.nix
@@ -1,3 +1,4 @@
+{ config, pkgs, ... }:
{
imports = [
../.
@@ -17,4 +18,41 @@
START_CHARGE_THRESH_BAT0=75
STOP_CHARGE_THRESH_BAT0=80
'';
+
+ # Temporary fix for cpu throttling issues visible in the kernel log
+ # (journalctl -k) by setting the same temperature limits used by
+ # Window$
+ # See https://wiki.archlinux.org/index.php/Lenovo_ThinkPad_X1_Carbon_(Gen_6)#Power_management.2FThrottling_issues
+ systemd.services.cpu-throttling = {
+ enable = true;
+ description = "Sets the offset to 3 °C, so the new trip point is 97 °C";
+ documentation = [
+ "https://wiki.archlinux.org/index.php/Lenovo_ThinkPad_X1_Carbon_(Gen_6)#Power_management.2FThrottling_issues"
+ ];
+ path = [ pkgs.msr-tools ];
+ script = "wrmsr -a 0x1a2 0x3000000";
+ serviceConfig = {
+ Type = "oneshot";
+ };
+ wantedBy = [
+ "timers.target"
+ ];
+ };
+
+ systemd.timers.cpu-throttling = {
+ enable = true;
+ description = "Set cpu heating limit to 97 °C";
+ documentation = [
+ "https://wiki.archlinux.org/index.php/Lenovo_ThinkPad_X1_Carbon_(Gen_6)#Power_management.2FThrottling_issues"
+ ];
+ timerConfig = {
+ OnActiveSec = 60;
+ OnUnitActiveSec = 60;
+ Unit = "cpu-throttling.service";
+ };
+ wantedBy = [
+ "timers.target"
+ ];
+ };
+
}