根据gpu适配带外管理获取温度失败问题分析 | 文档中心 | openUBMC给出的方案。
使用writeread接口,发现返回数据全为0.
使用代码是在25.09社区版本基线代码

抓取波形发现,是对gpu芯片地址写操作写入了 0xfffffff 后再写入的0x03 0x02 0x94 0x04,然后读操作是写入 0xfffffff 再读取了五个数据为0.
期望的结果是不写入 0xfffffff ,就是写入0x03 0x02 0x94 0x04然后读数据。
示波器截图如下:
根据gpu适配带外管理获取温度失败问题分析 | 文档中心 | openUBMC给出的方案。
使用writeread接口,发现返回数据全为0.
使用代码是在25.09社区版本基线代码

抓取波形发现,是对gpu芯片地址写操作写入了 0xfffffff 后再写入的0x03 0x02 0x94 0x04,然后读操作是写入 0xfffffff 再读取了五个数据为0.
期望的结果是不写入 0xfffffff ,就是写入0x03 0x02 0x94 0x04然后读数据。
示波器截图如下:
之前是通过ComboWriteRead接口完成的适配,但是终究是不太符合gpu文档的时序。
busctl --user call bmc.kepler.hwproxy /bmc/kepler/Chip/Complex/Chip_MuXiGPU_01010104010A bmc.kepler.Chip.BlockIO ComboWriteRead a{ss}uayuu 0 0x03 2 2 0x94 0x04 5
例如如上获取温度的命令,按gpu适配文档,应该是往芯片地址写入0x03 0x02 0x94 0x04 后,再往芯片地址读5个字节。
但是按ComboWriteRead接口,相当于是往芯片地址写入0x03 0x02 0x94,再往往芯片地址写入0x04 后读5个字节。虽然也能获取到正确数据,但是不符合gpu适配文档的规范。
两者区别如下
1.写 0xaa(chip地址) 0x03 0x02 0x94 0x04 读 0xab
2.写 0xaa(chip地址) 0x03 0x02 0x94 写 0xaa 0x04 读0xab
offsetwidth配成0,这样就没有offset写入了
不用管offset,虽然还是0xFFFFFFFF,但不会写入,你可以把offset也配成0