【已评审】OCP卡热插拔方案

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卡不在位后热插入的场景。