diff options
Diffstat (limited to 'meta-ibs/meta-cp2-5422/recipes-phosphor/ipmi/phosphor-ipmi-host/0001-Add-set-BIOS-version-support.patch')
-rw-r--r-- | meta-ibs/meta-cp2-5422/recipes-phosphor/ipmi/phosphor-ipmi-host/0001-Add-set-BIOS-version-support.patch | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/meta-ibs/meta-cp2-5422/recipes-phosphor/ipmi/phosphor-ipmi-host/0001-Add-set-BIOS-version-support.patch b/meta-ibs/meta-cp2-5422/recipes-phosphor/ipmi/phosphor-ipmi-host/0001-Add-set-BIOS-version-support.patch new file mode 100644 index 0000000000..36cba8bc71 --- /dev/null +++ b/meta-ibs/meta-cp2-5422/recipes-phosphor/ipmi/phosphor-ipmi-host/0001-Add-set-BIOS-version-support.patch @@ -0,0 +1,83 @@ +From 5faa6e4ced98082b10570eaa141381763f10be0b Mon Sep 17 00:00:00 2001 +From: Brian Ma <chma0@nuvoton.com> +Date: Fri, 13 May 2022 10:30:14 +0800 +Subject: [PATCH] Add set BIOS version support + +Signed-off-by: Nikita Kosenkov <NKosenkov@IBS.RU> +--- + apphandler.cpp | 45 +++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 45 insertions(+) + +diff --git a/apphandler.cpp b/apphandler.cpp +index 8e47288..0fc9b2f 100644 +--- a/apphandler.cpp ++++ b/apphandler.cpp +@@ -52,6 +52,8 @@ static constexpr auto versionIntf = "xyz.openbmc_project.Software.Version"; + static constexpr auto activationIntf = + "xyz.openbmc_project.Software.Activation"; + static constexpr auto softwareRoot = "/xyz/openbmc_project/software"; ++static constexpr auto biosObjPath = "/xyz/openbmc_project/software/bios_active"; ++static constexpr auto biosFile = "/var/lib/phosphor-bmc-code-mgmt/bios-release"; + + void register_netfn_app_functions() __attribute__((constructor)); + +@@ -1419,6 +1421,46 @@ ipmi::RspType<uint8_t, // Parameter revision + return ipmi::responseSuccess(paramRevision, setSelector, configData); + } + ++void handleFirmwareVersion(uint8_t paramSelector, std::string version){ ++ // only handle FW version ++ if (paramSelector != IPMI_SYSINFO_SYSTEM_FW_VERSION) ++ { ++ return; ++ } ++ sdbusplus::bus::bus bus{ipmid_get_sd_bus_connection()}; ++ ++ log<level::INFO>(("ipmid get BIOS version:" + version).c_str()); ++ ++ // update host version to software manager ++ std::string service; ++ try ++ { ++ service = ipmi::getService(bus, versionIntf, biosObjPath); ++ ipmi::setDbusProperty(bus, service, biosObjPath, versionIntf, ++ "Version", version); ++ } ++ catch (const std::runtime_error& e) ++ { ++ log<level::ERR>("Cannot get service for update version", ++ entry("ERROR=%s", e.what()), ++ entry("INTERFACE=%s", versionIntf)); ++ } ++ catch (sdbusplus::exception::SdBusError& e) ++ { ++ log<level::ERR>("sdbusplus exception - Unable to update BIOS version", ++ entry("ERROR=%s", e.what()), ++ entry("INTERFACE=%s", versionIntf), ++ entry("SERVICE=%s", service.c_str())); ++ } ++ // write version file to storage ++ log<level::DEBUG>("write BIOS version file."); ++ std::ofstream myfile(biosFile, std::ofstream::out); ++ std::string ver = "VERSION_ID=\"" + version + "\""; ++ myfile << ver << std::endl; ++ myfile.close(); ++} ++ ++ + ipmi::RspType<> ipmiAppSetSystemInfo(uint8_t paramSelector, uint8_t data1, + std::vector<uint8_t> configData) + { +@@ -1508,6 +1550,9 @@ ipmi::RspType<> ipmiAppSetSystemInfo(uint8_t paramSelector, uint8_t data1, + std::copy_n(configData.begin(), count, paramString.begin() + offset); + } + sysInfoParamStore->update(paramSelector, paramString); ++ ++ // update BIOS version ++ handleFirmwareVersion(paramSelector, paramString); + return ipmi::responseSuccess(); + } + +-- +2.35.1 + |