背景
根据客户要求,硬盘背板上硬盘的整机丝印需要根据内置M.2盘数量动态后移,多硬盘背板场景下硬盘槽位号需要从0开始编码且连续。例如:只有一个M.2硬盘时,M.2的槽位号为0,前置硬盘背板上的硬盘整机丝印从1开始;如果有2个M.2硬盘,M.2硬盘的槽位号为0和1,前置背板上的槽位号为2~x。
关联ISSUE
整体方案
1.在platform.sr中新增DriveSlotAllocationEnabled属性表示硬盘槽位号全局编码特性开关
2. 特性开关打开时,general_hardware监听HardwareComplete信号,当其为true时表示所有插入的硬盘背板已分发完成,此时根据DriveStartSlotConfig中的配置进行匹配更新StartSlot
3. general_hardware根据本次和上次的特性开关和配置匹配情况设置DriveSlotAllocationStatus
4. storage组件监听DriveSlotAllocationStatus的状态更新硬盘槽位号并使用更新后的Id作为主键更新持久化数据
5. storage组件调用pcie_device组件提供的设置PcieAddrInfo的SlotID接口更新SlotID,bios组件监听更新丝印
评审点一
对象HddBackPlanes下新增私有属性
详细描述
Storage组件Drive对象持久化数据通过Id作为主键进行存储,因此在全局硬盘槽位编码的过程中,需要综合考虑本次槽位编码配置和上次槽位编码配置情况,及时更新持久化数据,避免主键Id变更之后出现数据冲突。LastAllocationEnabled用于记录上次全局编码特性开关情况,LastAllocationConfig用于记录上次使用的全局编码配置。
变化类型:新增私有属性
应用场景:用于灵活定义硬板槽位
持久化类型: 部分持久化
操作权限:ReadOnly
| 变更类型 | 属性名称 | 签名 | 只读 | 变化通知 | 属性描述 | 访问权限 | 属性来源 | 持久化类型 | 变更影响 |
|---|---|---|---|---|---|---|---|---|---|
| 新增 | DriveSlotAllocationEnabled | b | True | False | 表示硬盘槽位全局编码特性开关 | Read: ReadOnly | 通过platform.sr配置 | 不持久化 | 无影响 |
| 新增 | LastAllocationEnabled | b | True | False | 环境上一次硬盘槽位全局编码特性开关情况 | Read: ReadOnly | general_hardware组件根据platform.sr的配置维护 | 持久化 | 无影响 |
| 新增 | LastAllocationConfig | y | True | False | 环境上一次硬盘槽位全局编码配置 | Read: ReadOnly | general_hardware组件根据硬盘槽位编码维护 | 持久化 | 无影响 |
评审点二
在私有对象DriveStartSlotCnfig下的Configurations对象进行如下变更:
变更属性:变成属性名ChildStartSlot为ChildPriority,不再通过csr配死每个背板的起始槽位,改为通过优先级进行全局计算
详细描述
变化类型:PSR中变更私有对象
应用场景:用于灵活定义硬板槽位
持久化类型: 不持久化
操作权限:ReadOnly
| 变更类型 | 属性名称 | 签名 | 只读 | 变化通知 | 属性描述 | 访问权限 | 属性来源 | 持久化类型 | 变更影响 |
|---|---|---|---|---|---|---|---|---|---|
| 变更 | 变更ChildStartSlot为ChildPriority | ay | True | False | 表示硬盘背板插在上级单板不同槽位的编码优先级 | Read: ReadOnly | 通过csr版本配置 | 不持久化 | 无影响 |
参考示例
原配置:
"DriveStartSlotConfig_1": {
"Configurations": [
{
"UID": "000XXX1",
"Slot": 1,
"ChildSlotIndex": [1, 6],
"ChildStartSlot": [9, 0]
},
{
"UID": "000XXX2",
"Slot": 2,
"ChildSlotIndex": [1, 2, 6],
"ChildStartSlot": [5, 13, 1]
}
]
}
新配置:
"DriveStartSlotConfig_1": {
"Configurations": [
{
"UID": "000XXX1",
"Slot": 1,
"ChildSlotIndex": [1, 6],
"ChildPriority": [3, 0]
},
{
"UID": "000XXX2",
"Slot": 2,
"ChildSlotIndex": [1, 2, 6],
"ChildPriority": [2, 4, 1]
}
]
}
评审结论
评审点一、 同意在对象HddBackPlanes下新增私有属性DriveSlotAllocationEnabled、LastAllocationEnabled、 LastAllocationEnabled用于记录环境硬盘背板槽位编码配置。
评审点二、 不同意在私有对象DriveStartSlotCnfig下的Configurations对象中变更属性ChildStartSlot为ChildPriority。