Update FormFactor property on DIMM interface
The patch adds the `FormFactor` property on DIMM interface.
BMC parses the SMBIOS Type 17 records and assigns the DIMM
FormFactor.
Tested:
[1] busctl get-property xyz.openbmc_project.Smbios.MDR_V2 xyz/openbmc_project/inventory/system/chassis/motherboard/dimm1 xyz.openbmc_project.Inventory.Item.Dimm FormFactor s "xyz.openbmc_project.Inventory.Item.Dimm.FormFactor.Die"
Change-Id: I14b7f0ea0a51e58306c117fcde1b268da798cd36
Signed-off-by: Prithvi Pai <ppai@nvidia.com>
diff --git a/include/dimm.hpp b/include/dimm.hpp
index e848f42..851ef82 100644
--- a/include/dimm.hpp
+++ b/include/dimm.hpp
@@ -42,6 +42,9 @@
using MemoryTechType =
sdbusplus::server::xyz::openbmc_project::inventory::item::Dimm::MemoryTech;
+using FormFactor =
+ sdbusplus::server::xyz::openbmc_project::inventory::item::Dimm::FormFactor;
+
using Json = nlohmann::json;
class Dimm :
@@ -127,6 +130,7 @@
uint16_t memoryConfiguredSpeedInMhz(uint16_t value) override;
bool functional(bool value) override;
EccType ecc(EccType value) override;
+ FormFactor formFactor(FormFactor value) override;
Json parseConfigFile();
private:
@@ -151,6 +155,7 @@
void dimmPartNum(const uint8_t positionNum, const uint8_t structLen,
uint8_t* dataIn);
void updateEccType(uint16_t exPhyArrayHandle);
+ void updateFormFactor(const uint8_t formFactorKey);
};
struct MemoryInfo
@@ -264,6 +269,9 @@
uint8_t channel;
};
+const std::map<uint8_t, FormFactor> dimmFormFactorMap = {
+ {0x10, FormFactor::Die}};
+
} // namespace smbios
} // namespace phosphor
diff --git a/src/dimm.cpp b/src/dimm.cpp
index ce63f4f..f6228c9 100644
--- a/src/dimm.cpp
+++ b/src/dimm.cpp
@@ -99,6 +99,7 @@
dimmType(memoryInfo->memoryType);
dimmTypeDetail(memoryInfo->typeDetail);
maxMemorySpeedInMhz(memoryInfo->speed);
+ updateFormFactor(memoryInfo->formFactor);
dimmManufacturer(memoryInfo->manufacturer, memoryInfo->length, dataIn);
dimmSerialNum(memoryInfo->serialNum, memoryInfo->length, dataIn);
dimmPartNum(memoryInfo->partNum, memoryInfo->length, dataIn);
@@ -465,6 +466,22 @@
OperationalStatus::functional(value);
}
+void Dimm::updateFormFactor(const uint8_t formFactorKey)
+{
+ std::map<uint8_t, FormFactor>::const_iterator it =
+ dimmFormFactorMap.find(formFactorKey);
+ if (it != dimmFormFactorMap.end())
+ {
+ formFactor(it->second);
+ }
+}
+
+FormFactor Dimm::formFactor(FormFactor value)
+{
+ return sdbusplus::server::xyz::openbmc_project::inventory::item::Dimm::
+ formFactor(value);
+}
+
Json Dimm::parseConfigFile()
{
std::ifstream memoryLocationFile(filename);