Takashi Iwai 3d08ac
From 6e8a8991e2103dcb6a9cff28f460390e8e360848 Mon Sep 17 00:00:00 2001
Takashi Iwai 3d08ac
From: Rakesh Pillai <pillair@codeaurora.org>
Takashi Iwai 3d08ac
Date: Fri, 25 Jan 2019 09:51:06 +0530
Takashi Iwai 3d08ac
Subject: [PATCH] ath10k: fix dma unmap direction for management frames
Takashi Iwai 3d08ac
Git-commit: 6e8a8991e2103dcb6a9cff28f460390e8e360848
Takashi Iwai 3d08ac
Patch-mainline: v5.1-rc1
Takashi Iwai 3d08ac
References: bsc#1111666
Takashi Iwai 3d08ac
Takashi Iwai 3d08ac
The management frames transmitted are dma mapped with
Takashi Iwai 3d08ac
direction TO_DEVICE, but incorrectly mapped with
Takashi Iwai 3d08ac
direction FROM_DEVICE during tx complete and error cases.
Takashi Iwai 3d08ac
Takashi Iwai 3d08ac
Fix the direction of dma during dma unmap of the
Takashi Iwai 3d08ac
transmitted management frames.
Takashi Iwai 3d08ac
Takashi Iwai 3d08ac
Tested HW: WCN3990
Takashi Iwai 3d08ac
Tested FW: WLAN.HL.2.0-01188-QCAHLSWMTPLZ-1
Takashi Iwai 3d08ac
Takashi Iwai 3d08ac
Fixes: 38a1390e02b7 ("ath10k: dma unmap mgmt tx buffer if wmi cmd send fails")
Takashi Iwai 3d08ac
Signed-off-by: Rakesh Pillai <pillair@codeaurora.org>
Takashi Iwai 3d08ac
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
Takashi Iwai 3d08ac
Acked-by: Takashi Iwai <tiwai@suse.de>
Takashi Iwai 3d08ac
Takashi Iwai 3d08ac
---
Takashi Iwai 3d08ac
 drivers/net/wireless/ath/ath10k/mac.c | 4 ++--
Takashi Iwai 3d08ac
 drivers/net/wireless/ath/ath10k/wmi.c | 4 ++--
Takashi Iwai 3d08ac
 2 files changed, 4 insertions(+), 4 deletions(-)
Takashi Iwai 3d08ac
Takashi Iwai 3d08ac
diff --git a/drivers/net/wireless/ath/ath10k/mac.c b/drivers/net/wireless/ath/ath10k/mac.c
Takashi Iwai 3d08ac
index e49b36752ba2..8c6c5152d416 100644
Takashi Iwai 3d08ac
--- a/drivers/net/wireless/ath/ath10k/mac.c
Takashi Iwai 3d08ac
+++ b/drivers/net/wireless/ath/ath10k/mac.c
Takashi Iwai 3d08ac
@@ -1,7 +1,7 @@
Takashi Iwai 3d08ac
 /*
Takashi Iwai 3d08ac
  * Copyright (c) 2005-2011 Atheros Communications Inc.
Takashi Iwai 3d08ac
  * Copyright (c) 2011-2017 Qualcomm Atheros, Inc.
Takashi Iwai 3d08ac
- * Copyright (c) 2018, The Linux Foundation. All rights reserved.
Takashi Iwai 3d08ac
+ * Copyright (c) 2018-2019, The Linux Foundation. All rights reserved.
Takashi Iwai 3d08ac
  *
Takashi Iwai 3d08ac
  * Permission to use, copy, modify, and/or distribute this software for any
Takashi Iwai 3d08ac
  * purpose with or without fee is hereby granted, provided that the above
Takashi Iwai 3d08ac
@@ -3863,7 +3863,7 @@ void ath10k_mgmt_over_wmi_tx_work(struct work_struct *work)
Takashi Iwai 3d08ac
 				ath10k_warn(ar, "failed to transmit management frame by ref via WMI: %d\n",
Takashi Iwai 3d08ac
 					    ret);
Takashi Iwai 3d08ac
 				dma_unmap_single(ar->dev, paddr, skb->len,
Takashi Iwai 3d08ac
-						 DMA_FROM_DEVICE);
Takashi Iwai 3d08ac
+						 DMA_TO_DEVICE);
Takashi Iwai 3d08ac
 				ieee80211_free_txskb(ar->hw, skb);
Takashi Iwai 3d08ac
 			}
Takashi Iwai 3d08ac
 		} else {
Takashi Iwai 3d08ac
diff --git a/drivers/net/wireless/ath/ath10k/wmi.c b/drivers/net/wireless/ath/ath10k/wmi.c
Takashi Iwai 3d08ac
index 971ff364d8b1..6509febc07cd 100644
Takashi Iwai 3d08ac
--- a/drivers/net/wireless/ath/ath10k/wmi.c
Takashi Iwai 3d08ac
+++ b/drivers/net/wireless/ath/ath10k/wmi.c
Takashi Iwai 3d08ac
@@ -1,7 +1,7 @@
Takashi Iwai 3d08ac
 /*
Takashi Iwai 3d08ac
  * Copyright (c) 2005-2011 Atheros Communications Inc.
Takashi Iwai 3d08ac
  * Copyright (c) 2011-2017 Qualcomm Atheros, Inc.
Takashi Iwai 3d08ac
- * Copyright (c) 2018, The Linux Foundation. All rights reserved.
Takashi Iwai 3d08ac
+ * Copyright (c) 2018-2019, The Linux Foundation. All rights reserved.
Takashi Iwai 3d08ac
  *
Takashi Iwai 3d08ac
  * Permission to use, copy, modify, and/or distribute this software for any
Takashi Iwai 3d08ac
  * purpose with or without fee is hereby granted, provided that the above
Takashi Iwai 3d08ac
@@ -2346,7 +2346,7 @@ static int wmi_process_mgmt_tx_comp(struct ath10k *ar, u32 desc_id,
Takashi Iwai 3d08ac
 
Takashi Iwai 3d08ac
 	msdu = pkt_addr->vaddr;
Takashi Iwai 3d08ac
 	dma_unmap_single(ar->dev, pkt_addr->paddr,
Takashi Iwai 3d08ac
-			 msdu->len, DMA_FROM_DEVICE);
Takashi Iwai 3d08ac
+			 msdu->len, DMA_TO_DEVICE);
Takashi Iwai 3d08ac
 	info = IEEE80211_SKB_CB(msdu);
Takashi Iwai 3d08ac
 
Takashi Iwai 3d08ac
 	if (status)
Takashi Iwai 3d08ac
-- 
Takashi Iwai 3d08ac
2.16.4
Takashi Iwai 3d08ac