// 此模板仅供参考,如果不适用可以修改
问题描述
适配一张沐曦的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_drivers 和 general_hardware 组件是否已包含必要的驱动代码;若缺失,可参考社区其他 GPU(如 Tesla T4)的适配方式自行补充。
点击此处查看详细分析解答
问题概述
在适配沐曦 GPU(如 X201 或 C500)时,配置完 CSR 后尝试通过手动命令获取 GPU 温度,发现读取到的值全为 0(或 32768 指示读取失败)。社区虽已包含沐曦的 VPD 数据,但 general_hardware 组件中缺乏对应的适配代码,导致无法正确获取温度和功率。
可能原因(基于上下文信息)
-
读取时序不匹配
沐曦 GPU 的温度读取时序要求使用 writeread 接口(即先写后读),而 BMC 默认的 chip:read 接口会在发送读命令时强制带上 cmd 参数。该 GPU 要求读命令只能包含“地址 + 长度”,不能附带 cmd,否则返回错误数据(全 0)。
- 使用
busctl 方式(不强制带 cmd)可以成功读取到正确温度值。
- 尝试将
cmd 置为 0 仍然失败,表明 chip:read 底层行为与 GPU 时序不兼容。
-
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_drivers 和 general_hardware 组件是否已包含必要的驱动代码;若缺失,可参考社区其他 GPU(如 Tesla T4)的适配方式自行补充。
补充说明
- 温度读取失败时,
PrimaryGPUTemperatureCelsius 属性将返回特殊值 32768(0x8000),表示读取异常。成功读取时正常返回摄氏度值(如 34.7°C)。
- 社区已有沐曦 GPU 的 VPD 支持,但
general_hardware 组件尚未针对该款 GPU 单独开发适配代码,因此部分功能(如温度和功率获取)需手动完成适配。
- 在调试过程中,可开启
trace chip 日志以观察 I2C 通信细节,辅助定位时序问题。
lsx
(wuzhou-Lsx)
3
1.可以参考下机器人给的意见,我适配的几张沐曦的GPU卡,获取温度都需要先写再读,没看过只需要读的。不过你这个型号的卡(N100)的确实没见过。