fanctl: sysctl hw.sensors lm(4) fan-controlling patch for DragonFly
Constantine Aleksandrovich Murenin
C++ at Cns.SU
Mon Mar 22 23:35:13 PDT 2010
Hello,
It is my pleasure to finally announce the availability of the port of the
fan-controlling prototype/hack from OpenBSD to DragonFly BSD, which allows
interested users to monitor and control the speed of the fans connected to
popular Winbond Super I/O Hardware Monitors.
The patch is a direct port of the patch that was written for OpenBSD and
published for BSDCan 2009 in 2009-05-08 on the tech at openbsd.org mailing list,
and supports the following chips, as shown by their lm(4) dmesg name:
* W83627HF (chip only provides the manual PWM mode, fully supported)
* W83627THF / W83637HF (manual and thermal cruise modes are supported)
* W83627EHF / W83627DHG (manual and thermal cruise, PWM/DC supported)
The list above identifies 3 families, with the latter family having
the most functionality.
Note that Winbond often shares the Hardware Monitor Chip ID between
Super I/O solutions that may be marked differently on the Super I/O
chip itself, so in practicality, each family includes more than the
one or two chips outlined above.
If you know you have a Winbond Super I/O chip similar to the ones mentioned
above, but the lm(4) driver never probed successfully on DragonFly, then
please note that since recently we have a new wbsio(4) driver in DragonFly,
which allows the lm(4) attachment on non-standard ports (e.g. non-0x290 port).
The wbsio(4) is now also available as a module, which, when loaded, will
automatically configure lm(4), whether a module or in-kernel, at the proper
address. The wbsio(4) driver will also be more specific as to which
Winbond Super I/O device and revision your mainboard has.
I will describe the functionality of the latter family, W83627EHF and
W83627DHG, which has the most features, and some parts of which will
not be applicable to the earlier families.
The percent{0,1,2,3} sensors provide a summary of what the current
settings of the chip are. The value shows the current duty cycle,
whereas the description specifies whether the PWM or the DC mode is
currently activated, and what kind of controlling is being done:
Manual, Thermal Cruise, Fan Speed Cruise or Smart Fan III.
If you change any of the percent{0,1,2,3} sensors (integer values only),
the chip will automatically go from whatever mode on that specific fan
output was, to the Manual mode, with the duty cycle set to the value that
you specify.
If you want to go into the Thermal Cruise mode, simply set the value of
one of the temp sensors that have a "Target" in their description to the
target temperature that you desire. In Thermal Cruise mode, you could
also modify the Start-up and Stop duty cycle of the fan, and, of course,
the target temperature tolerance.
PWM/DC mode setting is done by switching the indicators between 0 and 1.
The description of the indicator indicates which mode is currently active
for which fan. If your fan doesn't seem to stop at all with one mode,
try the other.
I'd like to warn users that many motherboards are terribly miswired
as far as fan-controlling is concerned, so please don't be surprised
if the controlling doesn't seem to affect the speed of the fans, or
if one control affects the speed of multiple fans etc.
Please note that should you wish to reset any settings that you have
programmed your Winbond Super I/O Hardware Monitor with, you may wish
to power your system off (obviously, the system may not necessarily
go off if you simply `shutdown -p now` or press the soft power button
on the front of your PC).
More details and the presentation materials are available on my website
dedicated to the fan control project:
http://sensors.cnst.su/fanctl/
This work has recently been presented at AsiaBSDCon 2010 in Tokyo, Japan, and
I'd like to thank Hiroki Sato for the wonderful conference that he brings about!
This patch is also available in my git repository on leaf
(git://leaf.dragonflybsd.org/~cnst/dragonfly.git), in the
fanctl and fanctl201003 branches.
Please test. In your report, please include the name and brand of the board,
the full dmesg, sysctl hw.sensors output before making any changes, and
a report of your experience as appropriate. Don't be shy.
Some testing suggestions to see if your system can actually control the fans
through the lm(4) driver (don't forget to save the whole sensors tree to
recall what the defaults were before issuing this):
%sysctl hw.sensors.lm0.percent{0,1,2,3}=0 && echo manually stop the fans
%sysctl hw.sensors.lm0.percent{0,1,2,3}=100 && echo manually max the fans
You can also try this, provided temp{3,4,5,6} have Target in their description:
%sysctl hw.sensors.lm0.temp{3,4,5,6}=65 && echo automatically stop the fans
%sysctl hw.sensors.lm0.temp{3,4,5,6}=24 && echo automatically max the fans
To log the changes in the temperature when doing the above tests:
sh -c "while(true)do tcsh -c 'sysctl -n hw.sensors.lm0.{percent{0,1,2,3},{temp,fan}{0,1,2}}'|xargs;sleep 3;done"
Do note again that in many cases only the setting of one of the respective
fan control pins may actually be affecting all of the fans on your system.
Please be kind enough to report any findings.
Best regards,
Constantine.
More information about the Kernel
mailing list