diff options
author | Nikita Kosenkov <NKosenkov@IBS.RU> | 2022-08-10 09:40:24 +0300 |
---|---|---|
committer | Nikita Kosenkov <NKosenkov@IBS.RU> | 2022-08-10 09:40:24 +0300 |
commit | 1a02992ce680c4c4b1e5b2c4fc0c842b4cad41e1 (patch) | |
tree | a2a2496b67ad3a401ec0f56e5f62a4442b737c9f /meta-ibs | |
parent | f89b83e3f68895e295718aaec5bf59dd126f8edf (diff) | |
download | openbmc-1a02992ce680c4c4b1e5b2c4fc0c842b4cad41e1.tar.xz |
meta-cp2-5422: Add patches for support Rikor BIOS
Diffstat (limited to 'meta-ibs')
6 files changed, 354 insertions, 0 deletions
diff --git a/meta-ibs/meta-cp2-5422/recipes-ibs/ipmi/intel-ipmi-oem/0001-Rikor-smbios-mdrv1-support.patch b/meta-ibs/meta-cp2-5422/recipes-ibs/ipmi/intel-ipmi-oem/0001-Rikor-smbios-mdrv1-support.patch new file mode 100644 index 0000000000..8c6bdb0aa8 --- /dev/null +++ b/meta-ibs/meta-cp2-5422/recipes-ibs/ipmi/intel-ipmi-oem/0001-Rikor-smbios-mdrv1-support.patch @@ -0,0 +1,222 @@ +diff --git a/src/smbioshandler.cpp b/src/smbioshandler.cpp +index e330e5a..632274f 100644 +--- a/src/smbioshandler.cpp ++++ b/src/smbioshandler.cpp +@@ -26,6 +26,7 @@ + #include <iostream> + #include <string> + #include <vector> ++#include <functional> + + using InternalFailure = + sdbusplus::xyz::openbmc_project::Common::Error::InternalFailure; +@@ -43,6 +44,8 @@ ipmi_ret_t cmd_region_status(ipmi_netfn_t netfn, ipmi_cmd_t cmd, + ipmi_request_t request, ipmi_response_t response, + ipmi_data_len_t data_len, ipmi_context_t context) + { ++ std::cout << __PRETTY_FUNCTION__ << std::endl; ++ + auto requestData = reinterpret_cast<const RegionStatusRequest*>(request); + std::vector<uint8_t> status; + +@@ -127,7 +130,7 @@ static int set_regionId(uint8_t regionId, std::string& service) + return 0; + } + +-ipmi_ret_t cmd_region_complete(ipmi_netfn_t netfn, ipmi_cmd_t cmd, ++ipmi_ret_t cmd_region_complete_base(ipmi_netfn_t netfn, ipmi_cmd_t cmd, + ipmi_request_t request, ipmi_response_t response, + ipmi_data_len_t data_len, ipmi_context_t context) + { +@@ -145,6 +148,10 @@ ipmi_ret_t cmd_region_complete(ipmi_netfn_t netfn, ipmi_cmd_t cmd, + uint8_t regionId = requestData->regionId - 1; + *data_len = 0; + ++ std::cout << __PRETTY_FUNCTION__ ++ << " session: " << static_cast<int>(requestData->sessionId) ++ << " regionId: " << static_cast<int>(requestData->regionId) << std::endl; ++ + if (regionId >= maxMDRId) + { + phosphor::logging::log<level::ERR>("Invalid region"); +@@ -170,15 +177,15 @@ ipmi_ret_t cmd_region_complete(ipmi_netfn_t netfn, ipmi_cmd_t cmd, + return IPMI_CC_PARAMETER_NOT_SUPPORT_IN_PRESENT_STATE; + } + +- if (0 > sdplus_mdrv1_get_property("SessionId", value, service)) +- { +- phosphor::logging::log<level::ERR>("Error getting sessionId"); +- return IPMI_CC_UNSPECIFIED_ERROR; +- } +- if (requestData->sessionId != std::get<uint8_t>(value)) +- { +- return IPMI_CC_OEM_SET_IN_PROCESS; +- } ++ // if (0 > sdplus_mdrv1_get_property("SessionId", value, service)) ++ // { ++ // phosphor::logging::log<level::ERR>("Error getting sessionId"); ++ // return IPMI_CC_UNSPECIFIED_ERROR; ++ // } ++ // if (requestData->sessionId != std::get<uint8_t>(value)) ++ // { ++ // return IPMI_CC_OEM_SET_IN_PROCESS; ++ // } + + auto method = bus->new_method_call(service.c_str(), MDRV1_PATH, + MDRV1_INTERFACE, "RegionComplete"); +@@ -204,10 +211,22 @@ ipmi_ret_t cmd_region_complete(ipmi_netfn_t netfn, ipmi_cmd_t cmd, + return IPMI_CC_OK; + } + ++ipmi_ret_t cmd_region_complete(ipmi_netfn_t netfn, ipmi_cmd_t cmd, ++ ipmi_request_t request, ipmi_response_t response, ++ ipmi_data_len_t data_len, ipmi_context_t context) ++{ ++ auto retval = cmd_region_complete_base(netfn, cmd, request, response, data_len, context); ++ std::cout << __FUNCTION__ << " retval: " << static_cast<int>(retval) << std::endl; ++ return retval; ++} ++ ++ + ipmi_ret_t cmd_region_read(ipmi_netfn_t netfn, ipmi_cmd_t cmd, + ipmi_request_t request, ipmi_response_t response, + ipmi_data_len_t data_len, ipmi_context_t context) + { ++ std::cout << __PRETTY_FUNCTION__ << std::endl; ++ + auto requestData = reinterpret_cast<const RegionReadRequest*>(request); + auto responseData = reinterpret_cast<RegionReadResponse*>(response); + std::variant<uint8_t, uint16_t> regUsedVal; +@@ -303,6 +322,8 @@ ipmi_ret_t cmd_region_write(ipmi_netfn_t netfn, ipmi_cmd_t cmd, + ipmi_request_t request, ipmi_response_t response, + ipmi_data_len_t data_len, ipmi_context_t context) + { ++ std::cout << __PRETTY_FUNCTION__ << std::endl; ++ + auto requestData = reinterpret_cast<const RegionWriteRequest*>(request); + uint8_t regionId = requestData->regionId - 1; + std::string res; +@@ -336,36 +357,60 @@ ipmi_ret_t cmd_region_write(ipmi_netfn_t netfn, ipmi_cmd_t cmd, + return IPMI_CC_UNSPECIFIED_ERROR; + } + +- if (0 > sdplus_mdrv1_get_property("LockPolicy", value, service)) +- { +- phosphor::logging::log<level::ERR>("Error getting lockPolicy"); +- return IPMI_CC_UNSPECIFIED_ERROR; +- } +- if (regionLockUnlocked == std::get<uint8_t>(value)) +- { +- return IPMI_CC_PARAMETER_NOT_SUPPORT_IN_PRESENT_STATE; +- } +- +- if (0 > sdplus_mdrv1_get_property("SessionId", value, service)) +- { +- phosphor::logging::log<level::ERR>("Error getting sessionId"); +- return IPMI_CC_UNSPECIFIED_ERROR; +- } +- if (requestData->sessionId != std::get<uint8_t>(value)) +- { +- return IPMI_CC_OEM_SET_IN_PROCESS; +- } +- +- std::copy(&(requestData->length), &(requestData->data[requestData->length]), +- tmp); ++ // if (0 > sdplus_mdrv1_get_property("LockPolicy", value, service)) ++ // { ++ // phosphor::logging::log<level::ERR>("Error getting lockPolicy"); ++ // return IPMI_CC_UNSPECIFIED_ERROR; ++ // } ++ // if (regionLockUnlocked == std::get<uint8_t>(value)) ++ // { ++ // std::cout << "shaj: regionLockUnlocked " << regionLockUnlocked << " " << std::get<uint8_t>(value) << std::endl; ++ // return IPMI_CC_PARAMETER_NOT_SUPPORT_IN_PRESENT_STATE; ++ // } ++ ++ // if (0 > sdplus_mdrv1_get_property("SessionId", value, service)) ++ // { ++ // phosphor::logging::log<level::ERR>("Error getting sessionId"); ++ // return IPMI_CC_UNSPECIFIED_ERROR; ++ // } ++ // if (requestData->sessionId != std::get<uint8_t>(value)) ++ // { ++ // std::cout << "shaj: requestData->sessionId " << static_cast<int>(requestData->sessionId) << std::endl; ++ // std::cout << "shaj: requestData (value) " << static_cast<int>(std::get<uint8_t>(value)) << std::endl; ++ // return IPMI_CC_OEM_SET_IN_PROCESS; ++ // } ++ ++ std::copy(&(requestData->length), &(requestData->data[requestData->length]), tmp); + writeData.push_back(regionId); + for (index = 0; index < minInputLen + requestData->length - 2; index++) + { + writeData.push_back(tmp[index]); + } + +- auto method = bus->new_method_call(service.c_str(), MDRV1_PATH, +- MDRV1_INTERFACE, "RegionWrite"); ++ // [Строка](https://github.com/openbmc/entity-manager/blob/e45d8c71bdbae39f14a638137da9dc03474536c1/include/utils.hpp#L112) ++ // std::hash<std::vector<uint8_t>> h_f; ++ // std::hash<std::string> h_f; ++ ++ size_t d_hash = 0; ++ std::for_each(writeData.cbegin()+3, writeData.cend(), [&d_hash](auto c){d_hash ^= std::hash<uint8_t>{}(c);}); ++ ++ std::cout << "shaj: HOST string hash: " << d_hash << std::endl; ++ ++ // std::cout << "shaj: mdrv1 write: " << service.c_str() << " " << MDRV1_PATH << " " << MDRV1_INTERFACE ++ // << " region Id " << static_cast<int>(regionId) << std::endl; ++ ++ // std::cout << std::hex; ++ // for(int ii=0; ii<3; ii++) ++ // { ++ // for(int jj=0; jj<16; jj++) ++ // { ++ // std::cout << std::setfill('0') << std::setw(2) << static_cast<int>(tmp[ii*16+jj]) << " "; ++ // } ++ // std::cout << std::endl; ++ // } ++ // std::cout << std::resetiosflags(std::ios_base::basefield); ++ ++ auto method = bus->new_method_call(service.c_str(), MDRV1_PATH, MDRV1_INTERFACE, "RegionWrite"); + + method.append(writeData); + +@@ -394,7 +439,7 @@ ipmi_ret_t cmd_region_write(ipmi_netfn_t netfn, ipmi_cmd_t cmd, + return IPMI_CC_OK; + } + +-ipmi_ret_t cmd_region_lock(ipmi_netfn_t netfn, ipmi_cmd_t cmd, ++ipmi_ret_t cmd_region_lock_base(ipmi_netfn_t netfn, ipmi_cmd_t cmd, + ipmi_request_t request, ipmi_response_t response, + ipmi_data_len_t data_len, ipmi_context_t context) + { +@@ -404,6 +449,10 @@ ipmi_ret_t cmd_region_lock(ipmi_netfn_t netfn, ipmi_cmd_t cmd, + auto res = reinterpret_cast<uint8_t*>(response); + uint8_t lockResponse; + ++ std::cout << __PRETTY_FUNCTION__ ++ << " session: " << static_cast<int>(requestData->sessionId) ++ << " regionId: " << static_cast<int>(requestData->regionId) << std::endl; ++ + if (*data_len != sizeof(RegionLockRequest)) + { + *data_len = 0; +@@ -476,6 +525,18 @@ ipmi_ret_t cmd_region_lock(ipmi_netfn_t netfn, ipmi_cmd_t cmd, + return IPMI_CC_OK; + } + ++ ++ipmi_ret_t cmd_region_lock(ipmi_netfn_t netfn, ipmi_cmd_t cmd, ++ ipmi_request_t request, ipmi_response_t response, ++ ipmi_data_len_t data_len, ipmi_context_t context) ++{ ++ auto retval = cmd_region_lock_base(netfn, cmd, request, response, data_len, context); ++ std::cout << __FUNCTION__ << " retval: " << static_cast<int>(retval) << std::endl; ++ std::cout << "shaj: sessionId: " << static_cast<int>(*(reinterpret_cast<uint8_t*>(response))) << std::endl; ++ return retval; ++} ++ ++ + static void register_netfn_smbios_functions(void) + { + #ifdef MDR_V1_SUPPORT diff --git a/meta-ibs/meta-cp2-5422/recipes-ibs/ipmi/intel-ipmi-oem_%.bbappend b/meta-ibs/meta-cp2-5422/recipes-ibs/ipmi/intel-ipmi-oem_%.bbappend new file mode 100644 index 0000000000..2d34265bc3 --- /dev/null +++ b/meta-ibs/meta-cp2-5422/recipes-ibs/ipmi/intel-ipmi-oem_%.bbappend @@ -0,0 +1,5 @@ +FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:" + +SRC_URI += "\ + file://0001-Rikor-smbios-mdrv1-support.patch \ + "
\ No newline at end of file diff --git a/meta-ibs/meta-cp2-5422/recipes-ibs/smbios/smbios-mdrv1.bb b/meta-ibs/meta-cp2-5422/recipes-ibs/smbios/smbios-mdrv1.bb new file mode 100644 index 0000000000..4469aec399 --- /dev/null +++ b/meta-ibs/meta-cp2-5422/recipes-ibs/smbios/smbios-mdrv1.bb @@ -0,0 +1,39 @@ +SUMMARY = "SMBIOS MDR version 1 service for Intel based platform" +DESCRIPTION = "SMBIOS MDR version 1 service for Intel based platfrom" + +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://LICENSE;md5=e3fc50a88d0a364313df4b21ef20c29e" + + +SRC_URI = "git://git.sila.ru/openbmc/smbios-mdrv1.git;protocol=http;branch=master" +SRC_URI += "file://smbios-mdrv1.service \ + file://0001-Add-support-Rikor-BIOS.patch \ + " + +# Modify these as desired +PV = "1.0+git${SRCPV}" +SRCREV = "6b4dc67a97ce5ea431749ae3cc3501f13a0ef3ea" + +S = "${WORKDIR}/git" + +inherit cmake pkgconfig +inherit obmc-phosphor-systemd +inherit python3native + +DEPENDS += " \ + autoconf-archive-native \ + boost \ + systemd \ + sdbusplus \ + python3-sdbus++ \ + phosphor-dbus-interfaces \ + phosphor-logging \ + libpeci \ + i2c-tools \ + nlohmann-json \ + " +DEPENDS += "${PYTHON_PN}-sdbus++-native" + +SYSTEMD_SERVICE:${PN} += "smbios-mdrv1.service" + +EXTRA_OECMAKE="-DYOCTO=1"
\ No newline at end of file diff --git a/meta-ibs/meta-cp2-5422/recipes-ibs/smbios/smbios-mdrv1/0001-Add-support-Rikor-BIOS.patch b/meta-ibs/meta-cp2-5422/recipes-ibs/smbios/smbios-mdrv1/0001-Add-support-Rikor-BIOS.patch new file mode 100644 index 0000000000..564dddce38 --- /dev/null +++ b/meta-ibs/meta-cp2-5422/recipes-ibs/smbios/smbios-mdrv1/0001-Add-support-Rikor-BIOS.patch @@ -0,0 +1,72 @@ +From 3dce1051f31c53541a0e9e3f2e30528d912e23dc Mon Sep 17 00:00:00 2001 +From: Nikita Kosenkov <NKosenkov@IBS.RU> +Date: Tue, 9 Aug 2022 15:25:55 +0300 +Subject: [PATCH] Add support Rikor BIOS + +--- + include/smbios.hpp | 1 + + src/smbios-main.cpp | 13 +++++-------- + 2 files changed, 6 insertions(+), 8 deletions(-) + +diff --git a/include/smbios.hpp b/include/smbios.hpp +index a36ff34..6356e85 100644 +--- a/include/smbios.hpp ++++ b/include/smbios.hpp +@@ -64,6 +64,7 @@ struct MDRState + uint8_t lockPolicy; + uint16_t regionLength; + uint16_t regionUsed; ++ uint16_t regionOffset; + uint8_t crc8; + } __attribute__((packed)); + +diff --git a/src/smbios-main.cpp b/src/smbios-main.cpp +index eed4cc9..c97a041 100644 +--- a/src/smbios-main.cpp ++++ b/src/smbios-main.cpp +@@ -33,37 +33,34 @@ struct ManagedDataRegion regionS[] = { + {mdrType1File, + mdrSmBiosData, + 0, +- {mdrVersion, mdrSmbios, false, 0, regionLockUnlocked, mdrSmbiosSize, 0, 0}, ++ {mdrVersion, mdrSmbios, false, 0, regionLockUnlocked, mdrSmbiosSize, 0, 0, 0}, + 0}, + + // ACPI tables - matching the regionID order + {mdrAcpiFile, + mdrAcpiTable, + 0, +- {mdrVersion, mdrAcpi, false, 0, regionLockUnlocked, 0, mdrAcpiTableSize, +- 0}, ++ {mdrVersion, mdrAcpi, false, 0, regionLockUnlocked, 0, mdrAcpiTableSize, 0, 0}, + 0}, + + // Memory Mapping table - matching the regionID order + {mdrMemMapFile, + mdrMemoryMapping, + 0, +- {mdrVersion, mdrMemMap, false, 0, regionLockUnlocked, mdrMemMappingSize, 0, +- 0}, ++ {mdrVersion, mdrMemMap, false, 0, regionLockUnlocked, mdrMemMappingSize, 0, 0, 0}, + 0}, + + {mdrScsiBootFile, + mdrSCSIBoot, + 0, +- {mdrVersion, mdrScsiBoot, false, 0, regionLockUnlocked, mdrScsiBootSize, 0, +- 0}, ++ {mdrVersion, mdrScsiBoot, false, 0, regionLockUnlocked, mdrScsiBootSize, 0, 0, 0}, + 0}, + + // NVMe table - matching the regionID order + {mdrNvmeFile, + mdrNvmeData, + 0, +- {mdrVersion, mdrNvme, false, 0, regionLockUnlocked, mdrNvmeSize, 0, 0}, ++ {mdrVersion, mdrNvme, false, 0, regionLockUnlocked, mdrNvmeSize, 0, 0, 0}, + 0}, + }; + +-- +2.35.1 + diff --git a/meta-ibs/meta-cp2-5422/recipes-ibs/smbios/smbios-mdrv1/smbios-mdrv1.service b/meta-ibs/meta-cp2-5422/recipes-ibs/smbios/smbios-mdrv1/smbios-mdrv1.service new file mode 100644 index 0000000000..edfd3bf70a --- /dev/null +++ b/meta-ibs/meta-cp2-5422/recipes-ibs/smbios/smbios-mdrv1/smbios-mdrv1.service @@ -0,0 +1,13 @@ +[Unit] +Description=Intel BMC SMBIOS MDR V1 + +[Service] +Restart=always +RestartSec=5 +StartLimitBurst=10 +ExecStartPre=/bin/mkdir -p /etc/smbios +ExecStart=/usr/bin/env smbiosapp +SyslogIdentifier=smbiosapp + +[Install] +WantedBy={SYSTEMD_DEFAULT_TARGET} diff --git a/meta-ibs/meta-cp2-5422/recipes-phosphor/images/obmc-phosphor-image.bbappend b/meta-ibs/meta-cp2-5422/recipes-phosphor/images/obmc-phosphor-image.bbappend new file mode 100644 index 0000000000..a32807da98 --- /dev/null +++ b/meta-ibs/meta-cp2-5422/recipes-phosphor/images/obmc-phosphor-image.bbappend @@ -0,0 +1,3 @@ + +IMAGE_INSTALL += " smbios-mdrv1 \ + "
\ No newline at end of file |