Reputation: 352
I was looking at allocating a buffer for a DMA transaction. I read that there are two ways of doing this - coherent mappings or streaming mappings.
Now, we want cache coherent buffers. However, we are not doing any scatter/gather so we want the benefits of the dma_map_single
call. We have set aside some contiguous memory in the bootargs so we always have enough contiguous memory available.
So I was wondering, can we call dma_alloc_coherent
and then dma_map_single
after it with the virtual address that dma_alloc_coherent
returns? The returned physical address of the map single would then be set as the dma handle that dma_alloc_coherent
returned in its call.
Does this make sense? Or is it superfluous/incorrect to do it this way?
Upvotes: 4
Views: 6509
Reputation: 14927
You can't use both. But you're also trying to solve a nonexistent problem. Just use dma_alloc_coherent()
, which gives you a contiguous DMA memory buffer with both virtual and physical addresses. DMA to the physical address, access it from the CPU with the virtual address. What's the issue?
Upvotes: 7