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侧使用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掉