summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--configure.ac4
-rw-r--r--occ_status.cpp32
-rw-r--r--occ_status.hpp7
3 files changed, 41 insertions, 2 deletions
diff --git a/configure.ac b/configure.ac
index 3091e67..098a0eb 100644
--- a/configure.ac
+++ b/configure.ac
@@ -97,6 +97,10 @@ AC_ARG_VAR(DEV_PATH, [The device path])
AS_IF([test "x$DEV_PATH" == "x"], [DEV_PATH="/sys/bus/platform/devices/"])
AC_DEFINE_UNQUOTED([DEV_PATH], ["$DEV_PATH"], [The device path])
+AC_ARG_VAR(FSI_SCAN_FILE, [The File to write for initiating FSI rescan])
+AS_IF([test "x$FSI_SCAN_FILE" == "x"], [FSI_SCAN_FILE="/sys/devices/platform/gpio-fsi/fsi0/slave@00:00/00:00:00:0a/fsi1/rescan"])
+AC_DEFINE_UNQUOTED([FSI_SCAN_FILE], ["$FSI_SCAN_FILE"], [The File to write for initiating FSI rescan])
+
AC_ARG_VAR(PS_DERATING_FACTOR, [The power supply derating factor])
AS_IF([test "x$PS_DERATING_FACTOR" == "x"], [PS_DERATING_FACTOR=90])
AC_DEFINE_UNQUOTED([PS_DERATING_FACTOR], [$PS_DERATING_FACTOR], [The power supply derating factor])
diff --git a/occ_status.cpp b/occ_status.cpp
index f740dc7..7eafb66 100644
--- a/occ_status.cpp
+++ b/occ_status.cpp
@@ -7,6 +7,11 @@ namespace open_power
namespace occ
{
+bool Status::hubFsiScanDone = false;
+
+// To initiate a FSI rescan
+constexpr auto fsiReScan = "1";
+
// Handles updates to occActive property
bool Status::occActive(bool value)
{
@@ -14,16 +19,26 @@ bool Status::occActive(bool value)
{
if (value)
{
+ if (!hubFsiScanDone)
+ {
+ // Need to do hub scan before we bind
+ this->scanHubFSI();
+ }
+
// Bind the device
device.bind();
// And watch for errors
- device.addErrorWatch();
+ // Commenting until we solve the occ error monitoring issue
+ // TODO: openbmc/openbmc#2126
+ // device.addErrorWatch();
}
else
{
// Stop watching for errors
- device.removeErrorWatch();
+ // Commenting until we solve the occ error monitoring issue
+ // TODO: openbmc/openbmc#2126
+ // device.removeErrorWatch();
// Do the unbind.
device.unBind();
@@ -97,5 +112,18 @@ void Status::hostControlEvent(sdbusplus::message::message& msg)
return;
}
+// Scans the secondary FSI hub to make sure /dev/occ files are populated
+// Write "1" to achieve that
+void Status::scanHubFSI()
+{
+ std::ofstream file(FSI_SCAN_FILE, std::ios::out);
+ file << fsiReScan;
+ file.close();
+
+ // Hub FSI scan has been done. No need to do this for all the OCCs
+ hubFsiScanDone = true;
+ return;
+}
+
} // namespace occ
} // namespace open_power
diff --git a/occ_status.hpp b/occ_status.hpp
index e07ca61..74839d0 100644
--- a/occ_status.hpp
+++ b/occ_status.hpp
@@ -109,6 +109,9 @@ class Status : public Interface
**/
sdbusplus::bus::match_t hostControlSignal;
+ /** @brief Indicates whether a hub FSI scan has been attempted or not */
+ static bool hubFsiScanDone;
+
/** @brief Callback handler when device errors are detected */
void deviceErrorHandler();
@@ -121,6 +124,10 @@ class Status : public Interface
/** @brief Sends a message to host control command handler to reset OCC
*/
void resetOCC();
+
+ /** @brief Initiates hub FSI scan so that /dev/occ files are created
+ */
+ void scanHubFSI();
};
} // namespace occ
OpenPOWER on IntegriCloud