【待评审】新增长城 CRPS 电源模块 PMBus 协议适配需求

ISSUE 链接

[需求]: 新增 长城crps 适配

背景

长城 CRPS 是一款高效率 CRPS 标准电源模块,采用 PMBus 1.3+ 通信协议。当前 openUBMC 社区版本已支持多种华为 PMBus 电源及电源砖,但尚未完整支持 CRPS 标准电源的 PMBus 协议适配、冷冗余工作模式控制,以及 WebUI 侧针对 CRPS 电源配置能力的差异化展示和校验。

本需求用于在 openUBMC 中完成长城 CRPS 电源模块的:

  1. PMBus 协议适配(FRU 资产、传感器、健康状态全量采集)
  2. 冷冗余主备切换模式控制(0xD0 寄存器)
  3. 多电源板卡(每板 3 槽位,共 6 槽位)拓扑管理
  4. WebUI 电源配置能力适配,包括特殊电源识别、主用电源数量校验、深度休眠配置控制等

涉及仓库:

  1. vpd — 新增 PSU 及电源扩展板 CSR 硬件描述文件
  2. power_mgmt — 新增 CRPS3200T Protocol 协议层、Monitor 监控层、init.lua 协议注册
  3. rackmount — 扩展 power.lua 支持 PsuBoard 槽位合并逻辑
  4. webui — 适配长城 CRPS 电源配置能力,支持基于真实电源信息的规则化识别和配置校验

决策点

  1. 是否同意将长城 CRPS 电源 PMBus 协议适配纳入 openUBMC 社区版本;
  2. 是否同意按 vpd、power_mgmt、rackmount、webui 拆分 PR 合入;
  3. WebUI 是否采用“电源规则匹配 + 能力集合驱动”的方式进行型号判断;
  4. WebUI 电源配置校验规则是否从页面组件中抽离,独立维护为前端校验模块。

详细描述

本需求计划支持以下能力:

1. PMBus 协议适配层(power_mgmt/protocol/pmbus_CRPS3200T.lua)

  • 支持 I2C/PMBus 寄存器读写(含 CRC8 校验 + 3 次重试)
  • 支持 Linear-11/Linear-16 数据格式转换(含 0~1A 小电流精度保护)
  • 支持 FRU 资产信息获取:制造商(0x99)、型号(0x9A)、序列号(0x9E)、固件版本(0x9B)、部件编码、制造日期(0x9D)
  • 支持传感器数据采集:输入输出电压(0x88/0x8B)、输入输出电流(0x89/0x8C)、输入输出功率(0x97/0x96)、环境温度(0x8D)、原边/副边温度(0x8E/0x8F)、风扇转速(0x90)
  • 支持健康状态采集:7 个状态寄存器(7C/7D/81/7A/7B/7E/80)
  • 支持额定功率读取(0xA7)

2. 冷冗余工作模式控制

  • 通过 0xD0 寄存器实现主备切换
  • 主用模式:写入 0x01
  • 备用模式:写入 0x05
  • 支持写入后 10ms 验证回读
  • 支持失败自动回退到 Active 模式
  • 处理 0x00 未初始化状态的自动修复(先设 0x01 再切目标模式)

3. Monitor 监控层(power_mgmt/monitor/pmbus_CRPS3200T.lua)

  • 4 个周期性任务:健康状态 500ms / 电压电流温度 3s / 工作模式 2s / 黑匣子授时 5min
  • 远程高频功率采样(100ms PluginRequest)
  • 通信异常去抖防抖(3 次重试 + PLUGIN_DEBOUNCE)

4. CSR 硬件描述文件(VPD)

  • 新增 PSU CSR:定义 OnePower、Scanner(OPOK/IPOK/PowerGood)、CoolingRequirement(按功率分段温度阈值)、21 个事件定义(故障+告警+插拔+更换等)
  • 新增电源扩展板 CSR:定义 3 个 Connector、PsuSlot、Scanner 在位检测、6 个插拔事件等

5. rackmount 接口扩展

  • power.lua get_supply_list() 新增 PsuBoard 槽位合并逻辑(去重+排序),兼容多电源扩展板
  • get_defult_psu() 返回空默认对象,区分“槽位空”和“数据采集失败”

6. WebUI 电源配置能力适配

WebUI 在“系统管理 > 电源&功率 > 电源信息”页面中,需要根据当前电源类型控制页面行为。当前方案采用“电源规则匹配 + 能力集合驱动”的方式实现,不在页面组件中直接硬编码判断具体型号。

前端新增电源规则工具,用于根据真实在位电源信息识别能力:

  • 识别数据来源仅使用接口返回的 SupplyList
  • SupplyList 表示当前机器电源信息,包含型号、部件号、厂商、名称等字段
  • 前端通过 ModelPartNumber 等字段匹配规则
  • 命中规则后生成 PowerSupplyCapability 能力集合
  • 页面根据能力集合控制 UI 展示、配置校验和提交参数

当前 CRPS 电源规则对应能力包括:

  • mainPsuSelectionLimit:主备模式下启用主用电源数量限制
  • disableDeepSleep:隐藏深度休眠配置项,提交参数时不携带 DeepSleep

该方案支持:

  • 一个电源型号命中多个能力
  • 多个电源型号复用同一能力
  • 后续新增电源型号时只扩展规则,不修改页面主体逻辑
  • 后续如需同组规则互斥,可扩展 groupexclusivepriority 字段实现优先级匹配

7. WebUI 电源配置校验优化

WebUI 电源配置校验规则计划从页面组件中抽离,独立维护为前端校验模块。

页面组件负责:

  • 获取电源接口数据
  • 调用规则工具生成能力集合
  • 展示电源信息和配置弹窗
  • 收集用户配置
  • 调用统一校验函数
  • 校验通过后提交配置

校验模块负责:

  • 根据能力集合判断需要启用哪些业务校验
  • 校验主用电源数量是否合法
  • 校验深度休眠配置是否允许提交
  • 返回统一校验结果和提示信息

CRPS 主用电源数量校验规则:

  • 主用电源数量必须大于电源总数的一半
  • 主用电源数量不能超过电源总数减 1
  • 例如 6 个电源时,主用电源数量应为 3 到5
  • 当电源数量小于等于 3 且命中 CRPS 主用限制能力时,主用电源需要全选,避免配置出不满足冗余要求的主备状态

深度休眠配置规则:

  • 当命中 disableDeepSleep 能力时,WebUI 不展示深度休眠开关
  • 保存配置时不提交 DeepSleep 字段
  • 未命中该能力时,仍按接口返回的 DeepSleepSupported 控制页面展示和提交

计划拆分 PR:

  1. vpd:新增 14191046_PSU_CRPS.sr + 14100513_00000002012000234001.sr
  2. power_mgmt:新增 protocol/pmbus_CRPS3200T.lua + monitor/pmbus_CRPS3200T.lua + 修改 protocol/init.lua 协议注册
  3. rackmount:修改 power.lua get_supply_list() 及相关辅助函数
  4. webui:修改电源信息页面,新增电源规则识别工具和电源配置校验工具

影响范围

  1. 新增长城 CRPS 电源 PMBus 协议适配,不影响已部署的电源型号
  2. 仅当 CSR PhysicalInterface 显式指定 "pmbus_crps3200t" 时触发新代码路径
  3. 新增代码遵循开闭原则,不修改通用 pmbus.lua 和 monitor/pmbus.lua
  4. power.lua 的 PsuBoard 槽位合并逻辑向后兼容,不影响已有场景
  5. init.lua 协议注册表新增 1 条记录,不影响已有协议查找逻辑
  6. VPD 中新增 2 个 CSR 文件,不影响已有板卡的 SR 配置
  7. WebUI 不修改 /UI/Rest/System/PowerSupply 接口结构,仅基于现有返回数据进行能力识别和配置校验
  8. WebUI 未命中特殊电源规则时,保持通用电源配置行为,不启用 CRPS 特殊限制
  9. WebUI 电源规则和校验规则独立维护,降低页面组件复杂度
  10. WebUI 对普通 2 电源场景应保持原有主备配置能力,不能被 CRPS 特殊规则误拦截
  11. WebUI 对CRPS电源禁用深度休眠配置,仅影响命中特殊规则的电源场景

自验计划

  1. bingo gen

  2. bingo build

  3. bingo test -ut

  4. bingo test -it

  5. 实机验证:

    • 长城 CRPS 电源插入电源板槽位,验证 FRU 信息自动获取
    • Redfish /redfish/v1/Chassis/1/PowerSubsystem/PowerSupplies 接口电源信息完整性
    • 冷冗余主备切换:Active→Standby→Active 全流程
    • I2C 通信异常注入:验证去抖和 communication_status 上报
    • 回归验证:已有电源功能不受影响
  6. WebUI 自验:

    • 进入“系统管理 > 电源&功率 > 电源信息”,确认 CRPS 电源信息可正常展示
    • 当 CRPS 型号字段存在于 SupplyList 时,能够正确命中 CRPS 能力
    • 验证命中 mainPsuSelectionLimit 能力后,主用电源数量校验生效
    • 验证 6 电源场景下,主用电源数量小于等于3时前端拦截并提示
    • 验证 6 电源场景下,主用电源数量为3到5时允许保存
    • 验证命中 disableDeepSleep 能力后,页面不展示深度休眠配置,保存时不提交 DeepSleep
    • 验证未命中特殊规则的普通电源仍按原有逻辑展示深度休眠和主备配置
    • 验证普通2电源场景不受 CRPS 主用电源数量限制影响
    • 验证新增规则工具和校验工具可通过单元测试覆盖一对多、多对一、未命中规则、非法主用数量等场景

评审结论

(待社区评审后填写)