psu-ng: Add ACBEL PSU pmbus supported commands.
Update PSU monitor to use the following pmbus commands supported
by ACBEL PSU DD:
- To clear STATUS_INPUT use curr1_crit_alarm instead of
in1_crit_alarm fault.
- Update ACBEL PSU firmware version to be read from
/sys/kernel/debug/pmbus/hwmonX instead from
/sys/kernel/debug/pmbus/hwmonX/3-005a/ and update the ACBEL
FW version size to 6 bytes.
- On/off config not supported on ACBEL PSU.
Testing:
* Unplugged power cord from the ACBEL PSU, and verified an error
reported on the system.
* Set IIN_OC_FAULT_LIMIT fault and verified curr1_crit_alarm clears
the STATUS_INPUT.
* Verified the code reading the ACBEL FW revision correctly.
* Verified in1_input clears all faults on ACBEL PSU.
* Tested modified the code on IBMCFFPS and verified the ACBEL PSU
modification did not change the behavior on IBMCFFPS.
Change-Id: I5fef87043adb5d677723eb8a20b0aedc4574b7fd
Signed-off-by: Faisal Awada <faisal@us.ibm.com>
diff --git a/phosphor-power-supply/power_supply.cpp b/phosphor-power-supply/power_supply.cpp
index 89ecab4..f100978 100644
--- a/phosphor-power-supply/power_supply.cpp
+++ b/phosphor-power-supply/power_supply.cpp
@@ -695,7 +695,7 @@
{
using namespace phosphor::pmbus;
- if (present)
+ if (present && driverName != ACBEL_FSG032_DD_NAME)
{
log<level::INFO>("ON_OFF_CONFIG write", entry("DATA=0x%02X", data));
try
@@ -723,8 +723,16 @@
// also clearing.
//
// Do not care about return value. Should be 1 if active, 0 if not.
- static_cast<void>(
- pmbusIntf->read("in1_lcrit_alarm", phosphor::pmbus::Type::Hwmon));
+ if (driverName != ACBEL_FSG032_DD_NAME)
+ {
+ static_cast<void>(
+ pmbusIntf->read("in1_lcrit_alarm", phosphor::pmbus::Type::Hwmon));
+ }
+ else
+ {
+ static_cast<void>(
+ pmbusIntf->read("curr1_crit_alarm", phosphor::pmbus::Type::Hwmon));
+ }
vinUVFault = 0;
}
@@ -882,7 +890,8 @@
// 1-byte reads into one string. So, the maximum size expected is 6 bytes.
// However, it is formatted by the driver as a hex string with two ASCII
// characters per byte. So the maximum ASCII string size is 12.
- const auto VERSION_SIZE = 12;
+ const auto IBMCFFPS_FW_VERSION_SIZE = 12;
+ const auto ACBEL_FSG032_FW_VERSION_SIZE = 6;
using PropertyMap =
std::map<std::string,
@@ -906,13 +915,16 @@
// TODO: non-IBM inventory updates?
#if IBM_VPD
- if (driverName != IBMCFFPS_DD_NAME)
+ if (driverName == ACBEL_FSG032_DD_NAME)
{
getPsuVpdFromDbus("CC", modelName);
getPsuVpdFromDbus("PN", pn);
getPsuVpdFromDbus("FN", fn);
getPsuVpdFromDbus("SN", sn);
assetProps.emplace(SN_PROP, sn);
+ fwVersion = readVPDValue(FW_VERSION, Type::Debug,
+ ACBEL_FSG032_FW_VERSION_SIZE);
+ versionProps.emplace(VERSION_PROP, fwVersion);
}
else
{
@@ -923,16 +935,15 @@
header = readVPDValue(SERIAL_HEADER, Type::Debug, HEADER_SIZE);
sn = readVPDValue(SERIAL_NUMBER, Type::Debug, SERIAL_SIZE);
assetProps.emplace(SN_PROP, header + sn);
+ fwVersion = readVPDValue(FW_VERSION, Type::HwmonDeviceDebug,
+ IBMCFFPS_FW_VERSION_SIZE);
+ versionProps.emplace(VERSION_PROP, fwVersion);
}
assetProps.emplace(MODEL_PROP, modelName);
assetProps.emplace(PN_PROP, pn);
assetProps.emplace(SPARE_PN_PROP, fn);
- fwVersion = readVPDValue(FW_VERSION, Type::HwmonDeviceDebug,
- VERSION_SIZE);
- versionProps.emplace(VERSION_PROP, fwVersion);
-
ipzvpdVINIProps.emplace(
"CC", std::vector<uint8_t>(modelName.begin(), modelName.end()));
ipzvpdVINIProps.emplace("PN",