From 9f12832b7a6d2056b3db4e044f88c3e5b65dee97 Mon Sep 17 00:00:00 2001 From: roly Date: Wed, 13 Nov 2024 11:04:54 +0800 Subject: [PATCH] Add fan board cpld for software manager --- item_updater.cpp | 37 +++++++++++++++++++++++++++++++++++++ item_updater.hpp | 20 ++++++++++++++++++++ meson.build | 5 +++++ meson_options.txt | 8 ++++++++ 4 files changed, 70 insertions(+) diff --git a/item_updater.cpp b/item_updater.cpp index 76f72d4..d8348e3 100644 --- a/item_updater.cpp +++ b/item_updater.cpp @@ -74,6 +74,9 @@ void ItemUpdater::createActivation(sdbusplus::message_t& msg) #endif #ifdef CPLD_UPGRADE value == VersionPurpose::CPLD || +#endif +#ifdef FB_CPLD_UPGRADE + value == VersionPurpose::FBCPLD || #endif value == VersionPurpose::System) { @@ -916,6 +919,40 @@ void ItemUpdater::createCPLDObject() } #endif +#ifdef FB_CPLD_UPGRADE +void ItemUpdater::createFBCPLDObject() +{ + std::string path = FB_CPLD_OBJPATH; + // Get version id from last item in the path + auto pos = path.rfind("/"); + if (pos == std::string::npos) + { + error("No version id found in object path {PATH}", "PATH", path); + return; + } + + createActiveAssociation(path); + createFunctionalAssociation(path); + + auto versionId = path.substr(pos + 1); + auto version = "null"; + AssociationList assocs = {}; + FBcpldActivation = std::make_unique( + bus, path, *this, versionId, server::Activation::Activations::Active, + assocs); + auto dummyErase = [](std::string /*entryId*/) { + // Do nothing; + }; + FBcpldVersion = std::make_unique( + bus, path, version, VersionPurpose::FBCPLD, "", "", + std::vector(), + std::bind(dummyErase, std::placeholders::_1), ""); + cpldVersion->deleteObject = + std::make_unique(bus, path, + *cpldVersion); +} +#endif + void ItemUpdater::getRunningSlot() { // Check /run/media/slot to get the slot number diff --git a/item_updater.hpp b/item_updater.hpp index 26b657d..fc8d6c3 100644 --- a/item_updater.hpp +++ b/item_updater.hpp @@ -70,6 +70,9 @@ class ItemUpdater : public ItemUpdaterInherit #endif #ifdef CPLD_UPGRADE createCPLDObject(); +#endif +#ifdef FB_CPLD_UPGRADE + createFBCPLDObject(); #endif emit_object_added(); }; @@ -299,6 +302,23 @@ class ItemUpdater : public ItemUpdaterInherit /** @brief Persistent Version D-Bus object for CPLD */ std::unique_ptr cpldVersion; #endif + +#ifdef FB_CPLD_UPGRADE + /** @brief Create the CPLD object without knowing the version. + * + * The object is created only to provide the DBus access so that an + * external service could set the correct CPLD version. + * On CPLD code update, the version is updated accordingly. + */ + void createFBCPLDObject(); + + /** @brief Persistent Activation D-Bus object for CPLD */ + std::unique_ptr FBcpldActivation; + + public: + /** @brief Persistent Version D-Bus object for CPLD */ + std::unique_ptr FBcpldVersion; +#endif /** @brief Get the slot number of running image */ void getRunningSlot(); }; diff --git a/meson.build b/meson.build index 509d9f7..009dcef 100644 --- a/meson.build +++ b/meson.build @@ -68,6 +68,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('CPLD_UPGRADE', get_option('cpld-upgrade').enabled()) +conf.set('FB_CPLD_UPGRADE', get_option('fb-cpld-upgrade').enabled()) conf.set('WANT_SIGNATURE_VERIFY', \ get_option('verify-signature').enabled() or \ get_option('verify-full-signature').enabled()) @@ -101,6 +102,10 @@ if get_option('cpld-upgrade').enabled() conf.set_quoted('CPLD_OBJPATH', get_option('cpld-object-path')) endif +if get_option('fb-cpld-upgrade').enabled() + conf.set_quoted('FB_CPLD_OBJPATH', get_option('fb-cpld-object-path')) +endif + if get_option('bmc-static-dual-image').enabled() conf.set('BMC_STATIC_DUAL_IMAGE', get_option('bmc-static-dual-image').enabled()) conf.set_quoted('ALT_ROFS_DIR', get_option('alt-rofs-dir')) diff --git a/meson_options.txt b/meson_options.txt index d638c93..2109025 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -13,6 +13,8 @@ option('host-bios-upgrade', type: 'feature', value: 'enabled', description: 'Enable host bios upgrade support.') option('cpld-upgrade', type: 'feature', value: 'enabled', description: 'Enable cpld upgrade support.') +option('fb-cpld-upgrade', type: 'feature', value: 'enabled', + description: 'Enable fan board cpld upgrade support.') option('sync-bmc-files', type: 'feature', value: 'enabled', description: 'Enable sync of filesystem files.') @@ -129,6 +131,12 @@ option( description: 'The CPLD DBus object path.', ) +option( + 'fb-cpld-object-path', type: 'string', + value: '/xyz/openbmc_project/software/fb_cpld_active', + description: 'The Fan Board CPLD DBus object path.', +) + option('bmc-static-dual-image', type: 'feature', value: 'enabled', description: 'Enable the dual image support for static layout.') -- 2.25.1