Enable MemoryLocation properties to be customized
-Enable MemoryLocation properties to be customized by a json table.
Example of memoryLocationTable.json:
{
"<MemoryDeviceLocator>": {
"MemoryController": 1,
"Socket":48,
"Slot":0,
"Channel":0
}
}
-Add attribute "memoryController", "slot", "channel", "socket" in
MemoryLocation.
Tested:
memoryLocationTable.json:
{
"DIMM4": {
"MemoryController": 1,
"Socket":48,
"Slot":0,
"Channel":0
}
}
with the change:
curl -k -X GET http://${bmc}/redfish/v1/Systems/system/Memory/dimm1
{
"@odata.id": "/redfish/v1/Systems/system/Memory/dimm1",
"@odata.type": "#Memory.v1_11_0.Memory",
"AllowedSpeedsMHz": [],
"BaseModuleType": "RDIMM",
"BusWidthBits": 80,
"CapacityMiB": 49152,
"DataWidthBits": 64,
"ErrorCorrection": "SingleBitECC",
"FirmwareRevision": "0",
"Id": "dimm1",
"Location": {
"PartLocation": {
"LocationType": "Slot",
"ServiceLabel": "DIMM4"
}
},
"Manufacturer": "",
"MemoryDeviceType": "DDR5",
"MemoryLocation": {
"Channel": 0,
"MemoryController": 1,
"Slot": 0,
"Socket": 48
}
without the change:
curl -k -X GET http://${bmc}/redfish/v1/Systems/system/Memory/dimm1
{
"@odata.id": "/redfish/v1/Systems/system/Memory/dimm1",
"@odata.type": "#Memory.v1_11_0.Memory",
"AllowedSpeedsMHz": [],
"BaseModuleType": "RDIMM",
"BusWidthBits": 80,
"CapacityMiB": 49152,
"DataWidthBits": 64,
"ErrorCorrection": "SingleBitECC",
"FirmwareRevision": "0",
"Id": "dimm1",
"Location": {
"PartLocation": {
"LocationType": "Slot",
"ServiceLabel": "DIMM4"
}
},
"Manufacturer": "",
"MemoryDeviceType": "DDR5",
"MemoryLocation": {
"Channel": 0,
"MemoryController": 0,
"Slot": 0,
"Socket": 0
}
Change-Id: Ic5ff09715a619907f06d06af33aa0d1755c8b4f3
Signed-off-by: Tony Lee <tony.lee@quantatw.com>
diff --git a/include/dimm.hpp b/include/dimm.hpp
index a3a48be..e848f42 100644
--- a/include/dimm.hpp
+++ b/include/dimm.hpp
@@ -17,6 +17,7 @@
#pragma once
#include "smbios_mdrv2.hpp"
+#include <nlohmann/json.hpp>
#include <xyz/openbmc_project/Association/Definitions/server.hpp>
#include <xyz/openbmc_project/Inventory/Connector/Slot/server.hpp>
#include <xyz/openbmc_project/Inventory/Decorator/Asset/server.hpp>
@@ -41,6 +42,8 @@
using MemoryTechType =
sdbusplus::server::xyz::openbmc_project::inventory::item::Dimm::MemoryTech;
+using Json = nlohmann::json;
+
class Dimm :
sdbusplus::server::object_t<
sdbusplus::server::xyz::openbmc_project::inventory::item::Dimm>,
@@ -119,9 +122,12 @@
MemoryTechType memoryMedia(MemoryTechType value) override;
uint8_t slot(uint8_t value) override;
uint8_t socket(uint8_t value) override;
+ uint8_t memoryController(uint8_t value) override;
+ uint8_t channel(uint8_t value) override;
uint16_t memoryConfiguredSpeedInMhz(uint16_t value) override;
bool functional(bool value) override;
EccType ecc(EccType value) override;
+ Json parseConfigFile();
private:
uint8_t dimmNum;
@@ -250,6 +256,14 @@
{0x5, MemoryTechType::NVDIMM_F}, {0x6, MemoryTechType::NVDIMM_P},
{0x7, MemoryTechType::IntelOptane}};
+struct memoryLocation
+{
+ uint8_t memoryController;
+ uint8_t socket;
+ uint8_t slot;
+ uint8_t channel;
+};
+
} // namespace smbios
} // namespace phosphor