This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

C6670 的 AIF2 DB 模块出错导致接收符号丢失



TI 的工程师你们好,我一直在使用C6670上的AIF2模块,但使用到现在一直有一个会不定时出现的问题困扰着我。

当系统负载比较大的时候,AIF2的EE模块会报告 db_ee_i_fifo_ovfl_err , 每次出现这个问题的时候AIF2的接收侧都会丢失符号。(我使用的LTE 20MHZ,CPRI 4x速,符号是我从rx 描述符ps区读到的)。

这个问题我已经在论坛向各位工程师请教了多次,然后做了几次优化,但还是会不定时复现。

以下是部分优化:

1: 提高AIF2 PKTDMA的优先级为0, 其他FFTC, QMSS等修改为1.

2: AIF2 rx描述符放到L2中,tx 描述符放到DDR里,减少内存访问冲突, 且没有其他大访问量数据在L2中

3:增大DB buf的大小,修改为最大值 CSL_AIF2_DB_FIFO_DEPTH_QW256

修改之后确实有效果,但是最近因为项目需要,原来使用了AIF2的一个link, 现在扩大到2个link,数据量翻倍,此时就会出现接收侧的 db_ee_i_fifo_ovfl_err 错误,紧接着就会导致接收符号会丢失,如上一个是100,e这次接收的就变成102了,101整个描述符都丢了。

这个问题是不是在负载大的时候就会出现,还是我有其他没配置好的地方,我感觉L2只是多增加了300M字节的内存访问,应该没有太大影响 . 还有其他可以优化的地方吗?

谢谢各位工程师的回复。

  • 建议把TX数据放在LL2或SL2中。

  • 你好,Brighton Feng.

    tx描述符是在DDR中的,这个对接收侧也会有影响吗?  

    另外我今天测试后发现代码中有一步计算量较大的嵌套循环代码, 屏蔽掉之后就不丢了。这个计算是在core0 上计算,aif2的接收描述符是分配在core1的L2上。

    我看了Corepac 文档中的“Bandwidth Management Registers" , 几个 Abitration Register 都是默认值且优先级都比AIF2的PKTDMA优先级低。为什么在core上的cpu访问计算会影响到PKTDMA的数据传输呢。

    下面是这段循环代码,只保留了最基本的,几个循环次数变量我也用常量替换了,量级基本相同。(插入代码功能好像没法用了,我换成了图片)

  • Packet DMA TX 阻塞对RX也会有影响的。

    你的问题会不会是DDR被占用->阻塞TX->阻塞RX.

  • 你好, Brighton Feng

    我上午又继续做了测试,有了点新的发现。  上面代码最内层循环中 fftc_data 数组大约有150K byte, 重定位到了一块关了CACHE的DDR内存上,我把这块CACHE打开后暂时就没有错误发生了。 这段代码在Core0上执行, 是不是直接访问DDR的内存对AIF2 访问Core1 L2有比较大的影响。但我比较疑惑的是Core0 上master优先级应该低于AIF2的PKTDMA啊,不应该在AIF2访问内存是阻塞其他低优先级Master的访问吗。 能帮我解释下可能的原因吗,谢谢。

  • 出于提高性能的考虑,DDR始终给对已经打开的页的访问最高优先级而不管Master的优先级设置。只有当多个Master都访问没有打开的页时,Master的优先级才起作用。

    一般DDR页的大小是8KB。

    例如DSP核先开始访问页0~2,当DSP核访问到页0的byte 8时AIF访问页8,由于DSP核此时正在访问已经打开的页0,尽管AIF优先级高,AIF还是要等到DSP把页0访问完才能得到访问的机会,所以实际访问顺序是:

    DSP核访问页0

    AIF访问页8

    DSP核访问页1

    DSP核访问页2

    由于这个特性,我们不建议把任何AIF数据放在DDR中,除非DDR是给AIF专用。

  • 你好,Brighton  Feng .

    从你的回复里我想是不是当AIF2访问DDR里面的TX描述符时会和Core0访问DDR出现冲突,导致AIF2的TX挂起, 再由于AIF2的TX和RX优先级都是0引起RX也被阻塞. 不知道我这样理解对不对.如果是这样的话我把TX的优先级设置为1,不会阻塞RX的DMA是不是就可以避免了?

    另外我想特地请教下现在我AIF2访问位于Core1 L2上的RX描述符时会出现上面说的和Core0访问DDR出现冲突吗,我不太清楚这个teranet的布局.

    再次谢谢你的帮助.

  • 优先级作用在访问时途经的总线节点或目的点,AIF2 TX和RX之间的相互影响与优先级没有关系,而在于它内部公用的一些资源。

    只有DDR才用分页结构,所以DDR优先级仲裁的问题在LL2或SL2中不存在。