From f85cc5f7eb73b6eeb3d123dfaba569c90d703463 Mon Sep 17 00:00:00 2001 From: Cheng C Yang Date: Tue, 15 Oct 2019 23:33:23 +0800 Subject: 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 --- services/smbios-mdrv2/include/cpu.hpp | 29 ++++++++++++++-- services/smbios-mdrv2/src/cpu.cpp | 44 ++++++++++++++++++++++--- services/smbios-mdrv2/src/smbios_mdrv2_main.cpp | 3 +- services/smbios-mdrv2/src/system.cpp | 1 + 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 #include +#include +#include namespace phosphor { @@ -86,8 +89,16 @@ static const std::array 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 #include 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(systemInfo->uUID.clockSeqHi); stream << std::setw(2) << static_cast(systemInfo->uUID.clockSeqLow); -- cgit v1.2.3