blob: 92c8e84504a1862bc6c3d71bee3ba26d1a9b5a9e [file] [log] [blame]
#include "config.h"
#include "item_updater_helper.hpp"
#include "utils.hpp"
#include <phosphor-logging/lg2.hpp>
#include <sdbusplus/exception.hpp>
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