arm中关于dma的一些疑问dma_mmap_writecombine和dma_alloc_coherent
hi 大家好:
最近再工作中遇到疑问想到一个问题,想请教一下大家。希望高手指点。
dma_mmap_writecombine
dma_alloc_coherent
网上找了一些相关资料描述这两个函数的区别:
1,禁止cache 和 禁止 buffer(读写缓存)
2,dma_alloc_coherent是不带cache和buffer的
3,dma_mmap_writecombine是不带cache但是有buffer的
问题是这样的:
1,很多dma的buf是使用dma_mmap_writecombine这个函数分配缓存区的,那么如果这个按照上述中带有buffer(读缓存)的话。如果cache中的内容还没有及时更新到dam的分配内存中。这样一来,当dma操作数据搬移的话,没有把最新的内容更新到buf中。会不会导致dma把滞后的数据搬移出去?
2,这个是不是和CPU架构有关?当cache中的内容没有更新到内存中的时候,是不会触发dma动作的?
谢谢。我的板子是cortex-A8的。
[解决办法]
这两个不都是禁止cache的吗?又何来cache的内容呢?
[解决办法]
对于dma_alloc_coherent,在x86的平台是硬件保证cache一致性 arm平台是软件保证 关闭cache 在深入linux设备驱动内核机制中有讲 对于dma_mmap_writecombine不太了解