From eb93983bfe30dd5307eaa8dd5e27e006fa9cf0cf Mon Sep 17 00:00:00 2001 From: ooks-io Date: Mon, 8 Apr 2024 13:57:51 +1200 Subject: [PATCH] feat(hardware): add cpu module (intel/amd) --- system/modules/hardware/cpu/amd/default.nix | 43 +++++++++++++++++++ system/modules/hardware/cpu/default.nix | 18 ++++++++ system/modules/hardware/cpu/intel/default.nix | 20 +++++++++ 3 files changed, 81 insertions(+) create mode 100644 system/modules/hardware/cpu/amd/default.nix create mode 100644 system/modules/hardware/cpu/default.nix create mode 100644 system/modules/hardware/cpu/intel/default.nix diff --git a/system/modules/hardware/cpu/amd/default.nix b/system/modules/hardware/cpu/amd/default.nix new file mode 100644 index 0000000..a397a78 --- /dev/null +++ b/system/modules/hardware/cpu/amd/default.nix @@ -0,0 +1,43 @@ +{ lib, config, pkgs, ... }: + +let + inherit (lib) mkMerge mkEnableOption mkIf versionAtLeast versionOlder; + hardware = config.systemModules.hardware.cpu; + cfg = hardware.amd; + kernelVersion = config.kernelPackages.kernel.version; + kernelVersionAtLeast = versionAtLeast kernelVersion; + kernelVersionOlder= versionOlder kernelVersion; +in + +{ + options.systemModules.hardware.cpu.amd = { + pstate.enable = mkEnableOption "Enable pstate amd module"; + }; + + config = mkIf (builtins.elem hardware.type ["amd"]) { + environment.systemPackages = [pkgs.amdctl]; + hardware.cpu.amd.updateMicrocode = true; + boot = mkMerge [ + { + kernelModules = [ + "amd-pstate" + "amd-kvm" # virtulization + "msr" # required for amdctl + ]; + } + + (mkIf (cfg.pstate.enable && (kernelVersionAtLeast "5.27") && (kernelVersionOlder "6.1")) { + kernelParams = ["initcall_blacklist-acpi_cpufreq_init"]; + kernelModules = ["amd-pstate"]; + }) + + (mkIf (cfg.pstate.enable && (kernelVersionAtLeast "6.1") && (kernelVersionOlder "6.3")) { + kernelParams = ["amd_pstate=passive"]; + }) + + (mkIf (cfg.pstate.enable && (kernelVersionAtLeast "6.3")) { + kernelParams = ["amd_pstate=active"]; + }) + ]; + }; +} diff --git a/system/modules/hardware/cpu/default.nix b/system/modules/hardware/cpu/default.nix new file mode 100644 index 0000000..9db60cd --- /dev/null +++ b/system/modules/hardware/cpu/default.nix @@ -0,0 +1,18 @@ +{ lib, ... }: + +let + inherit (lib) types mkOption; +in + +{ + imports = [ + ./amd + ./intel + ]; + + options.systemModules.hardware.cpu.type = mkOption { + type = with types; nullOr (enum ["intel" "amd"]); + default = null; + description = "Type of cpu system module to use"; + }; +} diff --git a/system/modules/hardware/cpu/intel/default.nix b/system/modules/hardware/cpu/intel/default.nix new file mode 100644 index 0000000..f8718d5 --- /dev/null +++ b/system/modules/hardware/cpu/intel/default.nix @@ -0,0 +1,20 @@ +{ config, lib, pkgs, ... }: + +let + inherit (lib) mkIf; + inherit (builtins) elem; + hardware = config.systemModules.hardware.cpu; +in + +{ + # TODO: put kvm/gvt behind virtualization module flag + + config = mkIf (elem hardware.type ["intel"]) { + boot = { + kernelModules = ["kvm-intel"]; + kernelParams = ["i915.fastboot=1" "enable_gvt=1"]; + }; + hardware.cpu.intel.updateMicrocode = true; + environment.systemPackages = [pkgs.intel-gpu-tools]; + }; +}