arm 中关于DMA的一些疑问:dma_mmap_writecombine和dma_alloc_coherent

小陆zi 2012-12-19 01:50:43
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的。
...全文
584 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
小陆zi 2012-12-19
  • 打赏
  • 举报
回复
非常感谢楼上的回答。 应为现在我的代码里 我看到很多dma的buffer分配都是使用这个dma_alloc_writecombine函数。再代码里面有没有什么机制保证dma trigger之前同步一下的? 谢谢 我是s5pc210的板子。内核andriod-kernel-samsung-dev-full。
kickxxx 2012-12-19
  • 打赏
  • 举报
回复
1 dma_alloc_writecombine分配的内存,不应用读缓冲,但是应用读缓冲,因此写到内存的数据很可能还在cache中,并没有真正应用到内存总线上,此时DMA操作,必然导致滞后的数据搬移到设备中,可以使用dma_alloc_coherent解决这个问题 2 DMA动作是否触发,和cache内容是否更新无关

1,318

社区成员

发帖
与我相关
我的任务
社区描述
主要是开发驱动技术
社区管理员
  • 驱动程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧