【已评审】新增资源协作接口支持硬盘背板槽位编码

背景

根据客户要求,硬盘背板上硬盘的整机丝印需要根据内置M.2盘数量动态后移,多硬盘背板场景下硬盘槽位号需要从0开始编码且连续。例如:只有一个M.2硬盘时,M.2的槽位号为0,前置硬盘背板上的硬盘整机丝印从1开始;如果有2个M.2硬盘,M.2硬盘的槽位号为0和1,前置背板上的槽位号为2~x。

关联ISSUE

支持配置硬盘背板的起始槽位

整体方案

  1. 在platform.sr的HddBackPlanes对象中新增DriveSlotAllocationEnabled属性作为硬盘槽位号全局编码特性开关

  2. general_hardware启动后等待HddBackPlanes对象上树,读取特性开关:

  • 开关关闭:根据上次状态直接设置DriveSlotAllocationStatus,不等待HardwareComplete

  • 开关开启:等待硬件自发现HardwareComplete信号(带超时),确保所有硬盘背板对象分发完成

  1. general_hardware匹配DriveStartSlotConfig进行起始槽位编码,综合判断本次/上次开关状态和配置变化情况,设置DriveSlotAllocationStatus(0/1/2/3),并持久化本次状态

  2. storage组件监听DriveSlotAllocationStatus变化,根据状态值决定Drive对象的Id计算方式和是否清除持久化数据,在before_add_object阶段完成Id更新(保证Id编码在Drive对象上树之前完成,避免Drive持久化数据冲突)

  3. storage组件调用pcie_device组件提供的设置PcieAddrInfo的SlotID接口更新SlotID,bios组件监听更新丝印

评审点

评审点1: 新增path: /bmc/kepler/Chassis/:ChassisId/HddBackPlanes,在该路径下新增interface: bmc.kepler.Chassis.HddBackPlanes,新增属性DriveSlotAllocationStatus用于标记硬盘起始槽位编码状态

详细描述

资源信息

资源path:/bmc/kepler/Chassis/:ChassisId/HddBackPlanes(新增)

资源interface:bmc.kepler.Chassis.HddBackPlanes(新增)

变化类型:新增对象及属性

应用场景:硬盘起始槽位编码状态标记,用于general_hardware与storage组件间的协同

持久化类型:不持久化

操作权限:Read: ReadOnly

属性定义

变更类型 属性名称 签名 只读 变化通知 属性描述 访问权限 属性来源 持久化类型 变更影响
新增 DriveSlotAllocationStatus y True True 表示硬盘起始槽位编码状态:255=初始化状态(等待编码决策);0=使用默认值,不清除持久化;1=编码成功,不清除持久化;2=使用默认值,清除持久化;3=编码成功,清除持久化 Read: ReadOnly general_hardware根据硬盘起始槽位编码情况更新 不持久化 无影响

评审结论

评审点一、 遗留问题闭环后同意新增path: /bmc/kepler/Chassis/:ChassisId/HddBackPlanes,在该path下新增interface: bmc.kepler.Chassis.HddBackPlanes,在该interface下新增属性DriveSlotAllocationStatus

遗留问题

1、属性是否区分多主机;
结论:属性不区分主机,已修改新增属性到Chassis接口下

2、属性名称中Encoded容易产生误解,需要优化;
结论:已修改属性名称为DriveSlotAllocationStatus

3、属性涉及所有硬盘背板,不能挂在单个实例下面,资源树名称需要优化
结论:已修改资源树接口名称为bmc.kepler.Chassis.HddBackPlanes

体现一下 多个硬盘背板上的硬盘槽位需从0开始且连续

image

这里改一下 bios组件不会监听SlotId,就写bios监听更新丝印。