115 lines
3.7 KiB
Diff
115 lines
3.7 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Fiona Klute <[email protected]>
|
|
Date: Fri, 2 Feb 2024 20:38:57 +0100
|
|
Subject: Implement adaptivity functions
|
|
|
|
Doesn't make much difference in my network, unfortunately.
|
|
|
|
Signed-off-by: Fiona Klute <[email protected]>
|
|
---
|
|
drivers/net/wireless/realtek/rtw88/rtw8703b.c | 53 +++++++++-
|
|
drivers/net/wireless/realtek/rtw88/rtw8703b.h | 2 +
|
|
2 files changed, 53 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/drivers/net/wireless/realtek/rtw88/rtw8703b.c b/drivers/net/wireless/realtek/rtw88/rtw8703b.c
|
|
index 111111111111..222222222222 100644
|
|
--- a/drivers/net/wireless/realtek/rtw88/rtw8703b.c
|
|
+++ b/drivers/net/wireless/realtek/rtw88/rtw8703b.c
|
|
@@ -1690,6 +1690,43 @@ static void rtw8703b_coex_set_wl_rx_gain(struct rtw_dev *rtwdev, bool low_gain)
|
|
{
|
|
}
|
|
|
|
+#define RTW8703B_EDCCA_INIT 0x7f
|
|
+static void rtw8703b_adaptivity_init(struct rtw_dev *rtwdev)
|
|
+{
|
|
+ rtw_phy_set_edcca_th(rtwdev, RTW8703B_EDCCA_INIT, RTW8703B_EDCCA_INIT);
|
|
+
|
|
+ /* mac edcca state settings: enable EDCCA, EDCCA count down */
|
|
+ rtw_write32_clr(rtwdev, REG_TX_PTCL_CTRL, BIT_DIS_EDCCA);
|
|
+ rtw_write32_set(rtwdev, REG_RD_CTRL, BIT_EDCCA_MSK_CNTDOWN_EN);
|
|
+
|
|
+ rtw_write32_mask(rtwdev, REG_EDCCA_DCNF, BIT(21) | BIT(20), 0x1);
|
|
+}
|
|
+
|
|
+#define IGI_TARGET 0x32
|
|
+static void rtw8703b_adaptivity(struct rtw_dev *rtwdev)
|
|
+{
|
|
+ struct rtw_dm_info *dm_info = &rtwdev->dm_info;
|
|
+ s8 l2h, h2l;
|
|
+ u8 igi;
|
|
+ u8 l2h_dyn_min;
|
|
+
|
|
+ igi = dm_info->igi_history[0];
|
|
+ if (dm_info->edcca_mode == RTW_EDCCA_NORMAL) {
|
|
+ l2h = max_t(s8, igi + EDCCA_IGI_L2H_DIFF, EDCCA_TH_L2H_LB);
|
|
+ h2l = l2h - EDCCA_L2H_H2L_DIFF_NORMAL;
|
|
+ } else {
|
|
+ l2h_dyn_min = (u8)(dm_info->l2h_th_ini + IGI_TARGET);
|
|
+ if (igi < l2h_dyn_min)
|
|
+ l2h = igi;
|
|
+ else
|
|
+ l2h = l2h_dyn_min;
|
|
+ h2l = l2h - EDCCA_L2H_H2L_DIFF;
|
|
+ }
|
|
+
|
|
+ rtw_dbg(rtwdev, RTW_DBG_ADAPTIVITY, "l2h=%d, h2l=%d", l2h, h2l);
|
|
+ rtw_phy_set_edcca_th(rtwdev, l2h, h2l);
|
|
+}
|
|
+
|
|
static const u8 rtw8703b_pwrtrk_2gb_n[] = {
|
|
0, 0, 1, 2, 2, 3, 3, 4, 4, 4, 4, 5, 5, 6, 6,
|
|
7, 7, 7, 7, 8, 8, 9, 9, 10, 10, 10, 11, 11, 11, 11
|
|
@@ -1828,6 +1865,15 @@ static const struct coex_tdma_para tdma_sant_8703b[] = {
|
|
{ {0x61, 0x08, 0x03, 0x11, 0x11} },
|
|
};
|
|
|
|
+static const struct rtw_hw_reg_offset rtw8703b_edcca_th[] = {
|
|
+ [EDCCA_TH_L2H_IDX] = {
|
|
+ {.addr = 0xc4c, .mask = MASKBYTE0}, .offset = 0
|
|
+ },
|
|
+ [EDCCA_TH_H2L_IDX] = {
|
|
+ {.addr = 0xc4c, .mask = MASKBYTE2}, .offset = 0
|
|
+ },
|
|
+};
|
|
+
|
|
static const struct rtw_chip_ops rtw8703b_ops = {
|
|
.power_on = rtw_power_on,
|
|
.power_off = rtw_power_off,
|
|
@@ -1860,8 +1906,8 @@ static const struct rtw_chip_ops rtw8703b_ops = {
|
|
.config_bfee = NULL,
|
|
.set_gid_table = NULL,
|
|
.cfg_csi_rate = NULL,
|
|
- .adaptivity_init = NULL,
|
|
- .adaptivity = NULL,
|
|
+ .adaptivity_init = rtw8703b_adaptivity_init,
|
|
+ .adaptivity = rtw8703b_adaptivity,
|
|
.cfo_init = NULL,
|
|
.cfo_track = NULL,
|
|
.config_tx_path = NULL,
|
|
@@ -1903,6 +1949,9 @@ const struct rtw_chip_info rtw8703b_hw_spec = {
|
|
.rx_ldpc = false,
|
|
.tx_stbc = false,
|
|
.max_power_index = 0x3f,
|
|
+ .edcca_th = rtw8703b_edcca_th,
|
|
+ .l2h_th_ini_cs = 10, /* -50 dBm */
|
|
+ .l2h_th_ini_ad = -11,
|
|
.ampdu_density = IEEE80211_HT_MPDU_DENSITY_16,
|
|
.usb_tx_agg_desc_num = 1, /* Not sure if this chip has USB interface */
|
|
.hw_feature_report = true,
|
|
diff --git a/drivers/net/wireless/realtek/rtw88/rtw8703b.h b/drivers/net/wireless/realtek/rtw88/rtw8703b.h
|
|
index 111111111111..222222222222 100644
|
|
--- a/drivers/net/wireless/realtek/rtw88/rtw8703b.h
|
|
+++ b/drivers/net/wireless/realtek/rtw88/rtw8703b.h
|
|
@@ -91,6 +91,8 @@ struct phy_status_8703b {
|
|
#define REG_OFDM0_TX_PSD_NOISE 0x0ce4 /* TX pseudo noise weighting */
|
|
#define REG_IQK_RDY 0x0e90 /* is != 0 when IQK is done */
|
|
|
|
+#define REG_EDCCA_DCNF 0x0e24
|
|
+
|
|
/* RF registers */
|
|
#define RF_RCK1 0x1E
|
|
|
|
--
|
|
Armbian
|
|
|