From 8969ad7fa8c03a6e681dcfe792a564ed5d86c553 Mon Sep 17 00:00:00 2001 From: Dustin Brown Date: Sat, 2 Dec 2017 22:43:26 -0800 Subject: [PATCH] qcacmn: Fix double dmap problem in htc For control messages, a path in HTC was performing double dmamaps and this was, in time, causing dmamap failures on SMMU. Change-Id: I19f7e13a0a19404fe1161127b10f52225b6a4248 CRs-Fixed: 2151773 --- htc/htc_send.c | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/htc/htc_send.c b/htc/htc_send.c index 75e8ed7bded1..6f1cf1bc59a8 100644 --- a/htc/htc_send.c +++ b/htc/htc_send.c @@ -1500,15 +1500,20 @@ static inline QDF_STATUS __htc_send_pkt(HTC_HANDLE HTCHandle, * Now that the HTC frame header has been added, the netbuf can * be mapped. This only applies to non-data frames, since data * frames were already mapped as they entered into the driver. + * For flow control enabled endpoints mapping is done in + * htc_issue_packets and for non flow control enabled endpoints + * its done here. */ - status = qdf_nbuf_map(target->osdev, - GET_HTC_PACKET_NET_BUF_CONTEXT(pPacket), - QDF_DMA_TO_DEVICE); - if (status != QDF_STATUS_SUCCESS) { - AR_DEBUG_PRINTF(ATH_DEBUG_ERR, - ("%s: nbuf map failed, endpoint %pK, seq_no. %d\n", - __func__, pEndpoint, pEndpoint->SeqNo)); - return status; + if (!IS_TX_CREDIT_FLOW_ENABLED(pEndpoint)) { + status = qdf_nbuf_map(target->osdev, + GET_HTC_PACKET_NET_BUF_CONTEXT(pPacket), + QDF_DMA_TO_DEVICE); + if (status != QDF_STATUS_SUCCESS) { + AR_DEBUG_PRINTF(ATH_DEBUG_ERR, + ("%s: nbuf map failed, endpoint %pK, seq_no. %d\n", + __func__, pEndpoint, pEndpoint->SeqNo)); + return status; + } } pPacket->PktInfo.AsTx.Flags |= HTC_TX_PACKET_FLAG_FIXUP_NETBUF;