答案内容由AI生成,仅供参考:
PCIe Switch板(IEU类型)上的VR升级功能支持与配置
根据您在社区1230版本中关于在PCIe Switch板上实现MCU和VR固件升级的需求,结合当前系统架构和已有信息,现就IEU类型单板是否支持VR升级以及所需配置对象进行详细说明。
结论概要
- IEU上可以支持VR升级:尽管VRD(电压调节器)最常见于基础计算单元(BCU),但系统架构上并未限制VRD仅存在于BCU。只要硬件物理上存在VRD芯片并可通过SMC协议通信,软件层面是可以支持其固件升级的。
- 可参考IEU或BCU的配置模式:由于PCIe Switch板被定义为IEU类型,并且其功能与IEU接近,因此可以在IEU的SR配置文件中实现对VRD的支持。
- 需要配置的关键对象包括:
VrdMgmt、VrdChip和VRDFirmware(实际为MCUFirmware类型,用于VRD升级场景)。
是否支持IEU上的VR升级?
支持,无架构限制
虽然标准实践中VRD多配置在BCU上用于CPU供电管理,但根据openUBMC的设计逻辑:
- BMC通过
VrdMgmt对象统一管理所有VRD设备; VrdMgmt对象可通过SR配置文件动态添加到任意支持的板卡(包括IEU);- 系统通过
@Parent继承机制和Name命名规则实现MCU与VRD的匹配; - 因此,只要在PCIe Switch板(IEU)的SR文件中正确配置相关对象,即可支持其上的VRD固件升级。
参考依据:
- 文档中有明确说明:“新基础板SR必须配置[VrdChip]类”,表明该类主要用于新基础板(如BCU),但不限于BCU;
- 社区讨论指出:“如果硬件形态类似于riser卡,那么参考riser卡来配置是合理的。” 而PCIe Switch板被视为接近IEU,故应允许扩展配置。
需要在SR文件中配置的对象
为了实现IEU类型PCIe Switch板上的VR升级,您需要在对应的.sr配置文件中添加以下关键对象:
1. VrdMgmt —— VRD管理对象
用于声明一个VRD管理域,通常一个CPU对应一个VrdMgmt。
{
"VrdMgmt_1": {
"@Parent": "System_1",
"SystemId": 1,
"CpuId": 1
}
}
![]()
SystemId和CpuId根据实际归属设置。如果是单主机系统可省略SystemId。
2. VrdChip —— VRD芯片对象
描述具体的VRD芯片实例,并关联到
VrdMgmt。
{
"VrdChip_U9": {
"@Parent": "VrdMgmt_1",
"Name": "VrdChip0"
}
}
@Parent: 指向所属的VrdMgmt对象;Name: 必须符合VrdChip+编号格式(如VrdChip0),以便与MCU侧获取的编号匹配。
关联规则:BMC会通过SMC协议从MCU读取VRD编号列表,并用此Name进行匹配,以确定哪一个VRD需要升级。
3. MCUFirmware(用作VRD升级对象)
虽然名为
MCUFirmware,但在系统中它也用于表示可升级的嵌入式固件对象,包括VRD固件。
{
"VRDFirmware_U9": {
"@Parent": "IEU_1",
"RefChip": "#/VrdChip_U9",
"UID": "00000001040000000001", // 唯一标识,建议按规范生成
"Version": "1.00",
"Type": "VRD",
"SoftwareId": "HWFIRM-VRD-PCIESW",
"Protocol": "SMC",
"Address": "0x50"
}
}
| 属性 | 说明 |
|---|---|
RefChip |
引用前面定义的VrdChip_U9对象 |
Type |
明确为VRD类型 |
Protocol |
使用SMC协议通信 |
Address |
VRD芯片的SMC地址 |
注意:系统中没有独立的
VRDFirmware类,VRD升级使用MCUFirmware类实现,这是标准做法。
VRD升级工作流程简述
- 用户发起对
VRDFirmware_U9的升级请求; - 系统查找
RefChip并定位到VrdChip_U9; - 查找其
@Parent对应的VrdMgmt_1; - 检查电源状态(必须下电或进入缓存模式);
- 执行四阶段升级流程:
- Prepare → Process → Finish → Active(下电时生效)
推荐实践建议
| 项目 | 建议 |
|---|---|
| 配置位置 | 在IEU.sr或PSR.sr中添加上述对象,视具体板卡归属而定 |
| 继承结构 | 保持VrdMgmt → VrdChip → MCUFirmware的层级清晰 |
| 命名规范 | 使用统一命名规则,如VrdChip0, VRDFirmware_U9 |
| 测试验证 | 使用test_poweroff_upgrade_vrd等测试用例验证流程 |
| 日志监控 | 检查 /var/log/app.log 中 firmware_mgmt 模块日志 |
常见问题与注意事项
| 问题 | 建议 |
|---|---|
| 升级无法触发 | 确保VrdMgmt和VrdChip已正确定义且继承关系正确 |
| 找不到VRD对象 | 检查MCU是否上报了对应的VRD编号,Name是否一致 |
| 升级返回失败码75 | 通常是固件校验失败或版本异常(见Upgrade Status 75) |
| 升级后未生效 | VRD必须经过系统下电再上电才能激活新固件 |
| 权限不足 | 升级需具备管理员权限,确保调用接口时身份合法 |
参考资料与相关文档
- CSR配置字典之VrdChip类 — 定义了
VrdChip的属性与配置方式 - CSR配置字典之VrdMgmt类 — 定义了
VrdMgmt对象的结构 - general_hardware组件文档 — 包含VRD升级流程、代码路径与服务模块
- MCU、VRD、CSR、CPLD升级与板卡管理问题指南 — 提供升级互斥、错误码说明
- 鲲鹏模组适配约束FAQ — 列出推荐配置对象清单,含
VrdMgmt、LogicFirmware等
总结
| 问题 | 回答 |
|---|---|
| IEU上的VR升级是否支持? | |
| 是否只能在BCU上进行? | |
| 需配置哪些对象? | VrdMgmt、VrdChip、MCUFirmware(作为VRD升级对象) |
| 是否需要申报议题? | 若为首次在IEU上实现VR升级,建议向hardware-sig组申报议题以确认设计规范 |
建议操作步骤:
- 在IEU的SR文件中添加
VrdMgmt和VrdChip; - 添加
MCUFirmware对象并正确引用; - 编译加载SR文件并验证对象是否成功注册;
- 使用命令行或Web界面测试VRD升级流程;
- 记录日志并排查异常。
如有进一步问题,欢迎提交至hardware-sig讨论确认。
相关链接: