diff options
author | Cheng C Yang <cheng.c.yang@intel.com> | 2019-10-15 18:33:23 +0300 |
---|---|---|
committer | Yang, Cheng C <cheng.c.yang@intel.com> | 2019-10-16 03:59:55 +0300 |
commit | f85cc5f7eb73b6eeb3d123dfaba569c90d703463 (patch) | |
tree | e4aa71a80b0769ce81391b4b4c76f60ad3ff6856 /services | |
parent | 8d6091005613f25d145453ddc9845b31a6e06033 (diff) | |
download | provingground-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>
Diffstat (limited to 'services')
-rw-r--r-- | services/smbios-mdrv2/include/cpu.hpp | 29 | ||||
-rw-r--r-- | services/smbios-mdrv2/src/cpu.cpp | 44 | ||||
-rw-r--r-- | services/smbios-mdrv2/src/smbios_mdrv2_main.cpp | 3 | ||||
-rw-r--r-- | 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 <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); |