支持standby供电的riser卡,如何控制pcie槽位上下电

答案内容由AI生成,仅供参考:

支持 Standby 供电的 Riser 卡如何控制 PCIe 槽位上下电

根据提供的背景与文档信息,针对支持 S5 独立供电的 Riser 卡(UID: 00000001040302023942),实现对 PCIe 槽位的独立上下电控制,其控制方式和实现机制如下。

:wrench: 背景总结

  • 目标:实现对 DPU 卡的 S5 状态独立供电,并支持整卡上下电操作。
  • 硬件配置:使用支持 Standby 供电的 Riser 卡,允许服务器在主电源关闭(S5)状态下,仍为插在 Riser 上的 PCIe 卡(如 DPU 卡)提供供电。
  • 需求核心:客户要求具备 独立控制 PCIe 槽位上下电 的能力,以实现按需启停 DPU 卡。

:white_check_mark: 控制方式:通过 PCIeSlot 对象新增 PowerControl 方法实现,不依赖 Pca9555 寄存器或 CPLD 直接控制

1. 控制主体:资源协作接口 bmc.kepler.Systems.PCIeSlot

根据文档 【已评审】新增资源协作接口管理PCIe卡热插拔 中的说明:

新增方法 PowerControl,通过参数控制槽位上下电状态。”

这意味着:

  • PCIe 槽位的上下电控制已抽象为标准接口:PCIeSlot.PowerControl(On | Off)
  • 该方法为软件层面的标准接口,由 BMC(通过 Bmc Kepler 平台)统一管理。
  • 实现层面是通过配置 PCIeSlot 对象的 PowerControl 方法来触发底层硬件动作。
{
  "接口": "bmc.kepler.Systems.PCIeSlot",
  "方法": "PowerControl",
  "参数": "On / Off",
  "说明": "设置槽位电源状态。On:供电;Off:断电"
}

2. 底层执行:可能由 CPLD 或专用电源控制器实现,而非 Pca9555

虽然 Riser 卡上常集成 Pca9555 作为 GPIO 扩展器,但根据上下文分析:

Pca9555 主要用于 I/O 信号监测和控制(如写保护、板 ID 读取、电压告警),不具备主电源通断控制能力。

:white_check_mark: 关键证据:

  • Pca9555 被描述为 GPIO 扩展芯片,用于数字输入/输出控制(I²C I/O expander)。
  • 在 Riser 卡上的典型应用包括:
    • 读取 PCB ID(通过 Accessor_PcbID
    • 监控 3.3V 电压状态(Event_Riser3V3Event
    • 控制 Eeprom 写保护(Accessor_IEUWP
  • 文档中明确指出,电源控制需新增独立属性或方法,而非复用现有 GPIO 控制逻辑。

:cross_mark: 排除 Pca9555 作为电源主控的原因:

  • 无任何文档提及 Pca9555 可直接驱动大电流电源通断。
  • 其 I²C 地址 0x4c 和功能定位为信号管理,非电源开关控制器

:white_check_mark: 更合理的实现方式:扩展板 CPLD 或专用电源管理 IC

  • Riser 卡上的 CPLD 可编程实现电源时序控制。
  • 支持 Standby 供电的 Riser 卡通常内置电源管理逻辑,由 BMC 下发指令后,CPLD 控制 FET 开关实现对指定槽位的通断电。

此过程可通过 PowerControl 方法调用实现,由 BMC 内部模块(如 hwproxy)转发至 CPLD。


:puzzle_piece: 实现流程(基于 openUBMC 架构)

  1. 硬件识别

    • Riser 卡加载时,BMC 识别其 UID 并匹配为支持 Standby 供电的型号。
    • 加载对应的 RiserCard CSR 配置对象(如 RiserCard_SEU1)。
  2. PCIe Slot 映射

    • 通过 PCIeSlot 对象绑定物理槽位(Slot = 1)与 DPU 卡(DPUCard_1)。
  3. 调用控制接口

    • 使用资源协作接口发起控制命令:
      POST /redfish/v1/Chassis/1/PCIeSlots/1/PowerControl
      Body: {"State": "Off"}
      
    • 或通过 IPMI/BMC CLI 调用 bmc.kepler.Systems.PCIeSlot.PowerControl 方法。
  4. 底层执行

    • BMC 将请求转化为对底层硬件的操作(如写 CPLD 寄存器或控制 GPIO 组合)。
    • CPLD 拉低对应槽位的电源使能信号,切断 DPU 卡供电(即使主板处于 S5)。
  5. 状态同步

    • PowerState 属性更新为 Off
    • 触发 Event_PowerState 事件记录电源变更。

:pushpin: 结论

问题 回答
如何控制 PCIe 槽位上下电? 通过标准资源协作接口 bmc.kepler.Systems.PCIeSlot.PowerControl(On/Off) 实现。
是否通过 Pca9555 寄存器控制? 。Pca9555 仅用于 GPIO 信号管理(如 ID 读取、告警监控),不具备电源开关控制功能。
是否通过扩展板 CPLD 控制? 极有可能是。CPLD 是实现 Standby 供电下电源通断的合理硬件载体,由 BMC 下发指令后执行。

:white_check_mark: 推荐实践:在系统配置中为 PCIeSlot 对象启用 PowerControl 方法,并确保底层驱动支持对指定槽位的独立电源管理,即可满足客户对 DPU 卡 S5 独立供电与可控上下电的需求。

相关链接:

  1. 【小白学习】个人购入 MCX454A-FCAT,NCSI over MCTP/PLDM 支持与适配
  2. 类似Riser卡的转接卡适配问题
  3. 【PSR】有4个同一UID的UnitConfiguration配置,出现概率性匹配到不同的配置
  4. 【已评审】新增私有属性,实现riser卡具体槽位电源状态控制
  5. 【已评审】新增资源协作接口管理PCIe卡热插拔