#include "config.h" #include "item_updater_helper.hpp" #include "utils.hpp" #include #include namespace phosphor { namespace software { namespace updater { PHOSPHOR_LOG2_USING; void Helper::setEntry(const std::string& entryId, uint8_t value) { std::string serviceFile = "obmc-flash-bmc-setenv@" + entryId + "\\x3d" + std::to_string(value) + ".service"; auto method = bus.new_method_call(SYSTEMD_BUSNAME, SYSTEMD_PATH, SYSTEMD_INTERFACE, "StartUnit"); method.append(serviceFile, "replace"); bus.call_noreply(method); } void Helper::clearEntry(const std::string& entryId) { // Remove the priority environment variable. auto serviceFile = "obmc-flash-bmc-setenv@" + entryId + ".service"; auto method = bus.new_method_call(SYSTEMD_BUSNAME, SYSTEMD_PATH, SYSTEMD_INTERFACE, "StartUnit"); method.append(serviceFile, "replace"); bus.call_noreply(method); } void Helper::cleanup() { // Remove any volumes that do not match current versions. auto method = bus.new_method_call(SYSTEMD_BUSNAME, SYSTEMD_PATH, SYSTEMD_INTERFACE, "StartUnit"); method.append("obmc-flash-bmc-cleanup.service", "replace"); bus.call_noreply(method); } void Helper::factoryReset() { // Mark the read-write partition for recreation upon reboot. utils::execute("/sbin/fw_setenv", "rwreset", "true"); } void Helper::removeVersion(const std::string& versionId) { auto serviceFile = "obmc-flash-bmc-ubiro-remove@" + versionId + ".service"; // Remove the read-only partitions. auto method = bus.new_method_call(SYSTEMD_BUSNAME, SYSTEMD_PATH, SYSTEMD_INTERFACE, "StartUnit"); method.append(serviceFile, "replace"); bus.call_noreply(method); } void Helper::updateUbootVersionId(const std::string& versionId) { auto method = bus.new_method_call(SYSTEMD_BUSNAME, SYSTEMD_PATH, SYSTEMD_INTERFACE, "StartUnit"); auto updateEnvVarsFile = "obmc-flash-bmc-updateubootvars@" + versionId + ".service"; method.append(updateEnvVarsFile, "replace"); try { bus.call_noreply(method); } catch (const sdbusplus::exception::exception& e) { error("Failed to update u-boot env variables", "VERSIONID", versionId); } } void Helper::mirrorAlt() { auto method = bus.new_method_call(SYSTEMD_BUSNAME, SYSTEMD_PATH, SYSTEMD_INTERFACE, "StartUnit"); auto mirrorUbootFile = "obmc-flash-bmc-mirroruboot.service"; method.append(mirrorUbootFile, "replace"); try { bus.call_noreply(method); } catch (const sdbusplus::exception::exception& e) { error("Failed to copy U-Boot to alternate chip: {ERROR}", "ERROR", e); } } } // namespace updater } // namespace software } // namespace phosphor