上电超时未清除上电超时标志

问题描述

1.已配置”上电超时电源告警码”,及”清除系统事件”。

image

2.当出现上电超时事件时,web点击上电后无响应。未上电原因为BMC未下发“清除系统事件”SMC指令给cpld。

环境信息

  • 操作系统:Ubuntu 24.04

  • 软件版本:version:25.09

  • 工具版本:bmcgo 0.7.14

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

上电超时未清除上电超时标志:问题描述与分析

问题现象

在系统出现上电超时事件后,通过Web界面点击上电操作无响应。经排查发现,根本原因为BMC未向下位机(如SMC/CPLD)下发“清除系统事件”的指令,导致系统无法恢复正常上电流程。


环境信息

  • 操作系统:Ubuntu 24.04
  • 软件版本:version: 25.09
  • 工具版本:bmcgo 0.7.14

配置信息说明

1. 已配置项目

  • 上电超时电源告警码
  • 清除系统事件功能

2. 关键寄存器状态(Accessor_PowerOnLock)

{
  "Accessor_PowerOnLock": {
    "Chip": "#/Smc_ExpBoardSMC",
    "Offset": 469766657,
    "Size": 1,
    "Mask": 8,
    "Type": 0,
    "Value": 0
  }
}
  • 当前 Value = 0,表示上电锁未激活
  • 该寄存器值通过动态关联机制映射至 PowerOnTimeoutFlag,用于控制硬件上电锁定状态。

:white_check_mark: 说明:硬件层面当前未锁定上电流程,理论上应可以上电。


3. 系统事件清除配置

项目 配置说明
清除单板锁存异常记录指示寄存器 1h: 默认状态;0h: 表示异常已记录(需写清)
清除单板上电超时当前错误记录指示寄存器 1h: 默认状态;0h: 异常已记录(需写清)
清除系统事件 - 业务系统上电超时事件 0h: 无效;1h: 有效
业务系统异常掉电事件 0h: 无效;1h: 有效
  • 当前配置表明:系统支持通过置位 1h 来触发清除操作。

4. 扩展组件管理功能设置

0 0 1 0 1  
0 0 1 0 1  

上电超时电源自重启  
异常掉电电源自重启  

2h:天阵  
2h:备份  

1(电源上电超时自重启)  
1(电源异常掉电自重启)
  • 启用了“上电超时”和“异常掉电”两种情况下的电源自重启机制
  • 指示当前使用的是第2套电源方案(“天阵”)。

根本原因分析

尽管硬件层面未锁定(Accessor_PowerOnLock.Value = 0),且系统具备清除事件能力,但在上电超时发生后,BMC未主动下发“清除系统事件”指令给SMC/CPLD,导致以下问题:

:wrench: 关键机制缺失:

  1. BMC与SMC通信脱节

    • 根据知识图谱,bmc.kepler.web_backend 在处理请求时存在超时风险,且依赖远程服务(如 pcie_device)可能导致响应延迟或失败。
    • 本次事件中,Web端点击“上电”未触发底层指令下发,说明 BMC未能协调 OmsBmc_Kepler_Pgmt 服务完成事件清除流程
  2. PowerOnTimeoutFlag 未正确刷新

    • PowerOnTimeoutFlag 是由 Accessor_PowerOnLock.Value 动态关联控制的(通过 D-Bus 或设备树绑定)。
    • 若 BMC 没有主动刷新或重置该标志位,则即使物理寄存器值为 0,系统仍可能认为处于“上电超时锁定”状态。
  3. CPLD 超时标志未清除

    • 如知识图谱所述:即使 Power On Lock 被清除,仍需手动清除 CPLD Timeout Flag 才能恢复系统。
    • 当前配置中缺乏自动清除 CPLD 超时标志的流程,导致系统卡在故障状态。

相关实体与关系支持

实体 作用
PowerOnTimeoutFlag 控制上电锁状态(1=锁定,0=解锁)
Accessor_PowerOnLock 提供硬件级上电锁状态,其值动态影响 PowerOnTimeoutFlag
System.SystemPowerOnTmout 上电超时事件标识
Bmc_Kepler_Power_Mgmt 负责执行电源管理操作,如清除事件、发送指令到SMC
Oms 任务管理服务,负责协调跨组件操作,包括事件清除

关键关系链:

Web操作 -> bmc.kepler.web_backend -> Oms -> Bmc_Kepler_Power_Mgmt -> SMC/CPLD (清除指令)

当前链路中断于第二或第三步,导致指令无法传递到底层硬件。


解决方案建议

:white_check_mark: 短期恢复措施

  1. 手动清除系统事件
    执行 BMC 命令强制清除:
    ipmcset -t maintenance -d poweronlock -v clear
    
  2. 执行 ACCYCLE 恢复
    ipmcset -t maint -d accycle
    

:hammer_and_wrench: 长期修复建议

  1. 增强 BMC 事件处理逻辑

    • 在检测到 System.SystemPowerOnTmout 后,自动触发向SMC发送“清除系统事件”指令
    • 加入对 CpldStatus 的轮询,在超时后自动清除 CPLD Timeout Flag
  2. 完善 Web 后端服务健壮性

    • 优化 bmc.kepler.web_backendBmc_Kepler_Power_Mgmt 的通信机制,避免 40+ 秒超时导致任务丢失。
    • 增加重试机制和超时报警。
  3. 引入状态一致性检查

    • 定期比对 Accessor_PowerOnLock.ValuePowerOnTimeoutFlag 是否一致。
    • 若不一致,自动同步或记录日志告警。
  4. 参考文档规则:

    • 如《上下电常见问题指南》中所述,上电超时后需等待10分钟状态机才变化。建议在UI中提示用户“系统正在等待恢复窗口”,避免频繁重试。

结论

该问题是由于 BMC在上电超时后未能正确下发“清除系统事件”指令 所致,尽管硬件锁状态正常,但系统事件标志未清除导致逻辑阻塞。
建议从事件自动清除机制、服务间通信可靠性、状态一致性校验三个方面进行系统性优化,防止类似问题再次发生。

相关链接:

  1. CPLD 升级流程介绍说明
  2. 300ipro与300vpro在os下查询四元组信息一致,bmc该如何区分
  3. 网页端远程上电的流程是什么?
  4. SmcDfxInfo映射的多个scanner取到的数值一样,可能是什么原因?
  5. 上下电常见问题指南 | 文档中心 | openUBMC