From d0f08ef1554c7a779b93cef5f00063c01d681b05 Mon Sep 17 00:00:00 2001 From: Sravan Kumar Kairam Date: Thu, 12 Jul 2018 18:52:16 +0530 Subject: [PATCH] qcacmn: Assign DMA address correctly to all scatterlist elements Assign DMA address correctly to all scatterlist elements of scatter gather table in qdf_mem_shared_mem_alloc() func. Change-Id: I07988d0bc35e3e0fcf7b9f6df02a9e56a0e8b083 CRS-Fixed: 2110715 --- qdf/inc/qdf_mem.h | 17 ++++++++++++++--- qdf/linux/src/i_qdf_mem.h | 16 ++++++++++++++++ 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/qdf/inc/qdf_mem.h b/qdf/inc/qdf_mem.h index 7273f01749e0..26534910c125 100644 --- a/qdf/inc/qdf_mem.h +++ b/qdf/inc/qdf_mem.h @@ -458,7 +458,7 @@ static inline qdf_dma_addr_t qdf_mem_paddr_from_dmaaddr(qdf_device_t osdev, } /** - * qdf_os_mem_dma_get_sgtable() - Returns DMA memory scatter gather table + * qdf_mem_dma_get_sgtable() - Returns DMA memory scatter gather table * @dev: device instace * @sgt: scatter gather table pointer * @cpu_addr: HLOS virtual address @@ -474,6 +474,18 @@ qdf_mem_dma_get_sgtable(struct device *dev, void *sgt, void *cpu_addr, return __qdf_os_mem_dma_get_sgtable(dev, sgt, cpu_addr, dma_addr, size); } +/** + * qdf_dma_get_sgtable_dma_addr() - Assigns DMA address to scatterlist elements + * @sgt: scatter gather table pointer + * + * @Return: None + */ +static inline void +qdf_dma_get_sgtable_dma_addr(struct sg_table *sgt) +{ + __qdf_dma_get_sgtable_dma_addr(sgt); +} + /** * qdf_mem_get_dma_addr() - Return dma address based on SMMU translation status. * @osdev: Parent device instance @@ -616,8 +628,7 @@ static inline qdf_shared_mem_t *qdf_mem_shared_mem_alloc(qdf_device_t osdev, qdf_mem_get_dma_size(osdev, &shared_mem->mem_info)); - shared_mem->sgtable.sgl->dma_address = - qdf_mem_get_dma_pa(osdev, &shared_mem->mem_info); + qdf_dma_get_sgtable_dma_addr(&shared_mem->sgtable); return shared_mem; } diff --git a/qdf/linux/src/i_qdf_mem.h b/qdf/linux/src/i_qdf_mem.h index c922fc672a0f..9c4772c2ccc6 100644 --- a/qdf/linux/src/i_qdf_mem.h +++ b/qdf/linux/src/i_qdf_mem.h @@ -266,6 +266,22 @@ __qdf_os_mem_dma_get_sgtable(struct device *dev, void *sgt, void *cpu_addr, size); } +/** + * __qdf_dma_get_sgtable_dma_addr()-Assigns DMA address to scatterlist elements + * @sgt: scatter gather table pointer + * + * @Return: None + */ +static inline void +__qdf_dma_get_sgtable_dma_addr(struct sg_table *sgt) +{ + struct scatterlist *sg; + int i; + + for_each_sg(sgt->sgl, sg, sgt->nents, i) + sg->dma_address = sg_phys(sg); +} + /** * __qdf_mem_get_dma_addr() - Return dma addr based on SMMU translation status * @osdev: parent device instance