From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-wm2-f13.google.com (mail-wm2-f13.google.com [74.125.225.141]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 03B2E4ABBA5 for ; Wed, 30 Sep 2026 18:04:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.225.141 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790791454; cv=none; b=mrglnyGPgW4Ag73yqkEdCo1QDizEqSVR0E0hxy5Mk+lJ/5/f8BUHgCUCeKyWD0oNBfUU34h9fFir++NykIGqLFFDGaRn6ma4kj811sbRzmb20ColZfqXVUbFvAWNg73qXBIbRnXZxr1DEaaYe2eXDMF8agL+mHgT8YTYEi5LRRo= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790791454; c=relaxed/simple; bh=QIG1zvSUGauIoXtqtHh2yufnecHZavhFDmqcR25makY=; h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From: In-Reply-To:Content-Type; b=K3iy3xpxwVTpolliopB6XAhhr0t1W8ESxpNcKgP5PtUkV8YVFTLdkG8X/kp71lf57Kj/HHD5qxBebcIIkp4LvU9tRXBP3bXQCAs6NkVoNffN8ufT0mvaLbF895Onnr5eTX5+Ol3zdwtTTCdM7C1biQOu4/iZkEBs3ECz+2N4hHk= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=g7g5Gpbv; arc=none smtp.client-ip=74.125.225.141 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="g7g5Gpbv" Received: by mail-wm2-f13.google.com with SMTP id 5b1f17b1804b1-49e6b885ef8so33663635e9.1 for ; Wed, 30 Sep 2026 11:04:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1790791451; x=1791396251; darn=vger.kernel.org; h=content-transfer-encoding:content-type:in-reply-to:from :content-language:references:cc:to:subject:user-agent:mime-version :date:message-id:from:to:cc:subject:date:message-id:reply-to :content-type; bh=e36HxZ24cTROxvIeKoBoxdqQGOepjEsy2kiFHXydvxA=; b=g7g5GpbvKSf8lxUP0Ex77aQuer5Uu0yPkIwfSwUX4yIXFWdgfyBcUNCSy3r3J9i11R zLM2gG/d5UXXPb0S3AtdTVj2IXMNGxXuj3jzSpudT7otSoP5GHQsBwEkUA2aIj8DP0rj nQfmATWR+WmHjypZGC5P8KXgPvPutI9w/KufdGV+ndbRgCQW5DDdhIfOtVaM0tDyjzIB Y26JGzwX+oZ9x8ewcX5Y5DiwqVuz9BF1panZKKvUWa2EmhLS6uEShT4UeemZFw2IQ+dy 9re4XL9KpT5dIjVm37n/XtbItCKi9kIZpFCRPjU0oa68hv5hJ06YYQ2tX3hqT7N1Rgmx PQ0A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790791451; x=1791396251; h=content-transfer-encoding:content-type:in-reply-to:from :content-language:references:cc:to:subject:user-agent:mime-version :date:message-id:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=e36HxZ24cTROxvIeKoBoxdqQGOepjEsy2kiFHXydvxA=; b=AAtm/M87EEKvnzBz7BMFf07CFH33CJUJt4LyauQYLNIbXeW22FtfFmUHZWSNtIgnFq rnb8VQDLyhb+np6miaZdI+cam3c9OMF7Lv9hCuToyG3ASyeXpgxHZSdBZl2ZE9L8DvhG PKN1xI1byUEOgVSrcyfJDFbVS4m/w5EQphv6d/EqqW3TikkRd4nlLSPpKygz72L8czdo GLqLecUX15bEKSeZStdfvmMzK+8fR3w6iUrbagExcJEwhIjUv3Dc1ahdZx1NFLxNEP+z PiiwJhQEeFF08fwR9omwiRRDODWZQaJUQzlonqlhIL8wxc7UOnakEHqtvHtxleBhnO61 S6rQ== X-Forwarded-Encrypted: i=1; AKwUvByPtlLyYsYJZSB6lWASrOF2zuu72AsxeQ3cdAX8dSZLnGxqtrbuJGw3/Bq90Wb5fbddATXHEi71FIBPIUE=@vger.kernel.org X-Gm-Message-State: AFuF++mZEna3ys6eacIsZFMKqm50lsrGxuR9758zbHgtDGmYU+mbM7qY dfCXoWhUVSh0feXSjwk8DUJ5DGdb7T9WLoh0iugAdeaIlThWrCbjERRN X-Gm-Gg: AYBFou1iTexblyKYGMStcwDngqcRiWnyd5qqANnhIes6tggz9KDDcSZ6daVKKJxJJiv ZKg+sjEmTs2b7yQkGZYjH/HFRD8AKTCo7t5xR6hTV0pi7OJAQFTMXjwUFWaXwsM+Azq4jT7noKO lFnEe/Vy+sQ9oJP+utSJZVIkaevAnlknHREUu0E/15qmJFuOv6+I9jQ/ZxXvMPgeDNN+h2UOC4E pk5aSWfkNxBjANgHh88Bom+X8AeF0C2kvBhDlKKBXQJRvdWG6a6kFH1DgLEbBLbmCJGSk52v4xa GxrGhgC3QA80DfDwJUVZ1t/02k20bLUFUQC3kCvkQCR7PpCezCdtiS1GBA8fHYSm2pA9DjYMlz9 63stzYmjDSrbW5IvPqWI+5LE2VkXZW4xXFsnPUYio7OASCdTkdBTHa7P9sHoPc2k+O+uWL7ntmy 8Zpna6WT6/4ue5iGuWqNXepHdVcLDGLXnrTtukDvCIwdSy0v0+fFOKuSfgPZypgcnw1UxgR6/m7 562NdnsHnHoT71L X-Received: by 2002:a05:600c:354e:b0:4a0:1eb1:133b with SMTP id 5b1f17b1804b1-4a01eb113acmr7148175e9.12.1790791450972; Wed, 30 Sep 2026 11:04:10 -0700 (PDT) Received: from [192.168.1.50] ([81.196.40.70]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4a01cf9b1fasm10196965e9.4.2026.09.30.11.04.09 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 30 Sep 2026 11:04:10 -0700 (PDT) Message-ID: <17f1504d-4a27-48f1-9c8e-e84a3416c383@gmail.com> Date: Wed, 30 Sep 2026 21:04:09 +0300 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v5 rtw-next 1/7] wifi: rtw88: move the shared 88xxa init helpers into the core To: Luka Gejak , Ping-Ke Shih Cc: linux-wireless@vger.kernel.org, linux-kernel@vger.kernel.org, Michael Straube , Peter Robinson References: <20260930091604.52891-1-luka.gejak@linux.dev> <20260930091604.52891-2-luka.gejak@linux.dev> Content-Language: en-US From: Bitterblue Smith In-Reply-To: <20260930091604.52891-2-luka.gejak@linux.dev> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit 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 > --- > 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