背景
带内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读取前已准备完成