Browse Source

qcacld-3.0: Higher 32 bits in the dma address are ignored

In TSO the higher bits in the 64 bit dma address are being ignored.
This is resulting in an incorrect address being programmed in the
fragment descriptor.

Change-Id: Id015e81212d2ded3f0716ca5cc06ae2220952270
CRs-Fixed: 1024169
Dhanashri Atre 8 years ago
parent
commit
5166d573eb
2 changed files with 8 additions and 4 deletions
  1. 6 2
      core/dp/htt/htt_tx.c
  2. 2 2
      core/dp/txrx/ol_tx.c

+ 6 - 2
core/dp/htt/htt_tx.c

@@ -1138,12 +1138,16 @@ htt_tx_desc_fill_tso_info(htt_pdev_handle pdev, void *desc,
 	word += 6;
 
 	for (i = 0; i < tso_seg->seg.num_frags; i++) {
+		uint32_t lo = 0;
+		uint32_t hi = 0;
+		qdf_dmaaddr_to_32s(tso_seg->seg.tso_frags[i].paddr,
+						&lo, &hi);
 		/* [31:0] first 32 bits of the buffer pointer  */
-		*word = tso_seg->seg.tso_frags[i].paddr_low_32;
+		*word = lo;
 		word++;
 		/* [15:0] the upper 16 bits of the first buffer pointer */
 		/* [31:16] length of the first buffer */
-		*word = (tso_seg->seg.tso_frags[i].length << 16);
+		*word = (tso_seg->seg.tso_frags[i].length << 16) | hi;
 		word++;
 	}
 

+ 2 - 2
core/dp/txrx/ol_tx.c

@@ -272,7 +272,7 @@ qdf_nbuf_t ol_tx_ll(ol_txrx_vdev_handle vdev, qdf_nbuf_t msdu_list)
 			if (msdu_info.tso_info.curr_seg)
 				QDF_NBUF_CB_PADDR(msdu) =
 					msdu_info.tso_info.curr_seg->
-					seg.tso_frags[0].paddr_low_32;
+					seg.tso_frags[0].paddr;
 
 			segments--;
 
@@ -541,7 +541,7 @@ ol_tx_ll_fast(ol_txrx_vdev_handle vdev, qdf_nbuf_t msdu_list)
 
 			if (msdu_info.tso_info.curr_seg)
 				QDF_NBUF_CB_PADDR(msdu) = msdu_info.tso_info.
-					curr_seg->seg.tso_frags[0].paddr_low_32;
+					curr_seg->seg.tso_frags[0].paddr;
 
 			segments--;