[Hardware/Nvidia] Fix suspend with Nvidia GPUs

This commit is contained in:
Antoine Viallon 2023-04-16 22:35:50 +02:00
parent f4f6600ec5
commit 04cfbf21a4
Signed by: aviallon
GPG key ID: 186FC35EDEB25716
2 changed files with 11 additions and 5 deletions

View file

@ -8,12 +8,12 @@ in {
./vgpu.nix ./vgpu.nix
./proprietary.nix ./proprietary.nix
./opensource.nix ./opensource.nix
( mkRenamedOptionModule [ "aviallon" "hardware" "nvidia" "saveAllVram" ] [ "aviallon" "hardware" "nvidia" "proprietary" "saveAllVram" ] )
]; ];
options.aviallon.hardware.nvidia = { options.aviallon.hardware.nvidia = {
enable = mkEnableOption "enable Nvidia hardware config"; enable = mkEnableOption "enable Nvidia hardware config";
useProprietary = mkEnableOption "nvidia proprietary drivers"; useProprietary = mkEnableOption "nvidia proprietary drivers";
saveAllVram = mkEnableOption "back up all VRAM in /tmp before going to sleep. May reduce artifacts after resuming";
}; };
config = mkIf cfg.enable { config = mkIf cfg.enable {

View file

@ -21,10 +21,14 @@ in {
example = 28; example = 28;
type = types.int; type = types.int;
}; };
saveAllVram = mkEnableOption "back up all VRAM in /var/tmp before going to sleep. May reduce artifacts after resuming";
}; };
}; };
config = mkIf (cfg.enable && cfg.useProprietary) { config = mkIf (cfg.enable && cfg.useProprietary) {
assertions = [];
boot.initrd.kernelModules = [ boot.initrd.kernelModules = [
"nvidia" "nvidia"
"nvidia_drm" "nvidia_drm"
@ -44,8 +48,10 @@ in {
services.xserver.exportConfiguration = true; services.xserver.exportConfiguration = true;
hardware.nvidia = { hardware.nvidia = {
powerManagement.enable = true; powerManagement = mkIf (config.hardware.nvidia.prime.offload.enable || cfg.proprietary.saveAllVram) {
powerManagement.finegrained = mkIf config.hardware.nvidia.prime.offload.enable true; enable = true;
finegrained = true;
};
modesetting.enable = true; modesetting.enable = true;
nvidiaSettings = true; nvidiaSettings = true;
}; };
@ -55,8 +61,8 @@ in {
"nvidia-drm.modeset" = 1; "nvidia-drm.modeset" = 1;
"nvidia.NVreg_UsePageAttributeTable" = 1; "nvidia.NVreg_UsePageAttributeTable" = 1;
} }
// optionalAttrs cfg.saveAllVram { // {
"nvidia.NVreg_PreserveVideoMemoryAllocations" = 1; "nvidia.NVreg_PreserveVideoMemoryAllocations" = toValue cfg.proprietary.saveAllVram;
"nvidia.NVreg_TemporaryFilePath" = "/var/tmp/nvidia-gpu.vram.img"; "nvidia.NVreg_TemporaryFilePath" = "/var/tmp/nvidia-gpu.vram.img";
} }
; ;