oem-ibm: Support system reboot after inband code update
This commit adds a bmc effecter that causes a system reboot(
phyp, chassis and bmc)
After bmc sends an end update successful event, Host will
set this new effecter. Upon getting the setStateEffecterStates
call bmc-pldm does the following:
1. Set the power restore to reboot the host once the BMC
is rebooted
2. power off Host and Chassis
3. reboot the bmc
Tested with pldmtool
Steps after patching changes:
1. Boot host to STANDBY
2. Fetch the effecter to note the effecterId
Ex: ./pldmtool platform GetPDR -d 28
3. Trigger the system reboot by toggling the effecter
./pldmtool platform SetStateEffecterStates -i 10 -c 1
-d 1 1
Signed-off-by: Sagar Srinivas <sagar.srinivas@ibm.com>
Change-Id: Id2d4201a7d61ae335adc64f2583571a37dc7879d
diff --git a/oem/ibm/libpldmresponder/inband_code_update.hpp b/oem/ibm/libpldmresponder/inband_code_update.hpp
index 77f55f1..2bd02f4 100644
--- a/oem/ibm/libpldmresponder/inband_code_update.hpp
+++ b/oem/ibm/libpldmresponder/inband_code_update.hpp
@@ -39,6 +39,7 @@
nextBootSide = Tside;
markerLidSensorId = PLDM_INVALID_EFFECTER_ID;
firmwareUpdateSensorId = PLDM_INVALID_EFFECTER_ID;
+ imageActivationMatch = nullptr;
}
/* @brief Method to return the current boot side
@@ -183,7 +184,7 @@
std::vector<std::unique_ptr<sdbusplus::bus::match::match>>
captureNextBootSideChange; //!< vector to catch the D-Bus property
//!< change for next boot side
- std::unique_ptr<sdbusplus::bus::match::match>
+ std::vector<std::unique_ptr<sdbusplus::bus::match::match>>
fwUpdateMatcher; //!< pointer to capture the interface added signal for
//!< new image
pldm::responder::oem_platform::Handler*
@@ -191,6 +192,9 @@
uint16_t markerLidSensorId;
uint16_t firmwareUpdateSensorId;
+ /** @brief D-Bus property changed signal match for image activation */
+ std::unique_ptr<sdbusplus::bus::match::match> imageActivationMatch;
+
/* @brief Method to take action when the subscribed D-Bus property is
* changed
* @param[in] chProperties - list of properties which have changed