已合并
【修改描述】适配PetaIO P8118Z3 NVMe SSD #364
yctco_huangyuxuan创建于 5月13日
【修改描述】适配PetaIO P8118Z3 NVMe SSD #364
已合并
yctco_huangyuxuan创建于 5月13日
共 5 个文件变更+313-3
@@ -1,5 +1,8 @@
1# Changelog1# Changelog
2All notable changes to this project will be documented in this file.2All notable changes to this project will be documented in this file.
3+## [1.100.22] - 2026-05-14
4+适配PetaIO P8118Z3 NVMe SSD
5+ 
3## [1.100.21] - 2026-05-116## [1.100.21] - 2026-05-11
4兼容32位系统7兼容32位系统
5 8 
@@ -0,0 +1,305 @@
1+*openUBMC 适配PetaIO P8118Z3 NVMe SSD功能详细设计说明书*
2+ 
3+<table>
4+ <tr>
5+ <td>所属SIG组:</td>
6+ <td>hardware-sig</td>
7+ </tr>
8+ <tr>
9+ <td>落入版本:</td>
10+ <td>26.06</td>
11+ </tr>
12+ <tr>
13+ <td>设计人员:</td>
14+ <td>黄宇轩</td>
15+ </tr>
16+ <tr>
17+ <td>日期:</td>
18+ <td>260330</td>
19+ </tr>
20+</table>
21+ 
22+**Copyright © 2025 openUBMC Community**
23+ 
24+您对&quot;本文档&quot;的复制,使用,修改及分发受木兰宽松许可证, 第2版协议(以下简称&quot;MulanPSL2&quot;)的约束。
25+为了方便用户理解,您可以通过访问<https://license.coscl.org.cn/MulanPSL2>了解MulanPSL2的概要 (但不是替代)。
26+MulanPSL2的完整协议内容您可以访问如下网址获取:<https://license.coscl.org.cn/MulanPSL2>。
27+ 
28+**改版记录**
29+ 
30+<table>
31+ <tr>
32+ <th>日期</th>
33+ <th>修订版本</th>
34+ <th>修订描述</th>
35+ <th>作者</th>
36+ <th>审核</th>
37+ </tr>
38+ <tr>
39+ <td>260330</td>
40+ <td>1.0</td>
41+ <td>初稿完成</td>
42+ <td>黄宇轩</td>
43+ <td>xxx</td>
44+ </tr>
45+ <tr>
46+ <td>xxx</td>
47+ <td>xxx</td>
48+ <td>xxx</td>
49+ <td>xxx</td>
50+ <td>xxx</td>
51+ </tr>
52+</table>
53+ 
54+**List of abbreviations** **缩略语清单** :
55+ 
56+<table>
57+ <tr>
58+ <th>Abbreviations 缩略语</th>
59+ <th>Full spelling 英文全名</th>
60+ <th>Chinese explanation 中文解释</th>
61+ </tr>
62+ <tr>
63+ <td>xxx</td>
64+ <td>xxx</td>
65+ <td>xxx</td>
66+ </tr>
67+ <tr>
68+ <td>xxx</td>
69+ <td>xxx</td>
70+ <td>xxx</td>
71+ </tr>
72+</table>
73+ 
74+[TOC]
75+ 
76+# 1.功能分析
77+## 1.1 功能背景
78+<!-- 描述该需求的来源或背景,比如:支撑XXX功能、XXX优化等;以及该需求对用户(含组件)带来什么具体价值,如果没有该需求,对用户(含组件)带来什么损失; -->
79+伙伴兼容性扩充,适配PetaIO NVMe SSD,用于行业网客户。若不支持则兼容性选择受限,增加供应链风险。
80+## 1.2 功能描述
81+<!-- 描述该需求交付的整体功能,主要实现XXX功能,解决XXX问题,明确方案如何实现 -->
82+openUBMC适配PetaIO NVMe SSD P8118Z3 1.6T和7.68T,web信息显示正常,支持调速。
83+已确认不支持通过mctp获取smart信息,也不支持带外标准协议升级命令
84+ 
85+## 1.3 功能场景
86+<!-- 描述该需求的业务使用场景,内容包括:
87+1) 场景出发条件及对象:什么角色/工具/接口等在什么具体情况下使用该特性,使用对象技能如何?
88+2) 使用时间及频度
89+3) 描述该特性主要有哪些场景、子场景及关键任务操作 -->
90+运维工程师、上层网管软件在机房开局、坏件替换、季度巡检等场景下需要获取硬盘信息,运维人员均通过能力认证,网管工具完成兼容性适配。
91+## 1.4 功能列表
92+<!-- 描述该需求交付的功能列表,内容包括:列出功能详细描述,标题、描述。 -->
93+| 功能编号 | 功能标题 | 功能描述 |
94+| ------- | ------- | -------- |
95+| 1 | openUBMC支持PetaIO P8118Z3 NVMe SSD | openUBMC适配PetaIO NVMe SSD P8118Z3含1.6T和7.68T|
96+ 
97+# 2.功能设计
98+## 2.1 总体方案分析
99+<!-- 描述该方案的总体设计(注:相关输出方案可同步刷新到各组件仓) -->
100+参考历史合入,配置厂商名与Vendor ID的映射关系和新增Vnedor ID对应的调速策略sr
101+硬盘信息如下
102+| 编码 | *VID/DID | *Sub VID/DID | 温度传感器 Slave Addr| *支持协议 | *是否支持调速 | *型号 |
103+ |--|--|--|--|--|--|--|
104+ | XXXX | 0x1ee4/0x1180 | 0x1ee4/0x0425 | 0xd5 | NVMe-MI | 是 | P8118ZU23351 |
105+ |XXXX|0x1ee4/0x1180|0x1ee4/0x0417|0xd5 | NVMe-MI | 是|P8118ZU23153|
106+### 2.1.1 方案详细设计
107+#### 2.1.1.1 方案概述
108+<!-- 描述该方案的整体实现,内容包括:涉及的关键点,实现策略等 -->
109+在Storage组件common_def.lua中的MANUFACTURE_ID_MAP数组中新增厂商名称PetaIO和Vendor id 0x1ee4映射配置;在VPD中新增本厂商的调速配置文件14140224_POLICY_1ee4.sr,调速参数如下表所示
110+| 服务器名称 | 服务器/主板类型 | 风扇类型 | 硬盘类型 | 厂家 | 型号/model号 | 对应风扇序号 | 目标值 | 触发全速门限 | 一般告警 | 严重告警 | 告警迟滞量 | 传感器失效异常调速 |
111+| --------- | -------------- | ------- | ------- |---- | ------------| ----------- | ------ | ----------- | ------- | ------- | --------- | ---------------- |
112+| X20 | 2u2路ARM | 8038+或8080 | NVMe SSD | PetaIO | P8118ZU23153 | FAN1/2/3/4 | 68 | 75 | 84 | 85 | 2 | 80% |
113+| X20 | 2u2路ARM | 8038+或8080 | NVMe SSD | PetaIO | P8118ZU23351 | FAN1/2/3/4 | 68 | 75 | 84 | 85 | 2 | 80% |
114+ 
115+#### 2.1.1.2 开发视图
116+<!-- 开发视图面向系统开发及软件管理,描述系统代码结构,构建结构的视图,主要解决系统技术实现和开发的问题,它依托逻辑视图,描述代码、构建结构 -->
117+新增配置不涉及
118+#### 2.1.1.3 运行视图
119+<!-- 运行视图面向系统运行,描述系统启动过程、运行期交互的视图,主要解决系统运行期交互,描述各可执行交付件在运行期的交互关系 -->
120+新增配置不涉及
121+### 2.1.2 内部依赖分析
122+<!-- 是否涉及与其他组件接口依赖,如果涉及需要确认当前是否已完成,是否匹配当前需求开发诉求 -->
123+不涉及
124+### 2.1.3 外部依赖分析
125+<!-- 是否涉及与平台SDK的依赖关系 -->
126+不涉及
127+### 2.1.4 北向接口分析
128+<!-- 需要分析当前功能是否有以下接口影响,如果有影响,则需要具体的补充影响点。其中注意点如下:
129+(1)如果有新增IPMI接口,请排查代码中IPMI命令注册的过滤字段,是否完全和IPMI命令的定义一致?
130+(2)新增一个接口时,需要咨询SIG组是否还有其他的接口受影响
131+(3)新增接口需要将对应接口属性名称和属性值列出,属性值若有单位、异常值处理、范围限制或格式规范也需要列出,对于标准接口需要列出标准接口文档中对应的属性名称和属性值相关规定-->
132+| 特性 | SNMP | CLI | WEB | KVM_VMM | IPMI(RMCP/RMCP+) | HMM | Redfish |
133+| ---- | ---- | ---- | --- | ------ | ---------------- | --- | ------- |
134+| openUBMC支持PetaIO P8118Z3 NVMe SSD | 不涉及 | 不涉及 | 不涉及 | 不涉及 | 不涉及 | 不涉及 | 不涉及 |
135+ 
136+### 2.1.5 兼容性分析
137+<!-- 当前的功能对现有在网的功能是否有影响,具体的影响点进行分析之后输出影响分析表格 -->
138+无影响
139+### 2.1.6 定制化接口分析
140+<!-- 如果支持定制化设置,则需要给出定制化时的默认值(空定制化项条件下的设置值),如果涉及到定制化接口变更或新增,注意定制化接口文档需配套修改。注意定制化默认值变更对白牌包的影响 -->
141+不涉及
142+### 2.1.7 导入导出分析
143+<!-- 如果支持导入导出的配置,则需要分析导入导出的schema。 -->
144+不涉及
145+### 2.1.8 传感器分析
146+<!-- 如果需要新增传感器,则需要提前登记和评审新增的传感器要素。新增传感器评审需要上SIG-Interface进行评审 -->
147+不涉及
148+### 2.1.9 精准告警事件分析
149+<!-- 如果需要新增事件,则需要提前登记和评审新增的时间要素 -->
150+不涉及
151+### 2.1.10 系统锁定分析
152+<!-- 对外的接口或者命令是否支持系统锁定 -->
153+不涉及
154+### 2.1.11 用例场景分析
155+<!-- 以表格的形式输出该需求涉及的用例场景 -->
156+| 用例编号 | 描述 | 预期 |
157+| --- | --- | --- |
158+| 1 | 通过web查询硬盘(厂商、型号、序列号、固件版本、温度)信息 | 信息正常显示|
159+| 2 | 通过web查询到的信息与OS下Smartctl查询到的信息对比 | 两边信息一致 |
160+| 3 |模拟硬盘温度至70、75、255| 调速正常生效、满转、80% |
161+| 4 | 模拟硬盘温度至84、85 | 告警正常产生 |
162+### 2.1.12 装备能力差异分析
163+<!-- 当前功能是否在装备版本和Release版本中存在能力差异,若有差异需要进行说明 -->
164+不涉及
165+### 2.1.13 持久化分析
166+<!-- 当前的功能是否涉及持久化,尤其是持久化类型变更或某个属性新增了取值,是否兼容老版本 -->
167+不涉及
168+## 2.2 非功能质量属性设计
169+### 2.2.1 扩展性分析
170+<!-- 考虑后续新增类似功能可以很好地扩展 -->
171+不涉及
172+### 2.2.2 重用性分析
173+<!-- 是否为通用处理方式、接口,如果是得考虑重用性 -->
174+不涉及
175+### 2.2.3 可测试性分析
176+<!-- 此需求如何验证,是否可直接验证,or通过XXX功能覆盖验证,or需要单独怎加测试接口验证 -->
177+新增配置项,通过系统测试覆盖,服务器安装PetaIO P8118Z3硬盘后Web查看信息和OS查询到信息对比进行验证
178+### 2.2.4 资料分析
179+<!-- 是否涉及资料修改 -->
180+修改兼容性列表
181+### 2.2.5 资源使用分析
182+<!-- 新增线程、内存分配、模型属性名长度是否合理,CPU占用率是否会激增,Flash中新增文件是否合理(频繁读写Flash会大幅缩短emmc寿命);是否涉及消息队列,如果涉及请检查是否存在某些场景下消息队列会满导致消息丢失,例如大量消息发送到队列且处理消息需要耗费较长时间的场景。 -->
183+不涉及
184+### 2.2.6 可靠性分析
185+| 编号 | 场景 | 问题描述 | 可靠性影响 | 问题级别 | 建议解决方案/需求 | 讨论结果 | 跟踪人 | 备注 |
186+| --- | --- | --- | --- | --- | --- | --- | --- | --- |
187+| 1 | DC场景 ||||||||
188+| 2 | AC场景 ||||||||
189+| 3 | BMC场景 ||||||||
190+| 4 | 服务重启 ||||||||
191+| 5 | 数据获取异常状态 ||||||||
192+ 
193+新增配置项,无逻辑代码变更,已有框架保障可靠性。
194+### 2.2.7 安全性分析
195+| 安全合规项 | 是否涉及 | 现有的防护措施 |
196+| --- | --- | --- |
197+| 访问控制(通道、文件权限、用户权限、查询权限、配置权限、接口权限) | 不涉及 | |
198+| 敏感数据 | 不涉及 | |
199+| 日志(操作日志、维护日志、安全日志、运行日志) | 不涉及 | |
200+| 文档 | 不涉及 | |
201+| 加密及算法 | 不涉及 | |
202+| 新增关键资源(密钥、证书、关键配置)备份、恢复 | 不涉及 | |
203+| 新增对外接口入参校验 | 不涉及 | |
204+| 新增开源及三方软件引入 | 不涉及 | |
205+ 
206+# 3.功能实现
207+<!-- 通过表格、流程图、简明文字描述提供,力求容易看懂、容易实现,详细描述细节。 -->
208+## 3.1【1】openUBMC支持PetaIO P8118Z3 NVMe SSD实现
209+### 3.1.1 功能实现设计
210+不再赘述
211+### 3.1.2 功能详细设计
212+在Storage组件common_def.lua中的MANUFACTURE_ID_MAP数组中新增厂商名称PetaIO和Vendor id 0x1ee4映射配置
213+因policy加载时CSR将厂商信息转化为全大写再用于匹配获取vendor id,因此需要配置厂商名称的全大写形式
214+~~~
215+ MANUFACTURE_ID_MAP = {
216+ ···
217+ ['PETAIO'] = 0x1ee4
218+ }
219+~~~
220+同时对于nvme_object.lua中获取厂商vendor id的代码,也需要加上将厂商转化为全大写的处理
221+~~~
222+function c_nvme:vpd_nvme_mi_get_vender_id(manufacture)
223+···
224+ -- 与policy加载时获取vendor id对manufacture的处理保持统一,解决原始厂商信息中大小写不一致导致获取不到vendor id
225+ manufacture = manufacture:gsub("^%s*(.-)%s*$", "%1"):upper()
226+ return common_def.MANUFACTURE_ID_MAP[manufacture]
227+end
228+~~~
229+ 
230+在VPD中基于14140224_POLICY_ffff.sr新增本厂商的调速配置文件14140224_POLICY_1ee4.sr
231+~~~
232+{
233+ "FormatVersion": "3.00",
234+ "DataVersion": "3.00",
235+ "ManagementTopology": {
236+ "Anchor": {
237+ "Buses": [
238+ "I2cMux_SMC"
239+ ]
240+ },
241+ "I2cMux_SMC": {
242+ "Chips": [
243+ "Chip_Temp"
244+ ]
245+ }
246+ },
247+ "Objects": {
248+ "Chip_Temp": {
249+ "Address": 213,
250+ "AddrWidth": 1,
251+ "OffsetWidth": 1,
252+ "WriteTmout": 100,
253+ "ReadTmout": 100,
254+ "HealthStatus": 0
255+ },
256+ "MidAvg_DiskTemp": {
257+ "WindowSize": 3,
258+ "DefaultValue": 20
259+ },
260+ "Scanner_Temp": {
261+ "Chip": "#/Chip_Temp",
262+ "Offset": 3,
263+ "Size": 1,
264+ "Mask": 255,
265+ "Type": 0,
266+ "Period": 2000,
267+ "Debounce": "#/MidAvg_DiskTemp",
268+ "NominalValue": 20,
269+ "ScanEnabled": "<=/::FruCtrl_1_0.PowerState |> string.cmp($1, 'ON') |> expr($1 ? 1 : 0)",
270+ "Value": 20
271+ },
272+ "CoolingRequirement_1_60": {
273+ "RequirementId": "${Slot} |> expr((60 << 8) | $1)",
274+ "MonitoringStatus": "<=/Scanner_Temp.Status; <=/Scanner_Temp.Value |> expr(($1 == 1 || $2 >= 255) ? 1 : 0)",
275+ "MonitoringValue": "<=/Scanner_Temp.Value",
276+ "FailedValue": 80,
277+ "TargetTemperatureCelsius": 68,
278+ "MaxAllowedTemperatureCelsius": 75,
279+ "TargetTemperatureRangeCelsius": [],
280+ "ThresholdValue": [],
281+ "AlarmSpeed": []
282+ }
283+ }
284+}
285+~~~
286+### 3.1.3 开发者测试
287+<!--
288+增加模块接口:以活动图/流程图等形式明确模块内处理流程,针对模块处理流程中的分支进行覆盖
289+修改模块接口处理流程:覆盖修改影响流程分支
290+-->
291+新增配置项,通过服务器安装PetaIO NVMe SSD硬盘后Web查看信息覆盖,
292+ 
293+1、检查厂商、型号、序列号、固件版本、温度信息是否正常显示,并于OS下通过smartctl查询到的信息对比,观察是否一致。
294+ 
295+2、模拟硬盘温度至70、75、255,观察调速是否正常生效。
296+ 
297+3、模拟硬盘温度至84、85,观察告警是否正常产生
298+#### 3.1.3.1 单元测试
299+<!-- UT,主要是功能单元测试,测试对象是功能单元接口。UT测试设计要从黑盒(功能)角度设计,从输入(I)、处理(B)、预期输出(O)的角度进行用例分析设计,测试覆盖率仅作为反馈,用于分析哪些功能场景没有覆盖到,从而指导测试设计优化并补充测试用例 -->
300+不涉及
301+#### 3.1.3.2 集成测试
302+<!-- IT,主要是组件/模块内的集成测试,测试对象是模块/组件接口。IT测试设计将模块/组件当作黑盒测试,IT测试用例中禁止对组件/模块内部代码打桩,如果确实有少量场景难以构造,可以考虑在测试框架中统一打桩并提供接口供测试用例调用构造场景。
303+说明:API测试属于IT,其测试对象是微服务接口。
304+PCST,是指PC上的服务集成测试,测试对象是功能需求。PCST测试设计,要覆盖正常功能、异常功能和交叉功能,采用灰盒 -->
305+不涉及
@@ -2,7 +2,7 @@
2 "name": "storage",2 "name": "storage",
3 "type": "application",3 "type": "application",
4 "deployConfig": "hardware.service",4 "deployConfig": "hardware.service",
5- "version": "1.100.21",5+ "version": "1.100.22",
6 "author": "Huawei",6 "author": "Huawei",
7 "license": "Mulan PSL v2",7 "license": "Mulan PSL v2",
8 "codeGenPolicy": {8 "codeGenPolicy": {
@@ -844,7 +844,8 @@ local common_def = {
844 ['MICRON'] = 0x1344,844 ['MICRON'] = 0x1344,
845 ['DERA'] = 0x1d78,845 ['DERA'] = 0x1d78,
846 ['SOLIDIGM'] = 0x025e,846 ['SOLIDIGM'] = 0x025e,
847- ['YMTC'] = 0x1e49847+ ['YMTC'] = 0x1e49,
848+ ['PETAIO'] = 0x1ee4
848 },849 },
849 850 
850 -- Multi Record公共头长度851 -- Multi Record公共头长度
@@ -412,7 +412,8 @@ function c_nvme:vpd_nvme_mi_get_vender_id(manufacture)
412 return common_def.NVME_VPD_VENDOR_ID_FOR_MEMBLAZE_7940412 return common_def.NVME_VPD_VENDOR_ID_FOR_MEMBLAZE_7940
413 end413 end
414 end414 end
415- 415+ -- 与policy加载时获取vendor id对manufacture的处理保持统一,解决原始厂商信息中大小写不一致导致获取不到vendor id
416+ manufacture = manufacture:gsub("^%s*(.-)%s*$", "%1"):upper()
416 return common_def.MANUFACTURE_ID_MAP[manufacture]417 return common_def.MANUFACTURE_ID_MAP[manufacture]
417end418end
418 419