沐曦gpu卡适配 不能获取温度

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

问题描述

适配一张沐曦的gpu卡,社区有沐曦的vpd,但是对应的general hardware没有对应的代码,导致获取不到功率和温度

通过沐曦的带外管理手册,进行重新适配,发现收到的数据都是0,偏移0x03029404

打开chip trace 返回的值都是0 50,500,612(0x03029404)

确认已经安装了驱动

环境信息

  • 操作系统:[如 Ubuntu 24.04]

  • 软件版本:[如 OpenUBMC2509]

  • 硬件配置:[如 CPU、内存等]

期望结果

正常获取到温度

实际结果

返回都是0

尝试过的解决方案

ibmcv2 使用 dfl_block_read 是能正常获取的

分析结论

2280v2 底层是否和 dfl_block_read 不一致

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

解决方案

1. 使用 writeread 接口读取温度

根据沐曦 GPU 的手册和实际调试结论,正确的读写接口应为 writeread,而非 read。在 CSR 配置中,将温度读取的访问方式改为 writeread 即可正常获取温度数据。

参考实例(来自问题分析文档):

  • 该 GPU 卡的温度读写时序仅匹配 writeread 接口,其他接口均不支持。
  • 具体实现可参考社区已发布的分析文章《gpu适配带外管理获取温度失败问题分析》。

2. 增加芯片写延迟(DrvWriteDelay)

若问题是由于 BMC 过快访问 GPU 导致,可在对应 Chip 对象中增加 DrvWriteDelay 属性(单位:毫秒),等待 GPU 内部 MCU 初始化完成后再进行读取。此方法在 Atlas 300I 卡的问题修复中已验证有效。

3. 确认 CSR 配置正确

  • 确保已按沐曦带外管理手册正确配置 sr 中的 Chip 对象,包括地址、偏移(如 0x03029404)和访问类型。
  • 检查 component_driversgeneral_hardware 组件是否已包含必要的驱动代码;若缺失,可参考社区其他 GPU(如 Tesla T4)的适配方式自行补充。
点击此处查看详细分析解答

问题概述

在适配沐曦 GPU(如 X201 或 C500)时,配置完 CSR 后尝试通过手动命令获取 GPU 温度,发现读取到的值全为 0(或 32768 指示读取失败)。社区虽已包含沐曦的 VPD 数据,但 general_hardware 组件中缺乏对应的适配代码,导致无法正确获取温度和功率。


可能原因(基于上下文信息)

  1. 读取时序不匹配
    沐曦 GPU 的温度读取时序要求使用 writeread 接口(即先写后读),而 BMC 默认的 chip:read 接口会在发送读命令时强制带上 cmd 参数。该 GPU 要求读命令只能包含“地址 + 长度”,不能附带 cmd,否则返回错误数据(全 0)。

    • 使用 busctl 方式(不强制带 cmd)可以成功读取到正确温度值。
    • 尝试将 cmd 置为 0 仍然失败,表明 chip:read 底层行为与 GPU 时序不兼容。
  2. BMC 启动速度过快
    BMC 启动速度快于 OS 及 GPU 驱动加载,导致在 GPU 内部 MCU 尚未完全初始化时即开始通过带外总线(SMBus)访问温度属性,造成读取失败(类似 Atlas 300I NPU 卡案例)。


解决方案

1. 使用 writeread 接口读取温度

根据沐曦 GPU 的手册和实际调试结论,正确的读写接口应为 writeread,而非 read。在 CSR 配置中,将温度读取的访问方式改为 writeread 即可正常获取温度数据。

参考实例(来自问题分析文档):

  • 该 GPU 卡的温度读写时序仅匹配 writeread 接口,其他接口均不支持。
  • 具体实现可参考社区已发布的分析文章《gpu适配带外管理获取温度失败问题分析》。

2. 增加芯片写延迟(DrvWriteDelay)

若问题是由于 BMC 过快访问 GPU 导致,可在对应 Chip 对象中增加 DrvWriteDelay 属性(单位:毫秒),等待 GPU 内部 MCU 初始化完成后再进行读取。此方法在 Atlas 300I 卡的问题修复中已验证有效。

3. 确认 CSR 配置正确

  • 确保已按沐曦带外管理手册正确配置 sr 中的 Chip 对象,包括地址、偏移(如 0x03029404)和访问类型。
  • 检查 component_driversgeneral_hardware 组件是否已包含必要的驱动代码;若缺失,可参考社区其他 GPU(如 Tesla T4)的适配方式自行补充。

补充说明

  • 温度读取失败时,PrimaryGPUTemperatureCelsius 属性将返回特殊值 32768(0x8000),表示读取异常。成功读取时正常返回摄氏度值(如 34.7°C)。
  • 社区已有沐曦 GPU 的 VPD 支持,但 general_hardware 组件尚未针对该款 GPU 单独开发适配代码,因此部分功能(如温度和功率获取)需手动完成适配。
  • 在调试过程中,可开启 trace chip 日志以观察 I2C 通信细节,辅助定位时序问题。

1.可以参考下机器人给的意见,我适配的几张沐曦的GPU卡,获取温度都需要先写再读,没看过只需要读的。不过你这个型号的卡(N100)的确实没见过。