.. SPDX-License-Identifier: GPL-2.0-only

Kernel driver Ampere(R)'s Altra(R) SMpro hwmon
==============================================

Supported chips:

  * Ampere(R) Altra(R)

    Prefix: ``smpro``

    Reference: `Altra SoC BMC Interface Specification`

Author: Thu Nguyen <thu@os.amperecomputing.com>

Description
-----------
The smpro-hwmon driver supports hardware monitoring for Ampere(R) Altra(R)
SoCs based on the SMpro co-processor (SMpro).  The following sensor metrics
are supported by the driver:

  * temperature
  * voltage
  * current
  * power

The interface provides the registers to query the various sensors and
their values which are then exported to userspace by this driver.

Usage Notes
-----------

The driver creates at least two sysfs files for each sensor.

* ``<sensor_type><idx>_label`` reports the sensor label.
* ``<sensor_type><idx>_input`` returns the sensor value.

The sysfs files are allocated in the SMpro rootfs folder, with one root
directory for each instance.

When the SoC is turned off, the driver will fail to read registers and
return ``-ENXIO``.

Sysfs entries
-------------

The following sysfs files are supported:

* Ampere(R) Altra(R):

  ============    =============  ======  ===============================================
  Name            Unit           Perm    Description
  ============    =============  ======  ===============================================
  temp1_input     millicelsius   RO      SoC temperature
  temp2_input     millicelsius   RO      Max temperature reported among SoC VRDs
  temp2_crit      millicelsius   RO      SoC VRD HOT Threshold temperature
  temp3_input     millicelsius   RO      Max temperature reported among DIMM VRDs
  temp4_input     millicelsius   RO      Max temperature reported among Core VRDs
  temp5_input     millicelsius   RO      Temperature of DIMM0 on CH0
  temp5_crit      millicelsius   RO      MEM HOT Threshold for all DIMMs
  temp6_input     millicelsius   RO      Temperature of DIMM0 on CH1
  temp6_crit      millicelsius   RO      MEM HOT Threshold for all DIMMs
  temp7_input     millicelsius   RO      Temperature of DIMM0 on CH2
  temp7_crit      millicelsius   RO      MEM HOT Threshold for all DIMMs
  temp8_input     millicelsius   RO      Temperature of DIMM0 on CH3
  temp8_crit      millicelsius   RO      MEM HOT Threshold for all DIMMs
  temp9_input     millicelsius   RO      Temperature of DIMM0 on CH4
  temp9_crit      millicelsius   RO      MEM HOT Threshold for all DIMMs
  temp10_input    millicelsius   RO      Temperature of DIMM0 on CH5
  temp10_crit     millicelsius   RO      MEM HOT Threshold for all DIMMs
  temp11_input    millicelsius   RO      Temperature of DIMM0 on CH6
  temp11_crit     millicelsius   RO      MEM HOT Threshold for all DIMMs
  temp12_input    millicelsius   RO      Temperature of DIMM0 on CH7
  temp12_crit     millicelsius   RO      MEM HOT Threshold for all DIMMs
  temp13_input    millicelsius   RO      Max temperature reported among RCA VRDs
  in0_input       millivolts     RO      Core voltage
  in1_input       millivolts     RO      SoC voltage
  in2_input       millivolts     RO      DIMM VRD1 voltage
  in3_input       millivolts     RO      DIMM VRD2 voltage
  in4_input       millivolts     RO      RCA VRD voltage
  cur1_input      milliamperes   RO      Core VRD current
  cur2_input      milliamperes   RO      SoC VRD current
  cur3_input      milliamperes   RO      DIMM VRD1 current
  cur4_input      milliamperes   RO      DIMM VRD2 current
  cur5_input      milliamperes   RO      RCA VRD current
  power1_input    microwatts     RO      Core VRD power
  power2_input    microwatts     RO      SoC VRD power
  power3_input    microwatts     RO      DIMM VRD1 power
  power4_input    microwatts     RO      DIMM VRD2 power
  power5_input    microwatts     RO      RCA VRD power
  ============    =============  ======  ===============================================

  Example::

    # cat in0_input
    830
    # cat temp1_input
    37000
    # cat curr1_input
    9000
    # cat power5_input
    19500000