NVME定位点灯失败

问题描述

web界面上设置NVME定位状态或通过busctrl直接操作SMC,实际硬盘背板点灯失败,但是通过SMC进入装备模式,硬盘背板灯能全亮。

环境信息

  • 软件版本:OpenUBMC2509

  • 硬盘背板CPLD版本:3.07

  • 硬盘背板型号:BC83NHBC

重现步骤

1.网页操作,点击确认后,提示操作成功,但实际点灯失败

期望结果

NVME定位点灯正常

实际结果

web界面显示定位状态设置成功,但是实际对应NVME灯没有点亮

尝试过的解决方案

1.使用busctl直接操作SMC
先获取硬盘状态,但是27 0对应SMC表中,NVME状态似乎不对,BMC复位硬盘状态寄存器显示的为执行复位硬盘
busctl --user call bmc.kepler.hwproxy /bmc/kepler/Chip/Smc/Smc_EnclSMC_010102 bmc.kepler.Chip.BlockIO Read a{ss}uu 0 0x14000500 100


2.执行设置
busctl --user call bmc.kepler.hwproxy /bmc/kepler/Chip/Smc/Smc_EnclSMC_010102 bmc.kepler.Chip.BitIO Write a{ss}uyuay 0 0x14000609 2 0xffffffff 2 0x1b 0x04,灯无变化,同时在通过Read a{ss}uu 0 0x14000500 100读取,依旧对应的值没有发生变化还是27 0

1 个赞

答案内容由AI生成,仅供参考:

NVMe 定位点灯失败问题分析与解决方案

根据您提供的详细信息,该问题表现为在 OpenUBMC 2509 系统中,通过 Web 界面或 busctl 命令尝试点亮 NVMe 硬盘的定位灯(Locate LED)时操作返回成功,但实际硬件背板上的定位灯未点亮。同时,在 SMC 装备模式下,背板灯可被正常点亮,说明 LED 物理电路正常。以下基于知识库内容进行系统性分析与定位。


一、问题现象总结

项目 内容
问题类型 NVMe 定位灯控制失效
发生环境 OpenUBMC v25.09
硬件平台 BC83NHBC 型号硬盘背板,CPLD 版本 3.07
触发方式 Web 界面设置“定位状态” 或 使用 busctl 操作 SMC 寄存器
预期结果 对应 NVMe 插槽的定位灯闪烁
实际结果 操作返回成功,但灯未亮
特殊现象 SMC 装备模式可点亮所有灯 → 排除 LED 硬件故障

二、根本原因分析

1. 控制链路结构说明

从知识库信息可知,NVMe 定位灯的控制流程如下:

Web / IPMI → openUBMC (BMC) → SR配置文件 → Scanner/Accessor → SMC芯片 → CPLD → LED物理灯

其中:

  • SetLocateLed 属性用于触发定位灯。
  • Scanner_DriveXLocateAccessorAccessor_DriveXLocateAccessor 是 SR 中定义的寄存器读写接口。
  • SMC(System Management Controller) 作为中间控制器,通过 I2C 与 BMC 通信,并向 CPLD 发送命令。
  • CPLD(复杂可编程逻辑器件) 直接驱动 LED,是最终执行单元。

:pushpin: 见关系图Hard Disk LED Lighting 影响 NVMe Disk
:pushpin: 见文档 chunk 3:NVMe 定位灯功能通过向背板发送 SMC 命令 实现


2. 故障点排查结论

尽管上层指令执行成功(返回成功),但底层 LED 无反应,结合 busctl 操作无效和寄存器值未变的现象,可得出:

:white_check_mark: 已排除的可能原因:

  • 物理 LED 损坏:SMC 装备模式下灯能亮,证明 LED 与驱动电路正常。
  • 网络或接口问题:Web 操作提示“成功”,说明命令已送达 BMC 并处理。
  • 权限或认证问题:操作未报错。

:cross_mark: 疑似根本原因:

硬盘背板 CPLD 固件版本(3.07)存在 LED 控制逻辑缺陷,导致无法响应来自 SMC 的点灯指令

支持该判断的关键证据包括:

  1. 历史案例完全一致

    • 见 Document Chunk 1:之前有相同问题(通过 IPMI 设置故障灯失败)被定位为“硬盘背板 CPLD 存在问题”,解决方案为 升级硬盘背板固件
    • 结论原文:“问题排除,当前定位原因为硬盘背板的CPLD存在问题,解决方式为升级新的硬盘背板的固件版本。升级版本并且生效后可以通过ipmi正常查询故障灯状态。
  2. busctl 操作无效佐证底层通信失败

    • 用户尝试使用 busctl 直接调用 SMC 的 BitIO Write 向地址 0x14000609 写入值 0x1b 0x04,但后续 Read 发现值未更新(仍为 27 0),说明:
      • SMC 未正确接收或处理写入请求;
      • 或 CPLD 忽略了该命令;
      • 或状态同步机制异常。
    • 结合“装备模式灯能亮”,说明只有在特殊测试模式下才绕过主控逻辑直接点亮,进一步表明日常管理模式存在指令拦截或解析错误。
  3. CPLD 在 NVMe LED 控制中的核心作用

    • 搜索结果提及:“CPLD点灯能力是否正常,可通过带内点灯进行交叉验证
    • Scanner_DriveXFalutAccessor 等对象配置了 Offset、Mask、Size 等寄存器参数,若 CPLD 固件对寄存器映射不兼容,则无法执行动作。

三、解决方案建议

:white_check_mark: 推荐措施:升级硬盘背板 CPLD 固件

步骤如下:

  1. 确认是否存在更高版本的 CPLD 固件

    • 查询华为官方发布渠道或内部固件仓库,确认当前 BC83NHBC 背板是否有 高于 3.07 的 CPLD 版本
    • 示例文件:ubmc_YunHe_920S_L1.hpm 正是用来升级 CPLD 的 HPM 格式固件包。
  2. 准备固件并上传

    • 将新版本 CPLD 固件通过 Web 界面或 CLI 工具上传至 BMC。
  3. 执行升级操作

    # 示例命令(实际路径根据系统而定)
    ipmitool fw update start <filename.hpm>
    

    或通过 Web 界面路径:

    iBMC管理 → 固件升级 → 固件更新

  4. 重启并验证

    • 固件升级完成后执行冷重启(断电生效)。
    • 进入 Web 界面重新操作“定位灯”,观察是否正常点亮。
    • 使用 busctl 再次读取寄存器值,确认已修改。

:warning: 备选方案(临时调试)

如果暂无更高版本固件,可尝试以下调试手段定位:

1. 检查 SR 配置中定位灯寄存器定义是否正确

参考 CSR 字典配置:

"SetLocateLed": "#/Accessor_Drive3LocateAccessor.Value",
"LocateLed": "<=/Scanner_Drive3LocateAccessor.Value"
  • 查看 /vendor/openUBMC/BC83NHBC_*.sr 文件中是否正确定义了:
    • Offset, Mask, Size, Chip(应为 #/Smc_EnclSMC
  • 可比对其他已知正常机型的 SR 文件。

2. 验证 SMC 命令是否被正确路由

# 先读初始状态
busctl --user call bmc.kepler.hwproxy /bmc/kepler/Chip/Smc/Smc_EnclSMC_010102 bmc.kepler.Chip.BlockIO Read a{ss}uu 0 0x14000500 100

# 再尝试写定位灯(以 slot 8 为例)
busctl --user call bmc.kepler.hwproxy /bmc/kepler/Chip/Smc/Smc_EnclSMC_010102 bmc.kepler.Chip.BitIO Write a{ss}uyuay 0 0x14000609 2 0xffffffff 2 0x1b 0x04

# 再次读取,确认值是否改变
busctl --user call bmc.kepler.hwproxy /bmc/kepler/Chip/Smc/Smc_EnclSMC_010102 bmc.kepler.Chip.BlockIO Read a{ss}uu 0 0x14000500 100

若值始终不变,则基本可断定:CPLD 固件过滤或拒绝了该写入请求


四、预防建议

建议项 说明
统一维护 CPLD 固件版本 建立硬件兼容性列表,确保背板 CPLD 与 openUBMC 版本匹配
发布前集成测试 在新版本 openUBMC 发布前,需覆盖点灯、状态读取等功能测试
保留装备模式入口 用于紧急场景下的硬件自检与诊断

五、总结

项目 结论
问题定位 硬盘背板 CPLD 固件版本 3.07 存在控制逻辑缺陷,无法响应 SMC 下发的 NVMe 定位灯指令
根本原因 CPLD 固件未正确处理来自 SMC 的 BitIO 写命令,导致 LED 无法触发
解决方法 升级硬盘背板 CPLD 至最新版本固件(>3.07)
支撑证据 既有案例表明同类问题(LED 控制失效)通过升级 CPLD 解决;busctl 操作无效;装备模式灯可亮

:white_check_mark: 最终建议行动:联系华为技术支持获取适用于 BC83NHBC 背板的最新 CPLD 固件包,并执行升级操作。

相关链接:

  1. 关于通过ipmi命令查询硬盘故障灯的问题
  2. web上无法更新BIOS、BMC等固件包
  3. V3 上适配nvme盘个人总结
  4. 点定位灯之后,硬盘信息消失
  5. 硬盘背板开发指南 | 文档中心 | openUBMC

CPLD版本根据官网查询已经是最新版本
对storage组件中nvme_object.lua增加了部分日志打印,点击触发定位的app.log如下

2026-01-22 08:17:36.132146 storage NOTICE: rpc_service_drive.lua(59): [Storage]Start SetLocationIndicatorState of Disk8
2026-01-22 08:17:36.177102 storage NOTICE: rpc_service_drive.lua(78): [Storage]Successfully SetLocationIndicatorState of Disk8.
2026-01-22 08:17:41.565377 storage ERROR: nvme_object.lua(670): Starting update_res_id, ref_component: table: 0x7fd527586850
2026-01-22 08:17:41.565653 storage ERROR: nvme_object.lua(671): self.nvme_info: table: 0x7fd50f4ac5f8
2026-01-22 08:17:41.566782 storage ERROR: nvme_object.lua(672): ref_component.path: /bmc/kepler/Systems/1/Components/Component_PCIeCard1_0101020101
2026-01-22 08:17:41.567044 storage ERROR: nvme_object.lua(673): ref_component.Instance: nil
2026-01-22 08:17:41.567250 storage ERROR: nvme_object.lua(674): ref_component.Type: nil
2026-01-22 08:17:41.627901 storage ERROR: nvme_object.lua(689): Successfully got PcieAddrInfo list, count: 0
2026-01-22 08:17:41.630325 storage ERROR: nvme_object.lua(704): Successfully retrieved ref_component
2026-01-22 08:17:41.632635 storage ERROR: nvme_object.lua(706): ref_component.Instance=8, ref_component.Type=2
2026-01-22 08:17:41.633526 storage ERROR: nvme_object.lua(708): obj_list num: 0
2026-01-22 08:17:41.638393 storage ERROR: nvme_object.lua(712): check addr_info: SlotID=10, ComponentType=2, SocketID=0
2026-01-22 08:17:41.643462 storage ERROR: nvme_object.lua(712): check addr_info: SlotID=9, ComponentType=2, SocketID=0
2026-01-22 08:17:41.649925 storage ERROR: nvme_object.lua(712): check addr_info: SlotID=11, ComponentType=2, SocketID=0
2026-01-22 08:17:41.654025 storage ERROR: nvme_object.lua(712): check addr_info: SlotID=10, ComponentType=2, SocketID=0
2026-01-22 08:17:41.657932 storage ERROR: nvme_object.lua(712): check addr_info: SlotID=11, ComponentType=2, SocketID=0
2026-01-22 08:17:41.661796 storage ERROR: nvme_object.lua(712): check addr_info: SlotID=8, ComponentType=2, SocketID=0
2026-01-22 08:17:41.666129 storage ERROR: nvme_object.lua(720): addr_info.SocketID=0
2026-01-22 08:17:41.667333 storage ERROR: nvme_object.lua(728): ok SocketID, 0add1
2026-01-22 08:17:41.667689 storage ERROR: nvme_object.lua(743): Setting nvme_info.ResouceId to: 1
2026-01-22 08:17:41.667953 storage ERROR: nvme_object.lua(745): ResourceId update completed successfully

storage也是通过硬盘背板CSR里关联的SMC命令字ACCESSOR对象点灯的,如果通过
busctl --user call bmc.kepler.hwproxy /bmc/kepler/Chip/Smc/Smc_EnclSMC_010102 bmc.kepler.Chip.BitIO Write a{ss}uyuay 0 0x14000609 2 0xffffffff 2 0x1b 0x04
无法点灯,需要找CPLD的同事看看命令字是否正确,还有CSR里 看是否跟硬盘背板的槽位有关,有的硬盘背板的槽位不同 Offset会有偏移

"Accessor_Drive0LocateAccessor": {
            "Chip": "#/Smc_EnclSMC",
            "Size": 2,
            "Offset": "${Slot} |> expr($1 == 3 ? 335545881 : 335545883)",
            "Mask": 3072,
            "Type": 0,
            "Value": 0
        },

目前只接了一个硬盘背板,CPLD相关代码有部分是封装的,请问华为方面CPLD需要找哪位同事呢?

为啥要点nvme的背板灯啊,哪个槽对哪个盘,还有SN对应不是都很明确了,手动写寄存器能点,但是通过bmc的接口点不了的话,看下csr里Drive.LocateLed关联的寄存器和你busctl写的寄存器是不是一个

非装备模式下,手动写寄存器是失败的,而且有些奇怪的地方是获取硬盘状态27 0对应smc表,Get Disk info 是在执行复位硬盘,不清楚是否与这个有关

内部已对齐,是逻辑版本资源不够,没有支持点灯功能,需升级cpld

那么需要升级的cpld版本是多少3.10吗?

3.10是支持的

3.10验证NVME能够正常点灯,但引出两个问题,第一个是点灯后,BMC硬盘界面,会丢失SATA盘,第二个是点击定位状态后,BMC未更新,需要刷新界面,状态才会更新,待确认后,重新发帖

你们的BMC是什么版本,看问题1的描述 感觉像是历史解决过的问题

当前是基于2509版本
第一个问题,重新测试发现,如果在raid卡未加载上来前,进行点灯操作会导致BMC硬盘界面SATA盘丢失,raid卡加载上来后,再进行点灯则不会有该情况
第二个问题,对比华为原生机台也会有同样情况

第一个问题参考该帖子

第二个问题定位原因为后端处理需要时间,而前端在设置点灯后,几乎立刻做查询动作,后端资源树还未更新,需要前端增加延时,或后端rackmount处修改设置点灯逻辑