mermaid画图测试

背景

(必选)从最终用户视角阐述当前有什么问题,包含问题的场景、影响点,以及当前系统的差距。(提交议题时删除此引导说明)

关联ISSUE

整体方案

  1. 硬件提供hpm包时在update.cfg文件中新增属性HotValidType,执行升级流程时,general_hardware组件判断若HotValidType = 1,则执行无感升级流程,否则执行现有的冷升级流程。
  2. 完整的无感升级流程,步骤如下:
    1. 向CPLD中写入cpld.svf文件。
    2. 检查bios是否处于正在启动的状态,如果是的话等待bios启动完成。之后向CPLD寄存器写入标志位,通知CPLD将数据存储到flash,并等待CPLD通过寄存器响应。
    3. 将CPLD指定的寄存器列表里面的数据读出,保存下来,待升级流程完成后重新写入进行恢复。
    4. 向CPLD寄存器写入标志位,通知其他CPLD消费模块即将开始升级,需要暂停访问CPLD的操作。等待各消费模块做好升级准备后写寄存器回复BMC。
    5. 关闭BMC访问CPLD的能力,防止升级过程中产生误告警。
    6. 拉低无感升级专用GPIO。
    7. 加载valid.svf文件。
    8. 恢复步骤3)、4)、5)、6)的操作。
  3. 以上无感升级流程中,并非所有的步骤都要执行,而是根据具体产品的CPLD执行其中一部分。例如,鲲鹏产品的CPLD无感升级时,无需执行步骤4)、6);昇腾产品的CPLD无感升级时,无需执行步骤2)。此外,以上步骤中与CPLD通信交互的寄存器地址、需要保存与恢复的寄存器地址、GPIO管脚编号等信息均与具体的CPLD相关,无法固化在代码流程中。因此,需要为LogicFirmware对象新增私有属性,关联以上无感升级流程中的必要信息。在配置CSR时正确配置LogicFirmware的这些新增属性,从而实现无感升级功能的正确执行。

评审点

评审点1:LogicFirmware对象新增私有属性RestoreRegs,新增对象CpldRestoreRegs,用于无感升级流程中保存和恢复寄存器内容

评审点2:LogicFirmware对象新增私有属性WriteSignalReg,用于无感升级过程中BMC通知消费模块即将开始无感升级

评审点3:LogicFirmware对象新增私有属性ReadSignalRegs,新增对象CpldReadSignalRegs,用于无感升级过程中各个消费模块通知BMC已完成无感升级的准备

评审点4:LogicFirmware对象新增私有属性UpgradeGpio,用于保存无感升级使用的GPIO管脚信息

详细描述

评审点1:LogicFirmware对象新增私有属性RestoreRegs,新增对象CpldRestoreRegs,用于无感升级流程中保存和恢复寄存器内容

LogicFirmware对象新增私有属性RestoreRegs

属性名称 涉及对象 资源path 变化类型 属性说明 持久化类型 取值说明
RestoresRegs general_hardware组件的LogicFirmware对象 新增私有属性 关联当前固件的寄存器信息,用于无感升级流程中保存和恢复这些寄存器的内容 不持久化 关联新增的CpldRestoreRegs对象

配置举例:

"LogicFirmware_Test1": {
    ...
	"RestoresRegs": "#/CpldRestoreRegs_Test1",
	...
}

新增对象CpldRestoreRegs

新增对象CpldRestoreRegs的属性与含义如下:

属性名称 涉及对象 资源path 变化类型 属性说明 持久化类型 取值说明
Regs general_hardware组件的CpldRestoreRegs对象 新增私有属性 无感升级流程中保存和恢复寄存器的信息 不持久化 见下表

属性Regs的类型为数组,其下的每个成员均为结构体类型,以下为Regs成员的属性定义和含义
| 属性名称 | 涉及对象 | 资源path | 变化类型 | 属性说明 | 持久化类型 | 取值说明 |
| RestoreReg | CpldRestoreRegs对象下的Regs属性 | 无 | 新增私有属性 | 待保存与恢复的寄存器对象 | 不持久化 | 关联Accessor寄存器对象 |
| RestoreType | CpldRestoreRegs对象下的Regs属性 | 无 | 新增私有属性 | 无感升级后寄存器值的恢复策略 | 不持久化 | 0:RestoreValueState正常时使用RestoreValue恢复,否则使用RestoreDefaultValue恢复
1:RestoreValueState正常时使用RestoreValue恢复,否则无动作
其他值:不处理
默认值:0 |
| RestoreValue | CpldRestoreRegs对象下的Regs属性 | 无 | 新增私有属性 | 待保存与恢复的寄存器值 | 不持久化 | 1. 配置为固定值,表示升级完成后需要将该寄存器恢复为固定值
2. 配置为关联Accessor或Scanner,表示升级前需要读取寄存器内容保存,升级后根据读取的内容恢复 |
| RestoreValueState | CpldRestoreRegs对象下的Regs属性 | 无 | 新增私有属性 | 待保存与恢复的寄存器值状态 | 不持久化 | 0:寄存器值正常,无感升级后使用RestoreValue进行恢复
非0:寄存器值异常,无感升级后的恢复动作根据RestoreType取值决定
默认值:0 |
| RestoreDefaultValue | CpldRestoreRegs对象下的Regs属性 | 无 | 新增私有属性 | 当RestoreValueState异常时需要恢复的默认值 | 不持久化 | 配置为固定值,当RestoreValueState异常且需要恢复时,使用该值恢复 |

配置举例:

"CpldRestoreRegs_Test1": {
    "Regs": [
	    {
		    "RestoreReg": "#/Accessor_Reg1.Value",
			"RestoreValue": 5
		},
		{
		    "RestoreReg": "#/Accessor_Reg2.Value",
			"RestoreValue": "<=/Scanner_Reg2.Value",
			"RestoreValueState": "<=/Scanner_Reg2.State",
			"RestoreDefaultValue": 10
		},
		{
		    "RestoreReg": "#/Accessor_Reg3.Value",
			"RestoreValue": "<=/Scanner_Reg3.Value",
			"RestoreValueState": "<=/Scanner_Reg3.State",
			"RestoreType": 1
		}
	]

以上配置含义中,各寄存器的恢复策略如下:

  • Reg1:无感升级后恢复为默认值5
  • Reg2:如果升级前自身的State正常,则保存自身数值,无感升级后恢复为保存的数值。否则恢复为默认值10
  • Reg3:如果升级前自身的State正常,则保存自身数值,无感升级后恢复为保存的数值。否则不恢复

评审点2:LogicFirmware对象新增私有属性WriteSignalReg,用于无感升级过程中BMC通知消费模块即将开始无感升级

属性名称 涉及对象 资源path 变化类型 属性说明 持久化类型 取值说明
WriteSignalReg general_hardware组件的LogicFirmware对象 新增私有属性 关联待升级CPLD的寄存器,用于在无感升级前通知其他消费模块准备升级 不持久化 关联待升级CPLD的寄存器

配置举例:

"LogicFirmware_Test1": {
    ...
	"WriteSignalReg": "#/Accessor_Reg4.Value",
	...
}

评审点3:LogicFirmware对象新增私有属性ReadSignalRegs,新增对象CpldReadSignalRegs,用于无感升级过程中各个消费模块通知BMC已完成无感升级的准备

LogicFirmware对象新增私有属性ReadSignalRegs

属性名称 涉及对象 资源path 变化类型 属性说明 持久化类型 取值说明
ReadSignalRegs general_hardware组件的LogicFirmware对象 新增私有属性 关联待升级CPLD的寄存器,用于在无感升级前接收各消费模块已准备好进行升级的返回信息 不持久化 关联新增的CpldReadSignalRegs对象

配置举例:

"LogicFirmware_Test1": {
    ...
	"ReadSignalRegs": "#/CpldReadSignalRegs_Test1",
	...
}

新增对象CpldReadSignalRegs

属性名称 涉及对象 资源path 变化类型 属性说明 持久化类型 取值说明
Regs general_hardware组件的CpldReadSignalRegs对象 新增私有属性 BMC接收各消费模块已准备好进行升级的寄存器列表 不持久化 取值为数组,数组内每个成员为一个Accessor寄存器对象

配置举例:

"CpldReadSignalRegs_Test1": {
    "Regs": [
	    "#/Accessor_Reg5.Value",
		"#/Accessor_Reg6.Value",
		"#/Accessor_Reg7.Value"
	]

以上评审点2和3中新增的属性具体使用方法如下:

sequenceDiagram
    participant BMC as BMC
    participant CPLD as CPLD
    participant model1 as 消费模块1
    participant model2 as 消费模块2
    participant modeln as 消费模块n

    Note over BMC: 无感升级步骤1)、2)、3)
    BMC ->> CPLD: 将WriteSignalReg寄存器写为0
    Note over CPLD: 逻辑保证,每当WriteSignalReg寄存器跳变时,自动将所有的ReadSignalRegs写为0
    BMC ->> CPLD: 将WriteSignalReg寄存器写为0x55
    BMC -->> CPLD: 循环读取所有ReadSignalRegs,等待寄存器全变为0x55
    model1 -->> CPLD: 读取WriteSignalReg变为0x55
    model2 -->> CPLD: 读取WriteSignalReg变为0x55
    modeln -->> CPLD: 读取WriteSignalReg变为0x55
    Note over model1: 升级前准备工作
    Note over model2: 升级前准备工作
    Note over modeln: 升级前准备工作
    model1 ->> CPLD: 写ReadSignalRegs为0x55
    model2 ->> CPLD: 写ReadSignalRegs为0x55
    modeln ->> CPLD: 写ReadSignalRegs为0x55
    BMC -->> CPLD: 所有ReadSignalRegs已变为0x55
    Note over BMC: 无感升级步骤5)、6)、7)
    BMC ->> CPLD: 将WriteSignalReg寄存器写为0
    BMC ->> CPLD: 将WriteSignalReg寄存器写为0xAA
    BMC -->> CPLD: 循环读取所有ReadSignalRegs,等待寄存器全变为0xAA
    model1 -->> CPLD: 读取WriteSignalReg变为0xAA
    model2 -->> CPLD: 读取WriteSignalReg变为0xAA
    modeln -->> CPLD: 读取WriteSignalReg变为0xAA
    Note over model1: 升级后恢复工作
    Note over model2: 升级后恢复工作
    Note over modeln: 升级后恢复工作
    model1 ->> CPLD: 写ReadSignalRegs为0xAA
    model2 ->> CPLD: 写ReadSignalRegs为0xAA
    modeln ->> CPLD: 写ReadSignalRegs为0xAA
    BMC ->> CPLD: 将WriteSignalReg寄存器写为0
    Note over BMC: 无感升级剩余步骤

评审点4:LogicFirmware对象新增私有属性UpgradeGpio,用于保存无感升级使用的GPIO管脚信息

属性名称 涉及对象 资源path 变化类型 属性说明 持久化类型 取值说明
UpgradeGpio general_hardware组件的LogicFirmware对象 新增私有属性 无感升级流程中使用的专用GPIO引脚编号 不持久化 取值为U8,GPIO引脚编号
默认值:255

配置举例:

"LogicFirmware_Test1": {
    ...
	"UpgradeGpio": 55,
	...
}

评审结论

(必选)针对决策点,详细描述最终结论,不能是简单的同意或不同意,通过或不通过。(提交议题时删除此引导说明)

正面示例:
同意redfish接口/redfish/v1/XXXXX的GET操作响应体增加如下属性
(详细描述属性名称、属性取值类型、取值范围、约束等)

不同意新增资源协作接口XXXXX

不同意资源协作接口XXX新增XX属性/方法

反面示例:
通过,同意新增接口

遗留问题

(可选)列出评审会议现场无法直接给出明确结论的事务,会后确认清楚之后要在此处录入明确的结论,如不涉及,则可以写无或删除此部分。参考格式如下:(提交议题时删除此引导说明)
1、需要确认XXX
结论: