Skip to content

Commit

Permalink
hwmon: (pmbus/core) Add support for rated attributes
Browse files Browse the repository at this point in the history
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 <[email protected]>
  • Loading branch information
zlukwins authored and Jason M. Bills committed Oct 9, 2020
1 parent 0db4817 commit 400365d
Show file tree
Hide file tree
Showing 3 changed files with 68 additions and 9 deletions.
15 changes: 14 additions & 1 deletion Documentation/hwmon/pmbus.rst
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand All @@ -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.
Expand All @@ -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.
Expand All @@ -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.
======================= ========================================================
13 changes: 13 additions & 0 deletions drivers/hwmon/pmbus/pmbus.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
49 changes: 41 additions & 8 deletions drivers/hwmon/pmbus/pmbus_core.c
Original file line number Diff line number Diff line change
Expand Up @@ -1446,6 +1446,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",
},
};

Expand Down Expand Up @@ -1509,7 +1515,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[] = {
Expand Down Expand Up @@ -1581,7 +1593,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[] = {
Expand Down Expand Up @@ -1615,7 +1630,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[] = {
Expand Down Expand Up @@ -1666,7 +1684,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[] = {
Expand Down Expand Up @@ -1700,7 +1721,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[] = {
Expand Down Expand Up @@ -1764,7 +1788,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[] = {
Expand Down Expand Up @@ -1802,7 +1829,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[] = {
Expand All @@ -1828,7 +1858,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[] = {
Expand Down

0 comments on commit 400365d

Please sign in to comment.