*openUBMC 支持配置全局BmcStartFlag优化*

[TOC]

# 1.功能分析
## 1.1 功能背景

BMC启动需要写寄存器通知硬件，表明BMC已经启动；历史BmcStartFlag配置在BCU板的CpuBoard对象上，在无BCU场景无法配置，需要与CpuBoard解耦

## 1.2 功能描述

在BMC启动后写寄存器通知硬件表明BMC已经启动，不受是否有BMC板的限制

## 1.3 功能场景

1.BMC的上下电启动之后，如果对于各个FruCtrl对象完成了分发监听（无按钮的设备）或者设备的电源按钮监听，则将BmcStartFlag关联的硬件寄存器置1并且写入成功之后要回读，确保写入正确

2.在BmcStartFlag写入之后BMC的运行等由黄色闪烁变为黄色常亮（已有功能）
## 1.4 功能列表
| 需求类型 | 需求编号 | 需求标题 |需求描述|
| ------- | ------- | -------- | -------- |
| SR | SR20260115731615 | 支持配置全局BmcStartFlag优化 |【简要说明】支持配置全局BmcStartFlag<br>背景：<br>1. BMC启动需要写寄存器通知硬件，表明BMC已启动<br>2. 历史BmcStartFlag配置在BCU板上，在CpuBoard对象上，在无BCU场景下无法配置，需要与CpuBoard解耦<br>【系统用户】BMC<br>【前置条件】BMC运行正常<br>【主成功场景】<br>1. BMC 的上下电启动之后，如果对于各个 FruCtrl 对象完成了分发监听（无按钮的设备）或者设备的电源按钮监听，则将 BmcStartFlag 关联的硬件寄存器置 1（ENABLE）；并且写入成功之后要进行回读，确保写入正确<br>2. 在 BmcStartFlag 写入之后 BMC 的运行灯由 黄色闪烁 变为 黄色常亮|<br>【扩展场景(含异常场景)】<br>【约束】<br>【非功能需求】<br>（1）可靠性要求：需要有回读校验，确保可靠写入<br>（2）可维护性要求：写入成功后记录日志<br>（3）可测试性要求：通过日志观察BMC是否已经上下电功能启动可用；通过近端观察 BMC 的运行灯的闪烁状态<br>（4）性能要求：NA<br>（5）兼容性要求(和以前版本及周边配套)：不涉及<br>（6）安全要求：NA<br>（7）韧性要求：NA|


# 2.功能设计
## 2.1 总体方案分析

### 2.1.1 方案详细设计
#### 2.1.1.1 方案概述
https://discuss.openubmc.cn/t/topic/4720  
【已评审】新增BmcStart对象、CSR配置属性Flag  

配置CSR对象BmcStartFlag，其中Value属性用于表征BMC的启动状态，BMC启动后，FruCtrl各对象完成分发后，通过循环往BmcStartFlag的Value中写1成功，写入成功后回读确认成功。

#### 2.1.1.2 开发视图

@startuml
title 函数执行流程

start
:进入函数update_bmc_start_flag();

partition "主循环" {
  while (循环获取和设置Value的值) is (未完成)
    :调用get_bmc_start_flag函数获取Value的值;
    if (Value的值是否为1?) then (否)
      :调用set_prop函数将Value的值置为1;
    else (是)
      :退出当前循环;
      break
    endif
  endwhile
}

partition "验证循环" {
  while (验证Value的值) is (需要验证)
    :调用get_bmc_start_flag函数回读Value的值;
    if (Value的值是否为1?) then (是)
      :退出验证循环;
      break
    else (否)
      :返回主循环;
      detach
    endif
  endwhile
}

:函数update_bmc_start_flag()执行完成;
stop
@enduml

#### 2.1.1.3 运行视图


### 2.1.2 内部依赖分析

不涉及

### 2.1.3 外部依赖分析

不涉及

### 2.1.4 北向接口分析

不涉及

### 2.1.5 兼容性分析

不涉及

### 2.1.6 定制化接口分析
不涉及

### 2.1.7 导入导出分析
不涉及导入导出配置变更

### 2.1.8 传感器分析
不涉及新增传感器

### 2.1.9 精准告警事件分析
不涉及

### 2.1.10 系统锁定分析
不涉及

### 2.1.11 用例场景分析
| 用例编号 | 描述 | 预置条件 | 测试步骤 | 用例预期 |
| ------- | ------- | ------- | ------- | ------- |
| Case1 | BMC启动后往BmcStartFlag写1 | BMC上下电功能正常 | 启动BMC成功后，观测BmcStartFlag是否置1 | BmcStartFlag为1 |



## 2.2 非功能质量属性设计
### 2.2.1 扩展性分析

不涉及
### 2.2.2 重用性分析
不涉及

### 2.2.3 可测试性分析
通过日志观察BMC是否已经上下电功能启动可用；通过近端观察 BMC 的运行灯的闪烁状态；
历史用例满足即可

### 2.2.4 资料分析
不涉及

### 2.2.5 资源使用分析
不涉及

### 2.2.6 可靠性分析(含SFMEA)

添加回读校验，确保可靠写入

### 2.2.7 安全性分析

| 安全合规项 | 是否涉及 | 现有的防护措施 |
| --- | --- | --- |
| 访问控制（通道、文件权限、用户权限、查询权限、配置权限、接口权限） | 否 | 不涉及 |
| 敏感数据 | 否 | 不涉及敏感数据处理 |
| 日志（操作日志、维护日志、安全日志、运行日志） | 是 | 1. 记录写入成功日志<br> |
| 文档 | 否 | 不涉及文档安全 |
| 加密及算法 | 否 | 不涉及加密算法 |
| 新增关键资源（密钥、证书、关键配置）备份、恢复 | 否 | 不涉及密钥证书管理 |
| 新增对外接口入参校验 | 否 | 不涉及新增对外接口 |
| 新增开源及三方软件引入 | 否 | 不涉及新的开源软件引入 |

# 3.功能实现

## 3.1 功能实现设计

FruCtrl下新增CSR配置对象BmcStartFlag以及相应的属性Value，BMC启动后FruCtrl组件完成对象分发后开始往Value中写1

## 3.2 功能详细设计



## 3.3 开发者测试

### 3.3.1 单元测试

### 3.3.2 集成测试
| 组件名 | 用例类型 |  描述 | 预置条件 | 测试步骤 | 用例预期 |
| --- | --- | --- | --- | --- |  --- |  
| fructrl | IT | BMC启动后往BmcStartFlag写1 | BMC上下电功能正常 | 启动BMC成功后，观测BmcStartFlag是否置1 | BmcStartFlag为1 |