configurations: minerva: add cpld firmware update config

Add CPLD firmware's configurations use in the Minerva CMM.

```
phosphor-dbus-interfaces lore link:
82512: com.meta: add compatible device strings for Minerva https://gerrit.openbmc.org/c/openbmc/phosphor-dbus-interfaces/+/82512
```

Tested on Minerva:
````
1. Check inventory
root@bmc:~# curl -u root:0penBmc -k -X GET https://localhost/redfish/v1/UpdateService/FirmwareInventory
{
  "@odata.id": "/redfish/v1/UpdateService/FirmwareInventory",
  "@odata.type": "#SoftwareInventoryCollection.SoftwareInventoryCollection",
  "Members": [
    {
      "@odata.id": "/redfish/v1/UpdateService/FirmwareInventory/Minerva_CMM_CPLD_5976"
    },
    {
      "@odata.id": "/redfish/v1/UpdateService/FirmwareInventory/Minerva_SCM_CPLD_6700"
    }
  ],
  "Members@odata.count": 14,
  "Name": "Software Inventory Collection"
}

2. Check firmware information
root@bmc:~# curl -u root:0penBmc -k -X GET https://localhost/redfish/v1/UpdateService/FirmwareInventory/Minerva_CMM_CPLD_5976
{
  "@odata.id": "/redfish/v1/UpdateService/FirmwareInventory/Minerva_CMM_CPLD_5976",
  "@odata.type": "#SoftwareInventory.v1_1_0.SoftwareInventory",
  "Description": "Unknown image",
  "Id": "Minerva_CMM_CPLD_5976",
  "Name": "Software Inventory",
  "Status": {
    "Health": "OK",
    "HealthRollup": "OK",
    "State": "Enabled"
  },
  "Updateable": true,
  "Version": "00000047"
}
root@bmc:~# curl -u root:0penBmc -k -X GET https://localhost/redfish/v1/UpdateService/FirmwareInventory/Minerva_SCM_CPLD_6700
{
  "@odata.id": "/redfish/v1/UpdateService/FirmwareInventory/Minerva_SCM_CPLD_6700",
  "@odata.type": "#SoftwareInventory.v1_1_0.SoftwareInventory",
  "Description": "Unknown image",
  "Id": "Minerva_SCM_CPLD_6700",
  "Name": "Software Inventory",
  "Status": {
    "Health": "OK",
    "HealthRollup": "OK",
    "State": "Enabled"
  },
  "Updateable": true,
  "Version": "00010006"
}

3. Trigger update
curl -k -u root:0penBmc \
  -H "Content-Type:multipart/form-data" \
  -X POST \
  -F UpdateParameters="{\"Targets\":[\"${targetpath}\"],\"@Redfish.OperationApplyTime\":\"Immediate\"};type=application/json" \
  -F "UpdateFile=@${fwpath};type=application/octet-stream" \
  https://${bmc}/redfish/v1/UpdateService/update-multipart
{
  "@odata.id": "/redfish/v1/TaskService/Tasks/0",
  "@odata.type": "#Task.v1_4_3.Task",
  "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."
    }
  ],
  "Name": "Task 0",
  "Payload": {
    "HttpHeaders": [],
    "HttpOperation": "POST",
    "TargetUri": "/redfish/v1/UpdateService/update-multipart"
  },
  "PercentComplete": 0,
  "StartTime": "2025-08-11T07:09:53+00:00",
  "TaskMonitor": "/redfish/v1/TaskService/TaskMonitors/0",
  "TaskState": "Running",
  "TaskStatus": "OK"
}

curl -k -u root:0penBmc \
  -H "Content-Type:multipart/form-data" \
  -X POST \
  -F UpdateParameters="{\"Targets\":[\"${targetpath}\"],\"@Redfish.OperationApplyTime\":\"Immediate\"};type=application/json" \
  -F "UpdateFile=@${fwpath};type=application/octet-stream" \
  https://${bmc}/redfish/v1/UpdateService/update-multipart
{
  "@odata.id": "/redfish/v1/TaskService/Tasks/1",
  "@odata.type": "#Task.v1_4_3.Task",
  "HidePayload": false,
  "Id": "1",
  "Messages": [
    {
      "@odata.type": "#Message.v1_1_1.Message",
      "Message": "The task with Id '1' has started.",
      "MessageArgs": [
        "1"
      ],
      "MessageId": "TaskEvent.1.0.TaskStarted",
      "MessageSeverity": "OK",
      "Resolution": "None."
    }
  ],
  "Name": "Task 1",
  "Payload": {
    "HttpHeaders": [],
    "HttpOperation": "POST",
    "TargetUri": "/redfish/v1/UpdateService/update-multipart"
  },
  "PercentComplete": 0,
  "StartTime": "2025-08-11T07:12:59+00:00",
  "TaskMonitor": "/redfish/v1/TaskService/TaskMonitors/1",
  "TaskState": "Running",
  "TaskStatus": "OK"
}

4. Check task status

curl -u root:0penBmc -k -X GET https://${bmc}/redfish/v1/TaskService/Tasks/0
{
  "@odata.id": "/redfish/v1/TaskService/Tasks/0",
  "@odata.type": "#Task.v1_4_3.Task",
  "EndTime": "2025-08-11T07:09:58+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 1 percent complete.",
      "MessageArgs": [
        "0",
        "1"
      ],
      "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 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 15 percent complete.",
      "MessageArgs": [
        "0",
        "15"
      ],
      "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 20 percent complete.",
      "MessageArgs": [
        "0",
        "20"
      ],
      "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 25 percent complete.",
      "MessageArgs": [
        "0",
        "25"
      ],
      "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 30 percent complete.",
      "MessageArgs": [
        "0",
        "30"
      ],
      "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 40 percent complete.",
      "MessageArgs": [
        "0",
        "40"
      ],
      "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 50 percent complete.",
      "MessageArgs": [
        "0",
        "50"
      ],
      "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 60 percent complete.",
      "MessageArgs": [
        "0",
        "60"
      ],
      "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 70 percent complete.",
      "MessageArgs": [
        "0",
        "70"
      ],
      "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 80 percent complete.",
      "MessageArgs": [
        "0",
        "80"
      ],
      "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-multipart"
  },
  "PercentComplete": 100,
  "StartTime": "2025-08-11T07:09:53+00:00",
  "TaskMonitor": "/redfish/v1/TaskService/TaskMonitors/0",
  "TaskState": "Completed",
  "TaskStatus": "OK"
}

curl -u root:0penBmc -k -X GET https://${bmc}/redfish/v1/TaskService/Tasks1
{
  "@odata.id": "/redfish/v1/TaskService/Tasks/1",
  "@odata.type": "#Task.v1_4_3.Task",
  "EndTime": "2025-08-11T07:13:33+00:00",
  "HidePayload": false,
  "Id": "1",
  "Messages": [
    {
      "@odata.type": "#Message.v1_1_1.Message",
      "Message": "The task with Id '1' has started.",
      "MessageArgs": [
        "1"
      ],
      "MessageId": "TaskEvent.1.0.TaskStarted",
      "MessageSeverity": "OK",
      "Resolution": "None."
    },
    {
      "@odata.type": "#Message.v1_1_1.Message",
      "Message": "The task with Id '1' has changed to progress 10 percent complete.",
      "MessageArgs": [
        "1",
        "10"
      ],
      "MessageId": "TaskEvent.1.0.TaskProgressChanged",
      "MessageSeverity": "OK",
      "Resolution": "None."
    },
    {
      "@odata.type": "#Message.v1_1_1.Message",
      "Message": "The task with Id '1' has changed to progress 15 percent complete.",
      "MessageArgs": [
        "1",
        "15"
      ],
      "MessageId": "TaskEvent.1.0.TaskProgressChanged",
      "MessageSeverity": "OK",
      "Resolution": "None."
    },
    {
      "@odata.type": "#Message.v1_1_1.Message",
      "Message": "The task with Id '1' has changed to progress 20 percent complete.",
      "MessageArgs": [
        "1",
        "20"
      ],
      "MessageId": "TaskEvent.1.0.TaskProgressChanged",
      "MessageSeverity": "OK",
      "Resolution": "None."
    },
    {
      "@odata.type": "#Message.v1_1_1.Message",
      "Message": "The task with Id '1' has changed to progress 25 percent complete.",
      "MessageArgs": [
        "1",
        "25"
      ],
      "MessageId": "TaskEvent.1.0.TaskProgressChanged",
      "MessageSeverity": "OK",
      "Resolution": "None."
    },
    {
      "@odata.type": "#Message.v1_1_1.Message",
      "Message": "The task with Id '1' has changed to progress 30 percent complete.",
      "MessageArgs": [
        "1",
        "30"
      ],
      "MessageId": "TaskEvent.1.0.TaskProgressChanged",
      "MessageSeverity": "OK",
      "Resolution": "None."
    },
    {
      "@odata.type": "#Message.v1_1_1.Message",
      "Message": "The task with Id '1' has changed to progress 40 percent complete.",
      "MessageArgs": [
        "1",
        "40"
      ],
      "MessageId": "TaskEvent.1.0.TaskProgressChanged",
      "MessageSeverity": "OK",
      "Resolution": "None."
    },
    {
      "@odata.type": "#Message.v1_1_1.Message",
      "Message": "The task with Id '1' has changed to progress 50 percent complete.",
      "MessageArgs": [
        "1",
        "50"
      ],
      "MessageId": "TaskEvent.1.0.TaskProgressChanged",
      "MessageSeverity": "OK",
      "Resolution": "None."
    },
    {
      "@odata.type": "#Message.v1_1_1.Message",
      "Message": "The task with Id '1' has changed to progress 60 percent complete.",
      "MessageArgs": [
        "1",
        "60"
      ],
      "MessageId": "TaskEvent.1.0.TaskProgressChanged",
      "MessageSeverity": "OK",
      "Resolution": "None."
    },
    {
      "@odata.type": "#Message.v1_1_1.Message",
      "Message": "The task with Id '1' has changed to progress 70 percent complete.",
      "MessageArgs": [
        "1",
        "70"
      ],
      "MessageId": "TaskEvent.1.0.TaskProgressChanged",
      "MessageSeverity": "OK",
      "Resolution": "None."
    },
    {
      "@odata.type": "#Message.v1_1_1.Message",
      "Message": "The task with Id '1' has changed to progress 80 percent complete.",
      "MessageArgs": [
        "1",
        "80"
      ],
      "MessageId": "TaskEvent.1.0.TaskProgressChanged",
      "MessageSeverity": "OK",
      "Resolution": "None."
    },
    {
      "@odata.type": "#Message.v1_1_1.Message",
      "Message": "The task with Id '1' has changed to progress 90 percent complete.",
      "MessageArgs": [
        "1",
        "90"
      ],
      "MessageId": "TaskEvent.1.0.TaskProgressChanged",
      "MessageSeverity": "OK",
      "Resolution": "None."
    },
    {
      "@odata.type": "#Message.v1_1_1.Message",
      "Message": "The task with Id '1' has changed to progress 100 percent complete.",
      "MessageArgs": [
        "1",
        "100"
      ],
      "MessageId": "TaskEvent.1.0.TaskProgressChanged",
      "MessageSeverity": "OK",
      "Resolution": "None."
    },
    {
      "@odata.type": "#Message.v1_1_1.Message",
      "Message": "The task with Id '1' has completed.",
      "MessageArgs": [
        "1"
      ],
      "MessageId": "TaskEvent.1.0.TaskCompletedOK",
      "MessageSeverity": "OK",
      "Resolution": "None."
    }
  ],
  "Name": "Task 1",
  "Payload": {
    "HttpHeaders": [],
    "HttpOperation": "POST",
    "JsonBody": "null",
    "TargetUri": "/redfish/v1/UpdateService/update-multipart"
  },
  "PercentComplete": 100,
  "StartTime": "2025-08-11T07:12:59+00:00",
  "TaskMonitor": "/redfish/v1/TaskService/TaskMonitors/1",
  "TaskState": "Completed",
  "TaskStatus": "OK"
}

5. Check inventory again

root@bmc:~# curl -u root:0penBmc -k -X GET https://localhost/redfish/v1/UpdateService/FirmwareInventory
{
  "@odata.id": "/redfish/v1/UpdateService/FirmwareInventory",
  "@odata.type": "#SoftwareInventoryCollection.SoftwareInventoryCollection",
  "Members": [
    {
      "@odata.id": "/redfish/v1/UpdateService/FirmwareInventory/Minerva_CMM_CPLD_6127"
    },
    {
      "@odata.id": "/redfish/v1/UpdateService/FirmwareInventory/Minerva_SCM_CPLD_9541"
    }
  ],
  "Members@odata.count": 14,
  "Name": "Software Inventory Collection"
}

6. Check firmware information again after ac cycle
root@bmc:~# curl -u root:0penBmc -k -X GET https://localhost/redfish/v1/UpdateService/FirmwareInventory/Minerva_SCM_CPLD_6429
{
  "@odata.id": "/redfish/v1/UpdateService/FirmwareInventory/Minerva_SCM_CPLD_6429",
  "@odata.type": "#SoftwareInventory.v1_1_0.SoftwareInventory",
  "Description": "Unknown image",
  "Id": "Minerva_SCM_CPLD_6429",
  "Name": "Software Inventory",
  "Status": {
    "Health": "OK",
    "HealthRollup": "OK",
    "State": "Enabled"
  },
  "Updateable": true,
  "Version": "00010005"
}
root@bmc:~# curl -u root:0penBmc -k -X GET https://localhost/redfish/v1/UpdateService/FirmwareInventory/Minerva_CMM_CPLD_9177
{
  "@odata.id": "/redfish/v1/UpdateService/FirmwareInventory/Minerva_CMM_CPLD_9177",
  "@odata.type": "#SoftwareInventory.v1_1_0.SoftwareInventory",
  "Description": "Unknown image",
  "Id": "Minerva_CMM_CPLD_9177",
  "Name": "Software Inventory",
  "Status": {
    "Health": "OK",
    "HealthRollup": "OK",
    "State": "Enabled"
  },
  "Updateable": true,
  "Version": "00000046"
```

Change-Id: Ic9b8bb4713625af2bf4a22f867b3e7b1573d1cfe
Signed-off-by: Yang Chen <yang.chen@quantatw.com>
diff --git a/configurations/meta/minerva_cmm.json b/configurations/meta/minerva_cmm.json
index 828c738..71617de 100644
--- a/configurations/meta/minerva_cmm.json
+++ b/configurations/meta/minerva_cmm.json
@@ -215,6 +215,16 @@
                 "vout1_Name": "CMM_HSC_VOUT_VOLT_V"
             },
             {
+                "Address": "0x44",
+                "Bus": 8,
+                "FirmwareInfo": {
+                    "CompatibleHardware": "com.meta.Hardware.Minerva.CPLD.LCMXO3D_9400HC_cmm",
+                    "VendorIANA": 40981
+                },
+                "Name": "Minerva_CMM_CPLD",
+                "Type": "LatticeLCMXO3D_9400Firmware"
+            },
+            {
                 "Address": "0x4f",
                 "Bus": 1,
                 "Name": "CMM_OUTLET_TEMP_C",
diff --git a/configurations/meta/minerva_cmm_hsc_infineon.json b/configurations/meta/minerva_cmm_hsc_infineon.json
index 2c398e9..cb6ef0b 100644
--- a/configurations/meta/minerva_cmm_hsc_infineon.json
+++ b/configurations/meta/minerva_cmm_hsc_infineon.json
@@ -160,6 +160,16 @@
                 "power1_Name": "CMM_PMON_P12V_PWR_W"
             },
             {
+                "Address": "0x44",
+                "Bus": 8,
+                "FirmwareInfo": {
+                    "CompatibleHardware": "com.meta.Hardware.Minerva.CPLD.LCMXO3D_9400HC_cmm",
+                    "VendorIANA": 40981
+                },
+                "Name": "Minerva_CMM_CPLD",
+                "Type": "LatticeLCMXO3D_9400Firmware"
+            },
+            {
                 "Address": "0x4f",
                 "Bus": 1,
                 "Name": "CMM_OUTLET_TEMP_C",
diff --git a/configurations/meta/minerva_cmm_scm.json b/configurations/meta/minerva_cmm_scm.json
index a46fd50..a89f4de 100644
--- a/configurations/meta/minerva_cmm_scm.json
+++ b/configurations/meta/minerva_cmm_scm.json
@@ -727,6 +727,16 @@
             "Type": "GPIOLeakDetector"
         },
         {
+            "Address": "0x40",
+            "Bus": 15,
+            "FirmwareInfo": {
+                "CompatibleHardware": "com.meta.Hardware.Minerva.CPLD.LCMXO3LF_2100C_scm",
+                "VendorIANA": 40981
+            },
+            "Name": "Minerva_SCM_CPLD",
+            "Type": "LatticeLCMXO3LF_2100CFirmware"
+        },
+        {
             "Address": "0x4B",
             "Bus": 1,
             "Name": "SCM_INLET_TEMP_C",