Add a config for Asus Zephyrus GA402X* (2023) series
- Disable power-saving for the keyboard on the Asus Zephyrus GA402X series (2023) - Add more-aggressive roaming rules for Asus Mediatek cards when using IWD - Add note about potentially needing more-aggressive roaming rules for Asus Mediatek cards when using WPA-Supplicant - Make enabling the higher scanning optional - Split-up the AMD-GPU and Nvidia configs - Add switch for AMD-GPU recovery mode - Add switch for AMD-GPU sg_display (Scatter/Gather) mode - Add switch for AMD-GPU PSR support
This commit is contained in:
parent
fc8d1ebb82
commit
b5c4fb6b89
58
asus/zephyrus/ga402x/amdgpu/default.nix
Normal file
58
asus/zephyrus/ga402x/amdgpu/default.nix
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
{ config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
let
|
||||||
|
inherit (lib) mkDefault mkEnableOption mkIf mkMerge;
|
||||||
|
cfg = config.hardware.asus.zephyrus.ga402x;
|
||||||
|
|
||||||
|
in {
|
||||||
|
imports = [
|
||||||
|
../shared.nix
|
||||||
|
];
|
||||||
|
|
||||||
|
options.hardware.asus.zephyrus.ga402x.amdgpu = {
|
||||||
|
recovery.enable = (mkEnableOption "Enable amdgpu.gpu_recovery kernel boot param") // { default = false; };
|
||||||
|
sg_display.enable = (mkEnableOption "Enable amdgpu.gpu_recovery kernel boot param") // { default = true; };
|
||||||
|
psr.enable = (mkEnableOption "Enable amdgpu.dcdebugmask=0x10 kernel boot param") // { default = true; };
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkMerge [
|
||||||
|
{
|
||||||
|
# AMD RX680
|
||||||
|
services.xserver.videoDrivers = mkDefault [ "amdgpu" ];
|
||||||
|
|
||||||
|
hardware = {
|
||||||
|
amdgpu.loadInInitrd = true;
|
||||||
|
opengl.extraPackages = with pkgs; [
|
||||||
|
vaapiVdpau
|
||||||
|
libvdpau-va-gl
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
(mkIf cfg.amdgpu.recovery.enable {
|
||||||
|
# Hopefully fixes for where the kernel sometimes hangs when suspending or hibernating
|
||||||
|
# (Though, I'm very suspicious of the Mediatek Wifi...)
|
||||||
|
boot.kernelParams = [
|
||||||
|
"amdgpu.gpu_recovery=1"
|
||||||
|
];
|
||||||
|
})
|
||||||
|
|
||||||
|
(mkIf (!cfg.amdgpu.sg_display.enable) {
|
||||||
|
# Can help solve flickering/glitching display issues since Scatter/Gather code was reenabled
|
||||||
|
boot.kernelParams = [
|
||||||
|
"amdgpu.sg_display=0"
|
||||||
|
];
|
||||||
|
})
|
||||||
|
|
||||||
|
(mkIf (!cfg.amdgpu.psr.enable) {
|
||||||
|
# Can help solve flickering/glitching display issues since Scatter/Gather code was reenabled
|
||||||
|
boot.kernelParams = [
|
||||||
|
"amdgpu.dcdebugmask=0x10"
|
||||||
|
];
|
||||||
|
})
|
||||||
|
];
|
||||||
|
}
|
15
asus/zephyrus/ga402x/default.nix
Normal file
15
asus/zephyrus/ga402x/default.nix
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
## When using from a Flake, you can access these via imports of the attr key, e.g:
|
||||||
|
#
|
||||||
|
# imports = [
|
||||||
|
# nixos-hardware.nixosModules.asus-zephyrus-ga402x.amdgpu
|
||||||
|
# ];
|
||||||
|
#
|
||||||
|
## or:
|
||||||
|
# imports = [
|
||||||
|
# nixos-hardware.nixosModules.asus-zephyrus-ga402x.nvidia
|
||||||
|
# ];
|
||||||
|
|
||||||
|
{
|
||||||
|
amdgpu = import ./amdgpu;
|
||||||
|
nvidia = import ./nvidia;
|
||||||
|
}
|
55
asus/zephyrus/ga402x/nvidia/default.nix
Normal file
55
asus/zephyrus/ga402x/nvidia/default.nix
Normal file
|
@ -0,0 +1,55 @@
|
||||||
|
{ lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
let
|
||||||
|
inherit (lib) mkDefault;
|
||||||
|
|
||||||
|
in {
|
||||||
|
imports = [
|
||||||
|
../shared.nix
|
||||||
|
## "prime.nix" loads this, aleady:
|
||||||
|
# ../../../common/gpu/nvidia
|
||||||
|
../../../../common/gpu/nvidia/prime.nix
|
||||||
|
];
|
||||||
|
|
||||||
|
# NVIDIA GeForce RTX 4060 Mobile
|
||||||
|
|
||||||
|
boot = {
|
||||||
|
blacklistedKernelModules = [ "nouveau" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
# Also in nvidia/default.nix
|
||||||
|
services.xserver.videoDrivers = mkDefault [ "nvidia" ];
|
||||||
|
|
||||||
|
hardware = {
|
||||||
|
## Enable the Nvidia card, as well as Prime and Offload:
|
||||||
|
amdgpu.loadInInitrd = true;
|
||||||
|
opengl.extraPackages = with pkgs; [
|
||||||
|
# Also in nvidia/default.nix
|
||||||
|
vaapiVdpau
|
||||||
|
libvdpau-va-gl
|
||||||
|
];
|
||||||
|
|
||||||
|
nvidia = {
|
||||||
|
modesetting.enable = true;
|
||||||
|
nvidiaSettings = true;
|
||||||
|
|
||||||
|
prime = {
|
||||||
|
offload = {
|
||||||
|
enable = true;
|
||||||
|
enableOffloadCmd = true;
|
||||||
|
};
|
||||||
|
amdgpuBusId = "PCI:101:0:0";
|
||||||
|
nvidiaBusId = "PCI:1:0:0";
|
||||||
|
};
|
||||||
|
|
||||||
|
powerManagement = {
|
||||||
|
# This is unreliable on the 4060; works a few times, then hangs:
|
||||||
|
# enable = true;
|
||||||
|
# finegrained = true
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
76
asus/zephyrus/ga402x/shared.nix
Normal file
76
asus/zephyrus/ga402x/shared.nix
Normal file
|
@ -0,0 +1,76 @@
|
||||||
|
{ config,
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
let
|
||||||
|
inherit (lib) mkDefault mkIf mkMerge version versionOlder;
|
||||||
|
in {
|
||||||
|
|
||||||
|
imports = [
|
||||||
|
../../../common/cpu/amd
|
||||||
|
# Better power-savings from AMD PState:
|
||||||
|
../../../common/cpu/amd/pstate.nix
|
||||||
|
../../../common/gpu/amd
|
||||||
|
../../../common/pc/laptop
|
||||||
|
../../../common/pc/laptop/acpi_call.nix
|
||||||
|
../../../common/pc/ssd
|
||||||
|
];
|
||||||
|
|
||||||
|
config = mkMerge [
|
||||||
|
{
|
||||||
|
# Configure basic system settings:
|
||||||
|
boot = {
|
||||||
|
kernelModules = [ "kvm-amd" ];
|
||||||
|
kernelParams = [
|
||||||
|
"mem_sleep_default=deep"
|
||||||
|
"pcie_aspm.policy=powersupersave"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
services = {
|
||||||
|
asusd = {
|
||||||
|
enable = mkDefault true;
|
||||||
|
enableUserService = mkDefault true;
|
||||||
|
};
|
||||||
|
|
||||||
|
supergfxd.enable = true;
|
||||||
|
|
||||||
|
udev = {
|
||||||
|
extraHwdb = ''
|
||||||
|
# Fixes mic mute button
|
||||||
|
evdev:name:*:dmi:bvn*:bvr*:bd*:svnASUS*:pn*:*
|
||||||
|
KEYBOARD_KEY_ff31007c=f20
|
||||||
|
'';
|
||||||
|
extraRules = ''
|
||||||
|
# Disable auto-suspend for the ASUS N-KEY Device, i.e. USB Keyboard
|
||||||
|
# Otherwise, it will tend to take 1-2 key-presses to wake-up after suspending
|
||||||
|
ACTION=="add", SUBSYSTEM=="usb", TEST=="power/autosuspend", ATTR{idVendor}=="0b05", ATTR{idProduct}=="19b6", ATTR{power/autosuspend}="-1"
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
(mkIf (versionOlder version "23.11") {
|
||||||
|
# See https://asus-linux.org/wiki/nixos/ for info about some problems
|
||||||
|
# detecting the dGPU:
|
||||||
|
systemd.services.supergfxd.path = [ pkgs.pciutils ];
|
||||||
|
})
|
||||||
|
|
||||||
|
(mkIf (config.networking.wireless.iwd.enable && config.networking.wireless.scanOnLowSignal) {
|
||||||
|
# Meditek doesn't seem to be quite sensitive enough on the default roaming settings:
|
||||||
|
# https://wiki.archlinux.org/title/Wpa_supplicant#Roaming
|
||||||
|
# https://wiki.archlinux.org/title/Iwd#iwd_keeps_roaming
|
||||||
|
#
|
||||||
|
# But NixOS doesn't have the tweaks for IWD, yet.
|
||||||
|
networking.wireless.iwd.settings = {
|
||||||
|
General = {
|
||||||
|
RoamThreshold = -75;
|
||||||
|
RoamThreshold5G = -80;
|
||||||
|
RoamRetryInterval = 20;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
})
|
||||||
|
];
|
||||||
|
}
|
Loading…
Reference in a new issue