[OEM-OSP1-B] [PATCH 1/3] UBUNTU: SAUCE: rtw88: No retry and report for auth and assoc
Kai-Heng Feng
kai.heng.feng at canonical.com
Tue Apr 7 06:05:14 UTC 2020
From: Ping-Ke Shih <pkshih at realtek.com>
BugLink: https://bugs.launchpad.net/bugs/1871300
The certain AP can't handle quick auth/assoc retry proerply, so disable
auth/assoc L2 retry and doesn't report TX status immediately, then wait for
cfg80211 connection retry that in period of 100ms.
Change-Id: I663fc017049b3e663dc3cc0619e00d8e04d0de7e
Signed-off-by: Ping-Ke Shih <pkshih at realtek.com>
Signed-off-by: Kai-Heng Feng <kai.heng.feng at canonical.com>
---
drivers/net/wireless/realtek/rtw88/main.h | 1 +
drivers/net/wireless/realtek/rtw88/tx.c | 10 ++++++++++
drivers/net/wireless/realtek/rtw88/tx.h | 5 +++++
3 files changed, 16 insertions(+)
diff --git a/drivers/net/wireless/realtek/rtw88/main.h b/drivers/net/wireless/realtek/rtw88/main.h
index 266e0e5a2542..2d20d766f0f5 100644
--- a/drivers/net/wireless/realtek/rtw88/main.h
+++ b/drivers/net/wireless/realtek/rtw88/main.h
@@ -554,6 +554,7 @@ struct rtw_tx_pkt_info {
bool short_gi;
bool report;
bool rts;
+ bool no_retry;
};
struct rtw_rx_pkt_stat {
diff --git a/drivers/net/wireless/realtek/rtw88/tx.c b/drivers/net/wireless/realtek/rtw88/tx.c
index ed53f6aaba83..8e59b24279bb 100644
--- a/drivers/net/wireless/realtek/rtw88/tx.c
+++ b/drivers/net/wireless/realtek/rtw88/tx.c
@@ -60,6 +60,11 @@ void rtw_tx_fill_tx_desc(struct rtw_dev *rtwdev,
SET_TX_DESC_SPE_RPT(txdesc, pkt_info->report);
SET_TX_DESC_SW_DEFINE(txdesc, pkt_info->sn);
SET_TX_DESC_USE_RTS(txdesc, pkt_info->rts);
+
+ if (pkt_info->no_retry) {
+ SET_TX_DESC_RETRY_LIMIT_ENABLE(txdesc, 1);
+ SET_TX_DESC_DATA_RETRY_LIMIT(txdesc, 0);
+ }
}
EXPORT_SYMBOL(rtw_tx_fill_tx_desc);
@@ -342,6 +347,11 @@ void rtw_tx_pkt_info_update(struct rtw_dev *rtwdev,
bmc = is_broadcast_ether_addr(hdr->addr1) ||
is_multicast_ether_addr(hdr->addr1);
+ if (info->flags & IEEE80211_TX_INTFL_MLME_CONN_TX) {
+ info->flags &= ~IEEE80211_TX_CTL_REQ_TX_STATUS; // no report
+ pkt_info->no_retry = true; // don't re-tx
+ }
+
if (info->flags & IEEE80211_TX_CTL_REQ_TX_STATUS)
rtw_tx_report_enable(rtwdev, pkt_info);
diff --git a/drivers/net/wireless/realtek/rtw88/tx.h b/drivers/net/wireless/realtek/rtw88/tx.h
index 6c5298f880ba..e322031918f2 100644
--- a/drivers/net/wireless/realtek/rtw88/tx.h
+++ b/drivers/net/wireless/realtek/rtw88/tx.h
@@ -53,6 +53,11 @@
le32p_replace_bits((__le32 *)(txdesc) + 0x02, value, BIT(19))
#define SET_TX_DESC_SW_DEFINE(tx_desc, value) \
le32p_replace_bits((__le32 *)(txdesc) + 0x06, value, GENMASK(11, 0))
+#define SET_TX_DESC_RETRY_LIMIT_ENABLE(txdesc, value) \
+ le32p_replace_bits((__le32 *)(txdesc) + 0x04, value, BIT(17))
+#define SET_TX_DESC_DATA_RETRY_LIMIT(txdesc, value) \
+ le32p_replace_bits((__le32 *)(txdesc) + 0x04, value, GENMASK(23, 18))
+
enum rtw_tx_desc_queue_select {
TX_DESC_QSEL_TID0 = 0,
--
2.17.1
More information about the kernel-team
mailing list