coherent_dma_mask :用来分配连续一致性dma。 dma_mask:在dma_map_single->dma_map_page,dma_capable用。 先看默认设置。后续可以通过pci_set_dma_mask/pci_set_consistent_dma_mask分别设置 设置: int pci_setup_device(struct pci_dev *dev) { u32 class; u16 cmd; u8 hdr_type; int pos = 0; stru...
int dma_init_global_coherent(phys_addr_t phys_addr, size_t size) 否则,若使能了CONFIG_DMA_GLOBAL_POOL,则其将会从atomic dma pool中分配,该pool实际上是在linux启动时,由系统预留的。以下为其预留相关的接口: dma_atomic_pool_init() 其中该pool的size与系统内存有关,在默认情况下,每1G内存会为其保留...
使用dma_sync_single_for_cpu/device时候,由于系统默认咱们处理了cache一致性,此时这两个函数并没有真正去刷cache,所以出现了问题; TODO dma_sync_single_for_cpu/device代码分析。重点在带有coherent,和不带coherent属性时,刷cache的操作; dma_alloc_cohenrent接口分析。重点在带有coherent,和不带coherent属性时,内存...
Coherent DMA(一致性DMA) Coherent DMA访问内存地址时不过cache,是cache-coherence设备,采用Consistent mapping的API进行内存申请; Streaming DMA(流式DMA) Streaming DMA在访问内存地址时经过cache,是non-coherence设备,通常采用streaming mapping的API进行内存申请,在单次DMA传输时进行map,在传输完成后进行unmap; 2.2 DMA...
在dma_direct_map_page和中,调用dev_is_dma_coherent(),检查上述变量dev->dma_coherent,检查是否支持硬件cache同步。如果是,则不进行cache操作. 您好,请问一下,我的驱动中,用dma_alloc_cohrent接口申请了一段DDR地址空间,并且在DTS中定义了“dma_coherent”标识,但是我发现我的代码中好像仍然有cache一致性问题。
dma_alloc_coherent() -- 获取物理页,并将该物理页的总线地址保存于dma_handle,返回该物理页的虚拟地址 DMA映射建立了一个新的结构类型---dma_addr_t来表示总线地址。dma_addr_t类型的变量对驱动程序是不透明的;唯一允许的操作是将它们传递给DMA支持例程以及设备本身。作为一个总线地址,如果CPU直接使用了dma_...
dma_mask表示的是该设备通过DMA方式可寻址的物理地址范围,coherent_dma_mask表示所有设备通过DMA方式可寻址的公共的物理地址范围,因为不是所有的硬件设备都能够支持64bit的地址宽度。/include/linux/dma-mapping.h /** Set both the DMA mask and the coherent DMA mask to the same thing.* Note that we don...
Coherent DMA(一致性DMA) Coherent DMA访问内存地址时不过cache,是cache-coherence设备,采用Consistent mapping的API进行内存申请; Streaming DMA(流式DMA) Streaming DMA在访问内存地址时经过cache,是non-coherence设备,通常采用streaming mapping的API进行内存申请,在单次DMA传输时进行map,在传输完成后进行unmap; ...
dma_alloc_coherent() -- 获取物理页,并将该物理页的总线地址保存于dma_handle,返回该物理页的虚拟地址 DMA映射建立了一个新的结构类型---dma_addr_t来表示总线地址。dma_addr_t类型的变量对驱动程序是不透明的;唯一允许的操作是将它们传递给DMA支持例程以及设备本身。作为一个总线地址,如果CPU直接使用了dma_...
Coherent DMA访问内存地址时不过cache,是cache-coherence设备,采用Consistent mapping的API进行内存申请; Streaming DMA(流式DMA) Streaming DMA在访问内存地址时经过cache,是non-coherence设备,通常采用streaming mapping的API进行内存申请,在单次DMA传输时进行map,在传输完成后进行unmap; ...