OCP卡热插拔场景
主要场景:
flowchart LR
env1[环境上有ocp卡] --> op1[热拔出ocp卡] --> ret1[无ocp卡] --> op2[热插入ocp卡] --> ret2[有ocp卡]
不支持的场景:因为带内bios只会上报有插卡的位置的设备bdf,所以环境上没有卡且bmc没有设备bdf的时候,不支持热插入加载ocp卡。
flowchart LR
env1[环境上无ocp卡] --> op1[AC上下电] --> op3[热插入ocp卡] --> ret2[无ocp卡]
流程图
根据在位信号设置Connector在位触发加载卸载ocp卡。
sequenceDiagram
框架->>+框架:csr对象解析,riser、BCU、PSR
框架->>+d-bus:对象上树
框架->>-pcie_device:对象分发
pcie_device->>+pcie_device:拓扑建立,更新PcieAddrInfo信息
pcie_device->>-d-bus:更新属性
带内bios->>+bios组件:获取丝印信息
bios组件->>d-bus:遍历PcieAddrInfo获取丝印信息
bios组件-->>-带内bios:返回丝印信息
带内bios->>+bios组件:上报设备BDF
bios组件->>-d-bus:更新资源树对象属性
d-bus->>+pcie_device:设备BDF变化
pcie_device->>pcie_device:查询四元组信息,复位持久化
pcie_device->>-d-bus:设置Connector
d-bus->>+框架:加载卡csr
框架->>d-bus:ocp卡对象上树
框架->>-pcie_device:ocp卡对象分发,卡加载
loop 新流程
用户->>d-bus:热拔出ocp卡
d-bus->>+pcie_device:在位信号不在位
pcie_device->>-d-bus:设置Connector不在位
d-bus->>+框架:卸载卡csr
框架->>d-bus:ocp卡对象下树
框架->>-pcie_device:ocp卡对象删除,卡卸载
用户->>d-bus:热插入ocp卡
d-bus->>+pcie_device:在位信号在位
pcie_device->>pcie_device:查询四元组信息,复位持久化
pcie_device->>-d-bus:设置Connector在位
d-bus->>+框架:加载卡csr
框架->>d-bus:ocp卡对象上树
框架->>-pcie_device:ocp卡对象分发,卡加载
end
CSR配置
添加配置天池连接器关联实际在位信号。pcie device组件里根据天池连接器的在位信号判断ocp卡是否在位,然后设置非天池连接器。
classDiagram
BusinessConnector --> Connector_OCP_1TianChi : 关联
class Connector_OCP_1TianChi{
...
"Presence": "<=/Scanner_Slot2Presence.Value,
"IdentifyMode": 3,
}
class BusinessConnector{
...
"RefMgmtConnector": "#/Connector_OCP_1",
"RefPCIeAddrInfo": "#/PcieAddrInfo_OCP_1"
新增表示在位信号
"RefMgmtConnectorTianChi": "#/Connector_OCP_1TianChi",
}
评审结论
1、CSR增加配置OCP卡天池连接器,表示对应OCP卡在位信号。
2、pcie_device组件里根据OCP卡天池连接器的在位信号判断OCP卡是否在位,然后设置非天池连接器完成加载或卸载。
遗留问题
对于不支持的场景,带内bios提供设备BDF把不在位的设备bdf也分配出来,可以解决一开始ocp卡不在位后热插入的场景。