cpld: lattice: to align with new EM Type scheme
Update CPLD Lattice code updater to align with new EM Type scheme
https://gerrit.openbmc.org/c/openbmc/entity-manager/+/81063
Tested on Harma MB cpld:
1. Check CPLD version
root@bmc:~# curl -u root:0penBmc -k -X GET
https://.../Harma_MB_CPLD_6845
{
"@odata.id": "/.../Harma_MB_CPLD_6845",
"@odata.type": "#SoftwareInventory.v1_1_0.SoftwareInventory",
"Description": "Unknown image",
"Id": "Harma_MB_CPLD_6845",
"Name": "Software Inventory",
"Status": {
"Health": "Warning",
"HealthRollup": "OK",
"State": "Disabled"
},
"Updateable": true,
"Version": "00000220"
}
2. Trigger update firmware
curl -k -H "X-Auth-Token: $token"
-H "Content-Type:multipart/form-data"
-X POST -F UpdateParameters="{
\"Targets\":[
\"/redfish/v1/UpdateService/FirmwareInventory/Harma_MB_CPLD_6845\"],
\"@Redfish.OperationApplyTime\":\"Immediate\"};type=application/json"
-F "UpdateFile=@mb_cpld_v224.pldm;type=application/octet-stream"
https://${bmc}/redfish/v1/UpdateService/update
{
"@odata.id": "/redfish/v1/TaskService/Tasks/0",
"@odata.type": "#Task.v1_4_3.Task",
"Id": "0",
"TaskState": "Running",
"TaskStatus": "OK"
}
root@bmc:~# curl -u root:0penBmc -k -X GET
https://localhost/redfish/v1/TaskService/Tasks/0
{
"@odata.id": "/redfish/v1/TaskService/Tasks/0",
"@odata.type": "#Task.v1_4_3.Task",
"EndTime": "2025-06-13T06:19:25+00:00",
"HidePayload": false,
"Id": "0",
"Messages": [
{
"@odata.type": "#Message.v1_1_1.Message",
"Message": "The task with Id '0' has started.",
"MessageArgs": [
"0"
],
"MessageId": "TaskEvent.1.0.TaskStarted",
"MessageSeverity": "OK",
"Resolution": "None."
},
{
"@odata.type": "#Message.v1_1_1.Message",
"Message":
"The task with Id '0' has changed to progress 10 percent complete.",
"MessageArgs": [
"0",
"10"
],
"MessageId": "TaskEvent.1.0.TaskProgressChanged",
"MessageSeverity": "OK",
"Resolution": "None."
},
...
{
"@odata.type": "#Message.v1_1_1.Message",
"Message":
"The task with Id '0' has changed to progress 90 percent complete.",
"MessageArgs": [
"0",
"90"
],
"MessageId": "TaskEvent.1.0.TaskProgressChanged",
"MessageSeverity": "OK",
"Resolution": "None."
},
{
"@odata.type": "#Message.v1_1_1.Message",
"Message":
"The task with Id '0' has changed to progress 100 percent complete.",
"MessageArgs": [
"0",
"100"
],
"MessageId": "TaskEvent.1.0.TaskProgressChanged",
"MessageSeverity": "OK",
"Resolution": "None."
},
{
"@odata.type": "#Message.v1_1_1.Message",
"Message": "The task with Id '0' has completed.",
"MessageArgs": [
"0"
],
"MessageId": "TaskEvent.1.0.TaskCompletedOK",
"MessageSeverity": "OK",
"Resolution": "None."
}
],
"Name": "Task 0",
"Payload": {
"HttpHeaders": [],
"HttpOperation": "POST",
"JsonBody": "null",
"TargetUri": "/redfish/v1/UpdateService/update"
},
"PercentComplete": 100,
"StartTime": "2025-06-13T06:19:13+00:00",
"TaskMonitor": "/redfish/v1/TaskService/TaskMonitors/0",
"TaskState": "Completed",
"TaskStatus": "OK"
}
3. Check version again after ac cycle
root@bmc:~# curl -u root:0penBmc -k -X GET
https://localhost/.../Harma_MB_CPLD_2181
{
"@odata.id": "/.../Harma_MB_CPLD_2181",
"@odata.type": "#SoftwareInventory.v1_1_0.SoftwareInventory",
"Description": "Unknown image",
"Id": "Harma_MB_CPLD_2181",
"Name": "Software Inventory",
"Status": {
"Health": "Warning",
"HealthRollup": "OK",
"State": "Disabled"
},
"Updateable": true,
"Version": "00000224"
}
Change-Id: I33b6f211a375a47a2139164347e697a2d0aba419
Signed-off-by: Daniel Hsu <Daniel-Hsu@quantatw.com>
diff --git a/cpld/lattice/lattice.cpp b/cpld/lattice/lattice.cpp
index 48e2479..87ae2f0 100644
--- a/cpld/lattice/lattice.cpp
+++ b/cpld/lattice/lattice.cpp
@@ -49,14 +49,6 @@
return b;
}
-const std::map<std::string, std::vector<uint8_t>> xo2xo3DeviceIdMap = {
- {"LCMXO3LF-4300C", {0x61, 0x2b, 0xc0, 0x43}},
- {"LCMXO3LF-4300", {0x61, 0x2b, 0xc0, 0x43}},
- {"LCMXO3LF-6900", {0x61, 0x2b, 0xd0, 0x43}},
- {"LCMXO3D-4300", {0x01, 0x2e, 0x20, 0x43}},
- {"LCMXO3D-9400", {0x21, 0x2e, 0x30, 0x43}},
-};
-
static int findNumberSize(const std::string& end, const std::string& start,
const std::string& line)
{
@@ -150,7 +142,7 @@
}
else
{
- lg2::debug("STOP UPDATEING: The image not match with chip.");
+ lg2::debug("Abort update as image doesn't match the chip name");
return false;
}
}
@@ -351,10 +343,14 @@
co_return false;
}
- auto chipWantToUpdate = xo2xo3DeviceIdMap.find(chip);
+ auto chipWantToUpdate =
+ std::find_if(supportedDeviceMap.begin(), supportedDeviceMap.end(),
+ [this](const auto& pair) {
+ return pair.second.chipName == this->chip;
+ });
- if (chipWantToUpdate != xo2xo3DeviceIdMap.end() &&
- chipWantToUpdate->second == readData)
+ if (chipWantToUpdate != supportedDeviceMap.end() &&
+ chipWantToUpdate->second.deviceId == readData)
{
if (chip.rfind("LCMXO3D", 0) == 0)
{
@@ -371,12 +367,7 @@
co_return true;
}
- lg2::error(
- "The device id not match with chip. Only the following chip names are supported: ");
- for (const auto& chip : xo2xo3DeviceIdMap)
- {
- lg2::error(chip.first.c_str());
- }
+ lg2::error("The device id doesn't match with chip.");
co_return false;
}
@@ -828,12 +819,7 @@
sdbusplus::async::task<bool> CpldLatticeManager::updateFirmware(
std::function<bool(int)> progressCallBack)
{
- if (xo2xo3DeviceIdMap.find(chip) != xo2xo3DeviceIdMap.end())
- {
- co_return co_await XO2XO3FamilyUpdate(progressCallBack);
- }
- lg2::error("Unsupported chip type: {CHIP}", "CHIP", chip);
- co_return false;
+ co_return co_await XO2XO3FamilyUpdate(progressCallBack);
}
sdbusplus::async::task<bool> CpldLatticeManager::getVersion(