1*cab87e9cSJagpal Singh Gill #include "config.h"
2*cab87e9cSJagpal Singh Gill
3*cab87e9cSJagpal Singh Gill #include "item_updater_helper.hpp"
4*cab87e9cSJagpal Singh Gill
5*cab87e9cSJagpal Singh Gill #include "utils.hpp"
6*cab87e9cSJagpal Singh Gill
7*cab87e9cSJagpal Singh Gill #include <thread>
8*cab87e9cSJagpal Singh Gill
9*cab87e9cSJagpal Singh Gill namespace phosphor
10*cab87e9cSJagpal Singh Gill {
11*cab87e9cSJagpal Singh Gill namespace software
12*cab87e9cSJagpal Singh Gill {
13*cab87e9cSJagpal Singh Gill namespace updater
14*cab87e9cSJagpal Singh Gill {
15*cab87e9cSJagpal Singh Gill
setEntry(const std::string &,uint8_t)16*cab87e9cSJagpal Singh Gill void Helper::setEntry(const std::string& /* entryId */, uint8_t /* value */)
17*cab87e9cSJagpal Singh Gill {
18*cab87e9cSJagpal Singh Gill // Empty
19*cab87e9cSJagpal Singh Gill }
20*cab87e9cSJagpal Singh Gill
clearEntry(const std::string &)21*cab87e9cSJagpal Singh Gill void Helper::clearEntry(const std::string& /* entryId */)
22*cab87e9cSJagpal Singh Gill {
23*cab87e9cSJagpal Singh Gill // Empty
24*cab87e9cSJagpal Singh Gill }
25*cab87e9cSJagpal Singh Gill
cleanup()26*cab87e9cSJagpal Singh Gill void Helper::cleanup()
27*cab87e9cSJagpal Singh Gill {
28*cab87e9cSJagpal Singh Gill // Empty
29*cab87e9cSJagpal Singh Gill }
30*cab87e9cSJagpal Singh Gill
factoryReset()31*cab87e9cSJagpal Singh Gill void Helper::factoryReset()
32*cab87e9cSJagpal Singh Gill {
33*cab87e9cSJagpal Singh Gill // Mark the read-write partition for recreation upon reboot.
34*cab87e9cSJagpal Singh Gill utils::execute("/sbin/fw_setenv", "rwreset", "true");
35*cab87e9cSJagpal Singh Gill }
36*cab87e9cSJagpal Singh Gill
removeVersion(const std::string & flashId)37*cab87e9cSJagpal Singh Gill void Helper::removeVersion(const std::string& flashId)
38*cab87e9cSJagpal Singh Gill {
39*cab87e9cSJagpal Singh Gill auto method = bus.new_method_call(SYSTEMD_BUSNAME, SYSTEMD_PATH,
40*cab87e9cSJagpal Singh Gill SYSTEMD_INTERFACE, "StartUnit");
41*cab87e9cSJagpal Singh Gill auto serviceFile = "obmc-flash-mmc-remove@" + flashId + ".service";
42*cab87e9cSJagpal Singh Gill method.append(serviceFile, "replace");
43*cab87e9cSJagpal Singh Gill bus.call_noreply(method);
44*cab87e9cSJagpal Singh Gill
45*cab87e9cSJagpal Singh Gill // Wait a few seconds for the service file to finish, otherwise the BMC may
46*cab87e9cSJagpal Singh Gill // start the update while the image is still being deleted.
47*cab87e9cSJagpal Singh Gill constexpr auto removeWait = std::chrono::seconds(3);
48*cab87e9cSJagpal Singh Gill std::this_thread::sleep_for(removeWait);
49*cab87e9cSJagpal Singh Gill }
50*cab87e9cSJagpal Singh Gill
updateUbootVersionId(const std::string & flashId)51*cab87e9cSJagpal Singh Gill void Helper::updateUbootVersionId(const std::string& flashId)
52*cab87e9cSJagpal Singh Gill {
53*cab87e9cSJagpal Singh Gill auto method = bus.new_method_call(SYSTEMD_BUSNAME, SYSTEMD_PATH,
54*cab87e9cSJagpal Singh Gill SYSTEMD_INTERFACE, "StartUnit");
55*cab87e9cSJagpal Singh Gill auto serviceFile = "obmc-flash-mmc-setprimary@" + flashId + ".service";
56*cab87e9cSJagpal Singh Gill method.append(serviceFile, "replace");
57*cab87e9cSJagpal Singh Gill bus.call_noreply(method);
58*cab87e9cSJagpal Singh Gill
59*cab87e9cSJagpal Singh Gill // Wait a few seconds for the service file to finish, otherwise the BMC may
60*cab87e9cSJagpal Singh Gill // be rebooted while pointing to a non-existent version.
61*cab87e9cSJagpal Singh Gill constexpr auto setPrimaryWait = std::chrono::seconds(3);
62*cab87e9cSJagpal Singh Gill std::this_thread::sleep_for(setPrimaryWait);
63*cab87e9cSJagpal Singh Gill }
64*cab87e9cSJagpal Singh Gill
mirrorAlt()65*cab87e9cSJagpal Singh Gill void Helper::mirrorAlt()
66*cab87e9cSJagpal Singh Gill {
67*cab87e9cSJagpal Singh Gill auto method = bus.new_method_call(SYSTEMD_BUSNAME, SYSTEMD_PATH,
68*cab87e9cSJagpal Singh Gill SYSTEMD_INTERFACE, "StartUnit");
69*cab87e9cSJagpal Singh Gill auto serviceFile = "obmc-flash-mmc-mirroruboot.service";
70*cab87e9cSJagpal Singh Gill method.append(serviceFile, "replace");
71*cab87e9cSJagpal Singh Gill bus.call_noreply(method);
72*cab87e9cSJagpal Singh Gill }
73*cab87e9cSJagpal Singh Gill
74*cab87e9cSJagpal Singh Gill } // namespace updater
75*cab87e9cSJagpal Singh Gill } // namespace software
76*cab87e9cSJagpal Singh Gill } // namespace phosphor
77