2024-02-29 08:00:43

by Ping-Ke Shih

[permalink] [raw]
Subject: [PATCH 0/8] wifi: rtw89: 8922a: add BT-coexistence materials to initialize 8922A

BT-coexistence adds new format of H2C command to use u8 data type as
possible as it can to reduce endian transformation, such as le16_to_cpu().
8922A is first chip to use these new format, so prepare these stuffs before
enabling 8922AE. The new format is also needed by newer firmware of other
chips, so also prepare for existing chips in advance.

First two patches are helpers of MAC to control grant to BT for WiFi. The
other patches are to add new introduction format used by newer firmware.

This patchset is partial patches related to BT-coexistence, and I will
send out remaining five patches by another patchset in coming days.

Ching-Te Ku (6):
wifi: rtw89: coex: add init_info H2C command format version 7
wifi: rtw89: coex: add BTC ctrl_info version 7 and related logic
wifi: rtw89: coex: Reorder H2C command index to align with firmware
wifi: rtw89: coex: add return value to ensure H2C command is success
or not
wifi: rtw89: coex: When Bluetooth not available don't set power/gain
wifi: rtw89: coex: Add coexistence policy to decrease WiFi packet
CRC-ERR

Ping-Ke Shih (2):
wifi: rtw89: mac: add coexistence helpers {cfg/get}_plt
wifi: rtw89: 8922a: add coexistence helpers of SW grant

drivers/net/wireless/realtek/rtw89/coex.c | 393 ++++++++++++------
drivers/net/wireless/realtek/rtw89/coex.h | 20 +
drivers/net/wireless/realtek/rtw89/core.h | 90 +++-
drivers/net/wireless/realtek/rtw89/debug.c | 9 +-
drivers/net/wireless/realtek/rtw89/fw.c | 112 ++++-
drivers/net/wireless/realtek/rtw89/fw.h | 45 +-
drivers/net/wireless/realtek/rtw89/mac.c | 8 +-
drivers/net/wireless/realtek/rtw89/mac.h | 25 +-
drivers/net/wireless/realtek/rtw89/mac_be.c | 117 ++++++
drivers/net/wireless/realtek/rtw89/reg.h | 49 +++
drivers/net/wireless/realtek/rtw89/rtw8851b.c | 150 ++++---
drivers/net/wireless/realtek/rtw89/rtw8852a.c | 64 ++-
drivers/net/wireless/realtek/rtw89/rtw8852b.c | 64 ++-
drivers/net/wireless/realtek/rtw89/rtw8852c.c | 64 ++-
drivers/net/wireless/realtek/rtw89/rtw8922a.c | 112 +++++
15 files changed, 1061 insertions(+), 261 deletions(-)

--
2.25.1



2024-02-29 08:01:15

by Ping-Ke Shih

[permalink] [raw]
Subject: [PATCH 8/8] wifi: rtw89: coex: Add coexistence policy to decrease WiFi packet CRC-ERR

From: Ching-Te Ku <[email protected]>

The 2 Bluetooth profiles (Hands free profile & Human interface device)
have high duty transmission, it will affect the traffic of WiFi packet
frequently. And once the WiFi traffic down to B/G mode, it will need
a better success rate to recover the transmission rate. Add new policy
option to solve the above situation.

Signed-off-by: Ching-Te Ku <[email protected]>
Signed-off-by: Ping-Ke Shih <[email protected]>
---
drivers/net/wireless/realtek/rtw89/coex.c | 44 +++++++++++++++++++----
drivers/net/wireless/realtek/rtw89/core.h | 1 +
2 files changed, 38 insertions(+), 7 deletions(-)

diff --git a/drivers/net/wireless/realtek/rtw89/coex.c b/drivers/net/wireless/realtek/rtw89/coex.c
index 6a1f9a555ce7..d9b66d43f32e 100644
--- a/drivers/net/wireless/realtek/rtw89/coex.c
+++ b/drivers/net/wireless/realtek/rtw89/coex.c
@@ -358,17 +358,26 @@ enum btc_cx_poicy_type {
/* TDMA off + pri: WL_Rx = BT, BT_HI > WL_Tx > BT_Lo */
BTC_CXP_OFF_EQ3 = (BTC_CXP_OFF << 8) | 5,

+ /* TDMA off + pri: WL_Rx = BT, BT_HI > WL_Tx > BT_Lo */
+ BTC_CXP_OFF_EQ4 = (BTC_CXP_OFF << 8) | 6,
+
+ /* TDMA off + pri: WL_Rx = BT, BT_HI > WL_Tx > BT_Lo */
+ BTC_CXP_OFF_EQ5 = (BTC_CXP_OFF << 8) | 7,
+
/* TDMA off + pri: BT_Hi > WL > BT_Lo */
- BTC_CXP_OFF_BWB0 = (BTC_CXP_OFF << 8) | 6,
+ BTC_CXP_OFF_BWB0 = (BTC_CXP_OFF << 8) | 8,

/* TDMA off + pri: WL_Hi-Tx > BT_Hi_Rx, BT_Hi > WL > BT_Lo */
- BTC_CXP_OFF_BWB1 = (BTC_CXP_OFF << 8) | 7,
+ BTC_CXP_OFF_BWB1 = (BTC_CXP_OFF << 8) | 9,

/* TDMA off + pri: WL_Hi-Tx > BT, BT_Hi > other-WL > BT_Lo */
- BTC_CXP_OFF_BWB2 = (BTC_CXP_OFF << 8) | 8,
+ BTC_CXP_OFF_BWB2 = (BTC_CXP_OFF << 8) | 10,

/* TDMA off + pri: WL_Hi-Tx = BT */
- BTC_CXP_OFF_BWB3 = (BTC_CXP_OFF << 8) | 9,
+ BTC_CXP_OFF_BWB3 = (BTC_CXP_OFF << 8) | 11,
+
+ /* TDMA off + pri: WL > BT, Block-BT*/
+ BTC_CXP_OFF_WL2 = (BTC_CXP_OFF << 8) | 12,

/* TDMA off+Bcn-Protect + pri: WL_Hi-Tx > BT_Hi_Rx, BT_Hi > WL > BT_Lo*/
BTC_CXP_OFFB_BWB0 = (BTC_CXP_OFFB << 8) | 0,
@@ -3086,6 +3095,7 @@ void rtw89_btc_set_policy_v1(struct rtw89_dev *rtwdev, u16 policy_type)
struct rtw89_btc_wl_role_info_v1 *wl_rinfo = &btc->cx.wl.role_info_v1;
struct rtw89_btc_bt_hid_desc *hid = &btc->cx.bt.link_info.hid_desc;
struct rtw89_btc_bt_hfp_desc *hfp = &btc->cx.bt.link_info.hfp_desc;
+ struct rtw89_btc_wl_info *wl = &btc->cx.wl;
u8 type, null_role;
u32 tbl_w1, tbl_b1, tbl_b4;

@@ -3111,9 +3121,16 @@ void rtw89_btc_set_policy_v1(struct rtw89_dev *rtwdev, u16 policy_type)
tbl_b4 = cxtbl[2];
}
} else {
- tbl_w1 = cxtbl[16];
tbl_b1 = cxtbl[17];
tbl_b4 = cxtbl[17];
+
+ if (wl->bg_mode)
+ tbl_w1 = cxtbl[8];
+ else if ((wl->status.map.traffic_dir & BIT(RTW89_TFC_UL)) &&
+ hid->exist)
+ tbl_w1 = cxtbl[19];
+ else
+ tbl_w1 = cxtbl[16];
}

btc->bt_req_en = false;
@@ -3727,7 +3744,12 @@ static void _action_bt_hfp(struct rtw89_dev *rtwdev)
_set_policy(rtwdev, BTC_CXP_OFF_BWB1, BTC_ACT_BT_HFP);
}
} else {
- _set_policy(rtwdev, BTC_CXP_OFF_EQ2, BTC_ACT_BT_HFP);
+ if (wl->bg_mode)
+ _set_policy(rtwdev, BTC_CXP_OFF_BWB1, BTC_ACT_BT_HFP);
+ else if (wl->status.map.traffic_dir & BIT(RTW89_TFC_UL))
+ _set_policy(rtwdev, BTC_CXP_OFF_EQ5, BTC_ACT_BT_HFP);
+ else
+ _set_policy(rtwdev, BTC_CXP_OFF_EQ2, BTC_ACT_BT_HFP);
}
}

@@ -3760,7 +3782,12 @@ static void _action_bt_hid(struct rtw89_dev *rtwdev)
policy_type = BTC_CXP_OFF_BWB1;
}
} else { /* dedicated-antenna */
- policy_type = BTC_CXP_OFF_EQ3;
+ if (wl->bg_mode)
+ policy_type = BTC_CXP_OFF_BWB1;
+ else if (wl->status.map.traffic_dir & BIT(RTW89_TFC_UL))
+ policy_type = BTC_CXP_OFF_EQ4;
+ else
+ policy_type = BTC_CXP_OFF_EQ3;
}

_set_policy(rtwdev, policy_type, BTC_ACT_BT_HID);
@@ -7049,10 +7076,13 @@ static const char *steps_to_str(u16 step)
CASE_BTC_POLICY_STR(OFF_EQ1);
CASE_BTC_POLICY_STR(OFF_EQ2);
CASE_BTC_POLICY_STR(OFF_EQ3);
+ CASE_BTC_POLICY_STR(OFF_EQ4);
+ CASE_BTC_POLICY_STR(OFF_EQ5);
CASE_BTC_POLICY_STR(OFF_BWB0);
CASE_BTC_POLICY_STR(OFF_BWB1);
CASE_BTC_POLICY_STR(OFF_BWB2);
CASE_BTC_POLICY_STR(OFF_BWB3);
+ CASE_BTC_POLICY_STR(OFF_WL2);
CASE_BTC_POLICY_STR(OFFB_BWB0);
CASE_BTC_POLICY_STR(OFFE_DEF);
CASE_BTC_POLICY_STR(OFFE_DEF2);
diff --git a/drivers/net/wireless/realtek/rtw89/core.h b/drivers/net/wireless/realtek/rtw89/core.h
index 7957b7b9e4c7..cbebfbf1d64a 100644
--- a/drivers/net/wireless/realtek/rtw89/core.h
+++ b/drivers/net/wireless/realtek/rtw89/core.h
@@ -1741,6 +1741,7 @@ struct rtw89_btc_wl_info {
u8 cn_report;
u8 coex_mode;

+ bool bg_mode;
bool scbd_change;
u32 scbd;
};
--
2.25.1