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

小陆zi 2012-12-19 01:56:53
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的。
...全文
434 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
zgwstar 2013-01-03
  • 打赏
  • 举报
回复
对于dma_alloc_coherent,在x86的平台是硬件保证cache一致性 arm平台是软件保证 关闭cache 在深入linux设备驱动内核机制中有讲 对于dma_mmap_writecombine不太了解
小陆zi 2012-12-20
  • 打赏
  • 举报
回复
非常感谢楼上的回复。 我是看了网络上 比较流行的文章后得出的结论。有没有什么依据吗?这两个函数都是禁止Cache的? 谢谢
盘股之 2012-12-19
  • 打赏
  • 举报
回复
这两个不都是禁止cache的吗?又何来cache的内容呢?

21,597

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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