discover_system_state: apply power restore delay
Introduce option `apply-power-policy-bmc-ready` to control power
restore policy application timing. When enabled (default), BMC
waits until BMC_READY before applying power policy. When disabled,
BMC waits for the PowerRestoreDelay before applying power policy.
This change maintains backward compatibility while allowing more
flexible power restoration behavior.
Tested:
1) PSM builds fine
2) When `apply-power-policy-bmc-ready` is disabled,
discovery_system_state waits for PowerRestoreDelay as specified by
the user.
Change-Id: Ib2381612bdb8cb6960f126228d25d8d43fed1d92
Signed-off-by: Prithvi Pai <ppai@nvidia.com>
diff --git a/discover_system_state.cpp b/discover_system_state.cpp
index cadaedd..f6542ef 100644
--- a/discover_system_state.cpp
+++ b/discover_system_state.cpp
@@ -175,7 +175,11 @@
info(
"power_policy=ALWAYS_POWER_ON, powering host on ({DELAY}s delay)",
"DELAY", powerRestoreDelaySec.count());
+#ifdef APPLY_POWER_POLICY_WHEN_BMC_READY
utils::waitBmcReady(bus, powerRestoreDelaySec);
+#else
+ std::this_thread::sleep_for(powerRestoreDelayUsec);
+#endif
phosphor::state::manager::utils::setProperty(
bus, hostPath, HostState::interface, "RestartCause",
convertForMessage(
@@ -201,7 +205,11 @@
info(
"power_policy=ALWAYS_POWER_OFF, set requested state to off ({DELAY}s delay)",
"DELAY", powerRestoreDelaySec.count());
+#ifdef APPLY_POWER_POLICY_WHEN_BMC_READY
utils::waitBmcReady(bus, powerRestoreDelaySec);
+#else
+ std::this_thread::sleep_for(powerRestoreDelayUsec);
+#endif
// Read last requested state and re-request it to execute it
auto hostReqState = phosphor::state::manager::utils::getProperty(
bus, hostPath, HostState::interface, "RequestedHostTransition");
@@ -219,7 +227,11 @@
{
info("power_policy=RESTORE, restoring last state ({DELAY}s delay)",
"DELAY", powerRestoreDelaySec.count());
+#ifdef APPLY_POWER_POLICY_WHEN_BMC_READY
utils::waitBmcReady(bus, powerRestoreDelaySec);
+#else
+ std::this_thread::sleep_for(powerRestoreDelayUsec);
+#endif
// Read last requested state and re-request it to execute it
auto hostReqState = phosphor::state::manager::utils::getProperty(
bus, hostPath, HostState::interface, "RequestedHostTransition");