diff mbox

ath10k: invalid mcs reported in rx descriptor

Message ID 1441176665-3365-1-git-send-email-c_mpubbi@qti.qualcomm.com (mailing list archive)
State Accepted
Headers show

Commit Message

c_mpubbi@qti.qualcomm.com Sept. 2, 2015, 6:51 a.m. UTC
From: Manikanta Pubbisetty <c_mpubbi@qti.qualcomm.com>

Sometimes hardware reports invalid mcs index in rx descriptor
when operating in VHT80 mode and all packets with invalid mcs
will be eventually dropped in mac80211. This issue is observerd during
testing on QCA99X0 chipsets.

This patch adds a warn message for dumping the rx desc info which helps
in analysing the issue when invalid mcs is received.

Signed-off-by: Manikanta Pubbisetty <c_mpubbi@qti.qualcomm.com>
---
 drivers/net/wireless/ath/ath10k/htt_rx.c | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)

Comments

Kalle Valo Sept. 9, 2015, 9:45 a.m. UTC | #1
<c_mpubbi@qti.qualcomm.com> writes:

> From: Manikanta Pubbisetty <c_mpubbi@qti.qualcomm.com>
>
> Sometimes hardware reports invalid mcs index in rx descriptor
> when operating in VHT80 mode and all packets with invalid mcs
> will be eventually dropped in mac80211. This issue is observerd during
> testing on QCA99X0 chipsets.
>
> This patch adds a warn message for dumping the rx desc info which helps
> in analysing the issue when invalid mcs is received.
>
> Signed-off-by: Manikanta Pubbisetty <c_mpubbi@qti.qualcomm.com>

Thanks, applied. I just changed the commit title a bit:

commit 6ccea107eba46fbc7de40e944bf17145c2809666
Author: Manikanta Pubbisetty <c_mpubbi@qti.qualcomm.com>
Date:   Wed Sep 2 17:05:27 2015 +0300

    ath10k: print invalid mcs reported in rx descriptor
diff mbox

Patch

diff --git a/drivers/net/wireless/ath/ath10k/htt_rx.c b/drivers/net/wireless/ath/ath10k/htt_rx.c
index 1b7a043..9985772 100644
--- a/drivers/net/wireless/ath/ath10k/htt_rx.c
+++ b/drivers/net/wireless/ath/ath10k/htt_rx.c
@@ -697,6 +697,29 @@  static void ath10k_htt_rx_h_rates(struct ath10k *ar,
 		bw = info2 & 3;
 		sgi = info3 & 1;
 
+		if (mcs > 0x09) {
+			ath10k_warn(ar, "invalid MCS received %u\n", mcs);
+			ath10k_warn(ar, "rxd %08x mpdu start %08x %08x msdu start %08x %08x ppdu start %08x %08x %08x %08x %08x\n",
+				    __le32_to_cpu(rxd->attention.flags),
+				    __le32_to_cpu(rxd->mpdu_start.info0),
+				    __le32_to_cpu(rxd->mpdu_start.info1),
+				    __le32_to_cpu(rxd->msdu_start.common.info0),
+				    __le32_to_cpu(rxd->msdu_start.common.info1),
+				    rxd->ppdu_start.info0,
+				    __le32_to_cpu(rxd->ppdu_start.info1),
+				    __le32_to_cpu(rxd->ppdu_start.info2),
+				    __le32_to_cpu(rxd->ppdu_start.info3),
+				    __le32_to_cpu(rxd->ppdu_start.info4));
+
+			ath10k_warn(ar, "msdu end %08x mpdu end %08x\n",
+				    __le32_to_cpu(rxd->msdu_end.common.info0),
+				    __le32_to_cpu(rxd->mpdu_end.info0));
+
+			ath10k_dbg_dump(ar, ATH10K_DBG_HTT_DUMP, NULL,
+					"rx desc msdu payload: ",
+					rxd->msdu_payload, 50);
+		}
+
 		status->rate_idx = mcs;
 		status->vht_nss = nss;