summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCheng C Yang <cheng.c.yang@intel.com>2019-10-15 18:33:23 +0300
committerYang, Cheng C <cheng.c.yang@intel.com>2019-10-16 03:59:55 +0300
commitf85cc5f7eb73b6eeb3d123dfaba569c90d703463 (patch)
treee4aa71a80b0769ce81391b4b4c76f60ad3ff6856
parent8d6091005613f25d145453ddc9845b31a6e06033 (diff)
downloadprovingground-f85cc5f7eb73b6eeb3d123dfaba569c90d703463.tar.xz
Fix Redfish Validator Issues
D-Bus properties of CPU and UUID is incorrect which will make Redfish Service Validator reprot error. Tested: Run Redfish Service Validator, the result should be "Validation has succeeded." Change-Id: I03abb199c2f2c2b86715b599c9ffbfcf3a31e73f Signed-off-by: Cheng C Yang <cheng.c.yang@intel.com>
-rw-r--r--services/smbios-mdrv2/include/cpu.hpp29
-rw-r--r--services/smbios-mdrv2/src/cpu.cpp44
-rw-r--r--services/smbios-mdrv2/src/smbios_mdrv2_main.cpp3
-rw-r--r--services/smbios-mdrv2/src/system.cpp1
4 files changed, 69 insertions, 8 deletions
diff --git a/services/smbios-mdrv2/include/cpu.hpp b/services/smbios-mdrv2/include/cpu.hpp
index 9effb21..78c4c9c 100644
--- a/services/smbios-mdrv2/include/cpu.hpp
+++ b/services/smbios-mdrv2/include/cpu.hpp
@@ -17,7 +17,10 @@
#pragma once
#include "smbios_mdrv2.hpp"
+#include <xyz/openbmc_project/Inventory/Decorator/Asset/server.hpp>
#include <xyz/openbmc_project/Inventory/Item/Cpu/server.hpp>
+#include <xyz/openbmc_project/Inventory/Item/server.hpp>
+#include <xyz/openbmc_project/State/Decorator/OperationalStatus/server.hpp>
namespace phosphor
{
@@ -86,8 +89,16 @@ static const std::array<std::string, 16> characteristicsTable{
"Reserved",
"Reserved"};
-class Cpu : sdbusplus::server::object::object<
- sdbusplus::xyz::openbmc_project::Inventory::Item::server::Cpu>
+class Cpu
+ : sdbusplus::server::object::object<
+ sdbusplus::xyz::openbmc_project::Inventory::Item::server::Cpu>,
+ sdbusplus::server::object::object<
+ sdbusplus::xyz::openbmc_project::Inventory::server::Item>,
+ sdbusplus::server::object::object<
+ sdbusplus::xyz::openbmc_project::Inventory::Decorator::server::Asset>,
+ sdbusplus::server::object::object<
+ sdbusplus::xyz::openbmc_project::State::Decorator::server::
+ OperationalStatus>
{
public:
Cpu() = delete;
@@ -102,6 +113,15 @@ class Cpu : sdbusplus::server::object::object<
sdbusplus::server::object::object<
sdbusplus::xyz::openbmc_project::Inventory::Item::server::Cpu>(
bus, objPath.c_str()),
+ sdbusplus::server::object::object<
+ sdbusplus::xyz::openbmc_project::Inventory::Decorator::server::
+ Asset>(bus, objPath.c_str()),
+ sdbusplus::server::object::object<
+ sdbusplus::xyz::openbmc_project::Inventory::server::Item>(
+ bus, objPath.c_str()),
+ sdbusplus::server::object::object<
+ sdbusplus::xyz::openbmc_project::State::Decorator::server::
+ OperationalStatus>(bus, objPath.c_str()),
cpuNum(cpuId), storage(smbiosTableStorage)
{
processorInfoUpdate();
@@ -112,13 +132,15 @@ class Cpu : sdbusplus::server::object::object<
std::string processorSocket(std::string value) override;
std::string processorType(std::string value) override;
std::string processorFamily(std::string value) override;
- std::string processorManufacturer(std::string value) override;
+ std::string manufacturer(std::string value) override;
uint32_t processorId(uint32_t value) override;
std::string processorVersion(std::string value) override;
uint16_t processorMaxSpeed(uint16_t value) override;
std::string processorCharacteristics(std::string value) override;
uint16_t processorCoreCount(uint16_t value) override;
uint16_t processorThreadCount(uint16_t value) override;
+ bool present(bool value) override;
+ bool functional(bool value) override;
private:
uint8_t cpuNum;
@@ -167,6 +189,7 @@ class Cpu : sdbusplus::server::object::object<
void cpuVersion(const uint8_t positionNum, const uint8_t structLen,
uint8_t *dataIn);
void cpuCharacteristics(const uint16_t value);
+ void cpuStatus(const uint8_t value);
};
} // namespace smbios
diff --git a/services/smbios-mdrv2/src/cpu.cpp b/services/smbios-mdrv2/src/cpu.cpp
index cda96da..f7681c9 100644
--- a/services/smbios-mdrv2/src/cpu.cpp
+++ b/services/smbios-mdrv2/src/cpu.cpp
@@ -16,6 +16,7 @@
#include "cpu.hpp"
+#include <iostream>
#include <map>
namespace phosphor
@@ -82,13 +83,13 @@ void Cpu::cpuManufacturer(const uint8_t positionNum, const uint8_t structLen,
{
std::string result = positionToString(positionNum, structLen, dataIn);
- processorManufacturer(result);
+ manufacturer(result);
}
-std::string Cpu::processorManufacturer(std::string value)
+std::string Cpu::manufacturer(std::string value)
{
- return sdbusplus::xyz::openbmc_project::Inventory::Item::server::Cpu::
- processorManufacturer(value);
+ return sdbusplus::xyz::openbmc_project::Inventory::Decorator::server::
+ Asset::manufacturer(value);
}
uint32_t Cpu::processorId(uint32_t value)
@@ -152,6 +153,39 @@ uint16_t Cpu::processorThreadCount(uint16_t value)
processorThreadCount(value);
}
+static constexpr const uint8_t populateMask = 1 << 6;
+static constexpr const uint8_t statusMask = 0x07;
+void Cpu::cpuStatus(uint8_t value)
+{
+ if (!(value & populateMask))
+ {
+ present(false);
+ functional(false);
+ return;
+ }
+ present(true);
+ if ((value & statusMask) == 1)
+ {
+ functional(true);
+ }
+ else
+ {
+ functional(false);
+ }
+}
+
+bool Cpu::present(bool value)
+{
+ return sdbusplus::xyz::openbmc_project::Inventory::server::Item::present(
+ value);
+}
+
+bool Cpu::functional(bool value)
+{
+ return sdbusplus::xyz::openbmc_project::State::Decorator::server::
+ OperationalStatus::functional(value);
+}
+
static constexpr uint8_t maxOldVersionCount = 0xff;
void Cpu::processorInfoUpdate(void)
{
@@ -207,6 +241,8 @@ void Cpu::processorInfoUpdate(void)
}
cpuCharacteristics(cpuInfo->characteristics); // offset 26h
+
+ cpuStatus(cpuInfo->status);
}
} // namespace smbios
diff --git a/services/smbios-mdrv2/src/smbios_mdrv2_main.cpp b/services/smbios-mdrv2/src/smbios_mdrv2_main.cpp
index 7e205ee..5688dfc 100644
--- a/services/smbios-mdrv2/src/smbios_mdrv2_main.cpp
+++ b/services/smbios-mdrv2/src/smbios_mdrv2_main.cpp
@@ -26,7 +26,8 @@ int main(void)
sd_event *events = nullptr;
sd_event_default(&events);
sdbusplus::bus::bus bus = sdbusplus::bus::new_default();
- sdbusplus::server::manager::manager objManager(bus, "/xyz/openbmc_project");
+ sdbusplus::server::manager::manager objManager(
+ bus, "/xyz/openbmc_project/inventory");
bus.attach_event(events, SD_EVENT_PRIORITY_NORMAL);
bus.request_name("xyz.openbmc_project.Smbios.MDR_V2");
diff --git a/services/smbios-mdrv2/src/system.cpp b/services/smbios-mdrv2/src/system.cpp
index 23f6f68..8cdcbe3 100644
--- a/services/smbios-mdrv2/src/system.cpp
+++ b/services/smbios-mdrv2/src/system.cpp
@@ -40,6 +40,7 @@ std::string System::uUID(std::string value)
stream << std::setw(4) << systemInfo->uUID.timeMid;
stream << "-";
stream << std::setw(4) << systemInfo->uUID.timeHiAndVer;
+ stream << "-";
stream << std::setw(2) << static_cast<int>(systemInfo->uUID.clockSeqHi);
stream << std::setw(2)
<< static_cast<int>(systemInfo->uUID.clockSeqLow);