dma_alloc_coherent vs. dma_alloc_writecombine

转载 2012年03月24日 12:47:36

这两天在做 DMA 相关开发, 遇到一对分配 dma buffer 的函数,dma_alloc_coherent 与 dma_alloc_writecombine。 不知其区别。 google 一下也没有得到信息。只好自己看代码。

 

原来 dma_alloc_coherent 在 arm 平台上会禁止页表项中的 C (Cacheable) 域以及 B (Bufferable)域。

而 dma_alloc_writecombine 只禁止 C (Cacheable) 域.

 

#define pgprot_noncached(prot)  __pgprot(pgprot_val(prot) & ~(L_PTE_CACHEABLE | L_PTE_BUFFERABLE))
#define pgprot_writecombine(prot) __pgprot(pgprot_val(prot) & ~L_PTE_CACHEABLE)

 

进一步查找 ARM 书籍, 原来 C 代表是否使用高速缓冲存储器, 而 B 代表是否使用写缓冲区。

 

这样, dma_alloc_writecombine 分配出来的内存不使用缓存,但是会使用写缓冲区。

而 dma_alloc_coherent   则二者都不使用。


dma_alloc_coherent vs. dma_alloc_writecombine

这两天在做 DMA 相关开发, 遇到一对分配 dma buffer 的函数,dma_alloc_coherent 与 dma_alloc_writecombine。 不知其区别。 google 一下也...
  • zjujoe
  • zjujoe
  • 2009年05月15日 16:50
  • 4180

dma_alloc_writecombine和dma_alloc_coherent的区别

先理解cache的作用 CPU在访问内存时,首先判断所要访问的内容是否在Cache中,如果在,就称为“命中(hit)”,此时CPU直接从Cache中调用该内容;否则,就 称为“ 不命中”,CPU只好去...
  • michaelcao1980
  • michaelcao1980
  • 2013年10月25日 10:25
  • 4206

dma_alloc_writecombine 和mmap函数

先理解cache的作用 CPU在访问内存时,首先判断所要访问的内容是否在Cache中,如果在,就称为“命中(hit)”,此时CPU直接从Cache中调用该内容;否则,就 称为“ 不命中”,CPU只好...
  • manshq163com
  • manshq163com
  • 2014年01月18日 15:11
  • 1119

使用dma_alloc_writecombine申请内存空间大小的限制

最近在调TFT分辨率,当使用1024x768 16bpp时正常,而当调整为1024x768 24bpp时报"Failed to allocate video memory"的错误. 出错的地方是在分...
  • christin_zhm
  • christin_zhm
  • 2012年12月06日 10:36
  • 2631

dma_alloc_coherent 与 dma_alloc_writecombine

这两天在做 DMA 相关开发, 遇到一对分配 dma buffer 的函数,dma_alloc_coherent 与 dma_alloc_writecombine。 不知其区别。 google 一下也...
  • linxi_hnh
  • linxi_hnh
  • 2013年01月30日 17:42
  • 412

dma_alloc_coherent 和 dma_alloc_writecombine

dma_alloc_coherent: 一致性DMA映射 dma_alloc_writecombine: 流式DMA映射 原来 dma_alloc_coherent 在 arm 平台上会禁止页表项...
  • wangyunqian6
  • wangyunqian6
  • 2012年02月08日 17:04
  • 558

【study】DMA内存申请--dma_alloc_coherent 及 寄存器 与 内存

在项目驱动过程中会经常用到dma传输数据,而dma需要的内存有自己的特点,一般认为需要物理地址连续,并且内存是不可cache的,在linux内核中提供一个供dma所需内存的申请函数dma_alloc_...
  • robinyeung
  • robinyeung
  • 2012年11月20日 15:18
  • 9144

linux内核DMA内存分配

linux系统启动过程中,会初始化整个内核地址空间,将其划分为各个类型段,其中包括物理内存映射区(又称之为逻辑地址映射区)、虚拟内存分配区、高端页面映射区、系统保留映射区、DMA映射区(这个类似物理内...
  • zhouzhuan2008
  • zhouzhuan2008
  • 2013年07月24日 14:45
  • 3279

dma_alloc_coherent (建立一致性 DMA 映射函数)

A: 内存的虚拟起始地址,在内核要用此地址来操作所分配的内存 B: struct device指针,可以平台初始化里指定,主要是dma_mask之类,可参考framebuffer C: 实际分配大小,...
  • xy010902100449
  • xy010902100449
  • 2015年07月25日 19:24
  • 5811

大块数据申请及DMA

在内核中有时需要申请一段大内存,方法之一是可以采取如下方法: 示例: 如何将1M的物理内存作为私人使用(假设物理内存大小为256M): 1. 在内核启动时,通过mem=255M参数,让内核只能使用...
  • fuyajun01
  • fuyajun01
  • 2014年01月20日 18:41
  • 6079
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:dma_alloc_coherent vs. dma_alloc_writecombine
举报原因:
原因补充:

(最多只允许输入30个字)