hisport下smbus over i2c通信中DrvWriteDelay实际效果异常

问题描述

鲲鹏服务器和网迅1Ge网卡联调smbus over i2c通信过程中,block_write后的实际延时时长与sr中DrvWriteDelay的配置值相差很大,误差在10-30ms之间,起伏波动很大。

环境信息

鲲鹏920服务器搭配网迅1Ge网卡,继承pca9545。

使用的hpm包含以下修改:

  1. 修改过component_drivers/drivers/internal/bus/bus_hisport/hisport.cpp中write_info.drv_write_delay赋值操作。

  2. 手动合入[WIP]新增ensure_channel_open方法避免重复切通道-component_drivers-AtomGit | GitCode的提交,但注释掉ensure_channel_open()中关于bus_id的判断操作,直接open channel(但是在block_write前修改m_drv_write_delay为0):

    image

实际结果

smbus通信过程中ubmc发出req cmd(block_write)后的延时时间和配置的DrvWriteDelay相差很大。

下图中DrvWriteDelay配置10ms,实际延时26ms,在req_pkt(block_write)和rsp_pkt(block_read)之间还抓到了一个切通道的packet,这个切通道和rsp pkt之间118us(不定,但都小于1ms)。(block_write前的切通道和延时可以忽略)。

我先在我们的环境抓下数据,看看写延时是否符合预期。再看看怎么改。

不好意思,黄哥,想问下这个问题有找到原因吗?有什么解决办法吗?

月初调整了下Hisport的延时机制,目前实测延时波动在微秒级,和i2c类似。但由于修改的是闭源组件,可能要下次发布才能同步到社区。

好的,黄哥,了解了。谢谢。

不好意思,黄哥,之前例会时听说这个月会发布一个大版本,发布时间大概在这两周。您意思是这季度的版本不会包含这个修改,需要等二季度的版本发布吗?

这个季度的版本应该会带上。

好的,黄哥,谢谢。

好的,有问题再回复

黄哥,这个修改是哪个组件的?我们用新版本测试了下,误差还是很大,基本在15ms左右,有时甚至可以达到20ms。是不是组件修改实际没有合入大版本?

配置Drvwritedelay为20ms时,实际延时在45ms上下浮动,有时甚至超过50ms;尝试过修改Drvwritedelay为10ms,实际延时起伏也很大,有时在25ms上下,有时可能超过30ms,将近40ms左右,没有任何规律。

上图中波形为配置Drvwritedelay为10ms时的一次交互,那个很短的报文是切通道的0xE2。

libsoc_adapter的版本是什么

libsoc_adapter/1.110.31@openubmc/stable

这个版本应该是带上了,我本地验证还是波动不超过1ms。可以确认下代码里传递的是多少ms吗?

您是指这个吗?

您本地验证是在hisport下吗?搭配的什么网卡驱动?

黄哥,刚才又测试了下(用的2603出包),现在又没问题了,误差在1ms以内了。

不过这个data.drv_write_delay显示为0

image