openubmc smbus主从切换模式没有效果

好的,黄哥,谢谢。

我们试了下,修改之后出包测试的现象可以分三类:

1、寻址无响应,这种情况是出现概率最高的,基本都是这种情况;

2、寻址成功,只能成功交互部分byte。这种情况出现概率很低,

3、寻址成功,并且完整收发了全部内容。这种情况出现的概率极低,目前只出现过一次。

这三种情况最后创建Endpoint阶段都失败了。从波形来看ubmc确实切成了slave并且slave_Addr也没有问题,只是不太稳定。想问下ubmc在发出request后多久切换成slave模式,slave模式保持多久再切换回master?以及第三种情况下都已经成功接收到报文了怎么还是创建endpoint失败了?

之前测试的时候,发出Request后几百微秒就完成切从,保持应该有3s。创建失败可以在framework里搜下smbus,看看有没有什么打印

1970-01-01 04:12:55.801139 hwproxy NOTICE: dispatch.lua(101): position: 0103, chip: Chip_SmbusChip_0103, start creat predevice bus handle, pre_device: I2c_8,is main app: true, not scans: true, not buses: false

1970-01-01 04:12:55.815597 hwproxy NOTICE: object_manage.lua(342): add objects completely, path: /bmc/kepler/ObjectGroup/0103, life cycle id: 1, took 90ms, uptime: 8467 s

1970-01-01 04:12:55.831662 hwproxy NOTICE: dispatch.lua(221): position: 0103, start to process chips in pre_type: Bus, topo_data[I2c_8], chip nums: 1

1970-01-01 04:12:55.838681 hwproxy NOTICE: dispatch.lua(101): position: 0103, chip: Chip_SmbusChip_0103, start creat predevice bus handle, pre_device: I2c_8,is main app: false, not scans: true, not buses: false

1970-01-01 04:12:55.967339 hwproxy NOTICE: init.lua(21): [smbus_plugins] ctor

除了上面这种,还有: [:00000014] hardware: LAUNCH snlua mctpd/service/smbus_write_read_service

=====================================================================================================================

尝试了下tracechip追踪Chip_SmbusChip_0103,返回:

1970-01-01 05:31:26.827905, bmc.kepler.hwproxy, block_read, Chip_SmbusChip_0103, addr: 146, offset: 0, read_length: 259, read_result: ./opt/bmc/apps/hwproxy/lualib/stream/i2c.lua:120: response error, i2c read fail, ret: false, input:{“is_trace”:true,“has_error”:false,“offset”:0,“bus_type”:0,“rw_type”:1,“mask”:4294967295,“buffer”:"92 0F 0A 21 01 00 08 C9 00 82 01 00 1E 1D ",“requestor”:“bmc.kepler.hwproxy”,“addrWidth”:1,“addr”:146,“len”:259,“type”:1,“protocol_flag”:2,“name”:“Chip_SmbusChip_0103”,“offsetWidth”:1}

为什么会出现block read和i2c read fail。

app.log中也有类似报错:

unknown_service ERROR: smbus_write_read_service.lua(88): process smbus request failed. chip name: Chip_SmbusChip_0103, err: ./opt/bmc/apps/hwproxy/lualib/chip.lua:414: ./opt/bmc/apps/hwproxy/lualib/stream/i2c.lua:120: response error, i2c read fail, ret: false, input:{“protocol_flag”:2,“type”:1,“rw_type”:1,“mask”:4294967295,“bus_type”:0,“len”:259,“addr”:146,“has_error”:false,“offsetWidth”:1,“addrWidth”:1,“offset”:0,“name”:“Chip_SmbusChip_0103”,“buffer”:"92 0F 0A 21 01 00 08 C9 00 81 01 00 1E 27 ",“is_trace”:false,“requestor”:“bmc.kepler.hwproxy”}

切从后会调用sdk提供的在从模式下获取数据的接口,这个接口调用失败就会打印i2c read fail。可以把hwproxy的debug日志打开,关键字搜索SMBUS protocol,应该能看到详细的报错。

hwproxy DEBUG: i2c.lua(209): Chip Chip_SmbusChip_0103 fails to read data through the SMBUS protocol. ret: response error, ioctl(I2C_CMD_SLAVE_CACHE_RD) failed: Unknown error 1008, drv_id:8

这个1008的错误码对应什么含义?

从测试结果来看切slave之后的保持时间很不稳定,会不会是被其他什么行为给打断了。

我咨询下sdk的人

不好意思,黄哥,想问下有进展吗?

这个被打断是怎么理解,是发数据的时候没有ask吗,还是数据线被异常拉高

没有ack。图片是网卡回复响应时的波形图

能发下对应时间的一键收集日志吗

我尝试复现一下重新收集吧。您方便发下您的邮箱吗?

huangzhiyu12@h-partners.com

黄哥,日志压缩包发您邮箱了。

之前debug打开的时候只有这个错误返回码么?

能用打开debug的hwproxy,再收集一次吗,感觉时间和linux_kernel日志记录的有点对不上。

是的,之前收集的时候只有这个错误码。

不好意思,黄哥,修改hwproxy日志等级为debug后新收集的日志文件已经发您邮箱了。

收到,我和sdk的分析下,明天给你答复

嗯,我知道了,smbus读取配置固定是读259字节,但是配置smbus内存大小是256字节,读取长度大于申请的内存导致抛错1008。。。