History log of /openbmc/phosphor-bmc-code-mgmt/ (Results 1 – 25 of 537)
Revision Date Author Comments
(<<< Hide modified files)
(Show modified files >>>)
e634411b26-Nov-2025 Henry Wu <Henry_Wu@quantatw.com>

common: add GPIO controller function

The CPLD update process requires toggling a GPIO pin to control the
debug card mux. BIOS and EEPROM updates use the same logic, so refactor
the duplicated code i

common: add GPIO controller function

The CPLD update process requires toggling a GPIO pin to control the
debug card mux. BIOS and EEPROM updates use the same logic, so refactor
the duplicated code into a common GPIO controller function. Update BIOS,
EEPROM, and CPLD code paths to use the new helper.

Tested:
- Verified CPLD update with GPIO mux toggling
- Verified BIOS update with GPIO mux toggling

Verified CPLD update with GPIO mux toggling
```
Dec 18 18:33:35 bmc phosphor-cpld-software-update[1064]: Requesting chip gpiochip0, GPIO line debug-card-mux to 1
Dec 18 18:33:35 bmc phosphor-cpld-software-update[1064]: Updating Lattice CPLD firmware
Dec 18 18:33:45 bmc phosphor-cpld-software-update[1064]: [48K blob data]
Dec 18 18:34:14 bmc phosphor-cpld-software-update[1064]: [48K blob data]
Dec 18 18:34:31 bmc phosphor-cpld-software-update[1064]: Successfully updated CPLD
Dec 18 18:34:31 bmc phosphor-cpld-software-update[1064]: Requesting chip gpiochip0, GPIO line debug-card-mux to 0
```

Verified BIOS update with GPIO mux toggling
```
Dec 18 18:45:53 bmc phosphor-bios-software-update[1063]: Requesting chip gpiochip0, GPIO line FM_MUX1_SEL_R to 1
Dec 18 18:46:24 bmc phosphor-bios-software-update[2158]: [14.8K blob data]
Dec 18 18:46:30 bmc phosphor-bios-software-update[2158]: [47.9K blob data]
Dec 18 18:46:37 bmc phosphor-bios-software-update[2158]: [48K blob data]
Dec 18 18:46:44 bmc phosphor-bios-software-update[2158]: [48K blob data]
Dec 18 18:46:51 bmc phosphor-bios-software-update[2158]: [48K blob data]
Dec 18 18:46:58 bmc phosphor-bios-software-update[2158]: [47.9K blob data]
Dec 18 18:46:58 bmc phosphor-bios-software-update[2158]: [4.5K blob data]
Dec 18 18:47:01 bmc phosphor-bios-software-update[2158]: [48K blob data]
Dec 18 18:47:04 bmc phosphor-bios-software-update[2158]: [48K blob data]
Dec 18 18:47:07 bmc phosphor-bios-software-update[2158]: [48K blob data]
Dec 18 18:47:10 bmc phosphor-bios-software-update[2158]: [48K blob data]
Dec 18 18:47:13 bmc phosphor-bios-software-update[2158]: [48K blob data]
Dec 18 18:47:15 bmc phosphor-bios-software-update[2158]: [20.5K blob data]
Dec 18 18:47:17 bmc phosphor-bios-software-update[1063]: Successfully updated SPI flash
Dec 18 18:47:17 bmc phosphor-bios-software-update[1063]: Requesting chip gpiochip0, GPIO line FM_MUX1_SEL_R to 0
```

Change-Id: I8d3c128951fd833a0cd25e1440236f82d37b776f
Signed-off-by: Henry Wu <Henry_Wu@quantatw.com>

show more ...

e1d2fa8404-Dec-2025 Haiyue Wang <haiyuewa@163.com>

common: i2c: Fix 'close()' may close invalid fd

If 'I2C_SLAVE_FORCE' fails, the "close()" will be called twice by the
"open()" and "~I2C()", and the "close()" doesn't check the 'fd' value
valid or n

common: i2c: Fix 'close()' may close invalid fd

If 'I2C_SLAVE_FORCE' fails, the "close()" will be called twice by the
"open()" and "~I2C()", and the "close()" doesn't check the 'fd' value
valid or not.

And "close()" should not be a valid const member function, chang it to
mark the 'fd' invalid if "::close()" is called.

Change-Id: Ibeb923c4e3ea400c2de630ff7223df56c349a941
Signed-off-by: Haiyue Wang <haiyuewa@163.com>

show more ...

3749063902-Dec-2025 Marshall Zhan <marshall.zhan.wiwynn@gmail.com>

phosphor-bmc-code-mgmt: fix service invalid argument

Fix the invalid argument in the i2c-vr and CPLD service dependency.

Change-Id: I95e2ca90c94aa4da0f4649cc3b51fe693baadcba
Signed-off-by: Marshall

phosphor-bmc-code-mgmt: fix service invalid argument

Fix the invalid argument in the i2c-vr and CPLD service dependency.

Change-Id: I95e2ca90c94aa4da0f4649cc3b51fe693baadcba
Signed-off-by: Marshall Zhan <marshall.zhan.wiwynn@gmail.com>

show more ...

4582afdb24-Nov-2025 Kevin Tung <kevin.tung@quantatw.com>

i2c-vr: mps: fix mp297X update failure

Support for multiple MPS image formats was added in [1], along with
format type definitions for each VR. The MP297X was incorrectly marked
as type1 (8-column A

i2c-vr: mps: fix mp297X update failure

Support for multiple MPS image formats was added in [1], along with
format type definitions for each VR. The MP297X was incorrectly marked
as type1 (8-column ATE format), but it actually uses type0 (7-column)
format. This commit corrects the format type for MP2971X to fix update
failures.

[1] https://gerrit.openbmc.org/c/openbmc/phosphor-bmc-code-mgmt/+/84455

Tested on Santabarbara and confirmed the update works successfully.

1. Trigger the fw update via redfish.
```
curl -k ${creds} \
-H "Content-Type:multipart/form-data" \
-X POST \
-F UpdateParameters="{\"Targets\":[\"/redfish/v1/UpdateService/FirmwareInventory/Santabarbara_SWB_VR_p0v81_pex_0_4048\"],\"@Redfish.OperationApplyTime\":\"OnReset\"};type=application/json" \
-F "UpdateFile=@${fwpath};type=application/octet-stream" \
https://${bmc}/redfish/v1/UpdateService/update-multipart
```

2. Task is returned
```
{
"@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-11-25T02:46:51+00:00",
"TaskMonitor": "/redfish/v1/TaskService/TaskMonitors/1",
"TaskState": "Running",
"TaskStatus": "OK"
}
```

3. Query Task status
```
curl --silent $creds https://$bmc/redfish/v1/TaskService/Tasks/1
```

```
{
"@odata.id": "/redfish/v1/TaskService/Tasks/1",
"@odata.type": "#Task.v1_4_3.Task",
"EndTime": "2025-11-25T02:46:53+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 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-11-25T02:46:51+00:00",
"TaskMonitor": "/redfish/v1/TaskService/TaskMonitors/1",
"TaskState": "Completed",
"TaskStatus": "OK"
}
```

Change-Id: I7438ad762dbc143208f630f5a1fba0d77944d4aa
Signed-off-by: Kevin Tung <kevin.tung.openbmc@gmail.com>

show more ...

6e78f08719-Nov-2025 Leo Yang <Leo-Yang@quantatw.com>

i2c-vr: isl69269 Add length check to parsing

The ISL69269 parser lacks a length check mechanism during the parsing
phase. Although current update files do not exceed 40 characters per
line, however,

i2c-vr: isl69269 Add length check to parsing

The ISL69269 parser lacks a length check mechanism during the parsing
phase. Although current update files do not exceed 40 characters per
line, however, it is still need to prevent potential issues.

Tested on the Yosemite5 platform.
```
$ curl -k ${creds} -X GET https://${bmc}${target}
{
"@odata.id": "/redfish/v1/UpdateService/FirmwareInventory/Yosemite5_CXL_VR_PVDD_CORE_617",
"@odata.type": "#SoftwareInventory.v1_1_0.SoftwareInventory",
"Description": "Other image",
"Id": "Yosemite5_CXL_VR_PVDD_CORE_617",
"Name": "Software Inventory",
"Status": {
"Health": "OK",
"HealthRollup": "OK",
"State": "Enabled"
},
"Updateable": true,
"Version": "1BC5F145"
$ curl -k ${creds} -H "Content-Type:multipart/form-data" -X POST -F UpdateParameters="{\"Targets\":[\"${target}\"],\"@Redfish.OperationApplyTime\":\"OnReset\"};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-11-28T08:20:53+00:00",
"TaskMonitor": "/redfish/v1/TaskService/TaskMonitors/0",
"TaskState": "Running",
"TaskStatus": "OK"
$ curl -k $creds https://$bmc/redfish/v1/TaskService/Tasks/0
{
"@odata.id": "/redfish/v1/TaskService/Tasks/0",
"@odata.type": "#Task.v1_4_3.Task",
"EndTime": "2025-11-28T08:20:55+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 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 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-11-28T08:20:53+00:00",
"TaskMonitor": "/redfish/v1/TaskService/TaskMonitors/0",
"TaskState": "Completed",
"TaskStatus": "OK"
}

==== ac cycle ====

$ target=$(curl -k ${creds} --silent -X GET https://${bmc}/redfish/v1/UpdateService/FirmwareInventory/ | jq -r '.Members[] | select(.["@odata.id"] | contains("CXL_VR_PVDD")) | .["@odata.id"]')
$ curl -k ${creds} -X GET https://${bmc}${target}
{
"@odata.id": "/redfish/v1/UpdateService/FirmwareInventory/Yosemite5_CXL_VR_PVDD_CORE_9325",
"@odata.type": "#SoftwareInventory.v1_1_0.SoftwareInventory",
"Description": "Other image",
"Id": "Yosemite5_CXL_VR_PVDD_CORE_9325",
"Name": "Software Inventory",
"Status": {
"Health": "OK",
"HealthRollup": "OK",
"State": "Enabled"
},
"Updateable": true,
"Version": "4F879069"
}
```

Change-Id: Ia01bbc8a1c0906feff295335845c688f02899b35
Signed-off-by: Leo Yang <Leo-Yang@quantatw.com>

show more ...

f730973b12-Nov-2025 Kevin Tung <kevin.tung@quantatw.com>

i2c-vr: add support for MPS MP292X VR firmware update over I2C

This commit introduces support for programming MPS MP292X VR devices
over the I2C bus. It enables firmware updates for VR models such a

i2c-vr: add support for MPS MP292X VR firmware update over I2C

This commit introduces support for programming MPS MP292X VR devices
over the I2C bus. It enables firmware updates for VR models such as
MP2925 and MP2929.
Support for the MP292XFirmware type in EM was added in [1].

[1] https://gerrit.openbmc.org/c/openbmc/entity-manager/+/85159

Tested on the Yosemite5 platform:

1. Display the fw inventory
```
curl --silent $creds https://$bmc/redfish/v1/UpdateService/FirmwareInventory
```

```
{
"@odata.id": "/redfish/v1/UpdateService/FirmwareInventory",
"@odata.type": "#SoftwareInventoryCollection.SoftwareInventoryCollection",
"Members": [
{...},
{
"@odata.id": "/redfish/v1/UpdateService/FirmwareInventory/Yosemite5_CXL_VR_P1V2_VDD_DDR_CH13_1427"
},
{...}
],
"Members@odata.count": 16,
"Name": "Software Inventory Collection"
}
```

2. Query version.
```
curl $creds https://$bmc/redfish/v1/UpdateService/FirmwareInventory/Yosemite5_CXL_VR_P1V2_VDD_DDR_CH13_1427
```

```
{
"@odata.id": "/redfish/v1/UpdateService/FirmwareInventory/Yosemite5_CXL_VR_P1V2_VDD_DDR_CH13_1427",
"@odata.type": "#SoftwareInventory.v1_1_0.SoftwareInventory",
"Description": "Other image",
"Id": "Yosemite5_CXL_VR_P1V2_VDD_DDR_CH13_1427",
"Name": "Software Inventory",
"Status": {
"Health": "OK",
"HealthRollup": "OK",
"State": "Enabled"
},
"Updateable": true,
"Version": "7F652B8C"
}
```

3. Trigger the fw update via redfish.
```
curl -k ${creds} \
-H "Content-Type:multipart/form-data" \
-X POST \
-F UpdateParameters="{\"Targets\":[\"/redfish/v1/UpdateService/FirmwareInventory/Yosemite5_CXL_VR_P1V2_VDD_DDR_CH13_1427\"],\"@Redfish.OperationApplyTime\":\"OnReset\"};type=application/json" \
-F "UpdateFile=@${fwpath};type=application/octet-stream" \
https://${bmc}/redfish/v1/UpdateService/update-multipart
```

4. Task is returned
```
{
"@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-11-12T07:19:57+00:00",
"TaskMonitor": "/redfish/v1/TaskService/TaskMonitors/0",
"TaskState": "Running",
"TaskStatus": "OK"
}
```

5. Query Task status
```
curl --silent $creds https://$bmc/redfish/v1/TaskService/Tasks/0
```

```
{
"@odata.id": "/redfish/v1/TaskService/Tasks/0",
"@odata.type": "#Task.v1_4_3.Task",
"EndTime": "2025-11-12T07:20:31+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 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 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-11-12T07:19:57+00:00",
"TaskMonitor": "/redfish/v1/TaskService/TaskMonitors/0",
"TaskState": "Completed",
"TaskStatus": "OK"
}
```

6. Display the fw inventory with newly updated fw.
```
curl --silent $creds https://$bmc/redfish/v1/UpdateService/FirmwareInventory
```

```
{
"@odata.id": "/redfish/v1/UpdateService/FirmwareInventory",
"@odata.type": "#SoftwareInventoryCollection.SoftwareInventoryCollection",
"Members": [
{...},
{
"@odata.id": "/redfish/v1/UpdateService/FirmwareInventory/Yosemite5_CXL_VR_P1V2_VDD_DDR_CH13_1427"
},
{
"@odata.id": "/redfish/v1/UpdateService/FirmwareInventory/Yosemite5_CXL_VR_P1V2_VDD_DDR_CH13_8152"
},
{...}
],
"Members@odata.count": 17,
"Name": "Software Inventory Collection"
}
```

7. Query the new fw version.
```
curl $creds https://$bmc/redfish/v1/UpdateService/FirmwareInventory/Yosemite5_CXL_VR_P1V2_VDD_DDR_CH13_8152
```

```
{
"@odata.id": "/redfish/v1/UpdateService/FirmwareInventory/Yosemite5_CXL_VR_P1V2_VDD_DDR_CH13_8152",
"@odata.type": "#SoftwareInventory.v1_1_0.SoftwareInventory",
"Description": "Other image",
"Id": "Yosemite5_CXL_VR_P1V2_VDD_DDR_CH13_8152",
"Name": "Software Inventory",
"Status": {
"Health": "OK",
"HealthRollup": "OK",
"State": "Enabled"
},
"Updateable": false,
"Version": "7F6588DF"
}
```

8. Do AC cycle to make sure the new fw is applied.
```
busctl set-property xyz.openbmc_project.State.Chassis0 /xyz/openbmc_project/state/chassis0 \
xyz.openbmc_project.State.Chassis RequestedPowerTransition s xyz.openbmc_project.State.Chassis.Transition.PowerCycle
```

9. Display the fw inventory after AC cycle.
```
curl --silent $creds https://$bmc/redfish/v1/UpdateService/FirmwareInventory
```

```
kevin@meta-device:~$ curl --silent $creds https://$bmc/redfish/v1/UpdateService/FirmwareInventory
{
"@odata.id": "/redfish/v1/UpdateService/FirmwareInventory",
"@odata.type": "#SoftwareInventoryCollection.SoftwareInventoryCollection",
"Members": [
{...},
{
"@odata.id": "/redfish/v1/UpdateService/FirmwareInventory/Yosemite5_CXL_VR_P1V2_VDD_DDR_CH13_8379"
},
{...}
],
"Members@odata.count": 16,
"Name": "Software Inventory Collection"
}
```

10. Query the fw version after AC cycle.
```
curl $creds https://$bmc/redfish/v1/UpdateService/FirmwareInventory/Yosemite5_CXL_VR_P1V2_VDD_DDR_CH13_8379
```

```
{
"@odata.id": "/redfish/v1/UpdateService/FirmwareInventory/Yosemite5_CXL_VR_P1V2_VDD_DDR_CH13_8379",
"@odata.type": "#SoftwareInventory.v1_1_0.SoftwareInventory",
"Description": "Other image",
"Id": "Yosemite5_CXL_VR_P1V2_VDD_DDR_CH13_8379",
"Name": "Software Inventory",
"Status": {
"Health": "OK",
"HealthRollup": "OK",
"State": "Enabled"
},
"Updateable": true,
"Version": "7F6588DF"
}
```

Change-Id: I261a3b9619154860e0a636a633247965fea11032
Signed-off-by: Kevin Tung <kevin.tung.openbmc@gmail.com>

show more ...

3638c24307-Oct-2025 Kevin Tung <kevin.tung@quantatw.com>

i2c-vr: add support for MPS MP994X VR firmware update over I2C

This commit introduces support for programming MPS MP994X VR devices
over the I2C bus. It enables firmware updates for VR models such a

i2c-vr: add support for MPS MP994X VR firmware update over I2C

This commit introduces support for programming MPS MP994X VR devices
over the I2C bus. It enables firmware updates for VR models such as
MP9945 and MP9946.
Support for the MP994XFirmware type in EM was added in [1].

[1] https://gerrit.openbmc.org/c/openbmc/entity-manager/+/84276

Tested on the Yosemite5 platform:

1. Display the fw inventory
```
curl --silent $creds https://$bmc/redfish/v1/UpdateService/FirmwareInventory
```

```
{
"@odata.id": "/redfish/v1/UpdateService/FirmwareInventory",
"@odata.type": "#SoftwareInventoryCollection.SoftwareInventoryCollection",
"Members": [
{...},
{
"@odata.id": "/redfish/v1/UpdateService/FirmwareInventory/Yosemite5_MB_VR_18_S5_3671"
},
{...}
],
"Members@odata.count": 12,
"Name": "Software Inventory Collection"
}
```

2. Query version.
```
curl $creds https://$bmc/redfish/v1/UpdateService/FirmwareInventory/Yosemite5_MB_VR_18_S5_3671
```

```
{
"@odata.id": "/redfish/v1/UpdateService/FirmwareInventory/Yosemite5_MB_VR_18_S5_3671",
"@odata.type": "#SoftwareInventory.v1_1_0.SoftwareInventory",
"Description": "Other image",
"Id": "Yosemite5_MB_VR_18_S5_3671",
"Name": "Software Inventory",
"Status": {
"Health": "OK",
"HealthRollup": "OK",
"State": "Enabled"
},
"Updateable": true,
"Version": "61A5F378"
}
```

3. Trigger the fw update via redfish.
```
curl -k ${creds} \
-H "Content-Type:multipart/form-data" \
-X POST \
-F UpdateParameters="{\"Targets\":[\"/redfish/v1/UpdateService/FirmwareInventory/Yosemite5_MB_VR_18_S5_3671\"],\"@Redfish.OperationApplyTime\":\"OnReset\"};type=application/json" \
-F "UpdateFile=@${fwpath};type=application/octet-stream" \
https://${bmc}/redfish/v1/UpdateService/update-multipart
```

4. Task is returned
```
{
"@odata.id": "/redfish/v1/TaskService/Tasks/7",
"@odata.type": "#Task.v1_4_3.Task",
"HidePayload": false,
"Id": "7",
"Messages": [
{
"@odata.type": "#Message.v1_1_1.Message",
"Message": "The task with Id '7' has started.",
"MessageArgs": [
"7"
],
"MessageId": "TaskEvent.1.0.TaskStarted",
"MessageSeverity": "OK",
"Resolution": "None."
}
],
"Name": "Task 7",
"Payload": {
"HttpHeaders": [],
"HttpOperation": "POST",
"TargetUri": "/redfish/v1/UpdateService/update-multipart"
},
"PercentComplete": 0,
"StartTime": "2025-10-07T07:27:09+00:00",
"TaskMonitor": "/redfish/v1/TaskService/TaskMonitors/7",
"TaskState": "Running",
"TaskStatus": "OK"
}
```

5. Query Task status
```
curl --silent $creds https://$bmc/redfish/v1/TaskService/Tasks/7
```

```
{
"@odata.id": "/redfish/v1/TaskService/Tasks/7",
"@odata.type": "#Task.v1_4_3.Task",
"EndTime": "2025-10-07T07:27:19+00:00",
"HidePayload": false,
"Id": "7",
"Messages": [
{
"@odata.type": "#Message.v1_1_1.Message",
"Message": "The task with Id '7' has started.",
"MessageArgs": [
"7"
],
"MessageId": "TaskEvent.1.0.TaskStarted",
"MessageSeverity": "OK",
"Resolution": "None."
},
{
"@odata.type": "#Message.v1_1_1.Message",
"Message": "The task with Id '7' has changed to progress 20 percent complete.",
"MessageArgs": [
"7",
"20"
],
"MessageId": "TaskEvent.1.0.TaskProgressChanged",
"MessageSeverity": "OK",
"Resolution": "None."
},
{
"@odata.type": "#Message.v1_1_1.Message",
"Message": "The task with Id '7' has changed to progress 50 percent complete.",
"MessageArgs": [
"7",
"50"
],
"MessageId": "TaskEvent.1.0.TaskProgressChanged",
"MessageSeverity": "OK",
"Resolution": "None."
},
{
"@odata.type": "#Message.v1_1_1.Message",
"Message": "The task with Id '7' has changed to progress 100 percent complete.",
"MessageArgs": [
"7",
"100"
],
"MessageId": "TaskEvent.1.0.TaskProgressChanged",
"MessageSeverity": "OK",
"Resolution": "None."
},
{
"@odata.type": "#Message.v1_1_1.Message",
"Message": "The task with Id '7' has completed.",
"MessageArgs": [
"7"
],
"MessageId": "TaskEvent.1.0.TaskCompletedOK",
"MessageSeverity": "OK",
"Resolution": "None."
}
],
"Name": "Task 7",
"Payload": {
"HttpHeaders": [],
"HttpOperation": "POST",
"JsonBody": "null",
"TargetUri": "/redfish/v1/UpdateService/update-multipart"
},
"PercentComplete": 100,
"StartTime": "2025-10-07T07:27:09+00:00",
"TaskMonitor": "/redfish/v1/TaskService/TaskMonitors/7",
"TaskState": "Completed",
"TaskStatus": "OK"
}
```

6. Display the fw inventory with newly updated fw.
```
curl --silent $creds https://$bmc/redfish/v1/UpdateService/FirmwareInventory
```

```
{
"@odata.id": "/redfish/v1/UpdateService/FirmwareInventory",
"@odata.type": "#SoftwareInventoryCollection.SoftwareInventoryCollection",
"Members": [
{...},
{
"@odata.id": "/redfish/v1/UpdateService/FirmwareInventory/Yosemite5_MB_VR_18_S5_2390"
},
{
"@odata.id": "/redfish/v1/UpdateService/FirmwareInventory/Yosemite5_MB_VR_18_S5_3671"
},
{...}
],
"Members@odata.count": 13,
"Name": "Software Inventory Collection"
}
```

7. Query the new fw version.
```
curl $creds https://$bmc/redfish/v1/UpdateService/FirmwareInventory/Yosemite5_MB_VR_18_S5_2390
```

```
{
"@odata.id": "/redfish/v1/UpdateService/FirmwareInventory/Yosemite5_MB_VR_18_S5_2390",
"@odata.type": "#SoftwareInventory.v1_1_0.SoftwareInventory",
"Description": "Other image",
"Id": "Yosemite5_MB_VR_18_S5_2390",
"Name": "Software Inventory",
"Status": {
"Health": "OK",
"HealthRollup": "OK",
"State": "Enabled"
},
"Updateable": false,
"Version": "61A561EB"
}
```

8. Do AC cycle to make sure the new fw is applied.
```
busctl set-property xyz.openbmc_project.State.Chassis0 /xyz/openbmc_project/state/chassis0 \
xyz.openbmc_project.State.Chassis RequestedPowerTransition s xyz.openbmc_project.State.Chassis.Transition.PowerCycle
```

9. Display the fw inventory after AC cycle.
```
curl --silent $creds https://$bmc/redfish/v1/UpdateService/FirmwareInventory
```

```
kevin@meta-device:~$ curl --silent $creds https://$bmc/redfish/v1/UpdateService/FirmwareInventory
{
"@odata.id": "/redfish/v1/UpdateService/FirmwareInventory",
"@odata.type": "#SoftwareInventoryCollection.SoftwareInventoryCollection",
"Members": [
{...},
{
"@odata.id": "/redfish/v1/UpdateService/FirmwareInventory/Yosemite5_MB_VR_18_S5_2870"
},
{...}
],
"Members@odata.count": 12,
"Name": "Software Inventory Collection"
}
```

10. Query the fw version after AC cycle.
```
curl $creds https://$bmc/redfish/v1/UpdateService/FirmwareInventory/Yosemite5_MB_VR_18_S5_2870
```

```
{
"@odata.id": "/redfish/v1/UpdateService/FirmwareInventory/Yosemite5_MB_VR_18_S5_2870",
"@odata.type": "#SoftwareInventory.v1_1_0.SoftwareInventory",
"Description": "Other image",
"Id": "Yosemite5_MB_VR_18_S5_2870",
"Name": "Software Inventory",
"Status": {
"Health": "OK",
"HealthRollup": "OK",
"State": "Enabled"
},
"Updateable": true,
"Version": "61A561EB"
}
```

Change-Id: Ib4a589870cbcb1989f17e74feb8d638d9362f9ec
Signed-off-by: Kevin Tung <kevin.tung.openbmc@gmail.com>

show more ...

c1b3662827-Oct-2025 Leo Yang <Leo-Yang@quantatw.com>

i2c-vr: add support for Infineon TDA38640A VR firmware update over I2C

This commit introduces support for programming Infineon TDA38640A VR
devices over the I2C bus. It enables firmware updates for

i2c-vr: add support for Infineon TDA38640A VR firmware update over I2C

This commit introduces support for programming Infineon TDA38640A VR
devices over the I2C bus. It enables firmware updates for TDA38640A.

Related commit:

EM(Merged):
[1] https://gerrit.openbmc.org/c/openbmc/entity-manager/+/84725

Schema(Merged):
[2] https://gerrit.openbmc.org/c/openbmc/entity-manager/+/84724

PDI(Merged) :
[3] https://gerrit.openbmc.org/c/openbmc/phosphor-dbus-interfaces/+/84412

Tested on the Yosemite5 platform.

```
$ target=$(curl -k ${creds} --silent -X GET https://${bmc}/redfish/v1/UpdateService/FirmwareInventory/ | jq -r '.Members[] | select(.["@odata.id"] | contains("MB_VR_PVDD18")) | .["@odata.id"]')

$ curl -k ${creds} -X GET https://${bmc}${target}
{
"@odata.id": "/redfish/v1/UpdateService/FirmwareInventory/Yosemite5_MB_VR_PVDD18_S5_7939",
"@odata.type": "#SoftwareInventory.v1_1_0.SoftwareInventory",
"Description": "Other image",
"Id": "Yosemite5_MB_VR_PVDD18_S5_7939",
"Name": "Software Inventory",
"Status": {
"Health": "OK",
"HealthRollup": "OK",
"State": "Enabled"
},
"Updateable": true,
"Version": "5E281514"
$ fwpath="/media/leo/data/yv5/mb_vr_sni/yosemite5-mb-vr-pvdd18-s5-B651B567.pldm"

$ curl -k ${creds} \
-H "Content-Type:multipart/form-data" \
-X POST \
-F UpdateParameters="{\"Targets\":[\"${target}\"],\"@Redfish.OperationApplyTime\":\"OnReset\"};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-11-04T06:51:04+00:00",
"TaskMonitor": "/redfish/v1/TaskService/TaskMonitors/0",
"TaskState": "Running",
"TaskStatus": "OK"
}
$

========== ac cycle ==========

$ target=$(curl -k ${creds} --silent -X GET https://${bmc}/redfish/v1/UpdateService/FirmwareInventory/ | jq -r '.Members[] | select(.["@odata.id"] | contains("MB_VR_PVDD18")) | .["@odata.id"]')
$ curl -k ${creds} -X GET https://${bmc}${target}
{
"@odata.id": "/redfish/v1/UpdateService/FirmwareInventory/Yosemite5_MB_VR_PVDD18_S5_5761",
"@odata.type": "#SoftwareInventory.v1_1_0.SoftwareInventory",
"Description": "Other image",
"Id": "Yosemite5_MB_VR_PVDD18_S5_5761",
"Name": "Software Inventory",
"Status": {
"Health": "OK",
"HealthRollup": "OK",
"State": "Enabled"
},
"Updateable": true,
"Version": "B651B567"
}
```

Change-Id: I69fc2e3b83f56836aceff4e8b24dc85448f7c7ff
Signed-off-by: Leo Yang <Leo-Yang@quantatw.com>

show more ...

f534667703-Nov-2025 Alexander Hansen <alexander.hansen@9elements.com>

fw update: tests for software update

Tests for the software update flow.

Minimal PLDM packages are constructed in testcases and the update flow
is run on software instance.

These tests should chec

fw update: tests for software update

Tests for the software update flow.

Minimal PLDM packages are constructed in testcases and the update flow
is run on software instance.

These tests should check that the common code behaves as outlined in the
design [1]

References:
[1] https://github.com/openbmc/docs/blob/master/designs/code-update.md

Change-Id: Ibf473999b692a85dd86e4ab57a9a4c322257fc40
Signed-off-by: Alexander Hansen <alexander.hansen@9elements.com>

show more ...

3a31f0ac03-Nov-2025 Alexander Hansen <alexander.hansen@9elements.com>

fw update: tests for device

Tests for the device update flow.

Minimal PLDM packages are constructed in testcases and the update flow
is run on device instance.

These tests should check that the co

fw update: tests for device

Tests for the device update flow.

Minimal PLDM packages are constructed in testcases and the update flow
is run on device instance.

These tests should check that the common code behaves as outlined in the
design [1]

References:
[1] https://github.com/openbmc/docs/blob/master/designs/code-update.md

Change-Id: I8f12839afd47ef3403a80439af54fedcc00f10be
Signed-off-by: Alexander Hansen <alexander.hansen@9elements.com>

show more ...

c284e75b14-Oct-2025 Kevin Tung <kevin.tung@quantatw.com>

i2c-vr: mps: extend MPS image parser to support multiple formats

Different MPS VR modules use varying image formats. This change
enhances the common MPS image parser to handle multiple image types,

i2c-vr: mps: extend MPS image parser to support multiple formats

Different MPS VR modules use varying image formats. This change
enhances the common MPS image parser to handle multiple image types,
improving its flexibility and reusability.

- Add support for 7-column ATE images without write/read command info.
- Add support for 8-column ATE images with write/read command info,
which specifying byte, word, block, or process call operations.

Tested successfully by updating Yosemite5 VRs.

Change-Id: I9b60634c3a051c30ab2f56b895c2ef8db047ad13
Signed-off-by: Kevin Tung <kevin.tung.openbmc@gmail.com>

show more ...

d9b99a9603-Nov-2025 Leo Yang <Leo-Yang@quantatw.com>

i2c-vr: xdpe1x2xx fix CRLF type handling issue

1.Neglecting file format problem, image files using Windows will use
CRLF. Therefore, if a file has 39 valid characters on a line, adding
CRLF will rea

i2c-vr: xdpe1x2xx fix CRLF type handling issue

1.Neglecting file format problem, image files using Windows will use
CRLF. Therefore, if a file has 39 valid characters on a line, adding
CRLF will reach 41.
Therefore, this should support both CRLF and LF.

Tested on the Yosemite5 platform.

```
$target=$(curl -k ${creds} --silent -X GET https://${bmc}/redfish/v1/UpdateService/FirmwareInventory/ | jq -r '.Members[] | select(.["@odata.id"] | contains("MB_VR_CPU0")) | .["@odata.id"]')
$ curl -k ${creds} -X GET https://${bmc}${target}
{
"@odata.id": "/redfish/v1/UpdateService/FirmwareInventory/Yosemite5_MB_VR_CPU0_4377",
"@odata.type": "#SoftwareInventory.v1_1_0.SoftwareInventory",
"Description": "Other image",
"Id": "Yosemite5_MB_VR_CPU0_4377",
"Name": "Software Inventory",
"Status": {
"Health": "OK",
"HealthRollup": "OK",
"State": "Enabled"
},
"Updateable": true,
"Version": "3C7938BB"
$ fwpath="/media/leo/data/yv5/mb_vr_sni/yosemite5-mb-vr-cpu0-sni-1009-140B21B9.pldm"
$ curl -k ${creds} -H "Content-Type:multipart/form-data" -X POST -F UpdateParameters="{\"Targets\":[\"${target}\"],\"@Redfish.OperationApplyTime\":\"OnReset\"};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-11-06T11:20:49+00:00",
"TaskMonitor": "/redfish/v1/TaskService/TaskMonitors/0",
"TaskState": "Running",
"TaskStatus": "OK"
}
$
$
============= ac cycle =============
$ target=$(curl -k ${creds} --silent -X GET https://${bmc}/redfish/v1/UpdateService/FirmwareInventory/ | jq -r '.Members[] | select(.["@odata.id"] | contains("MB_VR_CPU0")) | .["@odata.id"]')
$ curl -k ${creds} -X GET https://${bmc}${target}
{
"@odata.id": "/redfish/v1/UpdateService/FirmwareInventory/Yosemite5_MB_VR_CPU0_5170",
"@odata.type": "#SoftwareInventory.v1_1_0.SoftwareInventory",
"Description": "Other image",
"Id": "Yosemite5_MB_VR_CPU0_5170",
"Name": "Software Inventory",
"Status": {
"Health": "OK",
"HealthRollup": "OK",
"State": "Enabled"
},
"Updateable": true,
"Version": "140B21B9"
}
```

Change-Id: I4ea7e7bdd30903c62af92868e643f7f0812b1fdb
Signed-off-by: Leo Yang <Leo-Yang@quantatw.com>

show more ...

166a3bbf04-Nov-2025 Patrick Williams <patrick@stwcx.xyz>

use sdbusplus unpack syntax

Rather than defining a variable and then reading it from a message,
sdbusplus also supports directly unpack-ing from the message. Use
this syntax instead as it is more e

use sdbusplus unpack syntax

Rather than defining a variable and then reading it from a message,
sdbusplus also supports directly unpack-ing from the message. Use
this syntax instead as it is more efficient and succinct.

Signed-off-by: Patrick Williams <patrick@stwcx.xyz>
Change-Id: I8fad3008ef41aba7d4a00b12f41c7a8c6d5908ab

show more ...

04fab3a503-Nov-2025 Alexander Hansen <alexander.hansen@9elements.com>

fix ci: shell script formatting

Due to change in our CI scripts / containers, apply the script
formatting to make CI pass again.

Tested: Inspection only.

Change-Id: I65f9c4382f83a388d24f22c853f643

fix ci: shell script formatting

Due to change in our CI scripts / containers, apply the script
formatting to make CI pass again.

Tested: Inspection only.

Change-Id: I65f9c4382f83a388d24f22c853f6432a2f8360ab
Signed-off-by: Alexander Hansen <alexander.hansen@9elements.com>

show more ...

b593870d30-Sep-2025 Leo Yang <Leo-Yang@quantatw.com>

i2c-vr: add RAA22X Gen3.5 support

Extend ISL69269 to support Renesas Gen3.5 VR devices which share
similar programming interfaces but use slightly different registers

Related PRs -
EM schema(Merged

i2c-vr: add RAA22X Gen3.5 support

Extend ISL69269 to support Renesas Gen3.5 VR devices which share
similar programming interfaces but use slightly different registers

Related PRs -
EM schema(Merged):
https://gerrit.openbmc.org/c/openbmc/entity-manager/+/84149
Configuration patch(Merged):
https://gerrit.openbmc.org/c/openbmc/entity-manager/+/84150
PDI Hardware change(Merged):
https://gerrit.openbmc.org/c/openbmc/phosphor-dbus-interfaces/+/83529

Testd on Yv5:
```
$ target=$(curl -k ${creds} --silent -X GET https://${bmc}/redfish/v1/UpdateService/FirmwareInventory/ | jq -r '.Members[] | select(.["@odata.id"] | contains("CXL_VR_PVDD")) | .["@odata.id"]')

$ curl -k ${creds} -X GET https://${bmc}${target}
{
"@odata.id": "/redfish/v1/UpdateService/FirmwareInventory/Yosemite5_CXL_VR_PVDD_CORE_6124",
"@odata.type": "#SoftwareInventory.v1_1_0.SoftwareInventory",
"Description": "Unknown image",
"Id": "Yosemite5_CXL_VR_PVDD_CORE_6124",
"Name": "Software Inventory",
"Status": {
"Health": "OK",
"HealthRollup": "OK",
"State": "Enabled"
},
"Updateable": true,
"Version": "4F879069"
}

$ curl -k ${creds} -H "Content-Type:multipart/form-data" -X POST -F UpdateParameters="{\"Targets\":[\"${target}\"],\"@Redfish.OperationApplyTime\":\"OnReset\"};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-09-15T05:50:48+00:00",
"TaskMonitor": "/redfish/v1/TaskService/TaskMonitors/0",
"TaskState": "Running",
"TaskStatus": "OK"
}

$ curl -k $creds https://$bmc/redfish/v1/TaskService/Tasks/0
{
"@odata.id": "/redfish/v1/TaskService/Tasks/0",
"@odata.type": "#Task.v1_4_3.Task",
"EndTime": "2025-09-15T05:50:49+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 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 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 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-09-15T05:50:48+00:00",
"TaskMonitor": "/redfish/v1/TaskService/TaskMonitors/0",
"TaskState": "Completed",
"TaskStatus": "OK"

```

Change-Id: If99f5571d2d200416247edea2f745c41383af1c4
Signed-off-by: Leo Yang <Leo-Yang@quantatw.com>

show more ...

0527f20830-Oct-2025 Hariharan Rangasamy <hariharanr@ami.com>

Fix cppcheck errors

Error message:
i2c-vr/mps/mp5998.cpp:114:17: error: Uninitialized variable:
bufferSize [uninitvar]
rbuf.resize(bufferSize);

Change-Id: I44ae8e75dbf57acbd4a0392137ba0716280adb2f

Fix cppcheck errors

Error message:
i2c-vr/mps/mp5998.cpp:114:17: error: Uninitialized variable:
bufferSize [uninitvar]
rbuf.resize(bufferSize);

Change-Id: I44ae8e75dbf57acbd4a0392137ba0716280adb2f
Signed-off-by: Hariharan Rangasamy <hariharanr@ami.com>

show more ...

fd20478030-Oct-2025 Leo Yang <Leo-Yang@quantatw.com>

i2c-vr: add XDPE192C3E,XDPE1D2G3B support

Extend xdpe1x2xx to support XDPE192C3E,XDPE1D2G3B VR devices which share
similar programming interfaces but use slightly different config size.

Tested pass

i2c-vr: add XDPE192C3E,XDPE1D2G3B support

Extend xdpe1x2xx to support XDPE192C3E,XDPE1D2G3B VR devices which share
similar programming interfaces but use slightly different config size.

Tested pass on Yv5 platform.

Change-Id: I4f8bde67bce433a2536ffc9f88a49784d565ce42
Signed-off-by: Leo Yang <Leo-Yang@quantatw.com>

show more ...

ecee4a6e30-Oct-2025 Leo Yang <Leo-Yang@quantatw.com>

i2c-vr: fix xdpe1x2xx bugs

1.Due to the lack of a null character, debug messages become abnormal
during file parsing.

2.When performing “Reset the configuration”,
writing more memory than the lengt

i2c-vr: fix xdpe1x2xx bugs

1.Due to the lack of a null character, debug messages become abnormal
during file parsing.

2.When performing “Reset the configuration”,
writing more memory than the length declared by data[MaxSectDataCnt] may
cause the program to exit abnormally.

issue log:
```
<7> parsing package header
<7> parsing package, pkg header size: 178
<7> Yosemite5_MB_VR_CPU0_1794: set version 1009
09Z 0x140B21B9/XV0 Config
0000000sing: //XV0 PMBus LoopA User
643C5088ing: //XV0 PMBus LoopB User
07> Parsing: //XV0 FW SVI3 LoopA
07> Parsing: //XV0 FW SVI3 LoopB
00000000ing: [End Configuration Data]
<7> Scratchpad Address: 0x2005f000
<7> CRC before programming: 0x140b21b9
<7> CRC of configuration: 0x140b21b9
```

```
<6> Successfully updated VR Yosemite5_MB_VR_CPU0
corrupted size vs. prev_size
Aborted (core dumped)
root@bmc:~#

<7> Yosemite5_MB_VR_CPU0_1794: creating 'activating' association to /xyz/openbmc_project/inventory/system/board/Yosemite5_MB
free(): invalid pointer
Aborted (core dumped)
root@bmc:~#
```

Change-Id: I7cba7cc5373612d79da641b2e764fa4985377e8b
Signed-off-by: Leo Yang <Leo-Yang@quantatw.com>

show more ...

de331ae420-Oct-2025 Alexander Hansen <alexander.hansen@9elements.com>

test: common: software associations: remove NOLINT

remove `clang-analyzer-core.uninitialized.Branch` in a testcase.

Apparently the NOLINT is not required there, not sure if it was due to
clang upda

test: common: software associations: remove NOLINT

remove `clang-analyzer-core.uninitialized.Branch` in a testcase.

Apparently the NOLINT is not required there, not sure if it was due to
clang update or if it's been resolved in later revisions of the linked
patch. Anyways we can drop it now.

Tested: clang-tidy passes

Fixes: ade5c5aad34fa313b1bdd88577f44ba6f64ef43c

Change-Id: Ibba3a10db586b3096880fecba68ebc797b6ac077
Signed-off-by: Alexander Hansen <alexander.hansen@9elements.com>

show more ...

18b5e61b08-Aug-2025 Alexander Hansen <alexander.hansen@9elements.com>

test: common: software

Test API of `class Software`, focus on initial state on construction.

Change-Id: I20350748d02f62cfb8371fee68d43ebbdb91609c
Signed-off-by: Alexander Hansen <alexander.hansen@9

test: common: software

Test API of `class Software`, focus on initial state on construction.

Change-Id: I20350748d02f62cfb8371fee68d43ebbdb91609c
Signed-off-by: Alexander Hansen <alexander.hansen@9elements.com>

show more ...

d880e4d108-Aug-2025 Alexander Hansen <alexander.hansen@9elements.com>

test: common: software version

Test Software Version DBus API.

Change-Id: I287b7e7957199463ec80bda8f71bf881bc0e5cb8
Signed-off-by: Alexander Hansen <alexander.hansen@9elements.com>

ade5c5aa29-Jul-2025 Alexander Hansen <alexander.hansen@9elements.com>

test: common: associations

Test software associations in common code.
Write necessary wrappers in example device to use the protected members.

Change-Id: If7c38f12472699672ed8a4c1b3e1c99c398cdba5
S

test: common: associations

Test software associations in common code.
Write necessary wrappers in example device to use the protected members.

Change-Id: If7c38f12472699672ed8a4c1b3e1c99c398cdba5
Signed-off-by: Alexander Hansen <alexander.hansen@9elements.com>

show more ...

a3902c8313-Aug-2025 Daniel Hsu <Daniel-Hsu@quantatw.com>

cpld: add update support for Lattice xo5

Enable firmware update capability for Lattice xo5 devices, allowing
the update flow to recognize and handle this device type.

Test on Santabarbara:
```
1. C

cpld: add update support for Lattice xo5

Enable firmware update capability for Lattice xo5 devices, allowing
the update flow to recognize and handle this device type.

Test on Santabarbara:
```
1. Check firmware
curl -k -u root:0penBmc -X GET
https://10.10.15.214/redfish/v1/UpdateService/FirmwareInventory/Santabarbara_MB_CPLD_6213
{
"@odata.id": "/redfish/v1/UpdateService/FirmwareInventory/Santabarbara_MB_CPLD_6213",
"@odata.type": "#SoftwareInventory.v1_1_0.SoftwareInventory",
"Description": "Unknown image",
"Id": "Santabarbara_MB_CPLD_6213",
"Name": "Software Inventory",
"Status": {
"Health": "OK",
"HealthRollup": "OK",
"State": "Enabled"
},
"Updateable": true,
"Version": "70000003"
}

2. 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-14T02:26:00+00:00",
"TaskMonitor": "/redfish/v1/TaskService/TaskMonitors/0",
"TaskState": "Running",
"TaskStatus": "OK"
}

3. Check task
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-14T02:28:32+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 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 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-14T02:26:00+00:00",
"TaskMonitor": "/redfish/v1/TaskService/TaskMonitors/0",
"TaskState": "Completed",
"TaskStatus": "OK"
}

4. Check firmware again
curl -k -u root:0penBmc -X GET
https://10.10.15.214/redfish/v1/UpdateService/FirmwareInventory/Santabarbara_MB_CPLD_9204
{
"@odata.id": "/redfish/v1/UpdateService/FirmwareInventory/Santabarbara_MB_CPLD_9204",
"@odata.type": "#SoftwareInventory.v1_1_0.SoftwareInventory",
"Description": "Unknown image",
"Id": "Santabarbara_MB_CPLD_9204",
"Name": "Software Inventory",
"Status": {
"Health": "OK",
"HealthRollup": "OK",
"State": "Enabled"
},
"Updateable": true,
"Version": "00000004"
}
```

Change-Id: Id0aef0d105138538851f4c6d3a5496ec8b724eea
Signed-off-by: Daniel Hsu <Daniel-Hsu@quantatw.com>

show more ...

b602aad513-Aug-2025 Daniel Hsu <Daniel-Hsu@quantatw.com>

cpld: Virtualize CpldLatticeManager for XO3/XO5 separation

This change makes `CpldLatticeManager` a virtual base class, allowing
other classes to inherit from it. This refactoring enables a cleaner

cpld: Virtualize CpldLatticeManager for XO3/XO5 separation

This change makes `CpldLatticeManager` a virtual base class, allowing
other classes to inherit from it. This refactoring enables a cleaner
separation of XO3 and XO5 implementations while sharing common CPLD
management logic.

Test on harma:
```
1. Check firmware info
curl -k -u root:0penBmc -X GET
https://10.10.15.8/redfish/v1/UpdateService/FirmwareInventory/Harma_MB_CPLD_5688
{
"@odata.id": "/redfish/v1/UpdateService/FirmwareInventory/Harma_MB_CPLD_5688",
"@odata.type": "#SoftwareInventory.v1_1_0.SoftwareInventory",
"Description": "Unknown image",
"Id": "Harma_MB_CPLD_5688",
"Name": "Software Inventory",
"Status": {
"Health": "OK",
"HealthRollup": "OK",
"State": "Enabled"
},
"Updateable": true,
"Version": "00000220"
}
2. 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-13T07:22:06+00:00",
"TaskMonitor": "/redfish/v1/TaskService/TaskMonitors/0",
"TaskState": "Running",
"TaskStatus": "OK"
}
3. After AC cycle check firmware info again
curl -k -u root:0penBmc -X GET
https://10.10.15.8/redfish/v1/UpdateService/FirmwareInventory/Harma_MB_CPLD_5688
{
"@odata.id": "/redfish/v1/UpdateService/FirmwareInventory/Harma_MB_CPLD_5688",
"@odata.type": "#SoftwareInventory.v1_1_0.SoftwareInventory",
"Description": "Unknown image",
"Id": "Harma_MB_CPLD_5688",
"Name": "Software Inventory",
"Status": {
"Health": "OK",
"HealthRollup": "OK",
"State": "Enabled"
},
"Updateable": true,
"Version": "00000224"
}
```

Change-Id: Ic7265dbeeb9f93d4f466cba75ca38fc86342c689
Signed-off-by: Daniel Hsu <Daniel-Hsu@quantatw.com>

show more ...

782d6eed19-Aug-2025 FreddieJheng <Freddie.Jheng@quantatw.com>

i2c-vr: add support for MPS MP5998 VR firmware update over I2C

This commit introduces support for programming MPS MP5998 VR devices
over the I2C bus.
Support for the MP5998Firmware type in entity-ma

i2c-vr: add support for MPS MP5998 VR firmware update over I2C

This commit introduces support for programming MPS MP5998 VR devices
over the I2C bus.
Support for the MP5998Firmware type in entity-manager was added in [1].

[1] https://gerrit.openbmc.org/c/openbmc/entity-manager/+/83114

Tested on the Santabarbara platform:

1. Display the fw inventory
```
curl --silent $creds https://$bmc/redfish/v1/UpdateService/FirmwareInventory
```

```
{
"@odata.id": "/redfish/v1/UpdateService/FirmwareInventory",
"@odata.type": "#SoftwareInventoryCollection.SoftwareInventoryCollection",
"Members": [
{...},
{
"@odata.id": "/redfish/v1/UpdateService/FirmwareInventory/Santabarbara_PDB2_VR_MP5998_8692"
},
{...}
],
"Members@odata.count": 13,
"Name": "Software Inventory Collection"
}
```

2. Query version.
```
curl $creds https://$bmc/redfish/v1/UpdateService/FirmwareInventory/Santabarbara_PDB2_VR_MP5998_8692
```

```
{
"@odata.id": "/redfish/v1/UpdateService/FirmwareInventory/Santabarbara_PDB2_VR_MP5998_8692",
"@odata.type": "#SoftwareInventory.v1_1_0.SoftwareInventory",
"Description": "Unknown image",
"Id": "Santabarbara_PDB2_VR_MP5998_8692",
"Name": "Software Inventory",
"Status": {
"Health": "OK",
"HealthRollup": "OK",
"State": "Enabled"
},
"Updateable": true,
"Version": "508F"
}
```

3. Trigger the fw update via redfish.
```
curl -k ${creds} \
-H "Content-Type:multipart/form-data" \
-X POST \
-F UpdateParameters="{"Targets":["/redfish/v1/UpdateService/FirmwareInventory/Santabarbara_PDB2_VR_MP5998_8692"],"@Redfish.OperationApplyTime":"OnReset"};type=application/json" \
-F "UpdateFile=@${fwpath};type=application/octet-stream" \
https://${bmc}/redfish/v1/UpdateService/update-multipart
```

4. Task is returned
```
{
"@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-22T08:41:47+00:00",
"TaskMonitor": "/redfish/v1/TaskService/TaskMonitors/0",
"TaskState": "Running",
"TaskStatus": "OK"
}
```

5. Query Task status
```
curl --silent $creds https://$bmc/redfish/v1/TaskService/Tasks/0
```

```
{
"@odata.id": "/redfish/v1/TaskService/Tasks/0",
"@odata.type": "#Task.v1_4_3.Task",
"EndTime": "2025-08-22T08:41:48+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 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 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-22T08:41:47+00:00",
"TaskMonitor": "/redfish/v1/TaskService/TaskMonitors/0",
"TaskState": "Completed",
"TaskStatus": "OK"
}
```

6. Display the fw inventory with newly updated fw.
```
curl --silent $creds https://$bmc/redfish/v1/UpdateService/FirmwareInventory
```

```
{
"@odata.id": "/redfish/v1/UpdateService/FirmwareInventory",
"@odata.type": "#SoftwareInventoryCollection.SoftwareInventoryCollection",
"Members": [
{...},
{
"@odata.id": "/redfish/v1/UpdateService/FirmwareInventory/Santabarbara_PDB2_VR_MP5998_5612"
},
{
"@odata.id": "/redfish/v1/UpdateService/FirmwareInventory/Santabarbara_PDB2_VR_MP5998_8692"
},
{...}
],
"Members@odata.count": 16,
"Name": "Software Inventory Collection"
}
```

7. Query the new fw version.
```
curl $creds https://$bmc/redfish/v1/UpdateService/FirmwareInventory/Santabarbara_PDB2_VR_MP5998_5612
```

```
{
"@odata.id": "/redfish/v1/UpdateService/FirmwareInventory/Santabarbara_PDB2_VR_MP5998_5612",
"@odata.type": "#SoftwareInventory.v1_1_0.SoftwareInventory",
"Description": "Unknown image",
"Id": "Santabarbara_PDB2_VR_MP5998_5612",
"Name": "Software Inventory",
"Status": {
"Health": "OK",
"HealthRollup": "OK",
"State": "Enabled"
},
"Updateable": false,
"Version": "FCFF"
}
```

8. Do AC cycle to make sure the new fw is applied.
```
busctl set-property xyz.openbmc_project.State.Chassis0 /xyz/openbmc_project/state/chassis0 \
xyz.openbmc_project.State.Chassis RequestedPowerTransition s xyz.openbmc_project.State.Chassis.Transition.PowerCycle
```

9. Display the fw inventory after AC cycle.
```
curl --silent $creds https://$bmc/redfish/v1/UpdateService/FirmwareInventory
```

```
{
"@odata.id": "/redfish/v1/UpdateService/FirmwareInventory",
"@odata.type": "#SoftwareInventoryCollection.SoftwareInventoryCollection",
"Members": [
{...},
{
"@odata.id": "/redfish/v1/UpdateService/FirmwareInventory/Santabarbara_PDB2_VR_MP5998_302"
},
{...}
],
"Members@odata.count": 12,
"Name": "Software Inventory Collection"
}
```

10. Query the fw version after AC cycle.
```
curl $creds https://$bmc/redfish/v1/UpdateService/FirmwareInventory/Santabarbara_PDB2_VR_MP5998_302
```

```
{
"@odata.id": "/redfish/v1/UpdateService/FirmwareInventory/Santabarbara_PDB2_VR_MP5998_302",
"@odata.type": "#SoftwareInventory.v1_1_0.SoftwareInventory",
"Description": "Unknown image",
"Id": "Santabarbara_PDB2_VR_MP5998_302",
"Name": "Software Inventory",
"Status": {
"Health": "OK",
"HealthRollup": "OK",
"State": "Enabled"
},
"Updateable": true,
"Version": "FCFF"
}
```

Change-Id: Ia973a142ac04e041989a74a87e7f1fd8bd16ae3d
Signed-off-by: Freddie Jheng <Freddie.Jheng@quantatw.com>

show more ...

12345678910>>...22