summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikita Kosenkov <NKosenkov@IBS.RU>2022-08-10 09:40:24 +0300
committerNikita Kosenkov <NKosenkov@IBS.RU>2022-08-10 09:40:24 +0300
commit1a02992ce680c4c4b1e5b2c4fc0c842b4cad41e1 (patch)
treea2a2496b67ad3a401ec0f56e5f62a4442b737c9f
parentf89b83e3f68895e295718aaec5bf59dd126f8edf (diff)
downloadopenbmc-1a02992ce680c4c4b1e5b2c4fc0c842b4cad41e1.tar.xz
meta-cp2-5422: Add patches for support Rikor BIOS
-rw-r--r--meta-ibs/meta-cp2-5422/recipes-ibs/ipmi/intel-ipmi-oem/0001-Rikor-smbios-mdrv1-support.patch222
-rw-r--r--meta-ibs/meta-cp2-5422/recipes-ibs/ipmi/intel-ipmi-oem_%.bbappend5
-rw-r--r--meta-ibs/meta-cp2-5422/recipes-ibs/smbios/smbios-mdrv1.bb39
-rw-r--r--meta-ibs/meta-cp2-5422/recipes-ibs/smbios/smbios-mdrv1/0001-Add-support-Rikor-BIOS.patch72
-rw-r--r--meta-ibs/meta-cp2-5422/recipes-ibs/smbios/smbios-mdrv1/smbios-mdrv1.service13
-rw-r--r--meta-ibs/meta-cp2-5422/recipes-phosphor/images/obmc-phosphor-image.bbappend3
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