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.

[请教]ARM与DSP通过QMSS实现核间通信,发现ARM侧对CACHE 写回与无效操作没有起作用,为何?

ARM侧使用keystone-hwqueue提供的khwq_map ,khwq_unmap,来实现物理地址与内核虚拟地址的转换

该函数中使用dma_sync_single_for_cpu 和dma_sync_single_for_device来实现DMA对cache的操作

但是在实际测试中发现DMA搬移时cache中的数据并没有同步到ddr中,请问为何?

  • 1. 请问你用的是哪个平台6614还是6636/6638?

    2. 确认测试的memory在MMU中把cache使能

    3.如何判断数据没有同步到DDR的,是用DSP core?如果用DSP core,需要手动维护cache 一致性

  •  

    1. 请问你用的是哪个平台6614还是6636/6638?

            6614,DSP使用bios系统,ARM使用linux系统

    2. 确认测试的memory在MMU中把cache使能

               核间通信使用的是monolithicDesc,使用的memory就是在描述符内,看了一下sdk是用alloc_free_pages创建的region,每个描述符大小是512字节

     

    3.如何判断数据没有同步到DDR的,是用DSP core?如果用DSP core,需要手动维护cache 一致性

                ARM与DSP互发,发送的时候在数据区添加数据及CRC值,接收侧收到后做CRC检查,如果不一致则报错。数据大小为500字节

    在测试过程中发现从ARM--->DSP没有错误,但是从DSP----->ARM数据有时候就不正确了,出错率在2%,怀疑arm 没有invalid cache,于是测试在读取数据前

    先访问256k的数据区,这样cache中就不存在原来的数据了。这样测试数据就能正确了,说明ARM上cache没有被invalid掉

     

  • 这个问题已经解决了,原因是因为使用sdk提供的pop push接口中的size并不是描述符的真正大小,所以根据这个大小去操作cache就有问题了

x 出现错误。请重试或与管理员联系。