riser加载失败,对应Hisport总线的Eeprom对象没有生成

// 此模板仅供参考,如果不适用可以修改

问题描述

[在这里详细描述您遇到的问题]

环境信息

  • 操作系统:[如 Ubuntu 24.04]

  • 软件版本:[如 OpenUBMC2509]

  • 硬件配置:[如 CPU、内存等] S920X,BC83PRUO * 2

重现步骤

  1. AC重启,检查riser加载,(高)概率出现riser未加载

  2. 查看告警: 60 |2026-02-27 09:40:55 |Minor |0x1A000055 |Asserted |Failed to access the Self-description Record of CpuBoard1 RiserCard2 (SN:2106411792FSQC004814).
    59 |2026-02-27 09:30:55 |Minor |0x1A000055 |Asserted |Failed to access the Self-description Record of CpuBoard1 RiserCard1 (SN:2106411792FSQC004814).

期望结果

[您希望实现什么]

riser正常加载

实际结果

[实际发生了什么,包含错误信息]

框架日志打印

2026-02-27 09:40:55.873342 hwdiscovery ERROR: hwcomponent.lua(185): position: 01010109, get component sr failed, error: read eeprom header failed, err: Device access failed, org.freedesktop.DBus.Error.UnknownObject: Unknown object path /bmc/kepler/Chip/Eeprom/Eeprom_3_9_010101, status: 1, count: 1

资源树无Eeprom_3_9_010101对象

正常加载的总线会有相关打印

异常的hisport_12和hisport_18无相关打印

尝试过的解决方案

[列出您已经尝试过的解决方案及结果]

AC重启,有概率恢复

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

总结

项目 内容
问题本质 Riser卡加载失败,因Hisport_18总线上的EEPROM无法访问
直接原因 EEPROM未生成 → CSR无法读取 → 自描述记录缺失 → 加载失败
可能原因 ① I2C通道未正确切换到BMC侧
② 物理连接不良
③ CSR配置错误(Address/BUS)
④ 上电时序或总线初始化异常
推荐解决顺序 1. 使用mdbctl命令检查并切换通道状态
2. 重新插拔Riser卡
3. 核查CSR中Eeprom配置
4. 抓取逻辑分析仪波形确认通信

:white_check_mark: 最终建议:优先执行 通道状态检测与强制切换操作,若可稳定复现,则应在系统启动流程中加入通道状态预检与自恢复逻辑,从根本上规避此问题。

点击此处查看详细分析解答

Riser加载失败问题分析与解决方案(对应Hisport总线Eeprom未生成)

问题描述

在S920X设备上,使用BC83PRUO型号的Riser卡时,出现Riser卡加载失败的问题。具体表现为:

  • AC重启后,有一定概率无法正常加载Riser卡。
  • 系统产生如下告警:
    Failed to access the Self-description Record of CpuBoard1 RiserCard2
    Failed to access the Self-description Record of CpuBoard1 RiserCard1
    
  • 框架日志报错:
    hwcomponent.lua(185): position: 01010109, get component sr failed, error: read eeprom header failed, err: Device access failed, org.freedesktop.DBus.Error.UnknownObject: Unknown object path /bmc/kepler/Chip/Eeprom/Eeprom_3_9_010101
    
  • 关键现象Hisport_18总线上没有生成对应的Eeprom对象(如Eeprom_IEU_01010103),且Hisport_12Hisport_18无芯片初始化相关日志打印。

根本原因分析

1. Eeprom访问失败导致自描述文件(CSR)无法读取

根据日志错误 read eeprom header failed, err: Device access failed 和知识图谱信息:

实体: Eeprom
描述: EEPROM用于存储Riser卡的硬件自描述文件(CSR)。若EEPROM访问失败,则系统无法读取CSR,导致Riser卡无法被识别和加载。

关系: EepromRiser Card:Riser卡上的EEPROM存储关键数据,其访问失败将导致卡片无法被系统识别。

这表明问题的核心是 Hisport_18总线上的EEPROM器件未能被正确识别或访问


2. 硬件链路不稳定导致EEPROM访问超时或失败

从文档块 #1(解决方案)中提到:

“能升级成功,证明升级包正确且硬件无故障,怀疑是一开始硬件链路不稳定导致写入eeprom头失败”

根因分析指出:

  • I2C/Hisport通道的状态管理存在问题。
  • 在特定版本组合下(新旧BMC/MCU混合),由于I2C通道默认状态不匹配,BMC尝试访问EEPROM时未正确切换通道,导致访问失败。

尽管该案例针对升级场景,但其根本原因(通道配置错误导致EEPROM访问失败)与本问题高度相关。


3. 物理或电气层面问题导致通信异常

  • Hisport_18总线为空,而其他Hisport总线正常挂载了芯片,说明该路总线的物理连接或电气信号存在问题
  • 可能原因包括:
    • Riser卡接触不良或金手指脏污。
    • 背板上的Hisport_18线路存在虚焊或阻抗异常。
    • 上电时序问题导致MCU/BMC未及时初始化总线控制器。

排查与解决方案

:white_check_mark: 方案一:检查并确认Hisport总线通道状态

参考文档块 #1 中的诊断命令,查询MCU控制的I2C通道切换状态:

# 查询Hisport_18对应通道状态
mdbctl call Chip_MCU1_01010103 bmc.kepler.Chip.BlockIO ComboWriteRead \
0 0x20 0x0e 0x0c 0x80 0x00 0x02 0x02 0x00 0x00 0x00 0x00 0x01 0x00 0x00 0x00 0x59 0x21 40
  • 如果返回值显示通道不在BMC侧(状态 ≠ 1),需手动切换:
    # 强制设置通道到BMC侧
    mdbctl call Chip_MCU1_01010103 bmc.kepler.Chip.BlockIO ComboWriteRead \
    0 0x20 0x0f 0x0d 0x80 0x00 0x01 0x02 0x00 0x00 0x00 0x00 0x01 0x00 0x00 0x00 0x01 0x4b 0x21 40
    

注意: 若未AC环境必现,则基本可判定为通道状态未正确初始化


:white_check_mark: 方案二:检查Riser卡物理安装与连接

  1. 重新插拔Riser卡,确保完全插入,金手指无氧化。
  2. 清理插槽与金手指,使用无水酒精棉片擦拭。
  3. 更换Riser卡位置测试,确认是否为固定插槽故障。
  4. 检查主板/背板上 Hisport_18 引脚是否有短路或虚焊。

:white_check_mark: 方案三:验证EEPROM配置是否正确

检查CSR文件中对 Eeprom_IEU 的配置是否正确,重点关注:

属性名 必须配置项
Address 必须为 0xAE(标准EEPROM读写地址)
Bus 必须绑定为 Hisport_18
AddrWidth / OffsetWidth 地址宽度配置错误会导致读写异常

示例配置片段(应出现在CSR中):

"Eeprom_IEU_01010103": {
  "Address": 174,     // 0xAE
  "AddrWidth": 1,
  "OffsetWidth": 2,
  "Bus": "Hisport_18"
}

:magnifying_glass_tilted_left: 参考文档:《BMC Studio板卡适配指南》明确指出 Eeprom对象最重要的属性是Address,需由硬件开发者确认


:white_check_mark: 方案四:添加延迟或重试机制(临时规避)

若问题为上电初期通信不稳定,可在系统启动脚本中增加对Hisport_18的探测重试逻辑:

-- 示例:尝试多次读取EEPROM头
for i = 1, 5 do
    local ok, data = pcall(eeprom_read, "/bmc/kepler/Chip/Eeprom/Eeprom_IEU_01010103", 0, 8)
    if ok then
        log.info("EEPROM read success on attempt " .. i)
        break
    else
        log.warning("EEPROM read failed, retrying...")
        sleep(200) -- 毫秒
    end
end

相关日志分析建议

  1. 查找hwproxy错误日志

    grep "Hisport_18" /var/log/hwproxy.log
    

    查看是否存在:

    • ioctl(HISPORT_CMD_READ) failed
    • Device access failed
    • Unknown error 290
  2. 确认资源树加载情况

    busctl --user tree bmc.kepler.hwproxy | grep Hisport_18
    

    正常应显示挂载了 Eeprom_IEU_01010103

  3. 检查LoadStatus属性

    busctl get-property bmc.kepler.hwdiscovery /bmc/kepler/Connector/Connector_A1a \
    bmc.kepler.Connector LoadStatus
    
    • LoadStatus = 1 表示 设备访问失败(见KG实体1: Device Access Failure)。

总结

项目 内容
问题本质 Riser卡加载失败,因Hisport_18总线上的EEPROM无法访问
直接原因 EEPROM未生成 → CSR无法读取 → 自描述记录缺失 → 加载失败
可能原因 ① I2C通道未正确切换到BMC侧
② 物理连接不良
③ CSR配置错误(Address/BUS)
④ 上电时序或总线初始化异常
推荐解决顺序 1. 使用mdbctl命令检查并切换通道状态
2. 重新插拔Riser卡
3. 核查CSR中Eeprom配置
4. 抓取逻辑分析仪波形确认通信

:white_check_mark: 最终建议:优先执行 通道状态检测与强制切换操作,若可稳定复现,则应在系统启动流程中加入通道状态预检与自恢复逻辑,从根本上规避此问题。

建议直接抓信号吧,看着就像是链路不通

1 个赞

客户现场出现的,测试环境没有复现

01010109这个层级对应的csr版本号是3.0还是5.0

AC重启有概率恢复,看恢复后的日志,AppDump\hwdiscovery下对应的文件是Connector_B3a_010101.sr,应该是加载了内置的csr,版本是3.00

有完整的一键收集日志可以发到 huangzhiyu12@h-partners.com

这个问题后续有定位到根因嘛?或者有怀疑的地方吗?

没有,邮件传到PAE就没声音了

从你发的图看,topo里是有Eeprom_3_9_010101对象,在Hisport12下,你是不是没在出问题的时候收日志。
从你说的正常总线的来看,你框起来的部分是Eeprom_3_19_010101,没打印不一定是没生成,可能是01010119对应的硬件就没有在位

dump_info.doc (9.6 MB)

后缀改成zip解压,麻烦帮忙看看

你发的和你截的是一样的,从日志上看是有Eeprom_3_9_010101,日志不是在出问题的时候收集的吧

scanner和smc_dfx能看到在位信号,AC概率恢复

不不不,我的意思是,你发的日志里是存在Eeprom对象的,你确定是出问题后就收下来吗,没有重启或者别的什么操作?

这个问题有进展了吗?