ARM与DSP之间通过QMSS来实现核间通信
环境如下:
ARM:
tx-fdq:2040, 含有32 desc,
tx-q: 804
rx-fdq 2044, 含有32 desc
DSP0:
tx-fdq: 2000, 32 desc
rx-fdq: 2004, 32 desc
tx-q: 800
DSP1:
tx-fdq: 2010, 32 desc
rx-fdq: 2014, 32 desc
tx-q: 801
DSP2:
tx-fdq: 2020, 32 desc
rx-fdq: 2024, 32 desc
tx-q: 802
DSP3:
tx-fdq: 2030, 32 desc
rx-fdq: 2034, 32 desc
tx-q: 803
现象:
ARM与DSP都运行起来后,发现经常会出现ARM 发给DSP的描述符阻塞到tx-q(804)中了
tx-fdq(2040) 中的描述符已经空了
tx-q(804) 中含有31个描述符,少了一个
但是每个DSP的tx-fdq中的描述符还有32个,而且DSP之间也交互正常。
问题一:
从现象来看,应该有一个描述符是在PKT-DMA进行搬移的时候出现问题了,导致后面的描述符全部阻塞在tx-q里了,
请问如何去定位这个问题呢?
从6614的ERRATA中有如下描述:

应该是pop描述符的时候使用VBUSP(0x02a00000)地址
push描述符的时候使用VBUS(0x34000000)M地址,也不知道我理解的对不对
但是我看了一下ARM上sdk提供的驱动,并没有区分pop和push动作,而是统一使用的VBUSP地址
问题二
请问这里有没有问题?
多谢
Andy Yin1:
你是用的C6614么,对ARM而言,描述符放在DDR,ARM在配置完描述符,push之前需要手动刷cache,确认一下你们的代码有没有加cache一致性的维护。
你的理解是对的,但是不确定是否这个引起的,你可以按照要求修改一下测试。
Peter wang1:
回复 Andy Yin1:
是6614
有刷cache的操作:map–>dma_sync_single_for_device—->push
errata中的push pop操作必须使用不同地址,是针对多核操作同一个queue才会有问题还是普遍性?
请问SDK有相关的补丁代码吗?
linux中使用的vbusp地址是在dts中指定的,
qmgrs { #address-cells = <1>; #size-cells = <1>; ranges; qmgr0 { managed-queues = <0 0x2000>; /* managed queues */ reg = <0x2a00000 0x20000 /* 0 – peek */ 0x2a62000 0x6000 /* 1 – status */ 0x2a68000 0x2000 /* 2 – config */ 0x2a6a000 0x4000 /* 3 – region */ 0x2a20000 0x20000 /* 4 – push */ 0x2a20000 0x20000>; /* 5 – pop */ };
我把push的地址修改为vbusm地址后,内核启动过程中挂在
Configuring network interfaces… dma dma1chan3: no descriptors for channelnet eth1: -12 error configuring RX channel
请问该如何修改?
Vincent Han:
回复 Peter wang1:
您好:
请问您使用的TCI6614是哪个PG版本的芯片(通过查看JTAG ID获得,数据手册中有说明)?如果是PG1.2以前的芯片,这个问题很有可能是ARM的Cache造成的,因为在PG1.2之前的芯片,对于ARM Cache的回写和ARM Cache的evict的cache ID是两个独立的,由于DDR里面的老化的机制可能会造成旧数据先于新数据写入memory而导致最终数据的错误,具体请参见TCI6614 errata(SPRZ370C)里面的Advisory 19,里面有相应的workaround。
多谢!
Peter wang1:
回复 Vincent Han:
PG 是啥意思?
我从JTAG ID中读到的数据 0x1B96202F
请问怎么看是对应的哪个PG版本?我们采购是按TMS320TCI6614CXCMS下的单
Vincent Han:
回复 Peter wang1:
您好:
PG是我们芯片生产时的不同批次版本,具体在errata里面的“Package Symbolization and Revision Identification”章节里有描述:
从您的JTAG ID来看的话,应该是最新批次PG 1.3的版本,应该是修复此问题的芯片版本,我们再看一下是否会有其他可能导致此问题,有进展会继续跟新。
多谢!
Peter wang1:
回复 Vincent Han:
还有个现象跟你说一下,
在测试过程中发现描述符中的srd_tag_lo在push到tx-queue后会有变化
我在DSP对应flow接收侧的pkt-dma中设置了RX_SRC_TAG_LO_SEL = 2,也就是会将发送描述符flow id进行覆盖
发送的时候也把flowid 保存到描述符的数据区中。
但是在rx-q接收到描述符后发现这两个值不一致,数据区的还是正确的,src_tag_lo中的发生变化了
user5918265:
回复 Peter wang1:
你好,请问一下你这个描述符累积在发送队列的问题解决了吗?我也遇到同样问题,没有什么思路
TI中文支持网