blob: 9541b08c2979cd0d4cd416ff5a8158481e55b6ea [file] [log] [blame]
Adriana Kobylak8bc2ab42020-07-15 09:16:27 -05001#include "config.h"
2
3#include "item_updater_mmc.hpp"
4
5#include "activation_mmc.hpp"
Adriana Kobylak56a46772022-02-25 16:37:37 +00006#include "utils.hpp"
Adriana Kobylak8bc2ab42020-07-15 09:16:27 -05007#include "version.hpp"
8
Isaac Kurth0ddd4fa2021-07-14 17:35:37 -05009#include <filesystem>
Isaac Kurthbde5d7d2021-09-14 18:40:25 +000010#include <iostream>
Isaac Kurth0ddd4fa2021-07-14 17:35:37 -050011
Adriana Kobylak8bc2ab42020-07-15 09:16:27 -050012namespace openpower
13{
14namespace software
15{
16namespace updater
17{
18
19// These functions are just a stub (empty) because the current eMMC
20// implementation uses the BMC updater (repo phosphor-bmc-code-mgmt) to write
21// the new host FW to flash since it's delivered as a "System" image in the
22// same BMC tarball as the BMC image.
23
24std::unique_ptr<Activation> ItemUpdaterMMC::createActivationObject(
25 const std::string& path, const std::string& versionId,
26 const std::string& extVersion,
27 sdbusplus::xyz::openbmc_project::Software::server::Activation::Activations
28 activationStatus,
29 AssociationList& assocs)
30{
31 return std::make_unique<ActivationMMC>(
32 bus, path, *this, versionId, extVersion, activationStatus, assocs);
33}
34
35std::unique_ptr<Version> ItemUpdaterMMC::createVersionObject(
36 const std::string& objPath, const std::string& versionId,
37 const std::string& versionString,
38 sdbusplus::xyz::openbmc_project::Software::server::Version::VersionPurpose
39 versionPurpose,
40 const std::string& filePath)
41{
42 auto version = std::make_unique<Version>(
43 bus, objPath, *this, versionId, versionString, versionPurpose, filePath,
44 std::bind(&ItemUpdaterMMC::erase, this, std::placeholders::_1));
45 version->deleteObject = std::make_unique<Delete>(bus, objPath, *version);
46 return version;
47}
48
Brad Bishopc8f22502020-11-06 14:42:09 -050049bool ItemUpdaterMMC::validateImage(const std::string&)
Adriana Kobylak8bc2ab42020-07-15 09:16:27 -050050{
51 return true;
52}
53
54void ItemUpdaterMMC::processPNORImage()
Brad Bishop8facccf2020-11-04 09:44:58 -050055{}
Adriana Kobylak8bc2ab42020-07-15 09:16:27 -050056
57void ItemUpdaterMMC::reset()
Isaac Kurth0ddd4fa2021-07-14 17:35:37 -050058{
59 // Do not reset read-only files needed for reset or ext4 default files
60 const std::vector<std::string> exclusionList = {
61 "alternate", "hostfw-a", "hostfw-b", "lost+found", "running-ro"};
62 std::filesystem::path dirPath(std::string(MEDIA_DIR "hostfw/"));
63 // Delete all files in /media/hostfw/ except for those on exclusionList
64 for (const auto& p : std::filesystem::directory_iterator(dirPath))
65 {
66 if (std::find(exclusionList.begin(), exclusionList.end(),
67 p.path().stem().string()) == exclusionList.end())
68 {
69 std::filesystem::remove_all(p);
70 }
71 }
72
Adriana Kobylak267c4132022-02-25 20:00:07 +000073 // Delete all BMC error logs to avoid discrepancies with the host error logs
74 utils::deleteAllErrorLogs(bus);
75
Isaac Kurthbde5d7d2021-09-14 18:40:25 +000076 // Remove files related to the Hardware Management Console / BMC web app
Adriana Kobylak56a46772022-02-25 16:37:37 +000077
78 utils::clearHMCManaged(bus);
79
Isaac Kurthbde5d7d2021-09-14 18:40:25 +000080 std::filesystem::path consolePath("/var/lib/bmcweb/ibm-management-console");
81 if (std::filesystem::exists(consolePath))
82 {
83 std::filesystem::remove_all(consolePath);
84 }
85
86 std::filesystem::path bmcdataPath("/home/root/bmcweb_persistent_data.json");
87 if (std::filesystem::exists(bmcdataPath))
88 {
89 std::filesystem::remove(bmcdataPath);
90 }
91
Isaac Kurth0ddd4fa2021-07-14 17:35:37 -050092 // Recreate default files.
Isaac Kurthbde5d7d2021-09-14 18:40:25 +000093 const std::string services[] = {"obmc-flash-bios-init.service",
94 "obmc-flash-bios-patch.service",
95 "openpower-process-host-firmware.service",
96 "openpower-update-bios-attr-table.service",
97 "pldm-reset-phyp-nvram.service",
98 "pldm-reset-phyp-nvram-cksum.service"};
99
Isaac Kurthbde5d7d2021-09-14 18:40:25 +0000100 for (const auto& service : services)
101 {
102 auto method = bus.new_method_call(SYSTEMD_BUSNAME, SYSTEMD_PATH,
103 SYSTEMD_INTERFACE, "StartUnit");
104 method.append(service, "replace");
105 // Ignore errors if the service is not found - not all systems
106 // may have these services
107 try
108 {
109 bus.call_noreply(method);
110 }
111 catch (const std::exception& e)
112 {}
113 }
Isaac Kurth0ddd4fa2021-07-14 17:35:37 -0500114}
Adriana Kobylak8bc2ab42020-07-15 09:16:27 -0500115
116bool ItemUpdaterMMC::isVersionFunctional(const std::string& versionId)
117{
118 return versionId == functionalVersionId;
119}
120
Brad Bishopc8f22502020-11-06 14:42:09 -0500121void ItemUpdaterMMC::freePriority(uint8_t, const std::string&)
Brad Bishop8facccf2020-11-04 09:44:58 -0500122{}
Adriana Kobylak8bc2ab42020-07-15 09:16:27 -0500123
124void ItemUpdaterMMC::deleteAll()
Brad Bishop8facccf2020-11-04 09:44:58 -0500125{}
Adriana Kobylak8bc2ab42020-07-15 09:16:27 -0500126
127bool ItemUpdaterMMC::freeSpace()
128{
129 return true;
130}
131
Brad Bishopc8f22502020-11-06 14:42:09 -0500132void ItemUpdaterMMC::updateFunctionalAssociation(const std::string&)
Brad Bishop8facccf2020-11-04 09:44:58 -0500133{}
Adriana Kobylak8bc2ab42020-07-15 09:16:27 -0500134
135void GardResetMMC::reset()
Brad Bishop8facccf2020-11-04 09:44:58 -0500136{}
Adriana Kobylak8bc2ab42020-07-15 09:16:27 -0500137
138} // namespace updater
139} // namespace software
140} // namespace openpower