Linux – the state of Linux kernel support for Intel Quiet System Technology (Intel QST)

fanintellinux-kernelsensors

I am trying to find a way to access and/or control fan speed via Linux on an Intel Q45 Express/ICH10DO chipset. This chipset contains a feature called Intel Quiet System Technology (Intel QST), which is a part of the Intel Management Engine (Intel ME) running on an embedded co-processor. Intel describes QST as follows:

The Intel Management Engine (ME) hosts a firmware subsystem – Intel
Quiet System Technology (QST) – that provides support for the
monitoring of temperature, voltage, current and fan speed sensors that
are provided within the Chipset, the Processor and other devices on
the Motherboard. For each sensor, a Health Status, based upon
established thresholds, will be determined at regular intervals. Intel
QST also provides support for acoustically-optimized fan speed
control. Based upon readings obtained from the temperature sensors,
Intel QST will determine, over time, the optimal speeds at which to
operate the available cooling fans, in order to address existing
thermal conditions with the lowest possible acoustic impact.

The Intel ICH10 datasheet states:

5.24 Intel® Quiet System Technology (Intel® QST)

The ICH10 implements three PWM and 4 TACH signals for Intel Quiet
System Technology (QST).

Note: Intel Quiet System Technology
functionality requires a correctly configured system, including an
appropriate (G)MCH with Intel ME, Intel ME Firmware, and system BIOS
support.

It goes on to describe the PWM Outputs, TACH Inputs and Thermal Sensors.

This article claims that a Linux driver for Intel QST was available in December 2012:

Earlier this year there was early support for Intel QST in LM_Sensors
while being announced now is a new Intel QST driver for Linux. The
code for this new Quiet System Technology driver is currently on
GitHub.

The above-mentioned code was not actually in github, but rather on a privately hosted git repository (http://mose.dyndns.org/mei.git) that used the defunct dyndns.org service.

I have spent some time looking through the Linux kernel source (v4.16.7) but so far, I haven't found any trace of this driver.

  • Was Intel QST support ever included in the Linux kernel?
  • If so, which driver/kernel module(s) are required for Intel QST support?

Best Answer

This answer documents definitive information on Linux support for Intel QST, which was assembled by tracking down archives of the defunct lm-sensors mailing list and directly contacting the authors of some of those messages. The information here is organized in chronological order of the development of Linux QST support.

History of Linux QST Support


In February 2010, the Intel QST SDK was made publicly available.

A June 2011 Intel forum post later mentioned that the HECI driver from www.openamt.org was no longer needed to run the SDK.

A February 2012 message on the lm-sensors mailing list showed the kind of information available via a modified version of the Intel QST SDK (the "gigaplex version"), and indicated that hwmon QST support would be welcome, if it could be implemented without relying on the QST SDK:

Fan Speed Sensor 1:

   Health:            Normal
   Usage:             Processor Thermal Module Fan
   Reading:           1063

   NonCrit:           300.000
   Crit:              250.000
   NonRecov:          200.000

Fan Speed Controller 1:

   Health:            Normal
   Usage:             Processor Fan Controller
   Control:           Manual
   Duty Cycle:        2.95

If someone finds the time to dig through the SDK and write a hwmon driver, I would be happy to review and test it. That looks like a major effort, though, since it looks like at least some of the SDK code would have to be ported to run in the kernel.

By December 2012, someone had actually developed just such a driver, as evidenced in this message on the LKML:

I've written a driver for the Intel Quiet System Technology (QST) function of the Management Engine Interface found on recent Intel chipsets.

The module was originally developed for Linux 2.6.39, was named qst-hwmon, and provided support for QST v1 by implementing an entire mei driver from scratch. There was further discussion about a second module qst2-hwmon that would implement support for QST v2.

A March 2013 note on the hwmon hardware support page indicates that all known attempts to implement Linux support for Intel QST had apparently stalled:

(2013-03-20) The ICH8 (82801H) and several later Intel south bridges have embedded sensors, named MEI or QST. These are not yet supported, due to a lack of technical documentation and support from Intel. The OpenAMT project is supposed to help, but in practice not much is happening. Or maybe there is some hope? Or here, or here.

However, a November 2014 bug report by the original developer of qst-hwmon indicated that the driver was still being worked on as late as November 29, 2014, and that it had been ported to Linux 3.14.18.

Current State of Linux QST Support


The qst-hwmon kernel module

I finally managed to track down the current location of the git repository for the kernel module. To get a copy of the source code:

git clone http://eden.mose.org.uk/mei.git

This kernel module has not yet made it into the main Linux kernel source (as of kernel 4.19).

The code compiles cleanly for Linux 4.16.7, producing 4 modules, which should be copied to the appropriate modules directory:

make
cp intel-mei.ko /lib/modules/4.16.7/kernel/drivers/hwmon/
cp mei-pci.ko /lib/modules/4.16.7/kernel/drivers/hwmon/
cp qst-dev.ko /lib/modules/4.16.7/kernel/drivers/hwmon/
cp qst-hwmon.ko /lib/modules/4.16.7/kernel/drivers/hwmon/

And update the module dependencies:

depmod

Then the modules may be loaded:

modprobe intel-mei
modprobe mei-pci
modprobe qst-dev
modprobe qst-hwmon

And then you can verify that the /sys/bus/intel-mei/devices/ folder contains some relevant entries. This is not currently working for me, but I believe it is due to having the default Intel MEI driver compiled into the kernel.

Further work will be needed to get lm_sensors to detect the qst_hwmon driver. The above mailing list archives indicate that lib-sensors may need to be patched to properly identify the intel-mei bus provided by these modules.

Update: I'm in contact with the developer of the driver, so I hope to get the definitive instructions documented here soon.


Alternative Approach using Intel QST SDK and meifand

Here is a writeup (December 2015) on controlling fans via the "gigaplex version" of the Intel QST SDK (February 2012), and using meifand (not lm-sensors) as a daemon process to access the sensor information.

Related Question