2020-05-28 08:22:59

by Tony Chuang

[permalink] [raw]
Subject: [PATCH 0/5] rtw88: 8821c: the rest patches to support 8821c

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

[Note] this set is based on another set:
[v2,0/7] rtw88: 8821c: add basic function routines
https://patchwork.kernel.org/cover/11575267/

After this set, the RTL8821CE device is supported by rtw88.
The CCK PD settings allows the device to adjust to the environment.
The power tracking mechanism can detect the thermal value of the
device and modify the power index.

As RTL8821CE is an 802.11ac 1x1 device, the STBC the no supported.

Tzu-En Huang (5):
rtw88: 8821c: add cck pd settings
rtw88: 8821c: add power tracking
rtw88: 8821c: add beamformee support
rtw88: single rf path chips don't support TX STBC
rtw88: 8821c: Add 8821CE to Kconfig and Makefile

drivers/net/wireless/realtek/rtw88/Kconfig | 14 +
drivers/net/wireless/realtek/rtw88/Makefile | 6 +
drivers/net/wireless/realtek/rtw88/bf.c | 5 +-
drivers/net/wireless/realtek/rtw88/main.c | 4 +-
drivers/net/wireless/realtek/rtw88/main.h | 2 +
drivers/net/wireless/realtek/rtw88/rtw8821c.c | 361 ++++++++++++++++++
6 files changed, 388 insertions(+), 4 deletions(-)

--
2.17.1


2020-05-28 08:24:27

by Tony Chuang

[permalink] [raw]
Subject: [PATCH 5/5] rtw88: 8821c: Add 8821CE to Kconfig and Makefile

From: Tzu-En Huang <[email protected]>

Since 8821C code is ready, we can build it.

Signed-off-by: Tzu-En Huang <[email protected]>
Signed-off-by: Yan-Hsuan Chuang <[email protected]>
---
drivers/net/wireless/realtek/rtw88/Kconfig | 14 ++++++++++++++
drivers/net/wireless/realtek/rtw88/Makefile | 6 ++++++
2 files changed, 20 insertions(+)

diff --git a/drivers/net/wireless/realtek/rtw88/Kconfig b/drivers/net/wireless/realtek/rtw88/Kconfig
index ca894c4f96ac..e3d7cb6c1290 100644
--- a/drivers/net/wireless/realtek/rtw88/Kconfig
+++ b/drivers/net/wireless/realtek/rtw88/Kconfig
@@ -25,6 +25,9 @@ config RTW88_8822C
config RTW88_8723D
tristate

+config RTW88_8821C
+ tristate
+
config RTW88_8822BE
tristate "Realtek 8822BE PCI wireless network adapter"
depends on PCI
@@ -58,6 +61,17 @@ config RTW88_8723DE

802.11n PCIe wireless network adapter

+config RTW88_8821CE
+ tristate "Realtek 8821CE PCI wireless network adapter"
+ depends on PCI
+ select RTW88_CORE
+ select RTW88_PCI
+ select RTW88_8821C
+ help
+ Select this option will enable support for 8821CE chipset
+
+ 802.11ac PCIe wireless network adapter
+
config RTW88_DEBUG
bool "Realtek rtw88 debug support"
depends on RTW88_CORE
diff --git a/drivers/net/wireless/realtek/rtw88/Makefile b/drivers/net/wireless/realtek/rtw88/Makefile
index f31e78a6f146..c0e4b111c8b4 100644
--- a/drivers/net/wireless/realtek/rtw88/Makefile
+++ b/drivers/net/wireless/realtek/rtw88/Makefile
@@ -37,5 +37,11 @@ rtw88_8723d-objs := rtw8723d.o rtw8723d_table.o
obj-$(CONFIG_RTW88_8723DE) += rtw88_8723de.o
rtw88_8723de-objs := rtw8723de.o

+obj-$(CONFIG_RTW88_8821C) += rtw88_8821c.o
+rtw88_8821c-objs := rtw8821c.o rtw8821c_table.o
+
+obj-$(CONFIG_RTW88_8821CE) += rtw88_8821ce.o
+rtw88_8821ce-objs := rtw8821ce.o
+
obj-$(CONFIG_RTW88_PCI) += rtw88_pci.o
rtw88_pci-objs := pci.o
--
2.17.1

2020-05-28 08:24:27

by Tony Chuang

[permalink] [raw]
Subject: [PATCH 1/5] rtw88: 8821c: add cck pd settings

From: Tzu-En Huang <[email protected]>

CCK PD reduces the numbers of false alram in cck rate by dynamically
adjusting the value of power threshold and cs_ratio. We define current
circumstance in to levels, Compared to the previous level, if the
level is changed, we set the new values for power threshold and cs_ratio.
Implement this for 8821c.

Signed-off-by: Tzu-En Huang <[email protected]>
Signed-off-by: Yan-Hsuan Chuang <[email protected]>
---
drivers/net/wireless/realtek/rtw88/main.h | 1 +
drivers/net/wireless/realtek/rtw88/rtw8821c.c | 25 +++++++++++++++++++
2 files changed, 26 insertions(+)

diff --git a/drivers/net/wireless/realtek/rtw88/main.h b/drivers/net/wireless/realtek/rtw88/main.h
index 7b6488406836..d46fc9dd949c 100644
--- a/drivers/net/wireless/realtek/rtw88/main.h
+++ b/drivers/net/wireless/realtek/rtw88/main.h
@@ -1482,6 +1482,7 @@ struct rtw_dm_info {
/* [bandwidth 0:20M/1:40M][number of path] */
u8 cck_pd_lv[2][RTW_RF_PATH_MAX];
u32 cck_fa_avg;
+ u8 cck_pd_default;

/* save the last rx phy status for debug */
s8 rx_snr[RTW_RF_PATH_MAX];
diff --git a/drivers/net/wireless/realtek/rtw88/rtw8821c.c b/drivers/net/wireless/realtek/rtw88/rtw8821c.c
index 749569eab912..16703086d64f 100644
--- a/drivers/net/wireless/realtek/rtw88/rtw8821c.c
+++ b/drivers/net/wireless/realtek/rtw88/rtw8821c.c
@@ -99,6 +99,7 @@ static void rtw8821c_phy_set_param(struct rtw_dev *rtwdev)
rtwdev->chip->ch_param[2] = rtw_read32_mask(rtwdev, 0xaac, MASKDWORD);

rtw_phy_init(rtwdev);
+ rtwdev->dm_info.cck_pd_default = rtw_read8(rtwdev, 0xaaa) & 0x1f;
}

static int rtw8821c_mac_init(struct rtw_dev *rtwdev)
@@ -588,6 +589,29 @@ static void rtw8821c_phy_calibration(struct rtw_dev *rtwdev)
rtw8821c_do_iqk(rtwdev);
}

+static void rtw8821c_phy_cck_pd_set(struct rtw_dev *rtwdev, u8 new_lvl)
+{
+ struct rtw_dm_info *dm_info = &rtwdev->dm_info;
+ u8 pd[CCK_PD_LV_MAX] = {3, 7, 13, 13, 13};
+
+ if (dm_info->min_rssi > 60) {
+ new_lvl = 4;
+ pd[4] = 0x1d;
+ goto set_cck_pd;
+ }
+
+ if (dm_info->cck_pd_lv[RTW_CHANNEL_WIDTH_20][RF_PATH_A] == new_lvl)
+ return;
+
+ dm_info->cck_fa_avg = CCK_FA_AVG_RESET;
+
+set_cck_pd:
+ dm_info->cck_pd_lv[RTW_CHANNEL_WIDTH_20][RF_PATH_A] = new_lvl;
+ rtw_write32_mask(rtwdev, 0xa08, 0x3f0000, pd[new_lvl]);
+ rtw_write32_mask(rtwdev, 0xaa8, 0x1f0000,
+ dm_info->cck_pd_default + new_lvl * 2);
+}
+
static struct rtw_pwr_seq_cmd trans_carddis_to_cardemu_8821c[] = {
{0x0086,
RTW_PWR_CUT_ALL_MSK,
@@ -1027,6 +1051,7 @@ static struct rtw_chip_ops rtw8821c_ops = {
.cfg_ldo25 = rtw8821c_cfg_ldo25,
.false_alarm_statistics = rtw8821c_false_alarm_statistics,
.phy_calibration = rtw8821c_phy_calibration,
+ .cck_pd_set = rtw8821c_phy_cck_pd_set,
};

struct rtw_chip_info rtw8821c_hw_spec = {
--
2.17.1