在I2C8下新增chip导致fru信息丢失和风扇调速模块出错

【问题描述】
在文件中适配chip vpd/vendor/openUBMC/14100513_00000001010302044492.sr



经过日志调试发现在接入此硬件模块后导致I2C8下的connector中的loadstatus 值发生变化


导致connector 的ID 没被设置上,从而导致sr 没被加载。

请问Connector_PSR_EEP_0101 的loadstatus 是由什么决定的?有什么方案可以解决当前情况,从而使得新加的Chip可以正常使用

1 个赞

正常的风扇调速界面


异常界面

loadstatus 值及其含义

在系统中,loadstatus 是一个用于指示组件加载状态的值。根据不同的数值,可以判断组件加载的成功或失败原因。以下是 loadstatus 的可能值及其含义:

  1. 0:组件加载成功

    • 组件成功加载,系统运行正常。
  2. 1:器件访问失败

    • 系统无法访问相应的硬件设备,可能是设备未连接、驱动问题或硬件故障。
  3. 2:签名校验失败

    • 系统在验证组件签名时失败,可能是签名文件损坏或不匹配。
  4. 3:数据格式非法

    • 组件的数据格式不符合预期,可能是配置文件格式错误或数据损坏。
  5. 4:本地文件未找到

    • 系统在指定位置未能找到所需的本地文件,可能是文件丢失或路径配置错误。
  6. 5:对象解析失败

    • 系统在解析组件对象时失败,可能是对象文件损坏或依赖项缺失。
  7. 6:Eeprom头校验失败

    • 系统在校验Eeprom头CRC32时失败,可能是Eeprom头数据被篡改。
  8. 7:格式版本超过上限

    • 系统在加载时发现Eeprom和内置的csr格式版本均超过上限(目前上限是4.00)。
  9. 255:初始状态(默认状态)

    • 系统的初始状态,尚未开始加载组件或未完成初始化。

排查方法

loadstatus 显示非零值时,需要按照以下步骤进行排查:

  1. 查看日志文件

    • 打开日志文件 framework.log,查找与组件加载相关的日志信息。
    • 在日志中搜索关键词 Connector_xx_xx,其中 xx_xx 是具体的组件标识符。
  2. 识别加载阶段

    • 找到带有 [self-discovery] 标记的日志,这表示系统正在读取并解析对应的 SR 文件。
    • 示例日志:
      [self-discovery] Starting to parse SR file for component Connector_xx_xx
      
  3. 定位解析过程

    • [self-discovery] 日志之后,查找带有 position 标记的条目。这个标记是解析过程的唯一标志。
    • 示例日志:
      [position] Parsing component at position 1234
      
  4. 分析错误信息

    • position 标记之后,查找相关的错误信息。这些信息将帮助确定加载失败的具体原因。
    • 示例错误信息:
      Error: ioctl(HISPORT_CMD_READ) failed: Unknown error 290
      
  5. 解读错误代码

    • 错误代码 290= 0010 0010 表示 HISPORT 命令读取操作失败,具体原因可能是 ACK 校验失败。

      二进制字符串 位位置 名称 描述
      0010 0010 7 发送FIFO已满 0 I2C控制器发送FIFO未满
      0010 0010 6 时钟拉伸 0 读写期间未出现 Clock Stretching
      0010 0010 5 ACK校验错误 1 读写时ACK校验错误
      0010 0010 4 总线异常拉低 0 读写启动时未检测到总线异常拉低
      0010 0010 3 从fifo取数据超时 0 从fifo取数据未出现超时错误
      0010 0010 2 命令帧结束标志 0 0表示命令帧未结束
      0010 0010 1 读写出错 1 汇总 BIT[6:3] 的错误,表示I2C读写出错
      0010 0010 0 操作完成 0 此次I2C读写操作未完成

      解释

      1. 发送FIFO已满(位7):值为0,表示I2C控制器的发送FIFO未满。
      2. 时钟拉伸(位6):值为0,表示读写期间未出现时钟拉伸。
      3. ACK校验错误(位5):值为1,表示读写时ACK校验出现错误。
      4. 总线异常拉低(位4):值为0,表示读写启动时未检测到总线异常拉低。
      5. 从fifo取数据超时(位3):值为0,表示从fifo取数据时未出现超时错误。
      6. 命令帧结束标志(位2):值为0,表示命令帧未结束。
      7. 读写出错(位1):值为1,表示I2C读写出错,汇总了BIT[6:3]的错误。
      8. 操作完成(位0):值为0,表示此次I2C读写操作未完成。
    • 需要联系硬件工程师进行进一步的排查,确认硬件连接和通信状态。

  6. 针对不同 loadstatus 值采取相应措施

    • loadstatus = 1(器件访问失败)

      • 检查硬件连接,确保设备已正确连接。
      • 验证设备驱动是否安装正确,必要时重新安装或更新驱动。
      • 检查硬件是否上电,确保电源供应正常。
    • loadstatus = 2(签名校验失败)

      • 确认组件的签名文件是否完整且有效。
      • 检查签名文件路径是否正确,确保文件可被访问。
      • 如签名文件损坏,需重新获取并安装签名文件。
    • loadstatus = 3(数据格式非法)

      • 检查配置文件或数据文件的格式,确保符合系统预期。
      • 使用验证工具检查数据文件的完整性,修复或替换损坏的文件。
      • 如数据格式错误,需根据系统要求重新格式化数据。
    • loadstatus = 4(本地文件未找到)

      • 确认所需文件是否存在于指定路径。
      • 检查文件路径配置是否正确,确保路径指向正确的文件位置。
      • 如文件丢失,需重新获取并放置在正确的路径下。
    • loadstatus = 5(对象解析失败)

      • 检查组件对象文件是否正确无误。
      • 确保组件的依赖项已正确安装,无缺失或版本不匹配。
      • 如对象文件损坏,需重新获取并替换文件。
2 个赞

这不是异常。是你的介质属性切换为了Liquid,风冷服务器预期是Air。手动修改下CoolingConfig类下的Medium属性。至于你为啥会切换为Liquid,不清楚