summary refs log tree commit diff
path: root/nixos/modules
diff options
context:
space:
mode:
Diffstat (limited to 'nixos/modules')
-rw-r--r--nixos/modules/config/power-management.nix6
-rw-r--r--nixos/modules/tasks/cpu-freq.nix43
2 files changed, 23 insertions, 26 deletions
diff --git a/nixos/modules/config/power-management.nix b/nixos/modules/config/power-management.nix
index 4984c0cd826..17f3ed00b9b 100644
--- a/nixos/modules/config/power-management.nix
+++ b/nixos/modules/config/power-management.nix
@@ -65,11 +65,7 @@ in
 
   config = mkIf cfg.enable {
 
-    boot.kernelModules =
-      [ "acpi_cpufreq" "powernow-k8" "cpufreq_performance" "cpufreq_powersave" "cpufreq_ondemand"
-        "cpufreq_conservative"
-      ];
-
+    # FIXME: Implement powersave governor for sandy bridge or later Intel CPUs
     powerManagement.cpuFreqGovernor = mkDefault "ondemand";
     powerManagement.scsiLinkPolicy = mkDefault "min_power";
 
diff --git a/nixos/modules/tasks/cpu-freq.nix b/nixos/modules/tasks/cpu-freq.nix
index 3df9b58c524..02f269f28f9 100644
--- a/nixos/modules/tasks/cpu-freq.nix
+++ b/nixos/modules/tasks/cpu-freq.nix
@@ -2,6 +2,11 @@
 
 with lib;
 
+let
+  cpupower = config.boot.kernelPackages.cpupower;
+  cfg = config.powerManagement;
+in
+
 {
   ###### interface
 
@@ -25,29 +30,25 @@ with lib;
 
   config = mkIf (config.powerManagement.cpuFreqGovernor != null) {
 
-    environment.systemPackages = [ pkgs.cpufrequtils ];
-
-    jobs.cpufreq =
-      { description = "CPU Frequency Governor Setup";
-
-        after = [ "systemd-modules-load.service" ];
-        wantedBy = [ "multi-user.target" ];
-
-        unitConfig.ConditionPathIsReadWrite = "/sys/devices/";
+    boot.kernelModules = [ "acpi-cpufreq" "speedstep-lib" "pcc-cpufreq"
+      "cpufreq_${cfg.cpuFreqGovernor}"
+    ];
 
-        path = [ pkgs.cpufrequtils ];
+    environment.systemPackages = [ cpupower ];
 
-        preStart = ''
-          for i in $(seq 0 $(($(nproc) - 1))); do
-            for gov in $(cpufreq-info -c $i -g); do
-              if [ "$gov" = ${config.powerManagement.cpuFreqGovernor} ]; then
-                echo "<6>setting governor on CPU $i to ‘$gov’"
-                cpufreq-set -c $i -g $gov
-              fi
-            done
-          done
-        '';
+    systemd.services.cpufreq = {
+      description = "CPU Frequency Governor Setup";
+      after = [ "systemd-modules-load.service" ];
+      wantedBy = [ "multi-user.target" ];
+      path = [ cpupower ];
+      script = ''
+        cpupower frequency-set -g ${cfg.cpuFreqGovernor}
+      '';
+      serviceConfig = {
+        Type = "oneshot";
+        RemainAfterExit = "yes";
       };
-  };
+    };
 
+  };
 }