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.

【QMSS】arm与DSP通过QMSS进行核间通信描述符丢失问题,请指教



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地址

问题二

请问这里有没有问题?

多谢

  • 你是用的C6614么,对ARM而言,描述符放在DDR,ARM在配置完描述符,push之前需要手动刷cache,确认一下你们的代码有没有加cache一致性的维护。

    你的理解是对的,但是不确定是否这个引起的,你可以按照要求修改一下测试。

  • 是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 channel
    net eth1: -12 error configuring RX channel

    请问该如何修改?

     

     

  • 您好:

    请问您使用的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。

    多谢!

  • PG 是啥意思?

    我从JTAG ID中读到的数据 0x1B96202F

    请问怎么看是对应的哪个PG版本?我们采购是按TMS320TCI6614CXCMS下的单

     

  • 您好:

    PG是我们芯片生产时的不同批次版本,具体在errata里面的“Package Symbolization and Revision Identification”章节里有描述:

    从您的JTAG ID来看的话,应该是最新批次PG 1.3的版本,应该是修复此问题的芯片版本,我们再看一下是否会有其他可能导致此问题,有进展会继续跟新。

    多谢!

  • 还有个现象跟你说一下,

    在测试过程中发现描述符中的srd_tag_lo在push到tx-queue后会有变化

    我在DSP对应flow接收侧的pkt-dma中设置了RX_SRC_TAG_LO_SEL = 2,也就是会将发送描述符flow id进行覆盖

    发送的时候也把flowid 保存到描述符的数据区中。

    但是在rx-q接收到描述符后发现这两个值不一致,数据区的还是正确的,src_tag_lo中的发生变化了

  • 你好,请问一下你这个描述符累积在发送队列的问题解决了吗?我也遇到同样问题,没有什么思路