From: Bitterblue Smith <rtl8821cerfe2@gmail.com>
To: Luka Gejak <luka.gejak@linux.dev>, Ping-Ke Shih <pkshih@realtek.com>
Cc: linux-wireless@vger.kernel.org, linux-kernel@vger.kernel.org,
Michael Straube <straube.linux@gmail.com>,
Peter Robinson <pbrobinson@gmail.com>
Subject: Re: [PATCH v5 rtw-next 1/7] wifi: rtw88: move the shared 88xxa init helpers into the core
Date: Wed, 30 Sep 2026 21:04:09 +0300 [thread overview]
Message-ID: <17f1504d-4a27-48f1-9c8e-e84a3416c383@gmail.com> (raw)
In-Reply-To: <20260930091604.52891-2-luka.gejak@linux.dev>
On 30/09/2026 12:15, Luka Gejak wrote:
> The adaptive control, EDCA and CCK power detect helpers in rtw88xxa.c
> program values that are not specific to that chip family. The RTL8723B
> needs all three of them, which would make that chip select RTW88_88XXA
> and pull in a whole chip module for three helpers.
>
> Move the CCK power detect setter to phy.c as rtw_phy_cck_pd_set(), where
> the rest of the CCK power detect code and the level enum already live,
> and the two MAC init helpers to mac.c as rtw_mac_init_adaptive_ctrl()
> and rtw_mac_init_edca(). The chips that need them call the core
> versions, so rtw88xxa.c no longer provides any of them.
>
> The two REG_USTIME_* writes are not carried over. rtw88xxa_power_on()
> writes the same values a few lines later, and rtw_set_channel_mac()
> writes them again on every channel set, so the register state of the
> existing chips does not change.
>
> Signed-off-by: Luka Gejak <luka.gejak@linux.dev>
> ---
> drivers/net/wireless/realtek/rtw88/mac.c | 22 +++++++
> drivers/net/wireless/realtek/rtw88/mac.h | 2 +
> drivers/net/wireless/realtek/rtw88/phy.c | 38 +++++++++++
> drivers/net/wireless/realtek/rtw88/phy.h | 1 +
> drivers/net/wireless/realtek/rtw88/rtw8812a.c | 2 +-
> drivers/net/wireless/realtek/rtw88/rtw8821a.c | 2 +-
> drivers/net/wireless/realtek/rtw88/rtw88xxa.c | 65 +------------------
> drivers/net/wireless/realtek/rtw88/rtw88xxa.h | 1 -
> 8 files changed, 67 insertions(+), 66 deletions(-)
>
> diff --git a/drivers/net/wireless/realtek/rtw88/mac.c b/drivers/net/wireless/realtek/rtw88/mac.c
> index eaa928bab240..83f142f61df5 100644
> --- a/drivers/net/wireless/realtek/rtw88/mac.c
> +++ b/drivers/net/wireless/realtek/rtw88/mac.c
> @@ -1419,3 +1419,25 @@ int rtw_mac_postinit(struct rtw_dev *rtwdev)
>
> return chip->ops->mac_postinit(rtwdev);
> }
> +
> +void rtw_mac_init_adaptive_ctrl(struct rtw_dev *rtwdev)
> +{
> + rtw_write32_mask(rtwdev, REG_RRSR, 0xfffff, 0xffff1);
> + rtw_write16(rtwdev, REG_RETRY_LIMIT, 0x3030);
> +}
> +EXPORT_SYMBOL(rtw_mac_init_adaptive_ctrl);
> +
> +void rtw_mac_init_edca(struct rtw_dev *rtwdev)
> +{
> + rtw_write16(rtwdev, REG_SPEC_SIFS, 0x100a);
> + rtw_write16(rtwdev, REG_MAC_SPEC_SIFS, 0x100a);
> +
> + rtw_write16(rtwdev, REG_SIFS, 0x100a);
> + rtw_write16(rtwdev, REG_SIFS + 2, 0x100a);
> +
> + rtw_write32(rtwdev, REG_EDCA_BE_PARAM, 0x005EA42B);
> + rtw_write32(rtwdev, REG_EDCA_BK_PARAM, 0x0000A44F);
> + rtw_write32(rtwdev, REG_EDCA_VI_PARAM, 0x005EA324);
> + rtw_write32(rtwdev, REG_EDCA_VO_PARAM, 0x002FA226);
> +}
> +EXPORT_SYMBOL(rtw_mac_init_edca);
No one said anything about moving these functions. Please put them back.
> diff --git a/drivers/net/wireless/realtek/rtw88/mac.h b/drivers/net/wireless/realtek/rtw88/mac.h
> index b73af90ee1d7..b7adc4dd0255 100644
> --- a/drivers/net/wireless/realtek/rtw88/mac.h
> +++ b/drivers/net/wireless/realtek/rtw88/mac.h
> @@ -30,6 +30,8 @@
>
> void rtw_set_channel_mac(struct rtw_dev *rtwdev, u8 channel, u8 bw,
> u8 primary_ch_idx);
> +void rtw_mac_init_adaptive_ctrl(struct rtw_dev *rtwdev);
> +void rtw_mac_init_edca(struct rtw_dev *rtwdev);
> int rtw_pwr_seq_parser(struct rtw_dev *rtwdev,
> const struct rtw_pwr_seq_cmd * const *cmd_seq);
> int rtw_mac_power_on(struct rtw_dev *rtwdev);
> diff --git a/drivers/net/wireless/realtek/rtw88/phy.c b/drivers/net/wireless/realtek/rtw88/phy.c
> index e2ac5c6fd500..ee16474ac026 100644
> --- a/drivers/net/wireless/realtek/rtw88/phy.c
> +++ b/drivers/net/wireless/realtek/rtw88/phy.c
> @@ -811,6 +811,44 @@ static void rtw_phy_cck_pd(struct rtw_dev *rtwdev)
> chip->ops->cck_pd_set(rtwdev, level);
> }
>
> +void rtw_phy_cck_pd_set(struct rtw_dev *rtwdev, u8 new_lvl)
> +{
> + static const u8 pd[CCK_PD_LV_MAX] = {0x40, 0x83, 0xcd, 0xdd, 0xed};
> + struct rtw_dm_info *dm_info = &rtwdev->dm_info;
> +
> + /* Override rtw_phy_cck_pd_lv_link(). It implements something
> + * like type 2/3/4. We need type 1 here.
> + */
> + if (rtw_is_assoc(rtwdev)) {
> + if (dm_info->min_rssi > 60) {
> + new_lvl = CCK_PD_LV3;
> + } else if (dm_info->min_rssi > 35) {
> + new_lvl = CCK_PD_LV2;
> + } else if (dm_info->min_rssi > 20) {
> + if (dm_info->cck_fa_avg > 500)
> + new_lvl = CCK_PD_LV2;
> + else if (dm_info->cck_fa_avg < 250)
> + new_lvl = CCK_PD_LV1;
> + else
> + return;
> + } else {
> + new_lvl = CCK_PD_LV1;
> + }
> + }
> +
> + rtw_dbg(rtwdev, RTW_DBG_PHY, "lv: (%d) -> (%d)\n",
> + dm_info->cck_pd_lv[RTW_CHANNEL_WIDTH_20][RF_PATH_A], new_lvl);
> +
> + 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;
> + dm_info->cck_pd_lv[RTW_CHANNEL_WIDTH_20][RF_PATH_A] = new_lvl;
> +
> + rtw_write8(rtwdev, REG_CCK_PD_TH, pd[new_lvl]);
> +}
> +EXPORT_SYMBOL(rtw_phy_cck_pd_set);
> +
> static void rtw_phy_pwr_track(struct rtw_dev *rtwdev)
> {
> rtwdev->chip->ops->pwr_track(rtwdev);
> diff --git a/drivers/net/wireless/realtek/rtw88/phy.h b/drivers/net/wireless/realtek/rtw88/phy.h
> index 8449936497bb..8a843aac7350 100644
> --- a/drivers/net/wireless/realtek/rtw88/phy.h
> +++ b/drivers/net/wireless/realtek/rtw88/phy.h
> @@ -65,6 +65,7 @@ void rtw_phy_config_swing_table(struct rtw_dev *rtwdev,
> struct rtw_swing_table *swing_table);
> void rtw_phy_set_edcca_th(struct rtw_dev *rtwdev, u8 l2h, u8 h2l);
> void rtw_phy_adaptivity_set_mode(struct rtw_dev *rtwdev);
> +void rtw_phy_cck_pd_set(struct rtw_dev *rtwdev, u8 new_lvl);
> void rtw_phy_parsing_cfo(struct rtw_dev *rtwdev,
> struct rtw_rx_pkt_stat *pkt_stat);
> void rtw_phy_tx_path_diversity(struct rtw_dev *rtwdev);
> diff --git a/drivers/net/wireless/realtek/rtw88/rtw8812a.c b/drivers/net/wireless/realtek/rtw88/rtw8812a.c
> index 2078eb6e3628..781b66ccde67 100644
> --- a/drivers/net/wireless/realtek/rtw88/rtw8812a.c
> +++ b/drivers/net/wireless/realtek/rtw88/rtw8812a.c
> @@ -929,7 +929,7 @@ static const struct rtw_chip_ops rtw8812a_ops = {
> .set_ampdu_factor = NULL,
> .false_alarm_statistics = rtw88xxa_false_alarm_statistics,
> .phy_calibration = rtw8812a_phy_calibration,
> - .cck_pd_set = rtw88xxa_phy_cck_pd_set,
> + .cck_pd_set = rtw_phy_cck_pd_set,
> .pwr_track = rtw8812a_pwr_track,
> .config_bfee = NULL,
> .set_gid_table = NULL,
> diff --git a/drivers/net/wireless/realtek/rtw88/rtw8821a.c b/drivers/net/wireless/realtek/rtw88/rtw8821a.c
> index cab85203b828..6096d3b8e41b 100644
> --- a/drivers/net/wireless/realtek/rtw88/rtw8821a.c
> +++ b/drivers/net/wireless/realtek/rtw88/rtw8821a.c
> @@ -875,7 +875,7 @@ static const struct rtw_chip_ops rtw8821a_ops = {
> .set_ampdu_factor = NULL,
> .false_alarm_statistics = rtw88xxa_false_alarm_statistics,
> .phy_calibration = rtw8821a_phy_calibration,
> - .cck_pd_set = rtw88xxa_phy_cck_pd_set,
> + .cck_pd_set = rtw_phy_cck_pd_set,
> .pwr_track = rtw8821a_pwr_track,
> .config_bfee = NULL,
> .set_gid_table = NULL,
> diff --git a/drivers/net/wireless/realtek/rtw88/rtw88xxa.c b/drivers/net/wireless/realtek/rtw88/rtw88xxa.c
> index 2eaadcfec4cb..c95405eacfa3 100644
> --- a/drivers/net/wireless/realtek/rtw88/rtw88xxa.c
> +++ b/drivers/net/wireless/realtek/rtw88/rtw88xxa.c
> @@ -520,29 +520,6 @@ static void rtw88xxa_init_wmac_setting(struct rtw_dev *rtwdev)
> rtw_write32(rtwdev, REG_MAR + 4, 0xffffffff);
> }
>
> -static void rtw88xxa_init_adaptive_ctrl(struct rtw_dev *rtwdev)
> -{
> - rtw_write32_mask(rtwdev, REG_RRSR, 0xfffff, 0xffff1);
> - rtw_write16(rtwdev, REG_RETRY_LIMIT, 0x3030);
> -}
> -
> -static void rtw88xxa_init_edca(struct rtw_dev *rtwdev)
> -{
> - rtw_write16(rtwdev, REG_SPEC_SIFS, 0x100a);
> - rtw_write16(rtwdev, REG_MAC_SPEC_SIFS, 0x100a);
> -
> - rtw_write16(rtwdev, REG_SIFS, 0x100a);
> - rtw_write16(rtwdev, REG_SIFS + 2, 0x100a);
> -
> - rtw_write32(rtwdev, REG_EDCA_BE_PARAM, 0x005EA42B);
> - rtw_write32(rtwdev, REG_EDCA_BK_PARAM, 0x0000A44F);
> - rtw_write32(rtwdev, REG_EDCA_VI_PARAM, 0x005EA324);
> - rtw_write32(rtwdev, REG_EDCA_VO_PARAM, 0x002FA226);
> -
> - rtw_write8(rtwdev, REG_USTIME_TSF, 0x50);
> - rtw_write8(rtwdev, REG_USTIME_EDCA, 0x50);
> -}
> -
> static void rtw88xxau_tx_aggregation(struct rtw_dev *rtwdev)
> {
> const struct rtw_chip_info *chip = rtwdev->chip;
> @@ -1103,8 +1080,8 @@ int rtw88xxa_power_on(struct rtw_dev *rtwdev)
> rtw_write32_mask(rtwdev, REG_CR, 0x30000, 0x2);
>
> rtw88xxa_init_wmac_setting(rtwdev);
> - rtw88xxa_init_adaptive_ctrl(rtwdev);
> - rtw88xxa_init_edca(rtwdev);
> + rtw_mac_init_adaptive_ctrl(rtwdev);
> + rtw_mac_init_edca(rtwdev);
>
> rtw_write8_set(rtwdev, REG_FWHW_TXQ_CTRL, BIT(7));
> rtw_write8(rtwdev, REG_ACKTO, 0x80);
> @@ -1947,44 +1924,6 @@ void rtw88xxa_phy_pwrtrack(struct rtw_dev *rtwdev,
> }
> EXPORT_SYMBOL(rtw88xxa_phy_pwrtrack);
>
> -void rtw88xxa_phy_cck_pd_set(struct rtw_dev *rtwdev, u8 new_lvl)
> -{
> - static const u8 pd[CCK_PD_LV_MAX] = {0x40, 0x83, 0xcd, 0xdd, 0xed};
> - struct rtw_dm_info *dm_info = &rtwdev->dm_info;
> -
> - /* Override rtw_phy_cck_pd_lv_link(). It implements something
> - * like type 2/3/4. We need type 1 here.
> - */
> - if (rtw_is_assoc(rtwdev)) {
> - if (dm_info->min_rssi > 60) {
> - new_lvl = CCK_PD_LV3;
> - } else if (dm_info->min_rssi > 35) {
> - new_lvl = CCK_PD_LV2;
> - } else if (dm_info->min_rssi > 20) {
> - if (dm_info->cck_fa_avg > 500)
> - new_lvl = CCK_PD_LV2;
> - else if (dm_info->cck_fa_avg < 250)
> - new_lvl = CCK_PD_LV1;
> - else
> - return;
> - } else {
> - new_lvl = CCK_PD_LV1;
> - }
> - }
> -
> - rtw_dbg(rtwdev, RTW_DBG_PHY, "lv: (%d) -> (%d)\n",
> - dm_info->cck_pd_lv[RTW_CHANNEL_WIDTH_20][RF_PATH_A], new_lvl);
> -
> - 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;
> - dm_info->cck_pd_lv[RTW_CHANNEL_WIDTH_20][RF_PATH_A] = new_lvl;
> -
> - rtw_write8(rtwdev, REG_CCK_PD_TH, pd[new_lvl]);
> -}
> -EXPORT_SYMBOL(rtw88xxa_phy_cck_pd_set);
> -
> MODULE_AUTHOR("Realtek Corporation");
> MODULE_DESCRIPTION("Realtek 802.11ac wireless 8821a/8811a/8812a common code");
> MODULE_LICENSE("Dual BSD/GPL");
> diff --git a/drivers/net/wireless/realtek/rtw88/rtw88xxa.h b/drivers/net/wireless/realtek/rtw88/rtw88xxa.h
> index 09a45c1a4129..d9c8db58909c 100644
> --- a/drivers/net/wireless/realtek/rtw88/rtw88xxa.h
> +++ b/drivers/net/wireless/realtek/rtw88/rtw88xxa.h
> @@ -170,6 +170,5 @@ bool rtw88xxa_iqk_finish(int average, int threshold,
> void rtw88xxa_phy_pwrtrack(struct rtw_dev *rtwdev,
> void (*do_lck)(struct rtw_dev *rtwdev),
> void (*do_iqk)(struct rtw_dev *rtwdev));
> -void rtw88xxa_phy_cck_pd_set(struct rtw_dev *rtwdev, u8 new_lvl);
>
> #endif
next prev parent reply other threads:[~2026-09-30 18:04 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-30 9:15 [PATCH v5 rtw-next 0/7] wifi: rtw88: add RTL8723B/RTL8723BS support Luka Gejak
2026-09-30 9:15 ` [PATCH v5 rtw-next 1/7] wifi: rtw88: move the shared 88xxa init helpers into the core Luka Gejak
2026-09-30 18:04 ` Bitterblue Smith [this message]
2026-09-30 20:53 ` Luka Gejak
2026-09-30 9:15 ` [PATCH v5 rtw-next 2/7] wifi: rtw88: assign the RCR per chip in rtw_core_init Luka Gejak
2026-09-30 18:03 ` Bitterblue Smith
2026-09-30 20:36 ` Luka Gejak
2026-09-30 21:27 ` Bitterblue Smith
2026-09-30 21:29 ` Luka Gejak
2026-09-30 21:46 ` Bitterblue Smith
2026-09-30 21:49 ` Luka Gejak
2026-09-30 9:16 ` [PATCH v5 rtw-next 3/7] wifi: rtw88: 8723b: add the RTL8723B register definitions Luka Gejak
2026-09-30 9:16 ` [PATCH v5 rtw-next 4/7] wifi: rtw88: 8723b: add the RTL8723B BB, RF and AGC tables Luka Gejak
2026-09-30 9:16 ` [PATCH v5 rtw-next 5/7] wifi: rtw88: 8723b: add the RTL8723B chip driver Luka Gejak
2026-09-30 18:03 ` Bitterblue Smith
2026-09-30 21:14 ` Luka Gejak
2026-09-30 9:16 ` [PATCH v5 rtw-next 6/7] wifi: rtw88: 8723bs: add the RTL8723BS SDIO bind Luka Gejak
2026-09-30 9:16 ` [PATCH v5 rtw-next 7/7] wifi: rtw88: 8723bs: enable building the RTL8723BS driver Luka Gejak
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=17f1504d-4a27-48f1-9c8e-e84a3416c383@gmail.com \
--to=rtl8821cerfe2@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-wireless@vger.kernel.org \
--cc=luka.gejak@linux.dev \
--cc=pbrobinson@gmail.com \
--cc=pkshih@realtek.com \
--cc=straube.linux@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®