This repository was archived by the owner on Aug 26, 2026. It is now read-only.
fix(t1000): allow the OS to reset the ThinkPad fan after an EC latch - #766
Merged
Conversation
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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Observed behaviour
The EC on
enschede-t1000-1latched the primary fan to full duty at 23:29 on 2026-08-23 and held it there. Over the following 8.7 h the tachometer reported a near-constant 6382 rpm across ~1030 consecutive 30 s samples, against a steady ~2470 rpm for the preceding week.No thermal cause was present. Every sensor was flat or falling at the moment of the ramp, and afterwards the machine ran cooler than at any point in the retention window:
pch_cannonlake)SENB/SEN8pwm1read 255 withpwm1_enable2, 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 from ~2175 rpm.Ruled out along the way: the 18:50 reboot (the latch began 4.6 h later), a NixOS regression (#762 touched only
enschede-gtx-960m-1),platform_profile(readsbalanced), and any workload trigger (the journal for 23:20-23:45 holds only tailscaled route churn, dhcpcd, and an nmbd master-browser election). Two readings that look alarming are artefacts: a 30000/1466 rpm pair at 18:21 during the pre-boot EC reset, and a single 84 C NVMe sample at 06:00 surrounded by 38 C.Root cause of the unrecoverability
thinkpad_acpidefaultsfan_controltoN. That makes/proc/acpi/ibm/fanand the hwmonpwm1attributes reject every write with-EPERM, so there is no way to hand fan control back to the EC from the OS. EC fan state survives a warm reboot, which leaves dropping power to the machine as the only remedy - and this node also serves LAN DNS through the hostNetwork AdGuard pod.Change
fan_control=1viaboot.extraModprobeConfig, which makes thelevel 7thenlevel autoreset reachable over SSH the next time the EC latches. Delivering it through modprobe.d rather than a kernel parameter also means amodprobe -r thinkpad_acpi && modprobe thinkpad_acpipicks it up without a reboot.The inline comment records the caveat that matters operationally: only
level autoshould ever be written back, because a manual level holds until something re-arms the EC.Validation
cd platform/tests && npm ci && node --test- 58 passing, 0 failing.N2OET55W 1.42, ECN2OHT35W, no battery present (onlyACand two USB-C source PSYs in/sys/class/power_supply/).This does not clear the current latch; a power cycle does. It makes the failure remotely recoverable from the next occurrence onward.