[PATCH 0/5] hwmon: (nct6775) Add i2c support

Zev Weiss zev at bewilderbeest.net
Sun Feb 27 00:30:42 AEDT 2022


Hello,

This patch series augments the existing nct6775 driver with support
for the hardware's i2c interface.

Thus far the nct6775 driver has only supported the LPC interface,
which is the main interface by which the Super-I/O chip is typically
connected to the host (x86) processor.

However, these chips also provide an i2c interface, which can provide
a way for a BMC to also monitor sensor readings from them.  On some
systems (such as the ASRock Rack ROMED8HM3 and X570-D4U) this may be
the only way for the BMC to monitor host CPU temperatures (e.g. to
indirectly access a TSI interface); this functionality is thus an
important component of enabling OpenBMC to support such systems.

In such an arrangement the Super-I/O chip is simultaneously controlled
by two independent processors (the host and the BMC) which typically
do not coordinate their accesses with each other.  In order to avoid
conflicts between the two, the i2c driver avoids all writes to the
device, since the BMC's needs with the hardware are merely that it be
able to retrieve sensor readings.  This allows the host processor to
remain ultimately in control of the chip and unaware of the BMC's use
of it at all.

The sole exception to the "no writes" rule for the i2c driver is for
the bank-select register -- while I haven't been able to find any
explicit statement in the Nuvoton datasheets guaranteeing this, all
experiments I've done have indicated that, as one might hope, the i2c
interface has its own bank-select register independent of the one used
by the LPC interface.

In terms of code structure, the approach taken in this series is to
split the LPC-specific parts of the driver out into a separate module
(called nct6775-platform), leaving the interface-independent parts in
a generic driver (called nct6775-core).  The nct6775-i2c driver is
then added as an additional consumer of the nct6775-core module's
functionality.

The first two patches make some relatively small infrastructural
changes to the nct6775 driver; the bulk of the core/platform driver
split is in the third patch.  The final two patches add DT bindings
and the i2c driver itself.

I've tested the nct6775-platform and nct6775-i2c drivers with the
NCT6779D in an ASRock ROMED8HM3 system (the latter driver on its
AST2500 BMC); both seem to work as expected.  Broader testing would of
course be welcome though, as is review feedback.


Thanks,
Zev


Zev Weiss (5):
  hwmon: (nct6775) Rearrange attr-group initialization
  hwmon: (nct6775) Add read-only mode
  hwmon: (nct6775) Split core and platform driver
  dt-bindings: hwmon: Add nuvoton,nct6775
  hwmon: (nct6775) Add i2c driver

 .../bindings/hwmon/nuvoton,nct6775.yaml       |   48 +
 MAINTAINERS                                   |   12 +-
 drivers/hwmon/Kconfig                         |   32 +-
 drivers/hwmon/Makefile                        |    4 +-
 drivers/hwmon/{nct6775.c => nct6775-core.c}   | 1464 +----------------
 drivers/hwmon/nct6775-i2c.c                   |  191 +++
 drivers/hwmon/nct6775-platform.c              | 1185 +++++++++++++
 drivers/hwmon/nct6775.h                       |  233 +++
 8 files changed, 1763 insertions(+), 1406 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/hwmon/nuvoton,nct6775.yaml
 rename drivers/hwmon/{nct6775.c => nct6775-core.c} (75%)
 create mode 100644 drivers/hwmon/nct6775-i2c.c
 create mode 100644 drivers/hwmon/nct6775-platform.c
 create mode 100644 drivers/hwmon/nct6775.h

-- 
2.35.1



More information about the openbmc mailing list