From 9ea67cd95eb8de27b5409fb08c546427e0cf8b0d Mon Sep 17 00:00:00 2001 From: Joris Wouter Jonkers Date: Mon, 24 Aug 2026 08:20:52 +0200 Subject: [PATCH] fix(t1000): allow the OS to reset the ThinkPad fan after an EC latch The EC on enschede-t1000-1 latched the primary fan to full duty at 23:29 on 2026-08-23 and held 6382 rpm for 8.7 h. No thermal cause was present: the CPU package read 40-47 C against a 52-62 C norm for the preceding week, the PCH 68 C against 74-77 C, the Quadro T1000 38 C at 4.7 W, and load1 stayed below 1.0 on 12 threads. pwm1 reported 255 at pwm1_enable 2, so the EC was commanding 100% duty in its own automatic mode, at an rpm above the 4650 maximum observed across the prior 15 days. The secondary fan never moved. thinkpad_acpi defaults fan_control to N, which makes /proc/acpi/ibm/fan and the hwmon pwm attributes reject every write with -EPERM, leaving no way to hand control back from the OS. EC fan state survives a warm reboot, so clearing the latch required dropping power to a node that also serves LAN DNS. Setting fan_control=1 makes the "level 7" then "level auto" reset reachable over SSH the next time the EC latches. --- platform/nix/hosts/enschede-t1000-1/default.nix | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/platform/nix/hosts/enschede-t1000-1/default.nix b/platform/nix/hosts/enschede-t1000-1/default.nix index dc7fed27..163f7f82 100644 --- a/platform/nix/hosts/enschede-t1000-1/default.nix +++ b/platform/nix/hosts/enschede-t1000-1/default.nix @@ -13,6 +13,19 @@ ]; networking.hostName = "enschede-t1000-1"; + + # thinkpad_acpi defaults fan_control to N, so /proc/acpi/ibm/fan and the + # hwmon pwm1 attributes reject every write with -EPERM. That left no way to + # recover when the EC latched the primary fan to full duty on 2026-08-23: + # 6382 rpm held for 8.7 h while the CPU package sat at 40-47 C against its + # 52-62 C norm, the GPU idled at 38 C, and load stayed under 1.0. EC fan + # state survives a warm reboot, so only dropping its power cleared it. + # Enabling fan control makes the "level 7" then "level auto" reset + # reachable over SSH. Always write "level auto" back; a manual level holds + # until something re-arms the EC. + boot.extraModprobeConfig = '' + options thinkpad_acpi fan_control=1 + ''; personalStack.k3sNodeLabels = { "personal-stack/site" = "enschede"; "personal-stack/node" = "enschede-t1000-1";