背景
支持在线调试客户端执行以组件命令的形式调用组件的调试接口,模拟加载/卸载PCIe卡和OCP卡。
关联ISSUE
[需求]: 支持模拟加载PCIe卡 - openUBMC/pcie_device - AtomGit | GitCode
整体方案
新增资源协作方法支持模拟加载PCIe卡和OCP卡(只能向空槽位模拟加载卡),要求至少有一个槽位。
支持模拟卸载卡,所有模拟加载/卸载的卡不参与持久化。
使用完模拟加载/卸载功能,恢复环境需要AC。
评审点
-
新增资源协作接口bmc.kepler.Debug.PCIeMock
-
新增组件调测命令显示当前指定类型卡的槽位和在位情况
-
新增组件调测命令加载PCIe设备
-
新增组件调测命令卸载PCIe设备
详细描述
评审点1:新增资源协作接口bmc.kepler.Debug.PCIeMock及方法
接口描述 :在/bmc/kepler/Debug/PCIeMock路径,用于提供模拟PCIe设备的方法。
方法评审点
| 方法名称 | 请求签名 | 请求参数描述 | 响应签名 | 响应参数描述 | 方法描述 | 访问权限 |
|---|---|---|---|---|---|---|
| GetConnectors | s | Param1:表示连接器对应的设备类型,取值范围包括[“OCP”, “PCIe”] | a(yssss) | Param1:表示设备在位情况的数组,每个元素包含槽位号、设备在位情况(Absent表示不在位,Present表示在位)、在位设备名称、在位设备的Id、在位设备AuxId | 传入要查询的设备类型,返回槽位和设备在位情况列表 | ReadOnly |
| LoadDevice | syss | Param1:表示连接器对应的设备类型,取值范围包括[“OCP”, “PCIe”] Param2:表示槽位号 Param3:表示设备Id,格式为^[0-9a-f]{8}$。前四个字符表示VendorId,后四个字符表示DeviceId Param4:表示设备AuxId ,格式为^[0-9a-f]{8}$。前四个字符表示SubsystemVendorId,后四个字符表示SubsystemId |
N/A | N/A | 传入设备类型、槽位号和四元组,模拟加载PCIe设备 | BasicSetting |
| UnloadDevice | sy | Param1:表示连接器对应的设备类型,取值范围包括[“OCP”, “PCIe”] Param2:表示槽位号 |
N/A | N/A | 传入设备类型和槽位号,模拟卸载PCIe设备 | BasicSetting |
评审点2:新增组件调测命令Usage: lsconnector <ConnectorType> 显示当前指定类型卡的槽位和在位情况
| 参数名称 | 参数签名 | 参数说明 |
|---|---|---|
| ConnectorType | s | 槽位类型,取“OCP”或“PCIe” |
| 响应签名 | 参数说明 |
|---|---|
| a(yssss) | Param1:表示设备在位情况的数组,每个元素包含槽位号、设备在位情况(Absent表示不在位,Present表示在位)、在位设备名称、在位设备的Id、在位设备的AuxId |
评审点3:新增组件调测命令Usage: loaddevice <DeviceType> <Slot> <Id> <AuxId> 加载PCIe设备
| 参数名称 | 参数签名 | 参数说明 |
|---|---|---|
| DeviceType | s | 设备类型,取“PCIe”或“OCP” |
| Slot | y | 需要模拟加载的槽位号 |
| Id | s | PCIe/OCP设备的Id,格式为^[0-9a-f]{8}$,前四个字符表示VendorId,后四个字符表示DeviceId |
| AuxId | s | PCIe/OCP设备的AuxId,格式为^[0-9a-f]{8}$,前四个字符表示SubsystemVendorId,后四个字符表示SubsystemId |
评审点4:新增组件调测命令Usage: unloaddevice <DeviceType> <Slot> 卸载PCIe设备
| 参数名称 | 参数签名 | 参数说明 |
|---|---|---|
| DeviceType | s | 设备类型,取“PCIe”或“OCP” |
| Slot | y | 需要模拟卸载的槽位号 |
评审结论
1、同意新增bmc.kepler.Debug.PCIeMock资源协作接口,资源协作对象路径和方法见详细描述。
2、同意新增组件调测命令lsconnector
Usage: lsconnector <ConnectorType>
3、同意新增组件调测命令loaddevice
Usage: loaddevice <DeviceType> <Slot> <Id> <AuxId>
4、同意新增组件调测命令unloaddevice
Usage: unloaddevice <DeviceType> <Slot>
遗留问题
1、lsconnector指令要返回非空闲槽位的设备名称,设备Id和设备AuxId
结论:已在lsconnector返回值中添加
2、 lsconnector是否由框架实现
结论:获取设备名称要依赖功能层组件,不适宜做成通用能力
3、loaddevice这个命名跟load/unload参数的命名不协调
结论:将指令拆为loaddevice和unloaddevice,指令名和参数定义明确