From c06e6d4cd1db23940e1b578349bbf0a3e90a3932 Mon Sep 17 00:00:00 2001 From: teutat3s Date: Fri, 5 May 2023 18:13:19 +0200 Subject: [PATCH] dumpyourvms: linux 6.4 amdgpu switcheroo fixes --- hosts/dumpyourvms/dumpyourvms.nix | 38 ++++++++++++++++--------------- 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/hosts/dumpyourvms/dumpyourvms.nix b/hosts/dumpyourvms/dumpyourvms.nix index 17b7597f..aed265fa 100644 --- a/hosts/dumpyourvms/dumpyourvms.nix +++ b/hosts/dumpyourvms/dumpyourvms.nix @@ -36,9 +36,7 @@ in { # Explicitly set amdgpu support in place of radeon # Source: https://github.com/NixOS/nixos-hardware/blob/master/common/gpu/amd/southern-islands/default.nix # Try again after https://lists.freedesktop.org/archives/amd-gfx/2023-March/090096.html lands - # Maybe linux kernel 6.3? - #boot.kernelParams = ["acpi_backlight=video" "hid_apple.fnmode=2" "intel_pstate=passive" "radeon.si_support=0" "amdgpu.si_support=1"]; - boot.kernelParams = ["acpi_backlight=video" "hid_apple.fnmode=2" "intel_pstate=passive"]; + boot.kernelParams = ["acpi_backlight=video" "hid_apple.fnmode=2" "intel_pstate=passive" "radeon.si_support=0" "amdgpu.si_support=1"]; boot.loader.efi.canTouchEfiVariables = true; # Fix for Error switching console mode to 1: unsupported on startup @@ -80,29 +78,22 @@ in { # https://ubuntuforums.org/showthread.php?t=2409856 services.cron.systemCronJobs = [ "@reboot root ${pkgs.util-linux}/bin/rfkill block bluetooth" - "@reboot root ${pkgs.coreutils}/bin/sleep 11; ${pkgs.coreutils}/bin/echo 510 > /sys/class/backlight/gmux_backlight/brightness" ]; # Disable dedicated GPU, use integrated Intel GPU to save battery # https://github.com/NixOS/nixpkgs/pull/33915 - systemd.services."amd-hybrid-graphics" = { - path = [pkgs.bash]; - description = "Disable AMD Card"; + systemd.services."amd-hybrid-graphics-power-save" = { + path = [pkgs.bash pkgs.coreutils]; + description = "Power Off dedicated AMD Card to reduce power usage"; after = ["sys-kernel-debug.mount"]; before = ["systemd-vconsole-setup.service" "display-manager.service"]; - requires = ["sys-kernel-debug.mount" "vgaswitcheroo.path"]; + requires = ["sys-kernel-debug.mount"]; serviceConfig = { Type = "oneshot"; RemainAfterExit = true; - ExecStart = "${pkgs.bash}/bin/sh -c 'echo -e \"IGD\\nOFF\" > /sys/kernel/debug/vgaswitcheroo/switch'"; + ExecStart = "${pkgs.bash}/bin/sh -c 'sleep 8 && echo -e \"IGD\\nOFF\" > /sys/kernel/debug/vgaswitcheroo/switch'"; ExecStop = "${pkgs.bash}/bin/sh -c 'echo ON >/sys/kernel/debug/vgaswitcheroo/switch'"; }; - }; - systemd.paths."vgaswitcheroo" = { - pathConfig = { - PathExists = "/sys/kernel/debug/vgaswitcheroo/switch"; - Unit = "amd-hybrid-graphics.service"; - }; wantedBy = ["multi-user.target"]; }; @@ -125,12 +116,20 @@ in { # brcmfmac being loaded during hibernation would inhibit a successful resume # https://bugzilla.kernel.org/show_bug.cgi?id=101681#c116. # Also brcmfmac could randomly crash on resume from sleep. + # For hibernate successfully using the amdgpu driver, the dedicated GPU needs + # to be powered on. powerUpCommands = lib.mkBefore ("${pkgs.kmod}/bin/modprobe brcmfmac" + lib.optionalString (lib.versionAtLeast config.boot.kernelPackages.kernel.version "6.2") " brcmfmac_wcc"); - powerDownCommands = lib.mkBefore ("${pkgs.kmod}/bin/rmmod brcmfmac" - + lib.optionalString - (lib.versionAtLeast config.boot.kernelPackages.kernel.version "6.2") " brcmfmac_wcc"); + powerDownCommands = lib.mkBefore ( + lib.optionalString + (lib.versionAtLeast config.boot.kernelPackages.kernel.version "6.2") + "${pkgs.kmod}/bin/rmmod brcmfmac_wcc\n" + + '' + ${pkgs.kmod}/bin/rmmod brcmfmac + ${pkgs.systemd}/bin/systemctl stop amd-hybrid-graphics-power-save.service + '' + ); }; # Change lid switch behaviour @@ -175,6 +174,9 @@ in { hardware.firmware = with pkgs; [wireless-regdb]; boot.extraModprobeConfig = '' options cfg80211 ieee80211_regdom="DE" + + # Enable the integrated GPU (iGPU) Intel i915 by default if present + options apple-gmux force_igd=y ''; # This value determines the NixOS release from which the default