1*cab87e9cSJagpal Singh Gill #include "config.h"
2*cab87e9cSJagpal Singh Gill
3*cab87e9cSJagpal Singh Gill #include "flash.hpp"
4*cab87e9cSJagpal Singh Gill
5*cab87e9cSJagpal Singh Gill #include "activation.hpp"
6*cab87e9cSJagpal Singh Gill #include "item_updater.hpp"
7*cab87e9cSJagpal Singh Gill
8*cab87e9cSJagpal Singh Gill namespace phosphor
9*cab87e9cSJagpal Singh Gill {
10*cab87e9cSJagpal Singh Gill namespace software
11*cab87e9cSJagpal Singh Gill {
12*cab87e9cSJagpal Singh Gill namespace updater
13*cab87e9cSJagpal Singh Gill {
14*cab87e9cSJagpal Singh Gill
15*cab87e9cSJagpal Singh Gill namespace softwareServer = sdbusplus::server::xyz::openbmc_project::software;
16*cab87e9cSJagpal Singh Gill
flashWrite()17*cab87e9cSJagpal Singh Gill void Activation::flashWrite()
18*cab87e9cSJagpal Singh Gill {
19*cab87e9cSJagpal Singh Gill auto method = bus.new_method_call(SYSTEMD_BUSNAME, SYSTEMD_PATH,
20*cab87e9cSJagpal Singh Gill SYSTEMD_INTERFACE, "StartUnit");
21*cab87e9cSJagpal Singh Gill auto serviceFile = "obmc-flash-mmc@" + versionId + ".service";
22*cab87e9cSJagpal Singh Gill method.append(serviceFile, "replace");
23*cab87e9cSJagpal Singh Gill bus.call_noreply(method);
24*cab87e9cSJagpal Singh Gill }
25*cab87e9cSJagpal Singh Gill
onStateChanges(sdbusplus::message_t & msg)26*cab87e9cSJagpal Singh Gill void Activation::onStateChanges(sdbusplus::message_t& msg)
27*cab87e9cSJagpal Singh Gill {
28*cab87e9cSJagpal Singh Gill uint32_t newStateID{};
29*cab87e9cSJagpal Singh Gill sdbusplus::message::object_path newStateObjPath;
30*cab87e9cSJagpal Singh Gill std::string newStateUnit{};
31*cab87e9cSJagpal Singh Gill std::string newStateResult{};
32*cab87e9cSJagpal Singh Gill
33*cab87e9cSJagpal Singh Gill // Read the msg and populate each variable
34*cab87e9cSJagpal Singh Gill msg.read(newStateID, newStateObjPath, newStateUnit, newStateResult);
35*cab87e9cSJagpal Singh Gill
36*cab87e9cSJagpal Singh Gill auto mmcServiceFile = "obmc-flash-mmc@" + versionId + ".service";
37*cab87e9cSJagpal Singh Gill auto flashId = parent.versions.find(versionId)->second->path();
38*cab87e9cSJagpal Singh Gill auto mmcSetPrimary = "obmc-flash-mmc-setprimary@" + flashId + ".service";
39*cab87e9cSJagpal Singh Gill
40*cab87e9cSJagpal Singh Gill if (newStateUnit == mmcServiceFile && newStateResult == "done")
41*cab87e9cSJagpal Singh Gill {
42*cab87e9cSJagpal Singh Gill roVolumeCreated = true;
43*cab87e9cSJagpal Singh Gill activationProgress->progress(activationProgress->progress() + 1);
44*cab87e9cSJagpal Singh Gill }
45*cab87e9cSJagpal Singh Gill
46*cab87e9cSJagpal Singh Gill if (newStateUnit == mmcSetPrimary && newStateResult == "done")
47*cab87e9cSJagpal Singh Gill {
48*cab87e9cSJagpal Singh Gill ubootEnvVarsUpdated = true;
49*cab87e9cSJagpal Singh Gill }
50*cab87e9cSJagpal Singh Gill
51*cab87e9cSJagpal Singh Gill if (newStateUnit == mmcServiceFile || newStateUnit == mmcSetPrimary)
52*cab87e9cSJagpal Singh Gill {
53*cab87e9cSJagpal Singh Gill if (newStateResult == "failed" || newStateResult == "dependency")
54*cab87e9cSJagpal Singh Gill {
55*cab87e9cSJagpal Singh Gill Activation::activation(
56*cab87e9cSJagpal Singh Gill softwareServer::Activation::Activations::Failed);
57*cab87e9cSJagpal Singh Gill }
58*cab87e9cSJagpal Singh Gill else if (roVolumeCreated)
59*cab87e9cSJagpal Singh Gill {
60*cab87e9cSJagpal Singh Gill if (!ubootEnvVarsUpdated)
61*cab87e9cSJagpal Singh Gill {
62*cab87e9cSJagpal Singh Gill activationProgress->progress(90);
63*cab87e9cSJagpal Singh Gill
64*cab87e9cSJagpal Singh Gill // Set the priority which triggers the service that updates the
65*cab87e9cSJagpal Singh Gill // environment variables.
66*cab87e9cSJagpal Singh Gill if (!Activation::redundancyPriority)
67*cab87e9cSJagpal Singh Gill {
68*cab87e9cSJagpal Singh Gill Activation::redundancyPriority =
69*cab87e9cSJagpal Singh Gill std::make_unique<RedundancyPriority>(bus, path, *this,
70*cab87e9cSJagpal Singh Gill 0);
71*cab87e9cSJagpal Singh Gill }
72*cab87e9cSJagpal Singh Gill }
73*cab87e9cSJagpal Singh Gill else // Environment variables were updated
74*cab87e9cSJagpal Singh Gill {
75*cab87e9cSJagpal Singh Gill Activation::onFlashWriteSuccess();
76*cab87e9cSJagpal Singh Gill }
77*cab87e9cSJagpal Singh Gill }
78*cab87e9cSJagpal Singh Gill }
79*cab87e9cSJagpal Singh Gill
80*cab87e9cSJagpal Singh Gill return;
81*cab87e9cSJagpal Singh Gill }
82*cab87e9cSJagpal Singh Gill
83*cab87e9cSJagpal Singh Gill } // namespace updater
84*cab87e9cSJagpal Singh Gill } // namespace software
85*cab87e9cSJagpal Singh Gill } // namespace phosphor
86