背景
IO扩展组件有若干个Retimer器件,当前BMC已支持带外升级能力,需要支持在装备场景下使用IPMI命令查询Retimer固件版本号,用于与待升级版本号比较是否一致,不一致则执行升级;
关联ISSUE
无
整体方案
扩展IPMI命令支持查询Retimer固件版本号;
装备在OS侧执行IPMI命令查询Retimer固件版本号,与待升级版本号进行比较,不一致则执行升级;
评审点
- 变更资源协作接口bmc.kepler.Systems.Retimer增加属性RetimerId;
- 扩展查询版本号IPMI命令,新增0x1E固件类型表示查询Retimer固件版本号;
详细描述
1. 变更资源协作接口bmc.kepler.Systems.Retimer增加属性RetimerId
变更描述:增加RetimerId属性描述当前Retimer在组件中的逻辑编号
接口链接:bmc.kepler.Systems.Retimer
属性评审点
| 变更类型 | 属性名称 | 签名 | 只读 | 变化通知 | 属性描述 | 访问权限 | 属性来源 | 持久化类型 | 变更影响 | ||
|---|---|---|---|---|---|---|---|---|---|---|---|
新增 |
RetimerId |
y |
True |
false |
Retimer在当前组件上的逻辑编号 |
Read: ReadOnly |
CSR |
无持久化 |
无影响 |
2. 扩展查询版本号IPMI命令,新增0x1E固件类型表示查询Retimer固件版本号
命令名称: ReadVersionData
命令说明: 读取单板指定部件的版本号。
命令权限: DiagnoseMgnt
是否锁定之后可以访问: 是
是否有敏感数据: 否
命令样式:
- 请求:
ipmitool raw 0x30 0x90 <SubCmd> <FruId> <VerType> <Offset> <Length> - 响应:
<CompletionCode> <EndOfList> <Data>
命令请求参数:
| 字节顺序 | 域取值说明 |
|---|---|
| NetFn | 30h |
| Cmd | 90h |
| 1 | SubCmd,子命令=08h |
| 2 | FruId |
| 3 | VerType 0x1E=Retimer firmware version(扩展新增支持Retimer固件版本号) FFh=All version |
| 4 | Offset |
| 5 | Length |
命令响应参数:
| 字节顺序 | 域取值说明 |
|---|---|
| 1 | CompletionCode,00h =【标准完成码】命令响应成功 |
| 2 | EndOfList,表示当前数据是否结束 当版本数据比较长的时候,可能需要分多次读取,通过此字段可以判断数据是否读完。 [7]: End of list 1=last data 0=middle data [6:0]: reserved |
| 3:N | Data,实际返回的数据可能小于等于Read length 1、当指定的FRU ID和Version Type有多个实例时,返回的数据中包含全部实例的版本信息,以分号分隔。 2、BMC版本号格式定义:BMC四段式版本号,第1段固定为1字节,范围是3-9,后3段固定为2字节,范围为00-99,不允许省略前缀0。 |
命令示例:
样例1: 查询FruId为0x09组件上的Retimer固件版本号
- 请求:
ipmitool raw 0x30 0x90 0x08 0x09 0x1e 0x00 0xff - 响应:
80(当前数据已结束) 30 36 2e 38 45 2e 42 30 2e 30 30 3b 30 36 2e 38 45 2e 42 30 2e 30 30 3b 30 36 2e 38 45 2e 42 30 2e 36 30 3b 30 36 2e 38 45 2e 42 30 2e 36 30 3b 30 36 2e 38 45 2e 42 30 2e 33 30 3b 30 36 2e 38 45 2e 42 30 2e 33 30(版本号查询结果:06.8E.B0.00;06.8E.B0.00;06.8E.B0.60;06.8E.B0.60;06.8E.B0.30;06.8E.B0.30)
(1)通过FruId查询组件上的Retimer版本号,同一个单板配置不变的场景下,输出固定,按照RetimerId确定返回顺序;
(2)通过0xff查询所有组件的所有Retimer版本号,返回不保证顺序;
评审结论
- 同意在bmc.kepler.Systems.Retimer接口下新增属性RetimerId;
- 同意扩展查询版本号命令,VerType字段扩展使用0x1E表示查询Retimer版本号;
遗留问题
- 同一个组件包含多种PCIE Retimer或其他类型的Retimer是否都通过0x1E表示;
对于一个组件上的不同类型的Retimer,均使用0x1E返回所有版本号; - 确认是否需要排序,数据的返回怎么解析;
当前场景需要进行排序,原因为版本号中最后一位与Retimer的lane的数量对应,不同的Retimer配置不同导致版本号不相同,因此需要对每一个Retimer进行版本号校验,使用方式为查询后每个Retimer与预期版本号进行比较,如果不一致则进行升级; - 增加门禁诉求检查RetimerId唯一性;