hwmon: (pmbus/core) Add support for rated attributes
authorZbigniew Lukwinski <zbigniew.lukwinski@linux.intel.com>
Fri, 31 Jul 2020 19:37:17 +0000 (21:37 +0200)
committerGuenter Roeck <linux@roeck-us.net>
Wed, 23 Sep 2020 16:42:39 +0000 (09:42 -0700)
Adding implementation for new attributes (rated_min/rated_max) to
cover PMBus specification about rated values reporting:
MFR_VIN_MIN, MFR_VIN_MAX, MFR_IIN_MAX, MFR_PIN_MAX, MFR_VOUT_MIN,
MFR_VOUT_MAX, MFR_IOUT_MAX, MFR_POUT_MAX, MFR_MAX_TEMP_1/2/3.

Tested with OpenBMC stack. All rated attributes were available
and reported correct values.

Signed-off-by: Zbigniew Lukwinski <zbigniew.lukwinski@linux.intel.com>
Link: https://lore.kernel.org/r/1596224237-32280-4-git-send-email-zbigniew.lukwinski@linux.intel.com
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
Documentation/hwmon/pmbus.rst
drivers/hwmon/pmbus/pmbus.h
drivers/hwmon/pmbus/pmbus_core.c

index 66b3e89..67284bd 100644 (file)
@@ -211,6 +211,10 @@ inX_lcrit_alarm            Voltage critical low alarm.
 inX_crit_alarm         Voltage critical high alarm.
                        From VOLTAGE_OV_FAULT status.
 inX_label              "vin", "vcap", or "voutY"
+inX_rated_min          Minimum rated voltage.
+                       From MFR_VIN_MIN or MFR_VOUT_MIN register.
+inX_rated_max          Maximum rated voltage.
+                       From MFR_VIN_MAX or MFR_VOUT_MAX register.
 
 currX_input            Measured current. From READ_IIN or READ_IOUT register.
 currX_max              Maximum current.
@@ -230,6 +234,8 @@ currX_crit_alarm    Current critical high alarm.
 currX_label            "iin", "iinY", "iinY.Z", "ioutY", or "ioutY.Z",
                        where Y reflects the page number and Z reflects the
                        phase.
+currX_rated_max                Maximum rated current.
+                       From MFR_IIN_MAX or MFR_IOUT_MAX register.
 
 powerX_input           Measured power. From READ_PIN or READ_POUT register.
 powerX_cap             Output power cap. From POUT_MAX register.
@@ -244,10 +250,12 @@ powerX_crit_alarm Output power critical high alarm.
 powerX_label           "pin", "pinY", "pinY.Z", "poutY", or "poutY.Z",
                        where Y reflects the page number and Z reflects the
                        phase.
+powerX_rated_max       Maximum rated power.
+                       From MFR_PIN_MAX or MFR_POUT_MAX register.
 
 tempX_input            Measured temperature.
                        From READ_TEMPERATURE_X register.
-tempX_min              Mimimum temperature. From UT_WARN_LIMIT register.
+tempX_min              Minimum temperature. From UT_WARN_LIMIT register.
 tempX_max              Maximum temperature. From OT_WARN_LIMIT register.
 tempX_lcrit            Critical low temperature.
                        From UT_FAULT_LIMIT register.
@@ -265,4 +273,9 @@ tempX_lcrit_alarm   Chip temperature critical low alarm. Set by comparing
 tempX_crit_alarm       Chip temperature critical high alarm. Set by comparing
                        READ_TEMPERATURE_X with OT_FAULT_LIMIT if
                        TEMP_OT_FAULT status is set.
+tempX_rated_min                Minimum rated temperature.
+                       From MFR_TAMBIENT_MIN register.
+tempX_rated_max                Maximum rated temperature.
+                       From MFR_TAMBIENT_MAX, MFR_MAX_TEMP_1, MFR_MAX_TEMP_2 or
+                       MFR_MAX_TEMP_3 register.
 ======================= ========================================================
index 18e06fc..6d9f2cf 100644 (file)
@@ -119,9 +119,22 @@ enum pmbus_regs {
        PMBUS_MFR_DATE                  = 0x9D,
        PMBUS_MFR_SERIAL                = 0x9E,
 
+       PMBUS_MFR_VIN_MIN               = 0xA0,
+       PMBUS_MFR_VIN_MAX               = 0xA1,
+       PMBUS_MFR_IIN_MAX               = 0xA2,
+       PMBUS_MFR_PIN_MAX               = 0xA3,
+       PMBUS_MFR_VOUT_MIN              = 0xA4,
+       PMBUS_MFR_VOUT_MAX              = 0xA5,
+       PMBUS_MFR_IOUT_MAX              = 0xA6,
+       PMBUS_MFR_POUT_MAX              = 0xA7,
+
        PMBUS_IC_DEVICE_ID              = 0xAD,
        PMBUS_IC_DEVICE_REV             = 0xAE,
 
+       PMBUS_MFR_MAX_TEMP_1            = 0xC0,
+       PMBUS_MFR_MAX_TEMP_2            = 0xC1,
+       PMBUS_MFR_MAX_TEMP_3            = 0xC2,
+
 /*
  * Virtual registers.
  * Useful to support attributes which are not supported by standard PMBus
index 44535ad..89ea7da 100644 (file)
@@ -1404,6 +1404,12 @@ static const struct pmbus_limit_attr vin_limit_attrs[] = {
        }, {
                .reg = PMBUS_VIRT_RESET_VIN_HISTORY,
                .attr = "reset_history",
+       }, {
+               .reg = PMBUS_MFR_VIN_MIN,
+               .attr = "rated_min",
+       }, {
+               .reg = PMBUS_MFR_VIN_MAX,
+               .attr = "rated_max",
        },
 };
 
@@ -1467,7 +1473,13 @@ static const struct pmbus_limit_attr vout_limit_attrs[] = {
        }, {
                .reg = PMBUS_VIRT_RESET_VOUT_HISTORY,
                .attr = "reset_history",
-       }
+       }, {
+               .reg = PMBUS_MFR_VOUT_MIN,
+               .attr = "rated_min",
+       }, {
+               .reg = PMBUS_MFR_VOUT_MAX,
+               .attr = "rated_max",
+       },
 };
 
 static const struct pmbus_sensor_attr voltage_attributes[] = {
@@ -1537,7 +1549,10 @@ static const struct pmbus_limit_attr iin_limit_attrs[] = {
        }, {
                .reg = PMBUS_VIRT_RESET_IIN_HISTORY,
                .attr = "reset_history",
-       }
+       }, {
+               .reg = PMBUS_MFR_IIN_MAX,
+               .attr = "rated_max",
+       },
 };
 
 static const struct pmbus_limit_attr iout_limit_attrs[] = {
@@ -1571,7 +1586,10 @@ static const struct pmbus_limit_attr iout_limit_attrs[] = {
        }, {
                .reg = PMBUS_VIRT_RESET_IOUT_HISTORY,
                .attr = "reset_history",
-       }
+       }, {
+               .reg = PMBUS_MFR_IOUT_MAX,
+               .attr = "rated_max",
+       },
 };
 
 static const struct pmbus_sensor_attr current_attributes[] = {
@@ -1622,7 +1640,10 @@ static const struct pmbus_limit_attr pin_limit_attrs[] = {
        }, {
                .reg = PMBUS_VIRT_RESET_PIN_HISTORY,
                .attr = "reset_history",
-       }
+       }, {
+               .reg = PMBUS_MFR_PIN_MAX,
+               .attr = "rated_max",
+       },
 };
 
 static const struct pmbus_limit_attr pout_limit_attrs[] = {
@@ -1656,7 +1677,10 @@ static const struct pmbus_limit_attr pout_limit_attrs[] = {
        }, {
                .reg = PMBUS_VIRT_RESET_POUT_HISTORY,
                .attr = "reset_history",
-       }
+       }, {
+               .reg = PMBUS_MFR_POUT_MAX,
+               .attr = "rated_max",
+       },
 };
 
 static const struct pmbus_sensor_attr power_attributes[] = {
@@ -1720,7 +1744,10 @@ static const struct pmbus_limit_attr temp_limit_attrs[] = {
        }, {
                .reg = PMBUS_VIRT_RESET_TEMP_HISTORY,
                .attr = "reset_history",
-       }
+       }, {
+               .reg = PMBUS_MFR_MAX_TEMP_1,
+               .attr = "rated_max",
+       },
 };
 
 static const struct pmbus_limit_attr temp_limit_attrs2[] = {
@@ -1758,7 +1785,10 @@ static const struct pmbus_limit_attr temp_limit_attrs2[] = {
        }, {
                .reg = PMBUS_VIRT_RESET_TEMP2_HISTORY,
                .attr = "reset_history",
-       }
+       }, {
+               .reg = PMBUS_MFR_MAX_TEMP_2,
+               .attr = "rated_max",
+       },
 };
 
 static const struct pmbus_limit_attr temp_limit_attrs3[] = {
@@ -1784,7 +1814,10 @@ static const struct pmbus_limit_attr temp_limit_attrs3[] = {
                .attr = "crit",
                .alarm = "crit_alarm",
                .sbit = PB_TEMP_OT_FAULT,
-       }
+       }, {
+               .reg = PMBUS_MFR_MAX_TEMP_3,
+               .attr = "rated_max",
+       },
 };
 
 static const struct pmbus_sensor_attr temp_attributes[] = {