summaryrefslogtreecommitdiffstats
path: root/occ_manager.hpp
diff options
context:
space:
mode:
authorLei YU <mine260309@gmail.com>2017-07-13 17:02:23 +0800
committerLei YU <mine260309@gmail.com>2017-08-28 10:31:42 +0800
commit0ab90ca75b825db8e2427ea62ea3ee212c9accbb (patch)
tree6d7934495cf7233f54f5bd882469056c4f700142 /occ_manager.hpp
parent3ace7576176afed9196fb308c766de6b1252d3ea (diff)
downloadopenpower-occ-control-0ab90ca75b825db8e2427ea62ea3ee212c9accbb.tar.gz
openpower-occ-control-0ab90ca75b825db8e2427ea62ea3ee212c9accbb.zip
Add I2C OCC support for P8 systems
P8 system uses I2C OCC and it uses different driver for occ-hwmon. Add `--enable-i2c-occ` configure option to enable the support. It searches i2c device names in sysfs to get all occ-hwmon devices and use the i2c device name to bind/unbind the driver. The occ control object path for I2C OCC hwmon becomes something like /org/open_power/control/3_0050, where 3_0050 is the i2c address. Change-Id: I8b9d8d4429c563528dc88fb2679b265c53d7a2d5 Signed-off-by: Lei YU <mine260309@gmail.com>
Diffstat (limited to 'occ_manager.hpp')
-rw-r--r--occ_manager.hpp31
1 files changed, 31 insertions, 0 deletions
diff --git a/occ_manager.hpp b/occ_manager.hpp
index e79ac3c..7bb1042 100644
--- a/occ_manager.hpp
+++ b/occ_manager.hpp
@@ -12,6 +12,7 @@
#include "occ_status.hpp"
#include "occ_finder.hpp"
#include "config.h"
+#include "i2c_occ.hpp"
namespace sdbusRule = sdbusplus::bus::match::rules;
namespace open_power
@@ -43,6 +44,10 @@ struct Manager
bus(bus),
event(event)
{
+#ifdef I2C_OCC
+ // I2C OCC status objects are initialized directly
+ initStatusObjects();
+#else
// Check if CPU inventory exists already.
auto occs = open_power::occ::finder::get(bus);
if (occs.empty())
@@ -67,6 +72,7 @@ struct Manager
createObjects(occ);
}
}
+#endif
}
private:
@@ -187,6 +193,31 @@ struct Manager
/** @brief Number of OCCs that are bound */
uint8_t activeCount = 0;
+
+#ifdef I2C_OCC
+ /** @brief Init Status objects for I2C OCC devices
+ *
+ * It iterates in /sys/bus/i2c/devices, finds all occ hwmon devices
+ * and creates status objects.
+ */
+ void initStatusObjects()
+ {
+ // Make sure we have a valid path string
+ static_assert(sizeof(DEV_PATH) != 0);
+
+ auto deviceNames = i2c_occ::getOccHwmonDevices(DEV_PATH);
+ for (auto& name : deviceNames)
+ {
+ i2c_occ::i2cToDbus(name);
+ auto path = fs::path(OCC_CONTROL_ROOT) / name;
+ statusObjects.emplace_back(
+ std::make_unique<Status>(
+ bus,
+ event,
+ path.c_str()));
+ }
+ }
+#endif
};
} // namespace occ
OpenPOWER on IntegriCloud