From 5166d573eb38806e4bf1cf3581c5612afa73437a Mon Sep 17 00:00:00 2001 From: Dhanashri Atre Date: Fri, 3 Jun 2016 14:12:22 -0700 Subject: [PATCH] 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 --- core/dp/htt/htt_tx.c | 8 ++++++-- core/dp/txrx/ol_tx.c | 4 ++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/core/dp/htt/htt_tx.c b/core/dp/htt/htt_tx.c index c8afe74fc5d6..491eead592ba 100644 --- a/core/dp/htt/htt_tx.c +++ b/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++; } diff --git a/core/dp/txrx/ol_tx.c b/core/dp/txrx/ol_tx.c index d4595f47a245..d7baed21f833 100644 --- a/core/dp/txrx/ol_tx.c +++ b/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--;