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>
diff --git a/i2c-vr/vr.cpp b/i2c-vr/vr.cpp
index fe41df9..ed88a9e 100644
--- a/i2c-vr/vr.cpp
+++ b/i2c-vr/vr.cpp
@@ -4,6 +4,7 @@
#include "mps/mp297x.hpp"
#include "mps/mp2x6xx.hpp"
#include "mps/mp5998.hpp"
+#include "tda38640a/tda38640a.hpp"
#include "xdpe1x2xx/xdpe1x2xx.hpp"
#include <map>
@@ -33,6 +34,8 @@
case VRType::RAA22XGen3p5:
return std::make_unique<ISL69269>(ctx, bus, address,
ISL69269::Gen::Gen3p5);
+ case VRType::TDA38640A:
+ return std::make_unique<TDA38640A>(ctx, bus, address);
default:
return nullptr;
}
@@ -47,7 +50,8 @@
{"MP297XFirmware", VRType::MP297X},
{"MP5998Firmware", VRType::MP5998},
{"RAA22XGen2Firmware", VRType::RAA22XGen2},
- {"RAA22XGen3p5Firmware", VRType::RAA22XGen3p5}};
+ {"RAA22XGen3p5Firmware", VRType::RAA22XGen3p5},
+ {"TDA38640AFirmware", VRType::TDA38640A}};
if (VRTypeToString.contains(vrStr))
{