【已评审】新增资源协作接口属性解决BIOS从BMC获取PCIe槽位信息超时问题

背景

带内BIOS在启动过程中会通过ipmi命令读取bmc提供的丝印文件(silkconfig.json,其中包含用于PCIe枚举的相关信息),此时bmc的bios组件会从PCIeAddrInfo路径(归属pcie_device组件)下获取用于PCIe枚举的相关信息。此ipmi命令的响应超时时间只有5s,如果PCIeAddrInfo路径过多可能出现ipmi命令响应超时,带内BIOS获取不到正确的用于PCIe枚举的信息,会上报无效的设备BDF给bmc,最终导致PCIe卡概率性无法加载。

整体方案

pcie_device组件提供用于PCIe枚举相关信息(PCIe槽位的归属CPU端口信息和丝印信息)准备完成的标志,bios组件监听到准备完成信号就获取这些信息,无需等到带内BIOS读取silkconfig.json时才从pcie_device组件的资源协作接口上获取,提前缓存,解决ipmi命令响应超时的问题。

评审点

pcie_device组件新增资源协作接口属性ReadyToEnumerate ,表示当前PCIe槽位是否已准备好枚举PCIe设备,为true表示可以将此槽位的归属CPU端口信息和丝印信息传递给BIOS用于PCIe设备枚举。

详细描述

1、bmc.kepler.Systems.PcieAddrInfo接口新增资源协作接口属性ReadyToEnumerate
资源path:/bmc/kepler/Systems/:SystemId/PCIeDevices/PcieAddrInfo/:ID(原有)

资源interface:bmc.kepler.Systems.PcieAddrInfo(原有)

变化类型:新增属性

应用场景:用于判断pcie_device是否完成丝印属性计算

持久化类型: 无

操作权限:ReadOnly

属性名称 取值类型 变化类型 默认 读写 权限 持久化 变化通知 接口说明
ReadyToEnumerate boolean 新增属性 false 只读 R:ReadOnly true 表示当前PCIe槽位是否已准备好枚举PCIe设备,为true表示可以将此槽位的归属CPU端口信息和丝印信息传递给BIOS用于PCIe设备枚举。

2、bmc.kepler.Systems.PCIeSlot接口新增资源协作接口属性ReadyToEnumerate
资源path:/bmc/kepler/Systems/:SystemId/PCIeSlots/:ID(原有)

资源interface:bmc.kepler.Systems.PCIeSlot(原有)

变化类型:新增属性

应用场景:用于判断pcie_device是否完成丝印属性计算

持久化类型: 无

操作权限:ReadOnly

属性名称 取值类型 变化类型 默认 读写 权限 持久化 变化通知 接口说明
ReadyToEnumerate boolean 新增属性 false 只读 R:ReadOnly true 表示当前PCIe槽位是否已准备好枚举PCIe设备,为true表示可以将此槽位的归属CPU端口信息和丝印信息传递给BIOS用于PCIe设备枚举。

评审结论

1、同意新增丝印属性计算完成状态资源协作接口属性
资源path:/bmc/kepler/Systems/:SystemId/PCIeDevices/PcieAddrInfo/:ID(原有)
资源interface:bmc.kepler.Systems.PcieAddrInfo(原有)
新增属性:ReadyToEnumerate

属性名称 取值类型 变化类型 默认 读写 权限 持久化 变化通知 接口说明
ReadyToEnumerate boolean 新增属性 false 只读 R:ReadOnly true 表示当前PCIe槽位是否已准备好枚举PCIe设备,为true表示可以将此槽位的归属CPU端口信息和丝印信息传递给BIOS用于PCIe设备枚举。

2、同意新增丝印属性计算完成状态资源协作接口属性
资源path:/bmc/kepler/Systems/:SystemId/PCIeSlots/:ID(原有)
资源interface:bmc.kepler.Systems.PCIeSlot(原有)
新增属性:ReadyToEnumerate

属性名称 取值类型 变化类型 默认 读写 权限 持久化 变化通知 接口说明
ReadyToEnumerate boolean 新增属性 false 只读 R:ReadOnly true 表示当前PCIe槽位是否已准备好枚举PCIe设备,为true表示可以将此槽位的归属CPU端口信息和丝印信息传递给BIOS用于PCIe设备枚举。

遗留问题

1、如何确保用于PCIe枚举相关信息准备完成在带内BIOS来读取silkconfig.json之前?
结论:已闭环,pcie_device组件监听预上电信号锁定上电,等待用于PCIe枚举的属性准备完成后才解除上电锁定,这样就能确保带内BIOS读取前已准备完成

遗留问题:
确认pcie组件拓扑建立完成是否在bios获取丝印之前