Hi,

I would like to report what appears to be a missing driver feature rather than a
bug, and to offer my machine as a test platform if that is useful.

On a Lenovo ThinkPad T490 running OpenBSD 7.9, the CPU fan runs continuously at 
a
high fixed speed and never steps down, even when temperatures are low. I have 
been
unable to find any writable interface in OpenBSD to set or lower the fan level.

== Summary ==

acpithinkpad(4) attaches and exposes ThinkPad temperature and fan-speed sensors,
but provides no writable fan-level control. As a result the embedded 
controller's
built-in fan curve runs unchecked and holds the fan at a high RPM regardless of
actual thermal load.

On the same physical laptop, FreeBSD's acpi_ibm(4) writes the fan level (the 
HFSP
register in EC space) and the fan steps down normally. The hardware therefore
clearly supports a write path to fan control; it simply is not implemented in
acpithinkpad(4) at present.

== Hardware ==

- Lenovo ThinkPad T490
- Intel Core i5-10210U
- OpenBSD 7.9 (release), GENERIC.MP, amd64

== Symptom ==

- Fan sits at a fixed high speed (around 3640 RPM) and never steps down.
- CPU temperature around 50 C, acpithinkpad/acpitz around 49 C. Temperatures are
well within normal range and do not justify the fan speed.
- Behaviour is identical on AC and on battery, so this is not the known AC-power
firmware quirk. The readings below were captured on battery.

== What I have tried ==

- obsdfreqd running with apmd disabled, confirmed via rcctl. The two daemons are
not in conflict.
- Capping the CPU clock with obsdfreqd -t 55 had no effect on fan speed.
- acpithinkpad(4) provides fan-speed and temperature sensors but they are
read-only. I could not locate any sysctl or other interface to set a fan level.
- Searched sysctl hw.sensors and the acpithinkpad(4) man page for any writable
fan control; none found.

== Cross-OS data point ==

The same T490 ran quiet under both FreeBSD 14.4 and FreeBSD 15. FreeBSD's
acpi_ibm(4) exposes a writable fan level and overrides the firmware curve, after
which the fan steps down normally. This strongly indicates the embedded 
controller
supports a write path that OpenBSD's acpithinkpad(4) does not currently use.

== uname -a ==

OpenBSD emilio.my.domain 7.9 GENERIC.MP#449 amd64

== dmesg (acpithinkpad lines) ==

acpithinkpad0 at acpi0: version 2.0

== sysctl hw.sensors ==

hw.sensors.cpu0.temp0=50.00 degC
hw.sensors.cpu0.frequency0=1200000000.00 Hz
hw.sensors.cpu1.frequency0=2700000000.00 Hz
hw.sensors.cpu2.frequency0=2200000000.00 Hz
hw.sensors.cpu3.frequency0=1900000000.00 Hz
hw.sensors.acpithinkpad0.temp0=49.00 degC
hw.sensors.acpithinkpad0.fan0=3640 RPM
hw.sensors.acpithinkpad0.indicator0=Off (port replicator), UNKNOWN
hw.sensors.acpiac0.indicator0=Off (power supply)
hw.sensors.acpibat0.volt0=11.52 VDC (voltage)
hw.sensors.acpibat0.volt1=11.57 VDC (current voltage)
hw.sensors.acpibat0.power0=16.47 W (rate)
hw.sensors.acpibat0.watthour0=40.00 Wh (last full capacity)
hw.sensors.acpibat0.watthour1=2.00 Wh (warning capacity)
hw.sensors.acpibat0.watthour2=0.20 Wh (low capacity)
hw.sensors.acpibat0.watthour3=31.11 Wh (remaining capacity), OK
hw.sensors.acpibat0.watthour4=51.00 Wh (design capacity)
hw.sensors.acpibat0.raw0=1 (battery discharging), OK
hw.sensors.acpibat0.raw1=402 (discharge cycles)
hw.sensors.acpibtn1.indicator0=On (lid open)
hw.sensors.acpitz0.temp0=49.00 degC (zone temperature)
hw.sensors.pchtemp0.temp0=46.00 degC
hw.sensors.nvme0.temp0=34.00 degC, OK
hw.sensors.nvme0.percent0=1.00% (endurance used), OK
hw.sensors.nvme0.percent1=100.00% (available spare), OK
hw.sensors.softraid0.drive0=online (sd1), OK

== Offer ==

I am happy to run patches, diagnostics, or test kernels on this exact machine 
and
report back results. If writable fan control is feasible for acpithinkpad(4), I
would gladly help test an implementation against the same hardware where 
FreeBSD's
acpi_ibm(4) is known to work.
Thank you for your work on OpenBSD.

Reply via email to