Messages in this thread Patch in this message | | | From | Vladimir Kondratiev <> | Subject | [PATCH] rmem: support for dma_addr different from phys_addr | Date | Tue, 4 Jul 2017 15:50:53 +0300 |
| |
On some systems, dma address differs from physical one due to various reasons.
dma_init_coherent_memory is aware of it, it takes both phys_addr_t and dma_addt_t arguments for memory block. However, rmem_dma_device_init passes physical address for DMA one.
Fix this, using phys_to_dma(). This assumes the whole buffer has same offset between physical and dma addresses.
Signed-off-by: Vladimir Kondratiev <vladimir.kondratiev@intel.com> --- drivers/base/dma-coherent.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/base/dma-coherent.c b/drivers/base/dma-coherent.c index 640a7e63c453..5371cb19c918 100644 --- a/drivers/base/dma-coherent.c +++ b/drivers/base/dma-coherent.c @@ -292,7 +292,8 @@ static int rmem_dma_device_init(struct reserved_mem *rmem, struct device *dev) struct dma_coherent_mem *mem = rmem->priv; if (!mem && - !dma_init_coherent_memory(rmem->base, rmem->base, rmem->size, + !dma_init_coherent_memory(rmem->base, phys_to_dma(dev, rmem->base), + rmem->size, DMA_MEMORY_MAP | DMA_MEMORY_EXCLUSIVE, &mem)) { pr_err("Reserved memory: failed to init DMA memory pool at %pa, size %ld MiB\n", -- 2.11.0
| |