Expose the IOC and board temperature sensors of LSI / Broadcom / Avago
SAS HBAs that bind to mpt3sas through the hwmon interface. The data
lives in MPI IO Unit Page 7.
The same fields are exposed by Broadcom's userspace tooling through
the /dev/mpt[23]ctl ioctl path (typically root-only): IOCTemperature
and BoardTemperature in lsiutil; ROC and Controller in storcli.
With this driver, sensors(1) shows them unprivileged:
$ sensors mpt3sas-pci-0200
mpt3sas-pci-0200
Adapter: PCI adapter
IOC: +42.0°C
v3 -> v4:
v3: https://lore.kernel.org/r/20260524210545.1333637-1-sautier.louis@gmail.com
v3 (resend): https://lore.kernel.org/r/20260609164423.2829699-1-sautier.louis@gmail.com
* Dropped the SCSI_MPT3SAS_HWMON Kconfig option as suggested by
Damien Le Moal; the hwmon code is now built whenever CONFIG_HWMON
is enabled. Used IS_REACHABLE() rather than IS_ENABLED() so
SCSI_MPT3SAS=y with HWMON=m still builds, same pattern as i915/xe.
* No line breaks after function return types; aligned multi-line
call arguments to the opening parenthesis (Damien Le Moal).
* Dropped unused #include <linux/kernel.h> from mpt3sas_hwmon.c.
* Added Damien Le Moal's Reviewed-by to patch 1.
v2 -> v3:
v2: https://lore.kernel.org/r/20260518184109.770185-1-sautier.louis@gmail.com
* Removed stale Documentation/hwmon/mpt3sas.rst reference from
Kconfig help text.
v1 -> v2:
v1: https://lore.kernel.org/r/20260512214703.655633-1-sautier.louis@gmail.com
* Dropped misleading Documentation/hwmon/mpt3sas.rst.
* Dropped inaccurate concurrency-wait figure from Testing;
corrected empirical data is in the on-list discussion.
Testing
-------
Build-tested all four SCSI_MPT3SAS x HWMON combinations (=y and =m
each), including the SCSI_MPT3SAS=y with HWMON=m case that requires
IS_REACHABLE().
Validated across three Broadcom SAS chip generations. None of the
cards had a board sensor present, so the testing only covers the
IOC channel:
* LSI 9500-8i / SAS3816, SAS-3:
- hwmon device registers as "mpt3sas" with only temp1 (IOC) exposed
- IOC reading matches `storcli /c0 show temperature` and
`lsiutil -p1 -a 25,2,0,0`
- rmmod / modprobe cycle goes through the explicit
unregister/register paths cleanly
* LSI 9305-24i / SAS3224, SAS-3: same behaviour.
* LSI 9211-4i / SAS2004, SAS-2: firmware reports both
*TemperatureUnits = NOT_PRESENT, no hwmon device registered
(graceful-skip path).
Not verified (no available hardware):
* Path with both IOC and board sensors present.
* Fahrenheit-units conversion.
* Sub-zero readings (signed-cast path).
Louis Sautier (2):
scsi: mpt3sas: add IO Unit Page 7 config accessor
scsi: mpt3sas: add hwmon support
drivers/scsi/mpt3sas/Makefile | 2 +
drivers/scsi/mpt3sas/mpt3sas_base.h | 20 +++
drivers/scsi/mpt3sas/mpt3sas_config.c | 36 +++++
drivers/scsi/mpt3sas/mpt3sas_hwmon.c | 195 ++++++++++++++++++++++++++
drivers/scsi/mpt3sas/mpt3sas_scsih.c | 6 +
5 files changed, 259 insertions(+)
create mode 100644 drivers/scsi/mpt3sas/mpt3sas_hwmon.c
base-commit: 5d6919055dec134de3c40167a490f33c74c12581
--
2.54.0