【已评审】扩展IPMI命令支持查询Retimer固件版本号

背景

IO扩展组件有若干个Retimer器件,当前BMC已支持带外升级能力,需要支持在装备场景下使用IPMI命令查询Retimer固件版本号,用于与待升级版本号比较是否一致,不一致则执行升级;

关联ISSUE

整体方案

扩展IPMI命令支持查询Retimer固件版本号;
装备在OS侧执行IPMI命令查询Retimer固件版本号,与待升级版本号进行比较,不一致则执行升级;

评审点

  1. 变更资源协作接口bmc.kepler.Systems.Retimer增加属性RetimerId;
  2. 扩展查询版本号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版本号,返回不保证顺序;

评审结论

  1. 同意在bmc.kepler.Systems.Retimer接口下新增属性RetimerId;
  2. 同意扩展查询版本号命令,VerType字段扩展使用0x1E表示查询Retimer版本号;

遗留问题

  1. 同一个组件包含多种PCIE Retimer或其他类型的Retimer是否都通过0x1E表示;
    对于一个组件上的不同类型的Retimer,均使用0x1E返回所有版本号;
  2. 确认是否需要排序,数据的返回怎么解析;
    当前场景需要进行排序,原因为版本号中最后一位与Retimer的lane的数量对应,不同的Retimer配置不同导致版本号不相同,因此需要对每一个Retimer进行版本号校验,使用方式为查询后每个Retimer与预期版本号进行比较,如果不一致则进行升级;
  3. 增加门禁诉求检查RetimerId唯一性;