From: Yan-Hsuan Chuang <[email protected]>

For 8822C, driver needs to set ack timeout after hardware powered-on.
There are two values required for both CCK and OFDM rate sets.
But only OFDM ack timeout was set, and the value did not meet the
hardware specification (aSIFSTime + aSlotTime). For CCK, the ack
timeout should be 106us and for OFDM it should be 33us.

Signed-off-by: Yan-Hsuan Chuang <[email protected]>
---
 drivers/net/wireless/realtek/rtw88/reg.h      | 1 +
 drivers/net/wireless/realtek/rtw88/rtw8822c.c | 4 +++-
 2 files changed, 4 insertions(+), 1 deletion(-)

diff --git a/drivers/net/wireless/realtek/rtw88/reg.h 
b/drivers/net/wireless/realtek/rtw88/reg.h
index 7fc2b8f..81eec3c 100644
--- a/drivers/net/wireless/realtek/rtw88/reg.h
+++ b/drivers/net/wireless/realtek/rtw88/reg.h
@@ -278,6 +278,7 @@
 #define REG_RX_DRVINFO_SZ      0x060F
 #define BIT_APP_PHYSTS         BIT(28)
 #define REG_USTIME_EDCA                0x0638
+#define REG_ACKTO_CCK          0x0639
 #define REG_RESP_SIFS_CCK      0x063C
 #define REG_RESP_SIFS_OFDM     0x063E
 #define REG_ACKTO              0x0640
diff --git a/drivers/net/wireless/realtek/rtw88/rtw8822c.c 
b/drivers/net/wireless/realtek/rtw88/rtw8822c.c
index b2bc362..3634e41 100644
--- a/drivers/net/wireless/realtek/rtw88/rtw8822c.c
+++ b/drivers/net/wireless/realtek/rtw88/rtw8822c.c
@@ -767,7 +767,8 @@ static void rtw8822c_phy_set_param(struct rtw_dev *rtwdev)
 #define WLAN_BAR_ACK_TYPE              0x05
 #define WLAN_RA_TRY_RATE_AGG_LIMIT     0x08
 #define WLAN_RESP_TXRATE               0x84
-#define WLAN_ACK_TO                    0x40
+#define WLAN_ACK_TO                    0x21
+#define WLAN_ACK_TO_CCK                        0x6A
 #define WLAN_DATA_RATE_FB_CNT_1_4      0x01000000
 #define WLAN_DATA_RATE_FB_CNT_5_8      0x08070504
 #define WLAN_RTS_RATE_FB_CNT_5_8       0x08070504
@@ -889,6 +890,7 @@ static int rtw8822c_mac_init(struct rtw_dev *rtwdev)
        /* WMAC configuration */
        rtw_write8(rtwdev, REG_BBPSF_CTRL + 2, WLAN_RESP_TXRATE);
        rtw_write8(rtwdev, REG_ACKTO, WLAN_ACK_TO);
+       rtw_write8(rtwdev, REG_ACKTO_CCK, WLAN_ACK_TO_CCK);
        rtw_write16(rtwdev, REG_EIFS, WLAN_EIFS_DUR_TUNE);
        rtw_write8(rtwdev, REG_NAV_CTRL + 2, WLAN_NAV_MAX);
        rtw_write8(rtwdev, REG_WMAC_TRXPTCL_CTL_H  + 2, WLAN_BAR_ACK_TYPE);
-- 
2.7.4

Reply via email to