Re: [PATCH v6 2/2] dell-smm-hwmon: Add documentation

From: Guenter Roeck
Date: Fri Nov 22 2019 - 23:50:05 EST


On Fri, Nov 22, 2019 at 11:15:19AM +0100, Giovanni Mascellani wrote:
> Part of the documentation is taken from the README of the userspace
> utils (https://github.com/vitorafsr/i8kutils). The license is GPL-2+
> and the author Massimo Dal Zotto is already credited as author of
> the module. Therefore there should be no copyright problem.
>
> I also added a paragraph with specific information on the experimental
> support for automatic BIOS fan control.
>
> Signed-off-by: Giovanni Mascellani <gio@xxxxxxxxxx>

Applied. I fixed one of the documentation build warnings, but there is
one more which I don't understand and thus left alone.

> ---
> Documentation/hwmon/dell-smm-hwmon.rst | 164 +++++++++++++++++++++++++
> Documentation/hwmon/index.rst | 1 +
> 2 files changed, 165 insertions(+)
> create mode 100644 Documentation/hwmon/dell-smm-hwmon.rst
>
> diff --git a/Documentation/hwmon/dell-smm-hwmon.rst b/Documentation/hwmon/dell-smm-hwmon.rst
> new file mode 100644
> index 000000000000..6e51de2c7dc3
> --- /dev/null
> +++ b/Documentation/hwmon/dell-smm-hwmon.rst
> @@ -0,0 +1,164 @@
> +.. SPDX-License-Identifier: GPL-2.0-or-later
> +
> +.. include:: <isonum.txt>
> +
> +Kernel driver dell-smm-hwmon
> +============================
> +
> +:Copyright: |copy| 2002-2005 Massimo Dal Zotto <dz@xxxxxxxxxx>
> +:Copyright: |copy| 2019 Giovanni Mascellani <gio@xxxxxxxxxx>
> +
> +Description
> +-----------
> +
> +On many Dell laptops the System Management Mode (SMM) BIOS can be
> +queried for the status of fans and temperature sensors. Userspace
> +utilities like ``sensors`` can be used to return the readings. The
> +userspace suite `i8kutils`__ can also be used to read the sensors and
> +automatically adjust fan speed (please notice that it currently uses
> +the deprecated ``/proc/i8k`` interface).
> +
> + __ https://github.com/vitorafsr/i8kutils
> +
> +``sysfs`` interface
> +-------------------
> +
> +Temperature sensors and fans can be queried and set via the standard
> +``hwmon`` interface on ``sysfs``, under the directory
> +``/sys/class/hwmon/hwmonX`` for some value of ``X`` (search for the
> +``X`` such that ``/sys/class/hwmon/hwmonX/name`` has content
> +``dell_smm``). A number of other attributes can be read or written:
> +
> +=============================== ======= =======================================
> +Name Perm Description
> +=============================== ======= =======================================
> +fan[1-3]_input RO Fan speed in RPM.
> +fan[1-3]_label RO Fan label.
> +pwm[1-3] RW Control the fan PWM duty-cycle.
> +pwm1_enable WO Enable or disable automatic BIOS fan
> + control (not supported on all laptops,
> + see below for details).
> +temp[1-10]_input RO Temperature reading in milli-degrees
> + Celsius.
> +temp[1-10]_label RO Temperature sensor label.
> +=============================== ======= =======================================
> +
> +Disabling automatic BIOS fan control
> +------------------------------------
> +
> +On some laptops the BIOS automatically sets fan speed every few
> +seconds. Therefore the fan speed set by mean of this driver is quickly
> +overwritten.
> +
> +There is experimental support for disabling automatic BIOS fan
> +control, at least on laptops where the corresponding SMM command is
> +known, by writing the value ``1`` in the attribute ``pwm1_enable``
> +(writing ``2`` enables automatic BIOS control again). Even if you have
> +more than one fan, all of them are set to either enabled or disabled
> +automatic fan control at the same time and, notwithstanding the name,
> +``pwm1_enable`` sets automatic control for all fans.
> +
> +If ``pwm1_enable`` is not available, then it means that SMM codes for
> +enabling and disabling automatic BIOS fan control are not whitelisted
> +for your hardware. It is possible that codes that work for other
> +laptops actually work for yours as well, or that you have to discover
> +new codes.
> +
> +Check the list ``i8k_whitelist_fan_control`` in file
> +``drivers/hwmon/dell-smm-hwmon.c`` in the kernel tree: as a first
> +attempt you can try to add your machine and use an already-known code
> +pair. If, after recompiling the kernel, you see that ``pwm1_enable``
> +is present and works (i.e., you can manually control the fan speed),
> +then please submit your finding as a kernel patch, so that other users
> +can benefit from it. Please see
> +:ref:`Documentation/process/submitting-patches <submittingpatches>`
> +for information on submitting patches.
> +
> +If no known code works on your machine, you need to resort to do some
> +probing, because unfortunately Dell does not publish datasheets for
> +its SMM. You can experiment with the code in `this repository`__ to
> +probe the BIOS on your machine and discover the appropriate codes.
> +
> + __ https://github.com/clopez/dellfan/
> +
> +Again, when you find new codes, we'd be happy to have your patches!
> +
> +Module parameters
> +-----------------
> +
> +* force:bool
> + Force loading without checking for supported
> + models. (default: 0)
> +
> +* ignore_dmi:bool
> + Continue probing hardware even if DMI data does not
> + match. (default: 0)
> +
> +* restricted:bool
> + Allow fan control only to processes with the
> + ``CAP_SYS_ADMIN`` capability set or processes run
> + as root when using the legacy ``/proc/i8k``
> + interface. In this case normal users will be able
> + to read temperature and fan status but not to
> + control the fan. If your notebook is shared with
> + other users and you don't trust them you may want
> + to use this option. (default: 1, only available
> + with ``CONFIG_I8K``)
> +
> +* power_status:bool
> + Report AC status in ``/proc/i8k``. (default: 0,
> + only available with ``CONFIG_I8K``)
> +
> +* fan_mult:uint
> + Factor to multiply fan speed with. (default:
> + autodetect)
> +
> +* fan_max:uint
> + Maximum configurable fan speed. (default:
> + autodetect)
> +
> +Legacy ``/proc`` interface
> +--------------------------
> +
> +.. warning:: This interface is obsolete and deprecated and should not
> + used in new applications. This interface is only
> + available when kernel is compiled with option
> + ``CONFIG_I8K``.
> +
> +The information provided by the kernel driver can be accessed by
> +simply reading the ``/proc/i8k`` file. For example::
> +
> + $ cat /proc/i8k
> + 1.0 A17 2J59L02 52 2 1 8040 6420 1 2
> +
> +The fields read from ``/proc/i8k`` are::
> +
> + 1.0 A17 2J59L02 52 2 1 8040 6420 1 2
> + | | | | | | | | | |
> + | | | | | | | | | +------- 10. buttons status
> + | | | | | | | | +--------- 9. AC status
> + | | | | | | | +-------------- 8. fan0 RPM
> + | | | | | | +------------------- 7. fan1 RPM
> + | | | | | +--------------------- 6. fan0 status
> + | | | | +----------------------- 5. fan1 status
> + | | | +-------------------------- 4. temp0 reading (Celsius)
> + | | +---------------------------------- 3. Dell service tag (later known as 'serial number')
> + | +-------------------------------------- 2. BIOS version
> + +------------------------------------------ 1. /proc/i8k format version
> +
> +A negative value, for example -22, indicates that the BIOS doesn't
> +return the corresponding information. This is normal on some
> +models/BIOSes.
> +
> +For performance reasons the ``/proc/i8k`` doesn't report by default
> +the AC status since this SMM call takes a long time to execute and is
> +not really needed. If you want to see the ac status in ``/proc/i8k``
> +you must explictitly enable this option by passing the
> +``power_status=1`` parameter to insmod. If AC status is not
> +available -1 is printed instead.
> +
> +The driver provides also an ioctl interface which can be used to
> +obtain the same information and to control the fan status. The ioctl
> +interface can be accessed from C programs or from shell using the
> +i8kctl utility. See the source file of ``i8kutils`` for more
> +information on how to use the ioctl interface.
> diff --git a/Documentation/hwmon/index.rst b/Documentation/hwmon/index.rst
> index 230ad59b462b..092435ad6bb8 100644
> --- a/Documentation/hwmon/index.rst
> +++ b/Documentation/hwmon/index.rst
> @@ -44,6 +44,7 @@ Hardware Monitoring Kernel Drivers
> coretemp
> da9052
> da9055
> + dell-smm-hwmon
> dme1737
> ds1621
> ds620