From 8cde8633d4f93659856695189fa3ead28b7a839b Mon Sep 17 00:00:00 2001 From: Sebastian Sellmeier Date: Mon, 8 Apr 2024 09:53:42 +0200 Subject: [PATCH] framework/12th-gen-intel: Refactor module https://github.com/NixOS/nixos-hardware/pull/897 https://github.com/NixOS/nixos-hardware/pull/846 https://github.com/NixOS/nixos-hardware/issues/894 --- framework/13-inch/12th-gen-intel/default.nix | 100 ++++++++++--------- framework/13-inch/common/intel.nix | 12 ++- 2 files changed, 62 insertions(+), 50 deletions(-) diff --git a/framework/13-inch/12th-gen-intel/default.nix b/framework/13-inch/12th-gen-intel/default.nix index b16dc1d..e2fdcfd 100644 --- a/framework/13-inch/12th-gen-intel/default.nix +++ b/framework/13-inch/12th-gen-intel/default.nix @@ -1,52 +1,62 @@ -{ lib, pkgs, ... }: { +{ config, lib, pkgs, ... }: +{ imports = [ ../common ../common/intel.nix ]; - boot.kernelParams = [ - # For Power consumption - # https://kvark.github.io/linux/framework/2021/10/17/framework-nixos.html - "mem_sleep_default=deep" - # Workaround iGPU hangs - # https://discourse.nixos.org/t/intel-12th-gen-igpu-freezes/21768/4 - "i915.enable_psr=1" + config = lib.mkMerge [ + { + hardware.intelgpu.loadInInitrd = lib.versionOlder config.boot.kernelPackages.kernel.version "6.2"; + } + # https://community.frame.work/t/tracking-hard-freezing-on-fedora-36-with-the-new-12th-gen-system/20675/391 + (lib.mkIf (lib.versionOlder config.boot.kernelPackages.kernel.version "6.2") { + boot.kernelParams = [ + # Workaround iGPU hangs + # https://discourse.nixos.org/t/intel-12th-gen-igpu-freezes/21768/4 + "i915.enable_psr=1" + ]; + }) + (lib.mkIf (lib.versionOlder config.boot.kernelPackages.kernel.version "6.8") { + boot.blacklistedKernelModules = [ + # This enables the brightness and airplane mode keys to work + # https://community.frame.work/t/12th-gen-not-sending-xf86monbrightnessup-down/20605/11 + "hid-sensor-hub" + # This fixes controller crashes during sleep + # https://community.frame.work/t/tracking-fn-key-stops-working-on-popos-after-a-while/21208/32 + (lib.mkIf (config.hardware.framework.enableKmod == false) "cros_ec_lpcs") + ]; + + boot.kernelParams = [ + # For Power consumption + # https://kvark.github.io/linux/framework/2021/10/17/framework-nixos.html + # Update 04/2024: Combined with acpi_osi from framework-intel it increases the idle power-usage in my test (SebTM) + # (see: https://github.com/NixOS/nixos-hardware/pull/903#issuecomment-2068146658) + "mem_sleep_default=deep" + ]; + + # Further tweak to ensure the brightness and airplane mode keys work + # https://community.frame.work/t/responded-12th-gen-not-sending-xf86monbrightnessup-down/20605/67 + systemd.services.bind-keys-driver = { + description = "Bind brightness and airplane mode keys to their driver"; + wantedBy = [ "default.target" ]; + after = [ "network.target" ]; + serviceConfig = { + Type = "oneshot"; + User = "root"; + }; + script = '' + ls -lad /sys/bus/i2c/devices/i2c-*:* /sys/bus/i2c/drivers/i2c_hid_acpi/i2c-*:* + if [ -e /sys/bus/i2c/devices/i2c-FRMW0001:00 -a ! -e /sys/bus/i2c/drivers/i2c_hid_acpi/i2c-FRMW0001:00 ]; then + echo fixing + echo i2c-FRMW0001:00 > /sys/bus/i2c/drivers/i2c_hid_acpi/bind + ls -lad /sys/bus/i2c/devices/i2c-*:* /sys/bus/i2c/drivers/i2c_hid_acpi/i2c-*:* + echo done + else + echo no fix needed + fi + ''; + }; + }) ]; - - boot.blacklistedKernelModules = [ - # This enables the brightness and airplane mode keys to work - # https://community.frame.work/t/12th-gen-not-sending-xf86monbrightnessup-down/20605/11 - "hid-sensor-hub" - # This fixes controller crashes during sleep - # https://community.frame.work/t/tracking-fn-key-stops-working-on-popos-after-a-while/21208/32 - "cros_ec_lpcs" - ]; - - # Further tweak to ensure the brightness and airplane mode keys work - # https://community.frame.work/t/responded-12th-gen-not-sending-xf86monbrightnessup-down/20605/67 - systemd.services.bind-keys-driver = { - description = "Bind brightness and airplane mode keys to their driver"; - wantedBy = [ "default.target" ]; - after = [ "network.target" ]; - serviceConfig = { - Type = "oneshot"; - User = "root"; - }; - script = '' - ls -lad /sys/bus/i2c/devices/i2c-*:* /sys/bus/i2c/drivers/i2c_hid_acpi/i2c-*:* - if [ -e /sys/bus/i2c/devices/i2c-FRMW0001:00 -a ! -e /sys/bus/i2c/drivers/i2c_hid_acpi/i2c-FRMW0001:00 ]; then - echo fixing - echo i2c-FRMW0001:00 > /sys/bus/i2c/drivers/i2c_hid_acpi/bind - ls -lad /sys/bus/i2c/devices/i2c-*:* /sys/bus/i2c/drivers/i2c_hid_acpi/i2c-*:* - echo done - else - echo no fix needed - fi - ''; - }; - - # Alder Lake CPUs benefit from kernel 5.18 for ThreadDirector - # https://www.tomshardware.com/news/intel-thread-director-coming-to-linux-5-18 - boot.kernelPackages = lib.mkIf (lib.versionOlder pkgs.linux.version "5.18") (lib.mkDefault pkgs.linuxPackages_latest); - } diff --git a/framework/13-inch/common/intel.nix b/framework/13-inch/common/intel.nix index fb5c4ce..96bbec9 100644 --- a/framework/13-inch/common/intel.nix +++ b/framework/13-inch/common/intel.nix @@ -1,15 +1,17 @@ -{ lib, pkgs, ... }: { +{ config, lib, pkgs, ... }: { imports = [ ../../../common/cpu/intel ]; - boot.kernelParams = [ - # Fixes a regression in s2idle, making it more power efficient than deep sleep - "acpi_osi=\"!Windows 2020\"" + boot.kernelParams = [ # For Power consumption # https://community.frame.work/t/linux-battery-life-tuning/6665/156 "nvme.noacpi=1" - ]; + ] + # Fixes a regression in s2idle, making it more power efficient than deep sleep + # Update 04/2024: It appears that s2idle-regression got fixed in newer kernel-versions (SebTM) + # (see: https://github.com/NixOS/nixos-hardware/pull/903#discussion_r1556096657) + ++ lib.lists.optional (lib.versionOlder config.boot.kernelPackages.kernel.version "6.8") "acpi_osi=\"!Windows 2020\""; # Requires at least 5.16 for working wi-fi and bluetooth. # https://community.frame.work/t/using-the-ax210-with-linux-on-the-framework-laptop/1844/89