summaryrefslogtreecommitdiff
path: root/meta-openbmc-mods/meta-common/recipes-phosphor/flash
diff options
context:
space:
mode:
Diffstat (limited to 'meta-openbmc-mods/meta-common/recipes-phosphor/flash')
-rw-r--r--meta-openbmc-mods/meta-common/recipes-phosphor/flash/phosphor-software-manager/0001-Add-more-error-types.patch459
-rw-r--r--meta-openbmc-mods/meta-common/recipes-phosphor/flash/phosphor-software-manager/0004-Changed-the-condition-of-software-version-service-wa.patch4
-rw-r--r--meta-openbmc-mods/meta-common/recipes-phosphor/flash/phosphor-software-manager/0005-Modified-firmware-activation-to-launch-fwupd.sh-thro.patch97
-rw-r--r--meta-openbmc-mods/meta-common/recipes-phosphor/flash/phosphor-software-manager/0006-Modify-the-ID-of-software-image-updater-object-on-DB.patch4
-rw-r--r--meta-openbmc-mods/meta-common/recipes-phosphor/flash/phosphor-software-manager/0007-Adding-StandBySpare-for-firmware-activation.patch10
-rw-r--r--meta-openbmc-mods/meta-common/recipes-phosphor/flash/phosphor-software-manager/0007-PFR-images-support.patch163
-rw-r--r--meta-openbmc-mods/meta-common/recipes-phosphor/flash/phosphor-software-manager/0008-PFR-image-HASH-verification.patch74
-rw-r--r--meta-openbmc-mods/meta-common/recipes-phosphor/flash/phosphor-software-manager/0008-item_updater-update-the-bmc_active-objectPath.patch44
-rw-r--r--meta-openbmc-mods/meta-common/recipes-phosphor/flash/phosphor-software-manager/0009-Add-ApplyOptions-D-bus-property-under-Software.patch6
-rw-r--r--meta-openbmc-mods/meta-common/recipes-phosphor/flash/phosphor-software-manager/0010-Add-error-reporting-to-pfr_image_manager.patch13
-rw-r--r--meta-openbmc-mods/meta-common/recipes-phosphor/flash/phosphor-software-manager/0011-Fix-for-RedudancyPriority-in-item_updater.patch10
-rw-r--r--meta-openbmc-mods/meta-common/recipes-phosphor/flash/phosphor-software-manager/0014-PFR-image-verification.patch116
-rw-r--r--meta-openbmc-mods/meta-common/recipes-phosphor/flash/phosphor-software-manager/0015-Fix-delete-image-by-ID-and-inhibit-removal-of-bmc_ac.patch153
-rw-r--r--meta-openbmc-mods/meta-common/recipes-phosphor/flash/phosphor-software-manager/0016-Process-PLDM-image-type.patch224
-rw-r--r--meta-openbmc-mods/meta-common/recipes-phosphor/flash/phosphor-software-manager_%.bbappend9
15 files changed, 720 insertions, 666 deletions
diff --git a/meta-openbmc-mods/meta-common/recipes-phosphor/flash/phosphor-software-manager/0001-Add-more-error-types.patch b/meta-openbmc-mods/meta-common/recipes-phosphor/flash/phosphor-software-manager/0001-Add-more-error-types.patch
deleted file mode 100644
index d43256bf4..000000000
--- a/meta-openbmc-mods/meta-common/recipes-phosphor/flash/phosphor-software-manager/0001-Add-more-error-types.patch
+++ /dev/null
@@ -1,459 +0,0 @@
-From e710df3123c382fc735c451a048f7c51250c1a92 Mon Sep 17 00:00:00 2001
-From: James Feist <james.feist@linux.intel.com>
-Date: Thu, 11 Jun 2020 13:14:11 -0700
-Subject: [PATCH 1/2] Add more error types
-
-This adds ImageFailure and Busy error types
-to updates status in bmcweb.
-
-elog-errors.hpp is a generated file.
-
-Tested: Could create errors
-
-Signed-off-by: James Feist <james.feist@linux.intel.com>
----
- elog-errors.hpp | 269 ++++++++++++------
- .../Software/Image.errors.yaml | 5 +
- .../Software/Image.metadata.yaml | 11 +
- 3 files changed, 204 insertions(+), 81 deletions(-)
-
-diff --git a/elog-errors.hpp b/elog-errors.hpp
-index 2888f0d..38016e1 100644
---- a/elog-errors.hpp
-+++ b/elog-errors.hpp
-@@ -2,12 +2,12 @@
- // See elog-gen.py for more details
- #pragma once
-
--#include <phosphor-logging/elog.hpp>
--#include <phosphor-logging/log.hpp>
--#include <sdbusplus/exception.hpp>
- #include <string>
- #include <tuple>
- #include <type_traits>
-+#include <sdbusplus/exception.hpp>
-+#include <phosphor-logging/log.hpp>
-+#include <phosphor-logging/elog.hpp>
-
- namespace sdbusplus
- {
-@@ -21,7 +21,7 @@ namespace Image
- {
- namespace Error
- {
--struct UnTarFailure;
-+ struct InternalFailure;
- } // namespace Error
- } // namespace Image
- } // namespace Software
-@@ -41,7 +41,7 @@ namespace Image
- {
- namespace Error
- {
--struct InternalFailure;
-+ struct UnTarFailure;
- } // namespace Error
- } // namespace Image
- } // namespace Software
-@@ -61,7 +61,7 @@ namespace Image
- {
- namespace Error
- {
--struct ManifestFileFailure;
-+ struct BusyFailure;
- } // namespace Error
- } // namespace Image
- } // namespace Software
-@@ -69,6 +69,47 @@ struct ManifestFileFailure;
- } // namespace xyz
- } // namespace sdbusplus
-
-+namespace sdbusplus
-+{
-+namespace xyz
-+{
-+namespace openbmc_project
-+{
-+namespace Software
-+{
-+namespace Image
-+{
-+namespace Error
-+{
-+ struct ImageFailure;
-+} // namespace Error
-+} // namespace Image
-+} // namespace Software
-+} // namespace openbmc_project
-+} // namespace xyz
-+} // namespace sdbusplus
-+
-+namespace sdbusplus
-+{
-+namespace xyz
-+{
-+namespace openbmc_project
-+{
-+namespace Software
-+{
-+namespace Image
-+{
-+namespace Error
-+{
-+ struct ManifestFileFailure;
-+} // namespace Error
-+} // namespace Image
-+} // namespace Software
-+} // namespace openbmc_project
-+} // namespace xyz
-+} // namespace sdbusplus
-+
-+
- namespace phosphor
- {
-
-@@ -88,38 +129,25 @@ namespace _UnTarFailure
-
- struct PATH
- {
-- static constexpr auto str = "PATH=%s";
-+ /*
-+ * We can't use -fsanitize=undefined if we declare a
-+ * 'static constexpr auto str' member, so don't. Instead, open-code the
-+ * mako template lookups.
-+ */
- static constexpr auto str_short = "PATH";
-- using type = std::tuple<std::decay_t<decltype(str)>, const char*>;
-- explicit constexpr PATH(const char* a) : _entry(entry(str, a)){};
-+ using type = std::tuple<std::decay_t<decltype("PATH=%s")>,const char*>;
-+ explicit constexpr PATH(const char* a) : _entry(entry("PATH=%s", a)) {};
- type _entry;
- };
-
--} // namespace _UnTarFailure
-+} // namespace _UnTarFailure
-
--struct UnTarFailure : public sdbusplus::exception_t
-+struct UnTarFailure
- {
-- static constexpr auto errName =
-- "xyz.openbmc_project.Software.Image.UnTarFailure";
-- static constexpr auto errDesc = "An error occurred during untar.";
- static constexpr auto L = level::ERR;
- using PATH = _UnTarFailure::PATH;
- using metadata_types = std::tuple<PATH>;
-
-- const char* name() const noexcept
-- {
-- return errName;
-- }
--
-- const char* description() const noexcept
-- {
-- return errDesc;
-- }
--
-- const char* what() const noexcept
-- {
-- return errName;
-- }
- };
-
- } // namespace Image
-@@ -127,16 +155,17 @@ struct UnTarFailure : public sdbusplus::exception_t
- } // namespace openbmc_project
- } // namespace xyz
-
-+
- namespace details
- {
-
- template <>
--struct map_exception_type<
-- sdbusplus::xyz::openbmc_project::Software::Image::Error::UnTarFailure>
-+struct map_exception_type<sdbusplus::xyz::openbmc_project::Software::Image::Error::UnTarFailure>
- {
- using type = xyz::openbmc_project::Software::Image::UnTarFailure;
- };
--} // namespace details
-+
-+}
-
- namespace xyz
- {
-@@ -151,38 +180,25 @@ namespace _ManifestFileFailure
-
- struct PATH
- {
-- static constexpr auto str = "PATH=%s";
-+ /*
-+ * We can't use -fsanitize=undefined if we declare a
-+ * 'static constexpr auto str' member, so don't. Instead, open-code the
-+ * mako template lookups.
-+ */
- static constexpr auto str_short = "PATH";
-- using type = std::tuple<std::decay_t<decltype(str)>, const char*>;
-- explicit constexpr PATH(const char* a) : _entry(entry(str, a)){};
-+ using type = std::tuple<std::decay_t<decltype("PATH=%s")>,const char*>;
-+ explicit constexpr PATH(const char* a) : _entry(entry("PATH=%s", a)) {};
- type _entry;
- };
-
--} // namespace _ManifestFileFailure
-+} // namespace _ManifestFileFailure
-
--struct ManifestFileFailure : public sdbusplus::exception_t
-+struct ManifestFileFailure
- {
-- static constexpr auto errName =
-- "xyz.openbmc_project.Software.Image.ManifestFileFailure";
-- static constexpr auto errDesc = "An error when reading the Manifest file.";
- static constexpr auto L = level::ERR;
- using PATH = _ManifestFileFailure::PATH;
- using metadata_types = std::tuple<PATH>;
-
-- const char* name() const noexcept
-- {
-- return errName;
-- }
--
-- const char* description() const noexcept
-- {
-- return errDesc;
-- }
--
-- const char* what() const noexcept
-- {
-- return errName;
-- }
- };
-
- } // namespace Image
-@@ -190,16 +206,17 @@ struct ManifestFileFailure : public sdbusplus::exception_t
- } // namespace openbmc_project
- } // namespace xyz
-
-+
- namespace details
- {
-
- template <>
--struct map_exception_type<sdbusplus::xyz::openbmc_project::Software::Image::
-- Error::ManifestFileFailure>
-+struct map_exception_type<sdbusplus::xyz::openbmc_project::Software::Image::Error::ManifestFileFailure>
- {
- using type = xyz::openbmc_project::Software::Image::ManifestFileFailure;
- };
--} // namespace details
-+
-+}
-
- namespace xyz
- {
-@@ -214,39 +231,76 @@ namespace _InternalFailure
-
- struct FAIL
- {
-- static constexpr auto str = "FAIL=%s";
-+ /*
-+ * We can't use -fsanitize=undefined if we declare a
-+ * 'static constexpr auto str' member, so don't. Instead, open-code the
-+ * mako template lookups.
-+ */
- static constexpr auto str_short = "FAIL";
-- using type = std::tuple<std::decay_t<decltype(str)>, const char*>;
-- explicit constexpr FAIL(const char* a) : _entry(entry(str, a)){};
-+ using type = std::tuple<std::decay_t<decltype("FAIL=%s")>,const char*>;
-+ explicit constexpr FAIL(const char* a) : _entry(entry("FAIL=%s", a)) {};
- type _entry;
- };
-
--} // namespace _InternalFailure
-+} // namespace _InternalFailure
-
--struct InternalFailure : public sdbusplus::exception_t
-+struct InternalFailure
- {
-- static constexpr auto errName =
-- "xyz.openbmc_project.Software.Image.InternalFailure";
-- static constexpr auto errDesc =
-- "The operation failed internally during processing the image.";
- static constexpr auto L = level::ERR;
- using FAIL = _InternalFailure::FAIL;
- using metadata_types = std::tuple<FAIL>;
-
-- const char* name() const noexcept
-- {
-- return errName;
-- }
-+};
-+
-+} // namespace Image
-+} // namespace Software
-+} // namespace openbmc_project
-+} // namespace xyz
-+
-+
-+namespace details
-+{
-+
-+template <>
-+struct map_exception_type<sdbusplus::xyz::openbmc_project::Software::Image::Error::InternalFailure>
-+{
-+ using type = xyz::openbmc_project::Software::Image::InternalFailure;
-+};
-+
-+}
-
-- const char* description() const noexcept
-- {
-- return errDesc;
-- }
-+namespace xyz
-+{
-+namespace openbmc_project
-+{
-+namespace Software
-+{
-+namespace Image
-+{
-+namespace _ImageFailure
-+{
-+
-+struct PATH
-+{
-+ /*
-+ * We can't use -fsanitize=undefined if we declare a
-+ * 'static constexpr auto str' member, so don't. Instead, open-code the
-+ * mako template lookups.
-+ */
-+ static constexpr auto str_short = "PATH";
-+ using type = std::tuple<std::decay_t<decltype("PATH=%s")>,const char*>;
-+ explicit constexpr PATH(const char* a) : _entry(entry("PATH=%s", a)) {};
-+ type _entry;
-+};
-+
-+} // namespace _ImageFailure
-+
-+struct ImageFailure
-+{
-+ static constexpr auto L = level::ERR;
-+ using PATH = _ImageFailure::PATH;
-+ using metadata_types = std::tuple<PATH>;
-
-- const char* what() const noexcept
-- {
-- return errName;
-- }
- };
-
- } // namespace Image
-@@ -254,16 +308,69 @@ struct InternalFailure : public sdbusplus::exception_t
- } // namespace openbmc_project
- } // namespace xyz
-
-+
- namespace details
- {
-
- template <>
--struct map_exception_type<
-- sdbusplus::xyz::openbmc_project::Software::Image::Error::InternalFailure>
-+struct map_exception_type<sdbusplus::xyz::openbmc_project::Software::Image::Error::ImageFailure>
- {
-- using type = xyz::openbmc_project::Software::Image::InternalFailure;
-+ using type = xyz::openbmc_project::Software::Image::ImageFailure;
- };
--} // namespace details
-+
-+}
-+
-+namespace xyz
-+{
-+namespace openbmc_project
-+{
-+namespace Software
-+{
-+namespace Image
-+{
-+namespace _BusyFailure
-+{
-+
-+struct PATH
-+{
-+ /*
-+ * We can't use -fsanitize=undefined if we declare a
-+ * 'static constexpr auto str' member, so don't. Instead, open-code the
-+ * mako template lookups.
-+ */
-+ static constexpr auto str_short = "PATH";
-+ using type = std::tuple<std::decay_t<decltype("PATH=%s")>,const char*>;
-+ explicit constexpr PATH(const char* a) : _entry(entry("PATH=%s", a)) {};
-+ type _entry;
-+};
-+
-+} // namespace _BusyFailure
-+
-+struct BusyFailure
-+{
-+ static constexpr auto L = level::ERR;
-+ using PATH = _BusyFailure::PATH;
-+ using metadata_types = std::tuple<PATH>;
-+
-+};
-+
-+} // namespace Image
-+} // namespace Software
-+} // namespace openbmc_project
-+} // namespace xyz
-+
-+
-+namespace details
-+{
-+
-+template <>
-+struct map_exception_type<sdbusplus::xyz::openbmc_project::Software::Image::Error::BusyFailure>
-+{
-+ using type = xyz::openbmc_project::Software::Image::BusyFailure;
-+};
-+
-+}
-+
-
- } // namespace logging
-
-diff --git a/xyz/openbmc_project/Software/Image.errors.yaml b/xyz/openbmc_project/Software/Image.errors.yaml
-index 67d6c20..2b8f7ee 100644
---- a/xyz/openbmc_project/Software/Image.errors.yaml
-+++ b/xyz/openbmc_project/Software/Image.errors.yaml
-@@ -4,3 +4,8 @@
- description: An error when reading the Manifest file.
- - name: InternalFailure
- description: The operation failed internally during processing the image.
-+- name: ImageFailure
-+ description: An error occured processing the image.
-+- name: BusyFailure
-+ description: The device is busy during the update.
-+
-diff --git a/xyz/openbmc_project/Software/Image.metadata.yaml b/xyz/openbmc_project/Software/Image.metadata.yaml
-index 5e749c9..65d4e1c 100644
---- a/xyz/openbmc_project/Software/Image.metadata.yaml
-+++ b/xyz/openbmc_project/Software/Image.metadata.yaml
-@@ -13,3 +13,14 @@
- meta:
- - str: "FAIL=%s"
- type: string
-+- name: ImageFailure
-+ level: ERR
-+ meta:
-+ - str: "PATH=%s"
-+ type: string
-+- name: BusyFailure
-+ level: ERR
-+ meta:
-+ - str: "PATH=%s"
-+ type: string
-+
---
-2.17.1
-
diff --git a/meta-openbmc-mods/meta-common/recipes-phosphor/flash/phosphor-software-manager/0004-Changed-the-condition-of-software-version-service-wa.patch b/meta-openbmc-mods/meta-common/recipes-phosphor/flash/phosphor-software-manager/0004-Changed-the-condition-of-software-version-service-wa.patch
index 3fc3907ba..bcf692f5e 100644
--- a/meta-openbmc-mods/meta-common/recipes-phosphor/flash/phosphor-software-manager/0004-Changed-the-condition-of-software-version-service-wa.patch
+++ b/meta-openbmc-mods/meta-common/recipes-phosphor/flash/phosphor-software-manager/0004-Changed-the-condition-of-software-version-service-wa.patch
@@ -17,7 +17,7 @@ diff --git a/watch.cpp b/watch.cpp
index e46b8aa..eee1bc3 100644
--- a/watch.cpp
+++ b/watch.cpp
-@@ -45,7 +45,7 @@ Watch::Watch(sd_event* loop, std::function<int(std::string&)> imageCallback) :
+@@ -46,7 +46,7 @@ Watch::Watch(sd_event* loop, std::function<int(std::string&)> imageCallback) :
std::strerror(error));
}
@@ -26,7 +26,7 @@ index e46b8aa..eee1bc3 100644
if (-1 == wd)
{
auto error = errno;
-@@ -96,7 +96,8 @@ int Watch::callback(sd_event_source* s, int fd, uint32_t revents,
+@@ -97,7 +97,8 @@ int Watch::callback(sd_event_source* /* s */, int fd, uint32_t revents,
while (offset < bytes)
{
auto event = reinterpret_cast<inotify_event*>(&buffer[offset]);
diff --git a/meta-openbmc-mods/meta-common/recipes-phosphor/flash/phosphor-software-manager/0005-Modified-firmware-activation-to-launch-fwupd.sh-thro.patch b/meta-openbmc-mods/meta-common/recipes-phosphor/flash/phosphor-software-manager/0005-Modified-firmware-activation-to-launch-fwupd.sh-thro.patch
index 355261e8f..85ef5afcf 100644
--- a/meta-openbmc-mods/meta-common/recipes-phosphor/flash/phosphor-software-manager/0005-Modified-firmware-activation-to-launch-fwupd.sh-thro.patch
+++ b/meta-openbmc-mods/meta-common/recipes-phosphor/flash/phosphor-software-manager/0005-Modified-firmware-activation-to-launch-fwupd.sh-thro.patch
@@ -10,22 +10,24 @@ Subject: [PATCH 1/1] Modified firmware activation to launch fwupd.sh through
Signed-off-by: Jennifer Lee <jennifer1.lee@intel.com>
Signed-off-by: James Feist <james.feist@linux.intel.com>
+
---
- activation.cpp | 43 +++++++++++++++++++++++++++++++++++++++++++
- configure.ac | 7 +++++++
- static/flash.cpp | 41 +++++++++++++++++++++++++++++++++++++++--
- ubi/flash.cpp | 9 +++------
- 4 files changed, 92 insertions(+), 8 deletions(-)
+ activation.cpp | 45 +++++++++++++++++++++++++++++++++++++++++++++
+ meson.build | 1 +
+ meson_options.txt | 3 +++
+ static/flash.cpp | 41 +++++++++++++++++++++++++++++++++++++++--
+ ubi/flash.cpp | 9 +++------
+ 5 files changed, 91 insertions(+), 8 deletions(-)
diff --git a/activation.cpp b/activation.cpp
-index ab76420..91e3a10 100644
+index 291ce7c..f76018d 100644
--- a/activation.cpp
+++ b/activation.cpp
-@@ -200,6 +200,49 @@ auto Activation::activation(Activations value) -> Activations
- softwareServer::Activation::Activations::Active);
- }
- }
-+#elif defined(FWUPD_SCRIPT)
+@@ -88,7 +88,50 @@ auto Activation::activation(Activations value) -> Activations
+
+ if (value == softwareServer::Activation::Activations::Activating)
+ {
++#ifdef FWUPD_SCRIPT
+ if (!activationProgress)
+ {
+ // Enable systemd signals
@@ -58,7 +60,7 @@ index ab76420..91e3a10 100644
+ redundancyPriority =
+ std::make_unique<RedundancyPriority>(bus, path, *this, 0);
+ }
-+
+
+ // Remove version object from image manager
+ Activation::deleteImageManagerObject();
+
@@ -68,35 +70,60 @@ index ab76420..91e3a10 100644
+ return softwareServer::Activation::activation(
+ softwareServer::Activation::Activations::Active);
+ }
- #else // !UBIFS_LAYOUT
++#else // !FWUPD_SCRIPT
+ #ifdef HOST_BIOS_UPGRADE
+ auto purpose = parent.versions.find(versionId)->second->purpose();
+ if (purpose == VersionPurpose::Host)
+@@ -111,7 +154,6 @@ auto Activation::activation(Activations value) -> Activations
+ return softwareServer::Activation::activation(value);
+ }
+ #endif
+-
+ auto versionStr = parent.versions.find(versionId)->second->version();
+
+ if (!minimum_ship_level::verify(versionStr))
+@@ -175,6 +217,7 @@ auto Activation::activation(Activations value) -> Activations
+ return softwareServer::Activation::activation(
+ softwareServer::Activation::Activations::Active);
+ #endif
++#endif // FWUPD_SCRIPT
+ }
+ else
+ {
+diff --git a/meson.build b/meson.build
+index 62b9aeb..08d6f71 100644
+--- a/meson.build
++++ b/meson.build
+@@ -54,6 +54,7 @@ conf.set('MMC_LAYOUT', get_option('bmc-layout').contains('mmc'))
+ # Configurable features
+ conf.set('HOST_BIOS_UPGRADE', get_option('host-bios-upgrade').enabled())
+ conf.set('WANT_SIGNATURE_VERIFY', get_option('verify-signature').enabled())
++conf.set('FWUPD_SCRIPT', get_option('fwupd-script').enabled())
- #ifdef WANT_SIGNATURE_VERIFY
-diff --git a/configure.ac b/configure.ac
-index 5fba420..3b5fdab 100755
---- a/configure.ac
-+++ b/configure.ac
-@@ -194,6 +194,13 @@ AS_IF([test "x$enable_host_bios_upgrade" == "xyes"], \
- [AC_DEFINE([HOST_BIOS_UPGRADE],[],[Enable host bios upgrade support.])])
- AM_CONDITIONAL([HOST_BIOS_UPGRADE], [test "x$enable_host_bios_upgrade" == "xyes"])
+ # Configurable variables
+ conf.set('ACTIVE_BMC_MAX_ALLOWED', get_option('active-bmc-max-allowed'))
+diff --git a/meson_options.txt b/meson_options.txt
+index c9b7b33..4f7e62a 100644
+--- a/meson_options.txt
++++ b/meson_options.txt
+@@ -22,6 +22,9 @@ option('oe-sdk', type: 'feature', description: 'Enable OE SDK')
+ option('verify-signature', type: 'feature',
+ description: 'Enable image signature validation.')
-+# setup fwupd script support
-+AC_ARG_ENABLE([fwupd_script],
-+ AS_HELP_STRING([--enable-fwupd_script], [Enable fwupd script support.]))
-+AS_IF([test "x$enable_fwupd_script" == "xyes"], \
-+ [AC_DEFINE([FWUPD_SCRIPT],[],[Enable fwupd script support.])])
-+AM_CONDITIONAL([FWUPD_SCRIPT], [test "x$enable_fwupd_script" == "xyes"])
++option('fwupd-script', type: 'feature',
++ description: 'Enable fwupd script support.')
+
- # Check for header files.
- AC_CHECK_HEADER(systemd/sd-bus.h, ,[AC_MSG_ERROR([Could not find systemd/sd-bus.h...systemd development package required])])
- AC_CHECK_HEADER(sdbusplus/server.hpp, ,[AC_MSG_ERROR([Could not find sdbusplus/server.hpp...openbmc/sdbusplus package required])])
+ # Variables
+ option(
+ 'active-bmc-max-allowed', type: 'integer',
diff --git a/static/flash.cpp b/static/flash.cpp
-index 82c2393..1bf29d5 100644
+index 9bb2bba..c4ff002 100644
--- a/static/flash.cpp
+++ b/static/flash.cpp
-@@ -20,9 +20,11 @@ namespace updater
- {
+@@ -22,9 +22,11 @@ namespace updater
- namespace fs = std::experimental::filesystem;
+ namespace fs = std::filesystem;
+ using namespace phosphor::software::image;
+namespace softwareServer = sdbusplus::xyz::openbmc_project::Software::server;
void Activation::flashWrite()
@@ -105,7 +132,7 @@ index 82c2393..1bf29d5 100644
// For static layout code update, just put images in /run/initramfs.
// It expects user to trigger a reboot and an updater script will program
// the image to flash during reboot.
-@@ -33,11 +35,46 @@ void Activation::flashWrite()
+@@ -36,11 +38,46 @@ void Activation::flashWrite()
fs::copy_file(uploadDir / versionId / bmcImage, toPath / bmcImage,
fs::copy_options::overwrite_existing);
}
diff --git a/meta-openbmc-mods/meta-common/recipes-phosphor/flash/phosphor-software-manager/0006-Modify-the-ID-of-software-image-updater-object-on-DB.patch b/meta-openbmc-mods/meta-common/recipes-phosphor/flash/phosphor-software-manager/0006-Modify-the-ID-of-software-image-updater-object-on-DB.patch
index 2d2ac2673..1f2a86fb9 100644
--- a/meta-openbmc-mods/meta-common/recipes-phosphor/flash/phosphor-software-manager/0006-Modify-the-ID-of-software-image-updater-object-on-DB.patch
+++ b/meta-openbmc-mods/meta-common/recipes-phosphor/flash/phosphor-software-manager/0006-Modify-the-ID-of-software-image-updater-object-on-DB.patch
@@ -26,8 +26,8 @@ index 5b2ff49..e3d26e3 100644
+#include <time.h>
#include <unistd.h>
- #include <algorithm>
-@@ -129,6 +130,11 @@ int Manager::processImage(const std::string& tarFilePath)
+ #include <elog-errors.hpp>
+@@ -174,6 +175,11 @@ int Manager::processImage(const std::string& tarFilePath)
// Compute id
auto id = Version::getId(version);
diff --git a/meta-openbmc-mods/meta-common/recipes-phosphor/flash/phosphor-software-manager/0007-Adding-StandBySpare-for-firmware-activation.patch b/meta-openbmc-mods/meta-common/recipes-phosphor/flash/phosphor-software-manager/0007-Adding-StandBySpare-for-firmware-activation.patch
index b63226cce..6039be44b 100644
--- a/meta-openbmc-mods/meta-common/recipes-phosphor/flash/phosphor-software-manager/0007-Adding-StandBySpare-for-firmware-activation.patch
+++ b/meta-openbmc-mods/meta-common/recipes-phosphor/flash/phosphor-software-manager/0007-Adding-StandBySpare-for-firmware-activation.patch
@@ -31,9 +31,9 @@ diff --git a/activation.cpp b/activation.cpp
index 2966b2f..a098784 100644
--- a/activation.cpp
+++ b/activation.cpp
-@@ -80,12 +80,16 @@ auto Activation::activation(Activations value) -> Activations
+@@ -81,12 +81,16 @@ void Activation::unsubscribeFromSystemdSignals()
+ auto Activation::activation(Activations value) -> Activations
{
-
if ((value != softwareServer::Activation::Activations::Active) &&
- (value != softwareServer::Activation::Activations::Activating))
+ (value != softwareServer::Activation::Activations::Activating) &&
@@ -48,9 +48,9 @@ index 2966b2f..a098784 100644
+ value ==
+ softwareServer::Activation::Activations::ActivatingAsStandbySpare)
{
- #ifdef UBIFS_LAYOUT
- if (rwVolumeCreated == false && roVolumeCreated == false)
-@@ -256,6 +260,20 @@ auto Activation::requestedActivation(RequestedActivations value)
+ #ifdef FWUPD_SCRIPT
+ if (!activationProgress)
+@@ -309,6 +313,20 @@ auto Activation::requestedActivation(RequestedActivations value)
softwareServer::Activation::Activations::Activating);
}
}
diff --git a/meta-openbmc-mods/meta-common/recipes-phosphor/flash/phosphor-software-manager/0007-PFR-images-support.patch b/meta-openbmc-mods/meta-common/recipes-phosphor/flash/phosphor-software-manager/0007-PFR-images-support.patch
index 92b3ced38..49bdc138f 100644
--- a/meta-openbmc-mods/meta-common/recipes-phosphor/flash/phosphor-software-manager/0007-PFR-images-support.patch
+++ b/meta-openbmc-mods/meta-common/recipes-phosphor/flash/phosphor-software-manager/0007-PFR-images-support.patch
@@ -10,65 +10,23 @@ Testing:
tested PFR image uploads and updates
Signed-off-by: Vikram Bodireddy <vikram.bodireddy@intel.com>
+
---
- Makefile.am | 18 +++-
activation.cpp | 2 +-
- configure.ac | 7 ++
- item_updater.cpp | 6 +-
+ item_updater.cpp | 7 +-
+ meson.build | 7 +-
+ meson_options.txt | 3 +
pfr_image_manager.cpp | 217 ++++++++++++++++++++++++++++++++++++++++++
pfr_image_manager.hpp | 75 +++++++++++++++
- 6 files changed, 320 insertions(+), 5 deletions(-)
+ 6 files changed, 306 insertions(+), 5 deletions(-)
create mode 100644 pfr_image_manager.cpp
create mode 100644 pfr_image_manager.hpp
-diff --git a/Makefile.am b/Makefile.am
-index 6c3ec16..59ebecc 100755
---- a/Makefile.am
-+++ b/Makefile.am
-@@ -6,13 +6,20 @@ noinst_HEADERS = \
- watch.hpp \
- version.hpp \
- images.hpp \
-- image_manager.hpp \
- item_updater.hpp \
- activation.hpp \
- flash.hpp \
- item_updater_helper.hpp \
- utils.hpp
-
-+if PFR_UPDATE
-+noinst_HEADERS += \
-+ pfr_image_manager.hpp
-+else
-+noinst_HEADERS += \
-+ image_manager.hpp
-+endif
-+
- bin_PROGRAMS = \
- phosphor-version-software-manager \
- phosphor-download-manager \
-@@ -24,8 +31,15 @@ dist_bin_SCRIPTS = \
- phosphor_version_software_manager_SOURCES = \
- image_manager_main.cpp \
- watch.cpp \
-- version.cpp \
-+ version.cpp
-+
-+if PFR_UPDATE
-+phosphor_version_software_manager_SOURCES += \
-+ pfr_image_manager.cpp
-+else
-+phosphor_version_software_manager_SOURCES += \
- image_manager.cpp
-+endif
-
- BUILT_SOURCES = \
- xyz/openbmc_project/Software/Image/error.cpp \
diff --git a/activation.cpp b/activation.cpp
-index cea1e50..7ff4196 100644
+index bad17b8..3363230 100644
--- a/activation.cpp
+++ b/activation.cpp
-@@ -197,7 +197,7 @@ auto Activation::activation(Activations value) -> Activations
+@@ -119,7 +119,7 @@ auto Activation::activation(Activations value) -> Activations
}
else if (activationProgress->progress() == 100)
{
@@ -77,31 +35,13 @@ index cea1e50..7ff4196 100644
if (!redundancyPriority)
{
redundancyPriority =
-diff --git a/configure.ac b/configure.ac
-index 720e704..e527682 100755
---- a/configure.ac
-+++ b/configure.ac
-@@ -191,6 +191,13 @@ AS_IF([test "x$enable_fwupd_script" == "xyes"], \
- [AC_DEFINE([FWUPD_SCRIPT],[],[Enable fwupd script support.])])
- AM_CONDITIONAL([FWUPD_SCRIPT], [test "x$enable_fwupd_script" == "xyes"])
-
-+# setup pfr image update support
-+AC_ARG_ENABLE([pfr_update],
-+ AS_HELP_STRING([--enable-pfr_update], [Enable pfr image update support.]))
-+AS_IF([test "x$enable_pfr_update" == "xyes"], \
-+ [AC_DEFINE([PFR_UPDATE],[],[Enable pfr image update support.])])
-+AM_CONDITIONAL([PFR_UPDATE], [test "x$enable_pfr_update" == "xyes"])
-+
- # Check for header files.
- AC_CHECK_HEADER(systemd/sd-bus.h, ,[AC_MSG_ERROR([Could not find systemd/sd-bus.h...systemd development package required])])
- AC_CHECK_HEADER(sdbusplus/server.hpp, ,[AC_MSG_ERROR([Could not find sdbusplus/server.hpp...openbmc/sdbusplus package required])])
diff --git a/item_updater.cpp b/item_updater.cpp
-index 21fb6e0..fd76a7f 100644
+index df8595c..694975f 100644
--- a/item_updater.cpp
+++ b/item_updater.cpp
@@ -64,10 +64,10 @@ void ItemUpdater::createActivation(sdbusplus::message::message& msg)
auto value = SVersion::convertVersionPurposeFromString(
- variant_ns::get<std::string>(property.second));
+ std::get<std::string>(property.second));
if (value == VersionPurpose::BMC ||
-#ifdef HOST_BIOS_UPGRADE
+#if defined(HOST_BIOS_UPGRADE) || defined(PFR_UPDATE)
@@ -112,29 +52,84 @@ index 21fb6e0..fd76a7f 100644
{
purpose = value;
}
-@@ -356,6 +357,7 @@ void ItemUpdater::deleteAll()
+@@ -399,6 +399,7 @@ void ItemUpdater::deleteAll()
ItemUpdater::ActivationStatus
ItemUpdater::validateSquashFSImage(const std::string& filePath)
{
+#ifndef PFR_UPDATE
- bool invalid = false;
+ bool valid = true;
- for (auto& bmcImage : bmcImages)
-@@ -375,7 +377,7 @@ ItemUpdater::ActivationStatus
- {
- return ItemUpdater::ActivationStatus::invalid;
+ // Record the images which are being updated
+@@ -416,7 +417,7 @@ ItemUpdater::ActivationStatus
+ return ItemUpdater::ActivationStatus::invalid;
+ }
}
-
+#endif
return ItemUpdater::ActivationStatus::ready;
}
+@@ -690,8 +691,8 @@ void ItemUpdater::freeSpace(Activation& caller)
+ // Failed activations don't have priority, assign them a large value
+ // for sorting purposes.
+ auto priority = 999;
+- if ((iter.second.get()->activation() ==
+- server::Activation::Activations::Active)&&
++ if ((iter.second.get()->activation() ==
++ server::Activation::Activations::Active) &&
+ iter.second->redundancyPriority.get())
+ {
+ priority = iter.second->redundancyPriority.get()->priority();
+diff --git a/meson.build b/meson.build
+index 08d6f71..c61d59f 100644
+--- a/meson.build
++++ b/meson.build
+@@ -55,6 +55,7 @@ conf.set('MMC_LAYOUT', get_option('bmc-layout').contains('mmc'))
+ conf.set('HOST_BIOS_UPGRADE', get_option('host-bios-upgrade').enabled())
+ conf.set('WANT_SIGNATURE_VERIFY', get_option('verify-signature').enabled())
+ conf.set('FWUPD_SCRIPT', get_option('fwupd-script').enabled())
++conf.set('PFR_UPDATE', get_option('pfr-update').enabled())
+
+ # Configurable variables
+ conf.set('ACTIVE_BMC_MAX_ALLOWED', get_option('active-bmc-max-allowed'))
+@@ -195,12 +196,16 @@ executable(
+ install: true
+ )
+
++image_manager_source = files('image_manager.cpp')
++if get_option('pfr-update').enabled()
++ image_manager_source = files('pfr_image_manager.cpp')
++endif
+ executable(
+ 'phosphor-version-software-manager',
+ image_error_cpp,
+ image_error_hpp,
+- 'image_manager.cpp',
+ 'image_manager_main.cpp',
++ image_manager_source,
+ 'version.cpp',
+ 'watch.cpp',
+ dependencies: [deps, ssl],
+diff --git a/meson_options.txt b/meson_options.txt
+index 4f7e62a..1593502 100644
+--- a/meson_options.txt
++++ b/meson_options.txt
+@@ -25,6 +25,9 @@ option('verify-signature', type: 'feature',
+ option('fwupd-script', type: 'feature',
+ description: 'Enable fwupd script support.')
+
++option('pfr-update', type: 'feature',
++ description: 'Enable fwupd script support.')
++
+ # Variables
+ option(
+ 'active-bmc-max-allowed', type: 'integer',
diff --git a/pfr_image_manager.cpp b/pfr_image_manager.cpp
new file mode 100644
index 0000000..242a6ca
--- /dev/null
+++ b/pfr_image_manager.cpp
-@@ -0,0 +1,217 @@
+@@ -0,0 +1,218 @@
+#include "config.h"
+
+#include "pfr_image_manager.hpp"
@@ -149,15 +144,16 @@ index 0000000..242a6ca
+#include <time.h>
+#include <unistd.h>
+
++#include <elog-errors.hpp>
++#include <xyz/openbmc_project/Software/Image/error.hpp>
++
+#include <algorithm>
+#include <cstring>
-+#include <elog-errors.hpp>
+#include <filesystem>
+#include <fstream>
+#include <iomanip>
+#include <sstream>
+#include <string>
-+#include <xyz/openbmc_project/Software/Image/error.hpp>
+
+namespace phosphor
+{
@@ -357,7 +353,7 @@ new file mode 100644
index 0000000..c6ee6a4
--- /dev/null
+++ b/pfr_image_manager.hpp
-@@ -0,0 +1,75 @@
+@@ -0,0 +1,76 @@
+#pragma once
+#include "version.hpp"
+
@@ -370,7 +366,8 @@ index 0000000..c6ee6a4
+namespace manager
+{
+
-+enum pfrImgPCType {
++enum pfrImgPCType
++{
+ pfrCPLDUpdateCap = 0x00,
+ pfrPCHPFM = 0x01,
+ pfrPCHUpdateCap = 0x02,
@@ -379,7 +376,8 @@ index 0000000..c6ee6a4
+};
+
+/* PFR image block 0 - As defined in HAS */
-+struct pfrImgBlock0 {
++struct pfrImgBlock0
++{
+ uint8_t tag[4];
+ uint8_t pcLength[4];
+ uint8_t pcType[4];
@@ -387,7 +385,7 @@ index 0000000..c6ee6a4
+ uint8_t hash256[32];
+ uint8_t hash384[48];
+ uint8_t reserved2[32];
-+}__attribute__((packed));
++} __attribute__((packed));
+
+/** @class Manager
+ * @brief Contains a map of Version dbus objects.
@@ -427,7 +425,6 @@ index 0000000..c6ee6a4
+
+ /** @brief Persistent sdbusplus DBus bus connection. */
+ sdbusplus::bus::bus& bus;
-+
+};
+
+} // namespace manager
diff --git a/meta-openbmc-mods/meta-common/recipes-phosphor/flash/phosphor-software-manager/0008-PFR-image-HASH-verification.patch b/meta-openbmc-mods/meta-common/recipes-phosphor/flash/phosphor-software-manager/0008-PFR-image-HASH-verification.patch
index c65f8318c..72eb0beba 100644
--- a/meta-openbmc-mods/meta-common/recipes-phosphor/flash/phosphor-software-manager/0008-PFR-image-HASH-verification.patch
+++ b/meta-openbmc-mods/meta-common/recipes-phosphor/flash/phosphor-software-manager/0008-PFR-image-HASH-verification.patch
@@ -59,18 +59,15 @@ index 242a6ca..1a41cbe 100644
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
-@@ -15,9 +17,9 @@
- #include <algorithm>
- #include <cstring>
- #include <elog-errors.hpp>
--#include <filesystem>
+@@ -20,6 +22,7 @@
+ #include <filesystem>
#include <fstream>
#include <iomanip>
+#include <set>
#include <sstream>
#include <string>
- #include <xyz/openbmc_project/Software/Image/error.hpp>
-@@ -33,12 +35,21 @@ using namespace sdbusplus::xyz::openbmc_project::Software::Image::Error;
+
+@@ -34,12 +37,21 @@ using namespace sdbusplus::xyz::openbmc_project::Software::Image::Error;
namespace Software = phosphor::logging::xyz::openbmc_project::Software;
static constexpr const uint32_t pfmPos = 2054;
@@ -96,7 +93,7 @@ index 242a6ca..1a41cbe 100644
if (std::filesystem::exists(imgPath))
{
-@@ -55,17 +66,101 @@ static int getPFRImgInfo(const std::filesystem::path imgPath, uint8_t& imgType,
+@@ -56,17 +68,101 @@ static int getPFRImgInfo(const std::filesystem::path imgPath, uint8_t& imgType,
imgFile.read(reinterpret_cast<char*>(&block0Data),
sizeof(block0Data));
@@ -200,7 +197,7 @@ index 242a6ca..1a41cbe 100644
}
catch (std::exception& e)
{
-@@ -79,20 +174,21 @@ static int getPFRImgInfo(const std::filesystem::path imgPath, uint8_t& imgType,
+@@ -80,20 +176,21 @@ static int getPFRImgInfo(const std::filesystem::path imgPath, uint8_t& imgType,
int Manager::processImage(const std::string& imgFilePath)
{
@@ -225,7 +222,7 @@ index 242a6ca..1a41cbe 100644
return -1;
}
-@@ -103,31 +198,6 @@ int Manager::processImage(const std::string& imgFilePath)
+@@ -104,31 +201,6 @@ int Manager::processImage(const std::string& imgFilePath)
return -1;
}
@@ -257,7 +254,7 @@ index 242a6ca..1a41cbe 100644
sdbusplus::xyz::openbmc_project::Software::server::Version::VersionPurpose
purpose = Version::VersionPurpose::Unknown;
try
-@@ -169,6 +239,7 @@ int Manager::processImage(const std::string& imgFilePath)
+@@ -170,6 +242,7 @@ int Manager::processImage(const std::string& imgFilePath)
std::filesystem::create_directory(imageDirPath);
std::filesystem::path newFileName = imageDirPath / "image-runtime";
@@ -265,7 +262,7 @@ index 242a6ca..1a41cbe 100644
std::filesystem::rename(imgFilePath, newFileName);
// Create Version object
-@@ -212,6 +283,14 @@ void Manager::erase(std::string entryId)
+@@ -213,6 +286,14 @@ void Manager::erase(std::string entryId)
this->versions.erase(entryId);
}
@@ -284,7 +281,7 @@ diff --git a/pfr_image_manager.hpp b/pfr_image_manager.hpp
index c6ee6a4..5b7b2c3 100644
--- a/pfr_image_manager.hpp
+++ b/pfr_image_manager.hpp
-@@ -1,6 +1,13 @@
+@@ -1,8 +1,16 @@
#pragma once
#include "version.hpp"
@@ -294,38 +291,26 @@ index c6ee6a4..5b7b2c3 100644
+#include <sys/mman.h>
+#include <unistd.h>
+
-+#include <filesystem>
#include <sdbusplus/server.hpp>
++#include <filesystem>
++
namespace phosphor
-@@ -10,7 +17,8 @@ namespace software
- namespace manager
{
-
--enum pfrImgPCType {
-+enum pfrImgPCType
-+{
- pfrCPLDUpdateCap = 0x00,
- pfrPCHPFM = 0x01,
- pfrPCHUpdateCap = 0x02,
-@@ -19,15 +27,94 @@ enum pfrImgPCType {
- };
-
+ namespace software
+@@ -22,7 +30,7 @@ enum pfrImgPCType
/* PFR image block 0 - As defined in HAS */
--struct pfrImgBlock0 {
+ struct pfrImgBlock0
+ {
- uint8_t tag[4];
-+struct pfrImgBlock0
-+{
+ uint32_t tag;
uint8_t pcLength[4];
uint8_t pcType[4];
uint8_t reserved1[4];
- uint8_t hash256[32];
- uint8_t hash384[48];
+@@ -31,6 +39,82 @@ struct pfrImgBlock0
uint8_t reserved2[32];
--}__attribute__((packed));
-+} __attribute__((packed));
-+
+ } __attribute__((packed));
+
+/** @struct CustomFd
+ *
+ * RAII wrapper for file descriptor.
@@ -343,8 +328,7 @@ index c6ee6a4..5b7b2c3 100644
+ * @param[in] fd - File descriptor
+ */
+ CustomFd(int fd) : fd(fd)
-+ {
-+ }
++ {}
+
+ ~CustomFd()
+ {
@@ -390,8 +374,7 @@ index c6ee6a4..5b7b2c3 100644
+ * @param[in] length - length of the map
+ */
+ CustomMap(void* addr, size_t length) : addr(addr), length(length)
-+ {
-+ }
++ {}
+
+ ~CustomMap()
+ {
@@ -403,10 +386,11 @@ index c6ee6a4..5b7b2c3 100644
+ return addr;
+ }
+};
-
++
/** @class Manager
* @brief Contains a map of Version dbus objects.
-@@ -61,13 +148,28 @@ class Manager
+ * @details The software image manager class that contains the Version dbus
+@@ -63,6 +147,22 @@ class Manager
void erase(std::string entryId);
private:
@@ -429,13 +413,3 @@ index c6ee6a4..5b7b2c3 100644
/** @brief Persistent map of Version dbus objects and their
* version id */
std::map<std::string, std::unique_ptr<Version>> versions;
-
- /** @brief Persistent sdbusplus DBus bus connection. */
- sdbusplus::bus::bus& bus;
--
- };
-
- } // namespace manager
---
-2.17.1
-
diff --git a/meta-openbmc-mods/meta-common/recipes-phosphor/flash/phosphor-software-manager/0008-item_updater-update-the-bmc_active-objectPath.patch b/meta-openbmc-mods/meta-common/recipes-phosphor/flash/phosphor-software-manager/0008-item_updater-update-the-bmc_active-objectPath.patch
index bac756a18..e0ff79795 100644
--- a/meta-openbmc-mods/meta-common/recipes-phosphor/flash/phosphor-software-manager/0008-item_updater-update-the-bmc_active-objectPath.patch
+++ b/meta-openbmc-mods/meta-common/recipes-phosphor/flash/phosphor-software-manager/0008-item_updater-update-the-bmc_active-objectPath.patch
@@ -6,25 +6,45 @@ Subject: [PATCH] item_updater: update the bmc_active objectPath
Update the Software object path to bmc_active instead of random Id.
Signed-off-by: Chalapathi <chalapathix.venkataramashetty@intel.com>
+
---
- item_updater.cpp | 4 +---
- 1 file changed, 1 insertion(+), 3 deletions(-)
+ item_updater.cpp | 7 ++-----
+ 1 file changed, 2 insertions(+), 5 deletions(-)
diff --git a/item_updater.cpp b/item_updater.cpp
-index 7fe69e4..3ce1dbf 100644
+index e6dd298..c3a846d 100644
--- a/item_updater.cpp
+++ b/item_updater.cpp
-@@ -175,9 +175,7 @@ void ItemUpdater::processBMCImage()
+@@ -175,7 +175,8 @@ void ItemUpdater::processBMCImage()
if (0 ==
iter.path().native().compare(0, BMC_RO_PREFIX_LEN, BMC_ROFS_PREFIX))
{
-- // The versionId is extracted from the path
-- // for example /media/ro-2a1022fe.
-- auto id = iter.path().native().substr(BMC_RO_PREFIX_LEN);
+- // Get the version to calculate the id
+ std::string id = "bmc_active";
- auto osRelease = iter.path() / OS_RELEASE_FILE;
++ // upstream changed this to relative_path ... is that right?
+ fs::path releaseFile(OS_RELEASE_FILE);
+ auto osRelease = iter.path() / releaseFile.relative_path();
if (!fs::is_regular_file(osRelease))
- {
---
-2.17.1
-
+@@ -189,7 +190,6 @@ void ItemUpdater::processBMCImage()
+ // volumes created by the UBI layout for example have the id in
+ // the mount directory name. The worst that can happen is that
+ // erase() is called with an non-existent id and returns.
+- auto id = iter.path().native().substr(BMC_RO_PREFIX_LEN);
+ ItemUpdater::erase(id);
+
+ continue;
+@@ -203,14 +203,11 @@ void ItemUpdater::processBMCImage()
+
+ // Try to delete the version, same as above if the
+ // OS_RELEASE_FILE does not exist.
+- auto id = iter.path().native().substr(BMC_RO_PREFIX_LEN);
+ ItemUpdater::erase(id);
+
+ continue;
+ }
+
+- auto id = VersionClass::getId(version);
+-
+ // Check if the id has already been added. This can happen if the
+ // BMC partitions / devices were manually flashed with the same
+ // image.
diff --git a/meta-openbmc-mods/meta-common/recipes-phosphor/flash/phosphor-software-manager/0009-Add-ApplyOptions-D-bus-property-under-Software.patch b/meta-openbmc-mods/meta-common/recipes-phosphor/flash/phosphor-software-manager/0009-Add-ApplyOptions-D-bus-property-under-Software.patch
index 3fa6a9a79..f150c1027 100644
--- a/meta-openbmc-mods/meta-common/recipes-phosphor/flash/phosphor-software-manager/0009-Add-ApplyOptions-D-bus-property-under-Software.patch
+++ b/meta-openbmc-mods/meta-common/recipes-phosphor/flash/phosphor-software-manager/0009-Add-ApplyOptions-D-bus-property-under-Software.patch
@@ -27,9 +27,9 @@ index 3f0530f..5c1a779 100644
#include <xyz/openbmc_project/Control/FieldMode/server.hpp>
+#include <xyz/openbmc_project/Software/ApplyOptions/server.hpp>
- namespace phosphor
- {
-@@ -21,7 +22,8 @@ using ItemUpdaterInherit = sdbusplus::server::object::object<
+ #include <string>
+ #include <vector>
+@@ -24,7 +25,8 @@ using ItemUpdaterInherit = sdbusplus::server::object::object<
sdbusplus::xyz::openbmc_project::Common::server::FactoryReset,
sdbusplus::xyz::openbmc_project::Control::server::FieldMode,
sdbusplus::xyz::openbmc_project::Association::server::Definitions,
diff --git a/meta-openbmc-mods/meta-common/recipes-phosphor/flash/phosphor-software-manager/0010-Add-error-reporting-to-pfr_image_manager.patch b/meta-openbmc-mods/meta-common/recipes-phosphor/flash/phosphor-software-manager/0010-Add-error-reporting-to-pfr_image_manager.patch
index 9c3ab4dd2..e72398efd 100644
--- a/meta-openbmc-mods/meta-common/recipes-phosphor/flash/phosphor-software-manager/0010-Add-error-reporting-to-pfr_image_manager.patch
+++ b/meta-openbmc-mods/meta-common/recipes-phosphor/flash/phosphor-software-manager/0010-Add-error-reporting-to-pfr_image_manager.patch
@@ -133,7 +133,7 @@ index 1a41cbe..fe1e6f9 100644
static constexpr const uint32_t pfmPos = 2054;
static constexpr const uint32_t block0Magic = 0xB6EAFD19;
-@@ -74,6 +78,8 @@ int Manager::verifyPFRImage(const std::filesystem::path imgPath,
+@@ -76,6 +80,8 @@ int Manager::verifyPFRImage(const std::filesystem::path imgPath,
phosphor::logging::log<phosphor::logging::level::ERR>(
"Image magic number match failed",
phosphor::logging::entry("IMAGEMAGIC=0x%x", imgMagic));
@@ -142,34 +142,37 @@ index 1a41cbe..fe1e6f9 100644
return -1;
}
-@@ -108,6 +114,8 @@ int Manager::verifyPFRImage(const std::filesystem::path imgPath,
+@@ -110,6 +116,9 @@ int Manager::verifyPFRImage(const std::filesystem::path imgPath,
phosphor::logging::log<phosphor::logging::level::ERR>(
"Unknown image type");
+ phosphor::logging::report<ImageFailure>(
++ ImageFail::FAIL("Unknown image type"),
+ ImageFail::PATH(imgPath.c_str()));
return -1;
}
-@@ -151,6 +159,8 @@ int Manager::verifyPFRImage(const std::filesystem::path imgPath,
+@@ -153,6 +162,9 @@ int Manager::verifyPFRImage(const std::filesystem::path imgPath,
"PRIORITY=%i", LOG_ERR, "REDFISH_MESSAGE_ID=%s",
redfishMsgID.c_str(), "REDFISH_MESSAGE_ARGS=%s",
"Image HASH check fail", NULL);
+ phosphor::logging::report<ImageFailure>(
++ ImageFail::FAIL("Security violation: hash mismatch"),
+ ImageFail::PATH(imgPath.c_str()));
return -1;
}
-@@ -165,6 +175,8 @@ int Manager::verifyPFRImage(const std::filesystem::path imgPath,
+@@ -167,6 +179,9 @@ int Manager::verifyPFRImage(const std::filesystem::path imgPath,
catch (std::exception& e)
{
phosphor::logging::log<phosphor::logging::level::ERR>(e.what());
+ phosphor::logging::report<ImageFailure>(
++ ImageFail::FAIL("Unhandled exception"),
+ ImageFail::PATH(imgPath.c_str()));
return -1;
}
}
-@@ -180,6 +192,12 @@ int Manager::processImage(const std::string& imgFilePath)
+@@ -182,6 +197,12 @@ int Manager::processImage(const std::string& imgFilePath)
if (!std::filesystem::exists(imgPath))
return -1;
diff --git a/meta-openbmc-mods/meta-common/recipes-phosphor/flash/phosphor-software-manager/0011-Fix-for-RedudancyPriority-in-item_updater.patch b/meta-openbmc-mods/meta-common/recipes-phosphor/flash/phosphor-software-manager/0011-Fix-for-RedudancyPriority-in-item_updater.patch
index 4c8f82aa3..156e6fe7c 100644
--- a/meta-openbmc-mods/meta-common/recipes-phosphor/flash/phosphor-software-manager/0011-Fix-for-RedudancyPriority-in-item_updater.patch
+++ b/meta-openbmc-mods/meta-common/recipes-phosphor/flash/phosphor-software-manager/0011-Fix-for-RedudancyPriority-in-item_updater.patch
@@ -1,4 +1,4 @@
-From 0babf82f51561ac92a9b0dd56991d8de01930129 Mon Sep 17 00:00:00 2001
+From f6022e25d0b47af502522913773e589fcdd1568e Mon Sep 17 00:00:00 2001
From: Vikram Bodireddy <vikram.bodireddy@intel.com>
Date: Sun, 5 Jul 2020 00:54:57 +0530
Subject: [PATCH] Fix for RedudancyPriority in item_updater
@@ -13,15 +13,16 @@ item_updater.
Tested: Tested for coredumps during Seamless firmware update.
Signed-off-by: Vikram Bodireddy <vikram.bodireddy@intel.com>
+
---
item_updater.cpp | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/item_updater.cpp b/item_updater.cpp
-index af01e39..8d7bb82 100644
+index c3a846d..b299b4d 100644
--- a/item_updater.cpp
+++ b/item_updater.cpp
-@@ -655,8 +655,9 @@ void ItemUpdater::freeSpace(Activation& caller)
+@@ -690,8 +690,9 @@ void ItemUpdater::freeSpace(Activation& caller)
// Failed activations don't have priority, assign them a large value
// for sorting purposes.
auto priority = 999;
@@ -33,6 +34,3 @@ index af01e39..8d7bb82 100644
{
priority = iter.second->redundancyPriority.get()->priority();
}
---
-2.17.1
-
diff --git a/meta-openbmc-mods/meta-common/recipes-phosphor/flash/phosphor-software-manager/0014-PFR-image-verification.patch b/meta-openbmc-mods/meta-common/recipes-phosphor/flash/phosphor-software-manager/0014-PFR-image-verification.patch
new file mode 100644
index 000000000..dfc7f2e58
--- /dev/null
+++ b/meta-openbmc-mods/meta-common/recipes-phosphor/flash/phosphor-software-manager/0014-PFR-image-verification.patch
@@ -0,0 +1,116 @@
+From 9d82d53b50769506926dd99273f197a268d68fa3 Mon Sep 17 00:00:00 2001
+From: Chalapathi Venkataramashetty <chalapathix.venkataramashetty@intel.com>
+Date: Thu, 30 Jul 2020 09:50:40 +0000
+Subject: [PATCH] PFR-image-verification
+
+Add support verify the complete fw image by using mtd-util repo's
+pfr_authenticate function.
+
+Tested.
+1. Upload the corrupted image.
+POST: https://<BMC_IP>/redfish/v1/UpdateService/
+ with <Corrupted BMC_signed_cap> binary file
+Response:
+{
+ "error": {
+ "@Message.ExtendedInfo": [
+ {
+ "@odata.type": "/redfish/v1/$metadata#Message.v1_0_0.Message",
+ "Message": "Invalid file uploaded to /redfish/v1/UpdateService:
+ Invalid image format.",
+ "MessageArgs": [
+ "/redfish/v1/UpdateService",
+ "Invalid image format"
+ ],
+ "MessageId": "OpenBMC.0.1.0.InvalidUpload",
+ "Resolution": "None.",
+ "Severity": "Warning"
+ }
+ ],
+ "code": "OpenBMC.0.1.0.InvalidUpload",
+ "message": "Invalid file uploaded to /redfish/v1/UpdateService:
+ Invalid image format."
+ }
+}
+
+2. Upload the correct image.
+POST: https://<BMC_IP>/redfish/v1/UpdateService/
+ with <BMC_signed_cap> binary file
+
+Image verified and firmware updated.
+{
+ "@odata.id": "/redfish/v1/TaskService/Tasks/0",
+ "@odata.type": "#Task.v1_4_3.Task",
+ "Id": "0",
+ "TaskState": "Running",
+ "TaskStatus": "OK"
+}
+
+Command:
+GET: https://<BMC_IP>/redfish/v1/Systems/system/LogServices/EventLog/
+ Entries
+
+Response:
+{
+ "@odata.id": "/redfish/v1/Systems/system/LogServices/EventLog/
+ Entries/1596082187",
+ "@odata.type": "#LogEntry.v1_4_0.LogEntry",
+ "Created": "2020-07-30T04:09:47+00:00",
+ "EntryType": "Event",
+ "Id": "1596082187",
+ "Message": "BMC firmware update to version 00.72 completed
+ successfully.",
+ "MessageArgs": [
+ "BMC",
+ "00.72"
+ ],
+ "MessageId": "OpenBMC.0.1.FirmwareUpdateCompleted",
+ "Name": "System Event Log Entry",
+ "Severity": "OK"
+ },
+
+Signed-off-by: Chalapathi Venkataramashetty <chalapathix.venkataramashetty@intel.com>
+---
+ pfr_image_manager.cpp | 17 +++++++++++++++++
+ 1 file changed, 17 insertions(+)
+
+diff --git a/pfr_image_manager.cpp b/pfr_image_manager.cpp
+index eeed4fe..16231fa 100644
+--- a/pfr_image_manager.cpp
++++ b/pfr_image_manager.cpp
+@@ -15,6 +15,7 @@
+ #include <time.h>
+ #include <unistd.h>
+
++#include <boost/process/child.hpp>
+ #include <elog-errors.hpp>
+ #include <xyz/openbmc_project/Software/Image/error.hpp>
+
+@@ -122,6 +123,24 @@ int Manager::verifyPFRImage(const std::filesystem::path imgPath,
+ return -1;
+ }
+
++ // Verify the complete image
++ std::string mtdUtilfile = "/usr/bin/mtd-util";
++ std::vector<std::string> mtdUtilCmd = {"p", "a"};
++ mtdUtilCmd.push_back(imgPath);
++
++ boost::process::child execProg(mtdUtilfile, mtdUtilCmd);
++ execProg.wait();
++ if (execProg.exit_code())
++ {
++ phosphor::logging::log<phosphor::logging::level::ERR>(
++ "Image authentication failed");
++ phosphor::logging::report<ImageFailure>(
++ ImageFail::FAIL(
++ "Security violation: image authentication failure"),
++ ImageFail::PATH(imgPath.c_str()));
++ return -1;
++ }
++
+ imgFile.seekg(pfmPos,
+ std::ios::beg); // Version is at 0x806 in the PFM
+ imgFile.read(reinterpret_cast<char*>(&verData), sizeof(verData));
+--
+2.17.1
+
diff --git a/meta-openbmc-mods/meta-common/recipes-phosphor/flash/phosphor-software-manager/0015-Fix-delete-image-by-ID-and-inhibit-removal-of-bmc_ac.patch b/meta-openbmc-mods/meta-common/recipes-phosphor/flash/phosphor-software-manager/0015-Fix-delete-image-by-ID-and-inhibit-removal-of-bmc_ac.patch
new file mode 100644
index 000000000..54efbee8c
--- /dev/null
+++ b/meta-openbmc-mods/meta-common/recipes-phosphor/flash/phosphor-software-manager/0015-Fix-delete-image-by-ID-and-inhibit-removal-of-bmc_ac.patch
@@ -0,0 +1,153 @@
+From f2dd5e13a0774d8683542798dd96979f9d7a6691 Mon Sep 17 00:00:00 2001
+From: Vernon Mauery <vernon.mauery@intel.com>
+Date: Tue, 29 Sep 2020 13:38:35 -0700
+Subject: [PATCH] Fix delete image by ID and inhibit removal of bmc_active
+
+Delete image by ID was broken because when hitting the delete dbus
+interface, it recalculated the ID from the parent version, which then
+does not match because of the random number addition that was added to
+the ID when the parent interface was created. This saves away the parent
+interface ID and recalls it rather than recalculating it.
+
+Also, there was a logic error in deleting images that would delete the
+active BMC image. This fixes up that error.
+
+Tested: run multiple back-to back updates and see that when the fwupd
+ script calls delete on the seamless images, the interfaces are
+ deleted and that the bmc_active interface is not deleted.
+
+Signed-off-by: Vernon Mauery <vernon.mauery@intel.com>
+---
+ item_updater.cpp | 17 +++++++++++------
+ pfr_image_manager.cpp | 2 +-
+ version.cpp | 2 +-
+ version.hpp | 19 +++++++++++++++----
+ 4 files changed, 28 insertions(+), 12 deletions(-)
+
+diff --git a/item_updater.cpp b/item_updater.cpp
+index db255d6..90970d3 100644
+--- a/item_updater.cpp
++++ b/item_updater.cpp
+@@ -133,7 +133,7 @@ void ItemUpdater::createActivation(sdbusplus::message::message& msg)
+ activationState, associations)));
+
+ auto versionPtr = std::make_unique<VersionClass>(
+- bus, path, version, purpose, filePath,
++ bus, path, versionId, version, purpose, filePath,
+ std::bind(&ItemUpdater::erase, this, std::placeholders::_1));
+ versionPtr->deleteObject =
+ std::make_unique<phosphor::software::manager::Delete>(bus, path,
+@@ -247,7 +247,7 @@ void ItemUpdater::processBMCImage()
+
+ // Create Version instance for this version.
+ auto versionPtr = std::make_unique<VersionClass>(
+- bus, path, version, purpose, "",
++ bus, path, id, version, purpose, "",
+ std::bind(&ItemUpdater::erase, this, std::placeholders::_1));
+ auto isVersionFunctional = versionPtr->isFunctional();
+ if (!isVersionFunctional)
+@@ -322,11 +322,11 @@ void ItemUpdater::erase(std::string entryId)
+ auto it = versions.find(entryId);
+ if (it != versions.end())
+ {
+- if (it->second->isFunctional() && ACTIVE_BMC_MAX_ALLOWED > 1)
++ if (it->second->isFunctional())
+ {
+- log<level::ERR>("Error: Version is currently running on the BMC. "
+- "Unable to remove.",
+- entry("VERSIONID=%s", entryId.c_str()));
++ log<level::INFO>("Error: Version is currently running on the BMC. "
++ "Unable to remove.",
++ entry("VERSIONID=%s", entryId.c_str()));
+ return;
+ }
+ }
+@@ -669,6 +669,11 @@ void ItemUpdater::freeSpace(Activation& caller)
+ std::size_t count = 0;
+ for (const auto& iter : activations)
+ {
++ if (versions.find(iter.second->versionId)->second->isFunctional())
++ {
++ // don't bother with function versions
++ continue;
++ }
+ if ((iter.second.get()->activation() ==
+ server::Activation::Activations::Active) ||
+ (iter.second.get()->activation() ==
+diff --git a/pfr_image_manager.cpp b/pfr_image_manager.cpp
+index 145237e..0c6c3d8 100644
+--- a/pfr_image_manager.cpp
++++ b/pfr_image_manager.cpp
+@@ -308,7 +308,7 @@ int Manager::processImage(const std::string& imgFilePath)
+ std::string objPath = std::string{SOFTWARE_OBJPATH} + '/' + id;
+
+ auto versionPtr = std::make_unique<Version>(
+- bus, objPath, ver, purpose, imageDirPath.string(),
++ bus, objPath, id, ver, purpose, imageDirPath.string(),
+ std::bind(&Manager::erase, this, std::placeholders::_1));
+ versionPtr->deleteObject =
+ std::make_unique<phosphor::software::manager::Delete>(bus, objPath,
+diff --git a/version.cpp b/version.cpp
+index 18f3f4f..e6fd481 100644
+--- a/version.cpp
++++ b/version.cpp
+@@ -182,7 +182,7 @@ void Delete::delete_()
+ {
+ if (parent.eraseCallback)
+ {
+- parent.eraseCallback(parent.getId(parent.version()));
++ parent.eraseCallback(parent.getExtId());
+ }
+ }
+
+diff --git a/version.hpp b/version.hpp
+index 9cf76da..ae70ea8 100644
+--- a/version.hpp
++++ b/version.hpp
+@@ -74,14 +74,15 @@ class Version : public VersionInherit
+ * @param[in] callback - The eraseFunc callback
+ */
+ Version(sdbusplus::bus::bus& bus, const std::string& objPath,
+- const std::string& versionString, VersionPurpose versionPurpose,
+- const std::string& filePath, eraseFunc callback) :
++ const std::string& extId, const std::string& versionString,
++ VersionPurpose versionPurpose, const std::string& filePath,
++ eraseFunc callback) :
+ VersionInherit(bus, (objPath).c_str(), true),
+- eraseCallback(callback), versionStr(versionString)
++ eraseCallback(callback), extId(extId), versionStr(versionString)
+ {
+ // Set properties.
+ purpose(versionPurpose);
+- version(versionString);
++ version(extId);
+ path(filePath);
+ // Emit deferred signal.
+ emit_object_added();
+@@ -134,6 +135,15 @@ class Version : public VersionInherit
+ */
+ bool isFunctional();
+
++ /* @brief Return the extended ID of this version object
++ *
++ * @ return - returns the extended ID string
++ */
++ std::string getExtId()
++ {
++ return extId;
++ }
++
+ /** @brief Persistent Delete D-Bus object */
+ std::unique_ptr<Delete> deleteObject;
+
+@@ -143,6 +153,7 @@ class Version : public VersionInherit
+ private:
+ /** @brief This Version's version string */
+ const std::string versionStr;
++ const std::string extId;
+ };
+
+ } // namespace manager
+--
+2.17.1
+
diff --git a/meta-openbmc-mods/meta-common/recipes-phosphor/flash/phosphor-software-manager/0016-Process-PLDM-image-type.patch b/meta-openbmc-mods/meta-common/recipes-phosphor/flash/phosphor-software-manager/0016-Process-PLDM-image-type.patch
new file mode 100644
index 000000000..c353a09b2
--- /dev/null
+++ b/meta-openbmc-mods/meta-common/recipes-phosphor/flash/phosphor-software-manager/0016-Process-PLDM-image-type.patch
@@ -0,0 +1,224 @@
+From aaebe1c3db71b7addbd3f1d1b2b5f83d7cba14e3 Mon Sep 17 00:00:00 2001
+From: Ayushi Smriti <smriti.ayushi@intel.com>
+Date: Mon, 9 Nov 2020 23:04:58 +0530
+Subject: [PATCH] Process PLDM image type
+
+This change is to check whether the image uploaded is of PLDM image
+type based on the PackageHeaderIdentifier check which is a 16 bytes
+uuid field in the pldm package header.
+
+Also, determine image purpose and version.
+Purpose is set to pldm enum type and for version, PackageVersionString
+is concluded based on PackageVersionStringLength value.
+
+Tested:
+- On uploading a pldm image through Redfish. Uuid is identified and
+matched correctly.
+- Purpose and version is given to the image as expected and activation
+intf got added.
+ - verified same with busctl cmd on xyz.openbmc_project.Software.Version
+ and xyz.openbmc_project.Software.BMC.Updater
+- Verified the regular PFR update procedure works
+ - received expected redfish response from postman
+ - verified fwupd.sh script is reached
+
+Signed-off-by: Ayushi Smriti <smriti.ayushi@intel.com>
+---
+ item_updater.cpp | 1 +
+ pfr_image_manager.cpp | 95 +++++++++++++++++++++++++++++++++++++++++--
+ pfr_image_manager.hpp | 6 +--
+ pldm.hpp | 21 ++++++++++
+ 4 files changed, 117 insertions(+), 6 deletions(-)
+ create mode 100644 pldm.hpp
+
+diff --git a/item_updater.cpp b/item_updater.cpp
+index db255d6..2ed2a3c 100644
+--- a/item_updater.cpp
++++ b/item_updater.cpp
+@@ -67,6 +67,7 @@ void ItemUpdater::createActivation(sdbusplus::message::message& msg)
+ #if defined(HOST_BIOS_UPGRADE) || defined(PFR_UPDATE)
+ value == VersionPurpose::Host ||
+ #endif
++ value == VersionPurpose::PLDM ||
+ value == VersionPurpose::Other)
+ {
+ purpose = value;
+diff --git a/pfr_image_manager.cpp b/pfr_image_manager.cpp
+index 178367f..c923494 100644
+--- a/pfr_image_manager.cpp
++++ b/pfr_image_manager.cpp
+@@ -3,6 +3,7 @@
+ #include "pfr_image_manager.hpp"
+
+ #include "dbus_helpers.hpp"
++#include "pldm.hpp"
+ #include "version.hpp"
+ #include "watch.hpp"
+
+@@ -44,9 +45,10 @@ using BusyFail = Software::Image::BusyFailure;
+ static constexpr const uint32_t pfmPos = 2054;
+ static constexpr const uint32_t block0Magic = 0xB6EAFD19;
+ static constexpr const uint32_t lengthBlk0Blk1 = 1024;
++static constexpr const uint32_t pldmMagic = 0xF018878C;
+
+-int Manager::verifyPFRImage(const std::filesystem::path imgPath,
+- std::string& version, std::string& purposeString)
++int Manager::verifyImage(const std::filesystem::path imgPath,
++ std::string& version, std::string& purposeString)
+ {
+ uint8_t imgType = 0;
+ uint32_t imgMagic = 0;
+@@ -76,6 +78,93 @@ int Manager::verifyPFRImage(const std::filesystem::path imgPath,
+
+ imgMagic = block0Data.tag;
+
++ if (htobe32(imgMagic) == pldmMagic)
++ {
++ if (!version.empty())
++ {
++ version.clear();
++ }
++
++ imgFile.seekg(0, std::ios_base::end);
++
++ const size_t length = imgFile.tellg();
++ constexpr size_t readBytes = 36;
++
++ if (length < readBytes)
++ {
++ phosphor::logging::log<phosphor::logging::level::ERR>(
++ "Insufficient file length to read the required "
++ "bytes");
++ return -1;
++ }
++
++ imgFile.seekg(0, std::ios::beg);
++
++ std::array<char, readBytes> buffer = {};
++
++ imgFile.read(
++ buffer.data(),
++ buffer.size()); // read 36 bytes of PLDM Package Header
++
++ if (!imgFile.good())
++ {
++ phosphor::logging::log<phosphor::logging::level::ERR>(
++ "Image file read is not successful");
++ return -1;
++ }
++
++ if (!std::equal(buffer.begin(),
++ buffer.begin() + pldm::headerIdLen,
++ pldm::pldmPkgHeaderId
++ .begin())) // comparing 16 bytes of
++ // PackageHeaderIdentifier field
++ {
++ std::string redfishMsgID =
++ "OpenBMC.0.1.FirmwareUpdateFailed";
++ sd_journal_send(
++ "MESSAGE=%s", "Firmware image verification failed",
++ "PRIORITY=%i", LOG_ERR, "REDFISH_MESSAGE_ID=%s",
++ redfishMsgID.c_str(), "REDFISH_MESSAGE_ARGS=%s",
++ "PLDM Image package header identifier check fail",
++ NULL);
++
++ return -1;
++ }
++
++ phosphor::logging::log<phosphor::logging::level::INFO>(
++ "Package header identifier matched");
++ purposeString =
++ "xyz.openbmc_project.Software.Version.VersionPurpose.PLDM";
++
++ const uint8_t pkgVerStrLen = static_cast<uint8_t>(
++ buffer[35]); // PackageVersionStringLen byte
++
++ imgFile.seekg(readBytes,
++ std::ios::beg); // point to the begin of
++ // PackageVersionString field
++ // i.e. 36th pos
++
++ std::array<char, 255> ver = {};
++ imgFile.read(ver.data(),
++ pkgVerStrLen); // read PackageVersionString bytes
++
++ if (!imgFile.good())
++ {
++ phosphor::logging::log<phosphor::logging::level::ERR>(
++ "Image file read is not successful");
++ return -1;
++ }
++
++ version.assign(ver.data(), pkgVerStrLen);
++ phosphor::logging::log<phosphor::logging::level::INFO>(
++ "Package version string value",
++ phosphor::logging::entry("IMAGE_VERSION=%s",
++ version.c_str()));
++
++ imgFile.close();
++ return 0;
++ }
++
+ if (imgMagic != block0Magic)
+ {
+ phosphor::logging::log<phosphor::logging::level::ERR>(
+@@ -226,7 +315,7 @@ int Manager::processImage(const std::string& imgFilePath)
+ std::string ver;
+ std::string purposeString;
+
+- if (0 != verifyPFRImage(imgFilePath, ver, purposeString))
++ if (0 != verifyImage(imgFilePath, ver, purposeString))
+ {
+ phosphor::logging::log<phosphor::logging::level::ERR>(
+ "Error verifying uploaded image");
+diff --git a/pfr_image_manager.hpp b/pfr_image_manager.hpp
+index 3591f1a..2facfe6 100644
+--- a/pfr_image_manager.hpp
++++ b/pfr_image_manager.hpp
+@@ -156,13 +156,13 @@ class Manager
+ CustomMap mapFile(const std::filesystem::path& path, size_t size);
+
+ /**
+- * @brief Verify the PFR image and return version and purpose
++ * @brief Verify the uploaded image type and return version and purpose
+ * @param[in] - file path
+ * @param[out] - version
+ * @param[out] - purpose
+ */
+- int verifyPFRImage(const std::filesystem::path imgPath,
+- std::string& version, std::string& purposeString);
++ int verifyImage(const std::filesystem::path imgPath, std::string& version,
++ std::string& purposeString);
+ /** @brief Persistent map of Version dbus objects and their
+ * version id */
+ std::map<std::string, std::unique_ptr<Version>> versions;
+diff --git a/pldm.hpp b/pldm.hpp
+new file mode 100644
+index 0000000..edbd6ae
+--- /dev/null
++++ b/pldm.hpp
+@@ -0,0 +1,21 @@
++namespace pldm
++{
++
++struct PldmPkgHeader
++{
++ uint8_t uuid[16]; // PackageHeaderIdentifier
++ uint8_t formatRev; // PackageHeaderFormatRevision
++ uint16_t headerSize; // PackageHeaderSize
++ uint8_t timestamp[13]; // PackageReleaseDateTime
++ uint16_t bitmapLen; // ComponentBitmapBitLength
++ uint8_t verStringType; // PackageVersionStringType
++ uint8_t verStringLen; // PackageVersionStringLength
++} __attribute__((packed));
++
++constexpr size_t headerIdLen = 16;
++
++const std::array<char, headerIdLen> pldmPkgHeaderId = {
++ 0xF0, 0x18, 0x87, 0x8C, 0xCB, 0x7D, 0x49, 0x43,
++ 0x98, 0x00, 0xA0, 0x2F, 0x05, 0x9A, 0xCA, 0x02}; // 16 bytes package header
++ // identifier uuid
++} // namespace pldm
+--
+2.17.1
+
diff --git a/meta-openbmc-mods/meta-common/recipes-phosphor/flash/phosphor-software-manager_%.bbappend b/meta-openbmc-mods/meta-common/recipes-phosphor/flash/phosphor-software-manager_%.bbappend
index 623c4f77e..e1c72d161 100644
--- a/meta-openbmc-mods/meta-common/recipes-phosphor/flash/phosphor-software-manager_%.bbappend
+++ b/meta-openbmc-mods/meta-common/recipes-phosphor/flash/phosphor-software-manager_%.bbappend
@@ -1,12 +1,11 @@
FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
-EXTRA_OECONF += "--enable-fwupd_script"
+EXTRA_OEMESON += "-Dfwupd-script=enabled"
SYSTEMD_SERVICE_${PN}-updater += "fwupd@.service"
-EXTRA_OECONF += "${@bb.utils.contains('IMAGE_FSTYPES', 'intel-pfr', '--enable-pfr_update', '', d)}"
+EXTRA_OEMESON += "${@bb.utils.contains('IMAGE_FSTYPES', 'intel-pfr', '-Dpfr-update=enabled', '', d)}"
-SRC_URI += "file://0001-Add-more-error-types.patch \
- file://0002-Redfish-firmware-activation.patch \
+SRC_URI += "file://0002-Redfish-firmware-activation.patch \
file://0004-Changed-the-condition-of-software-version-service-wa.patch \
file://0005-Modified-firmware-activation-to-launch-fwupd.sh-thro.patch \
file://0006-Modify-the-ID-of-software-image-updater-object-on-DB.patch \
@@ -20,6 +19,8 @@ SRC_URI += "file://0001-Add-more-error-types.patch \
SRC_URI_PFR = "file://0007-PFR-images-support.patch \
file://0008-PFR-image-HASH-verification.patch \
file://0010-Add-error-reporting-to-pfr_image_manager.patch \
+ file://0014-PFR-image-verification.patch \
+ file://0016-Process-PLDM-image-type.patch \
"
SRC_URI += "${@bb.utils.contains('IMAGE_FSTYPES', 'intel-pfr', SRC_URI_PFR, '', d)}"