【已评审】新增模拟加载PCIe设备调试接口

背景

支持在线调试客户端执行以组件命令的形式调用组件的调试接口,模拟加载/卸载PCIe卡和OCP卡。

关联ISSUE

[需求]: 支持模拟加载PCIe卡 - openUBMC/pcie_device - AtomGit | GitCode

整体方案

新增资源协作方法支持模拟加载PCIe卡和OCP卡(只能向空槽位模拟加载卡),要求至少有一个槽位。

支持模拟卸载卡,所有模拟加载/卸载的卡不参与持久化。

使用完模拟加载/卸载功能,恢复环境需要AC。

评审点

  1. 新增资源协作接口bmc.kepler.Debug.PCIeMock

  2. 新增组件调测命令显示当前指定类型卡的槽位和在位情况

  3. 新增组件调测命令加载PCIe设备

  4. 新增组件调测命令卸载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,指令名和参数定义明确