Browse Source

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
Sravan Kumar Kairam 6 years ago
parent
commit
d0f08ef155
2 changed files with 30 additions and 3 deletions
  1. 14 3
      qdf/inc/qdf_mem.h
  2. 16 0
      qdf/linux/src/i_qdf_mem.h

+ 14 - 3
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;
 }

+ 16 - 0
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