42 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			42 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
| { lib, config, pkgs, ... }:
 | |
| 
 | |
| let
 | |
|   inherit (lib) mkMerge mkEnableOption mkIf versionAtLeast versionOlder;
 | |
|   inherit (builtins) elem;
 | |
|   cpu = config.systemModules.host.hardware.cpu; 
 | |
|   cfg = cpu.amd;
 | |
|   kernelVersion = config.boot.kernelPackages.kernel.version;
 | |
|   kernelVersionAtLeast = versionAtLeast kernelVersion;
 | |
|   kernelVersionOlder= versionOlder kernelVersion;
 | |
| in
 | |
| 
 | |
| {
 | |
|   options.systemModules.host.hardware.cpu.amd.pstate.enable = mkEnableOption "Enable amd pstate module";
 | |
| 
 | |
|   config = mkIf (elem cpu.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"];
 | |
|       })
 | |
|     ];
 | |
|   };
 | |
| }
 |