背景
新增支持对物理盘槽位的上下电控制功能。
槽位上下电的前序方案已评审通过:
- 【已评审】支持对物理盘槽位的上下电控制:SMC"控制硬盘电源上下电"命令的 Accessor + Drive 对象 SlotPowerState 属性;
- 【已评审】支持对物理盘槽位进行上下电控制:Redfish Drive.SlotPowerState + Action、IPMI OEM Get/SetSlotPowerState 命令。
14140224_VPD_0.sr 的加载条件是 ComVPDConnect 的 Presence 表达式(在位 == 1 && PCIeType == 1),只看物理在位信号,不看槽位电源。CPLD 断电不改变在位信号,因此槽位下电后 VPD_0.sr 仍处于加载状态,由此产生连锁问题:
-
盘断电后 VPD Chip(I2C 0xA6)不可达,但 VPD_0.sr 内的
Scanner_SSD_ReadVPDFail仍按 5s 周期扫描——扫描器区分不了"断电"与"芯片故障"; -
每次读取必然失败,8 次失败防抖(8×5s≈40s)后
Event_VPDReadFail必然触发Disk.VPDReadFail告警; -
该告警的消除条件是 Scanner 恢复读成功(即槽位重新上电)或拔盘(子树整体卸载)——保持的下电状态会持续挂着一个无法消除的硬件异常告警;
为此在 VirtualVPDConnect 下新增 RefVpdConnector 引用,将 VPD事件移到专用 Connector_Vpd的下级(加载新拆分的 14140224_VPD_Event.sr),上下电时同步其 Presence:下电即停止加载Connector_Vpd下挂sr文件(停止扫描、抑制误报),上电自动恢复加载。
下电(Presence=0):三个 Connector 无条件卸载。
卸载不依赖 AuxId,天然安全;且是消除断电期间 VPDReadFail 误报的关键路径。
上电(Presence=1):
RefVpdConnector → 直接恢复加载(AuxId 固定为 Event,无识别问题);
RefConnector → 仅当 AuxId ≠ 255(协议已识别)时恢复;否则不动,
交回 vpd_connector 既有 init 检测流程(检测成功后置 1);
RefPolicyConnector → 同上(AuxId ≠ 255 即厂商已识别时恢复)。
评审点
- VirtualVPDConnect 下新增 RefVpdConnector 属性
- Drive 下新增私有属性 SlotPowerStateReg
详细描述
变化类型:新增属性
| 变更类型 | 属性名称 | 签名 | 只读 | 变化通知 | 默认值 | 属性描述 | 属性来源 | 持久化类型 | |
|---|---|---|---|---|---|---|---|---|---|
| 新增属性 | RefVpdConnector | U8[] | True | false | 空 | 引用 Connector_Vpd 对象。槽位上下电时由 storage 组件同步该 Connector 的 Presence,控制 VPD 事件子树(14140224_VPD_Event.sr)的加载/卸载:下电卸载后 Scanner_SSD_ReadVPDFail 停止扫描,避免 Disk.VPDReadFail 误报;上电自动恢复。 | CSR | 不持久化 |
变化类型:新增属性
应用场景:BMC设置物理盘槽位电源状态
| 变更类型 | 属性名称 | 签名 | 只读 | 变化通知 | 默认值 | 属性描述 | 属性来源 | 持久化类型 | |
|---|---|---|---|---|---|---|---|---|---|
| 新增属性 | SlotPowerStateReg | y (U8) | False | false | 空 | 关联物理盘槽位电源控制Accessor寄存器。0:下电,1:上电 | CSR | 不持久化 |
实现举例:
"Drive_1": {
"SlotPowerState": " <=/Scanner_Drive0PowerState.Value",
"SlotPowerStateReg": "#/Accessor_Drive0PowerStateControl.Value",
.....
}
评审结论
- 同意在VirtualVPDConnect 下新增 RefVpdConnector 属性
- 同意在Drive下新增私有属性SlotPowerStateReg 属性
遗留问题
- 注意在ipmi资料中说明操作风险

